@gitpagedocs/cli 0.0.9 → 0.0.11
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/builders/config-orchestrator.mjs +2 -1
- package/builders/version-config-builder.mjs +59 -8
- package/content/assets/gitpagedocs-project-guide.pdf +34 -34
- package/content/configuration-examples.mjs +76 -0
- package/content/content-blocks.mjs +142 -0
- package/content/docs-en.mjs +73 -23
- package/content/docs-es.mjs +191 -140
- package/content/docs-pt.mjs +213 -162
- package/content/html-doom.mjs +114 -0
- package/content/operations-en.mjs +70 -0
- package/content/operations-es.mjs +70 -0
- package/content/operations-pt.mjs +70 -0
- package/content/overviews-en.mjs +115 -0
- package/content/overviews-es.mjs +115 -0
- package/content/overviews-pt.mjs +115 -0
- package/content/practical-en.mjs +118 -0
- package/content/practical-es.mjs +118 -0
- package/content/practical-pt.mjs +118 -0
- package/contracts/doc-versions.mjs +2 -2
- package/data/composed-pages.mjs +25 -0
- package/data/default-site-config.mjs +150 -130
- package/data/i18n-langmenu.mjs +43 -28
- package/data/i18n-translations.mjs +7 -7
- package/data/menu-sections.mjs +56 -0
- package/data/path-mappings.mjs +16 -1
- package/data/route-metas.mjs +72 -6
- package/package.json +3 -3
- package/runtime/doc-path-resolver.mjs +23 -2
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { LAYOUTS, FALLBACK_LAYOUTS } from "../data/layouts.mjs";
|
|
4
4
|
import { DOCS } from "../content/docs.mjs";
|
|
5
|
+
import { HTML_DOOM } from "../content/html-doom.mjs";
|
|
5
6
|
import { DOC_VERSIONS } from "../data/version-constants.mjs";
|
|
6
7
|
import { buildRootConfig } from "./root-config-builder.mjs";
|
|
7
8
|
import { buildVersionConfig } from "./version-config-builder.mjs";
|
|
@@ -29,7 +30,7 @@ export function buildConfigArtifacts(options = {}) {
|
|
|
29
30
|
layoutsConfig,
|
|
30
31
|
fallbackLayoutsConfig,
|
|
31
32
|
docs: DOCS,
|
|
32
|
-
docsHtml: {},
|
|
33
|
+
docsHtml: { doom: HTML_DOOM },
|
|
33
34
|
versionConfigs,
|
|
34
35
|
};
|
|
35
36
|
}
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
AUDIO_IDS,
|
|
7
7
|
PAGE2_AUDIO,
|
|
8
8
|
PDF_GUIDE_FILENAME,
|
|
9
|
+
HTML_DOOM_FILENAME,
|
|
9
10
|
} from "../data/path-mappings.mjs";
|
|
10
11
|
import {
|
|
11
12
|
ROUTE_META_ID1,
|
|
@@ -21,12 +22,16 @@ import {
|
|
|
21
22
|
VIDEO_META_ID4,
|
|
22
23
|
AUDIO_META_ID12,
|
|
23
24
|
PDF_GUIDE_META,
|
|
25
|
+
HTML_DOOM_META,
|
|
24
26
|
SOURCE_VIEWER_META,
|
|
25
27
|
DEFAULT_HIERARCHY,
|
|
26
28
|
VIDEO_FIRST_HIERARCHY,
|
|
27
29
|
} from "../data/route-metas.mjs";
|
|
28
30
|
import { buildAudioRoute, buildMdRoute, buildPdfRoute, buildSourceViewerRoute, buildVideoRoute } from "./route-builders.mjs";
|
|
29
31
|
import { resolveSourceViewerPath } from "./project-links.mjs";
|
|
32
|
+
import { MARKDOWN_MENU_SECTIONS } from "../data/menu-sections.mjs";
|
|
33
|
+
import { SUPPORTED_LANGUAGES } from "../contracts/languages.mjs";
|
|
34
|
+
import { COMPOSED_PAGES } from "../data/composed-pages.mjs";
|
|
30
35
|
|
|
31
36
|
/** Demo route protections showcasing the "Authorized Routes" feature. They are
|
|
32
37
|
* applied only to the official (non-parameterized) scaffold — user sites
|
|
@@ -144,14 +149,52 @@ function buildVersionSourceViewerRoutes(options = {}) {
|
|
|
144
149
|
];
|
|
145
150
|
}
|
|
146
151
|
|
|
152
|
+
function buildMarkdownMenus(entries, base) {
|
|
153
|
+
return entries.map((entry) => {
|
|
154
|
+
if (typeof entry === "number") {
|
|
155
|
+
return {
|
|
156
|
+
id: entry,
|
|
157
|
+
pt: { title: ROUTE_METAS[entry].titles.pt, "path-click": `${base}/pt/${ROUTE_PATHS[entry].pt}` },
|
|
158
|
+
en: { title: ROUTE_METAS[entry].titles.en, "path-click": `${base}/en/${ROUTE_PATHS[entry].en}` },
|
|
159
|
+
es: { title: ROUTE_METAS[entry].titles.es, "path-click": `${base}/es/${ROUTE_PATHS[entry].es}` },
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
const parentPaths = ROUTE_PATHS[entry.routeId];
|
|
163
|
+
const parentLabels = Object.fromEntries(SUPPORTED_LANGUAGES.map((language) => [language, {
|
|
164
|
+
title: entry.titles[language],
|
|
165
|
+
...(parentPaths ? { "path-click": `${base}/${language}/${parentPaths[language]}` } : {}),
|
|
166
|
+
...(entry.pathClick ? { "path-click": entry.pathClick } : {}),
|
|
167
|
+
}]));
|
|
168
|
+
return {
|
|
169
|
+
id: entry.id,
|
|
170
|
+
...parentLabels,
|
|
171
|
+
...(entry.submenus ? { submenus: buildMarkdownMenus(entry.submenus, base) } : {}),
|
|
172
|
+
};
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function htmlExamplePaths(versionId) {
|
|
177
|
+
return Object.fromEntries(SUPPORTED_LANGUAGES.map((language) => [
|
|
178
|
+
language, `gitpagedocs/docs/versions/${versionId}/${language}/${HTML_DOOM_FILENAME}`,
|
|
179
|
+
]));
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function buildVersionHtmlRoutes(versionId) {
|
|
183
|
+
return [{
|
|
184
|
+
id: HTML_DOOM_META.id,
|
|
185
|
+
title: HTML_DOOM_META.titles,
|
|
186
|
+
description: HTML_DOOM_META.descriptions,
|
|
187
|
+
titleIsVisible: true,
|
|
188
|
+
descriptionIsVisible: true,
|
|
189
|
+
path: htmlExamplePaths(versionId),
|
|
190
|
+
fullscreenEnabled: true,
|
|
191
|
+
blockLink: true,
|
|
192
|
+
}];
|
|
193
|
+
}
|
|
194
|
+
|
|
147
195
|
function buildVersionMenus(versionId) {
|
|
148
196
|
const base = `gitpagedocs/docs/versions/${versionId}`;
|
|
149
|
-
const menuMd =
|
|
150
|
-
id,
|
|
151
|
-
pt: { title: ROUTE_METAS[id].titles.pt, "path-click": `${base}/pt/${ROUTE_PATHS[id].pt}` },
|
|
152
|
-
en: { title: ROUTE_METAS[id].titles.en, "path-click": `${base}/en/${ROUTE_PATHS[id].en}` },
|
|
153
|
-
es: { title: ROUTE_METAS[id].titles.es, "path-click": `${base}/es/${ROUTE_PATHS[id].es}` },
|
|
154
|
-
}));
|
|
197
|
+
const menuMd = buildMarkdownMenus(MARKDOWN_MENU_SECTIONS, base);
|
|
155
198
|
const menuVideo = [1, 2, 3, 4].map((id) => {
|
|
156
199
|
const routeId = id + VIDEO_ROUTE_ID_OFFSET;
|
|
157
200
|
return {
|
|
@@ -183,7 +226,14 @@ function buildVersionMenus(versionId) {
|
|
|
183
226
|
en: { title: PDF_GUIDE_META.titles.en, "path-click": `page:${PDF_GUIDE_META.id}` },
|
|
184
227
|
es: { title: PDF_GUIDE_META.titles.es, "path-click": `page:${PDF_GUIDE_META.id}` },
|
|
185
228
|
}];
|
|
186
|
-
|
|
229
|
+
const htmlPaths = htmlExamplePaths(versionId);
|
|
230
|
+
const menuHtml = [{
|
|
231
|
+
id: HTML_DOOM_META.id,
|
|
232
|
+
...Object.fromEntries(SUPPORTED_LANGUAGES.map((language) => [language, {
|
|
233
|
+
title: HTML_DOOM_META.titles[language], "path-click": htmlPaths[language],
|
|
234
|
+
}])),
|
|
235
|
+
}];
|
|
236
|
+
return { md: menuMd, sourceViewer: menuSourceViewer, html: menuHtml, video: menuVideo, audio: menuAudio, pdf: menuPdf };
|
|
187
237
|
}
|
|
188
238
|
|
|
189
239
|
/**
|
|
@@ -211,10 +261,11 @@ export function buildVersionConfig(versionId, options = {}) {
|
|
|
211
261
|
},
|
|
212
262
|
"routes-md": buildVersionMdRoutes(versionId, includeDemoAuthorization),
|
|
213
263
|
"routes-source-viewer": buildVersionSourceViewerRoutes(options),
|
|
214
|
-
"routes-html":
|
|
264
|
+
"routes-html": buildVersionHtmlRoutes(versionId),
|
|
215
265
|
"routes-video": buildVersionVideoRoutes(versionId, includeDemoAuthorization),
|
|
216
266
|
"routes-audio": buildVersionAudioRoutes(versionId),
|
|
217
267
|
"routes-pdf": [buildPdfRoute(PDF_GUIDE_META, `gitpagedocs/docs/versions/${versionId}/en/${PDF_GUIDE_FILENAME}`)],
|
|
268
|
+
pages: structuredClone(COMPOSED_PAGES),
|
|
218
269
|
"menus-header-md": menus.md,
|
|
219
270
|
"menus-header-source-viewer": menus.sourceViewer,
|
|
220
271
|
"menus-header-html": menus.html,
|
|
@@ -107,7 +107,7 @@ endobj
|
|
|
107
107
|
14 0 obj
|
|
108
108
|
<<
|
|
109
109
|
/A <<
|
|
110
|
-
/S /URI /Type /Action /URI (https://github.com/Vidigal-code/git-page-docs/tree/main/gitpagedocs/docs/versions/0.0.
|
|
110
|
+
/S /URI /Type /Action /URI (https://github.com/Vidigal-code/git-page-docs/tree/main/gitpagedocs/docs/versions/0.0.10/en)
|
|
111
111
|
>> /Border [ 0 0 0 ] /Rect [ 64 161.7898 226.83 173.7898 ] /Subtype /Link /Type /Annot
|
|
112
112
|
>>
|
|
113
113
|
endobj
|
|
@@ -135,8 +135,8 @@ endobj
|
|
|
135
135
|
endobj
|
|
136
136
|
18 0 obj
|
|
137
137
|
<<
|
|
138
|
-
/Author (GitPageDocs) /CreationDate (D:
|
|
139
|
-
/Subject (English project guide and PDF container example, version 0.0.
|
|
138
|
+
/Author (GitPageDocs) /CreationDate (D:20261017095257-03'00') /Creator (GitPageDocs) /Keywords () /ModDate (D:20261017095257-03'00') /Producer (ReportLab PDF Library - \(opensource\))
|
|
139
|
+
/Subject (English project guide and PDF container example, version 0.0.10) /Title (GitPageDocs Project Guide) /Trapped /False
|
|
140
140
|
>>
|
|
141
141
|
endobj
|
|
142
142
|
19 0 obj
|
|
@@ -146,59 +146,59 @@ endobj
|
|
|
146
146
|
endobj
|
|
147
147
|
20 0 obj
|
|
148
148
|
<<
|
|
149
|
-
/Filter [ /ASCII85Decode /FlateDecode ] /Length
|
|
149
|
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2002
|
|
150
150
|
>>
|
|
151
151
|
stream
|
|
152
|
-
Gatm<939k;']/F3maB3sKI#m:Y#5<H3KOg3VOMDAdb#>V)L!Gmkin/sGP/78N@9eEJ4?<%qtTT#`Zc)2<qS]2&H+Mbj"lTES*!AL*5eKG"eEr"r]Dr0ch8BG%*K#4,/\SOdg\mPN\YD\XO%6)0H`;r%GQ(iZ>J$QQEQ?C17U$PB-A.q2=k[ohW"aP9b'2.C*R\gd'Un#RQY)mkP?0FgjgB"2WW0]RL.hKqKgYI*O+%eiAEq@1YZq5ODmGjiY[]2+.q4rK@Qn1RPU/i)k*9E`KaQIG:Lalr[.IgFe1!pB
|
|
152
|
+
Gatm<939k;']/F3maB3sKI#m:Y#5<H3KOg3VOMDAdb#>V)L!Gmkin/sGP/78N@9eEJ4?<%qtTT#`Zc)2<qS]2&H+Mbj"lTES*!AL*5eKG"eEr"r]Dr0ch8BG%*K#4,/\SOdg\mPN\YD\XO%6)0H`;r%GQ(iZ>J$QQEQ?C17U$PB-A.q2=k[ohW"aP9b'2.C*R\gd'Un#RQY)mkP?0FgjgB"2WW0]RL.hKqKgYI*O+%eiAEq@1YZq5ODmGjiY[]2+.q4rK@Qn1RPU/i)k*9E`KaQIG:Lalr[.IgFe1!pB:+Eb<`>pL.S]L,/"5ABr&$:p;juB/@/F8'cg!+Z!XRP'SjU51es])JHoQpYO0Aq45k+QmVQ_i"N&@,1?%;iuH8;Dih`nb8V.2:T)*VNoKgCd]*qbrAjC]6,AL=k+>b8D!*`NkMAidKNl:+5HSX2o!#=\1<(MW?Hg07=KITWQ[k2f'EKdbSE`EEsTBQ5EKSF2SM9b48RE2p%_P="L=@o/nfeW\(YB)Daj9g<UlH,t!p(Y"$[@*CZ>.`'ui<f<nI,*C<2Z(OE\Up=R;.WpoVVN=Eg(m)gJg6N+i.=U*;Bp#2.Q.QuCWE3f`6bUr\11)Ch?+i<E4@GVg+<fuUl!(#5Iu)?-7:7QMc"E\m-`c>?W";NI2'lD!<Er!K`fTV7?69Z0B%eJsnW1h3ODWa^&"[tF/K\Hh3p-IHQfB*n=$Q+o\J89^14Ot,/.+[9XYuCX3Sc"P?>>,T&GtPJ"%=mlmqIbdmpYN;arp7jB.hd-PPe8p2_`j,S&.gu`EHk.OKXbuB:UM3;Yi'nN$7K`E^;6o:6eP].TbqNQWc#*-kU16C?PJb^i(Z/$OoH>8g-s<,.[q,b000Ql([=c$F/eW^/V@2l%G>s;%NfA:m"B7qrI>/lMIWB;_Br_B$a[m_-VeKlljG%TnfH'iJCX6X!X-JPN.GjAeoJWKR[cip'bVYor2MV&+G;iqF0]crTnii(k#:*$[L.*bnm5brt(eqTl4F`T2"SKr:4;hm/(NiU5TaJE[7n\dR(#3]Zh:?d@54$WiXCQPC;U[CeMGUOaPkB5V."I!:5oZ93)=N6-o[[%*U=`,a,q#a3_3;3MAngdM>_"_F^np:*aEfS7a'PDAIK-Pn+6KFGq2Aak9)G^Mms%?p9C6l]6SK8XUB0"$Hi36]X#-A-2E8&`,qLL@M6p)He>:2cUoqOV@dB(32I%H0[pu'Tf93k(qpc4kuKhOpPEl]g:;4o7%giX1DaMK'&&Cfc-/@rbtYsVA4L-J<[qBp>QMN8i[EWr=lpnP;Jk3TXU2?oBWcKh5mR,ad<kfX\uU`[#+UO%t;ISbtt$K\9))U;2^oT:8C#37[[o:T[o;DZua<poc+2'SCpT(e]a?^.G`n3s2Ub%fa+^rLFfX?-gkqScS^uRB>:+TphjAF=I,9i)#&aPFjQ+V]OUeA#[Ik*R8K=PaoYj:j/cM><ta$crYX*>8S+5*H6"dJ*NbM,4^"b>l\C2#_[(e:.R8)Y0cUC/'Sb50k`G9hR2<J=d]4:'$Wf90$T-;%.YfO,AWGai%^=kXhfSA*BT0h!UsZLT\?6k[^efkcf*-n^OWo/l3`T=1.51r=/s*TG%nsmC`>ICUW]IUTgH27?1Mb1jFB@NA']MNr4d:\;ce#mNP(j2u5&[LC*COBODL</VUZ=1!q`1KTDH$4)3sD6]S(#:C"?WR^3'"j2rp\DG=_U_4;7LU+:A-KAW`p`O2s,7;J2oMZrd<0SM?<t]i"E.V\,TsH5R4iJ6^o+*W[%M*!qWft7=,`rE[c!KN?4WnJ$Np2gX_!ID*)38<ATP12f!SPc.uR<?0^lZG!p[64-DaacaH!&4+"!pZ0\^PKD_YE8(Q:2>OV_9[XH3W1enn5?^`LdqSJr:K:L@)NpPl-7%7N9ip0WUR,=aBNQ=`.Vu6BXV7p,pn/Ja<;gb]q8G9.+%$L&<A^]Eb&RQ#Ij\OiS`-2ObKsAdV9qclLH91m-b<r'5~>endstream
|
|
153
153
|
endobj
|
|
154
154
|
21 0 obj
|
|
155
155
|
<<
|
|
156
|
-
/Filter [ /ASCII85Decode /FlateDecode ] /Length
|
|
156
|
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2057
|
|
157
157
|
>>
|
|
158
158
|
stream
|
|
159
|
-
Gatm;mrRNt&cM.4@_[$)bubZOOWo)LdPU.!?KP-IZCI>1lG+YjiJo*a!jp7@rpbCErfH3IPtN?9,Z,\8[s7cc],QimGMp4,/^ZeK1jp0:&CPSf60(JAr(,G_MuR%,r]ElKR(QguiekB&9)LZDApmNbEZ/IpRV""f=mUi64Jsm/7agS6$_P'[9Dr!_?6%1P0^e'kl+s0OUAej[NMF].a\2Lk=Z:!`*cp>*U565lc]Sb@s%9l7kfllUlHGal7XMHqM!%ka_EorsMro71%$(]\^NHV<o4bb3bP009MR@i4F$oS,U0hG@PfE,
|
|
159
|
+
Gatm;mrRNt&cM.4@_[$)bubZOOWo)LdPU.!?KP-IZCI>1lG+YjiJo*a!jp7@rpbCErfH3IPtN?9,Z,\8[s7cc],QimGMp4,/^ZeK1jp0:&CPSf60(JAr(,G_MuR%,r]ElKR(QguiekB&9)LZDApmNbEZ/IpRV""f=mUi64Jsm/7agS6$_P'[9Dr!_?6%1P0^e'kl+s0OUAej[NMF].a\2Lk=Z:!`*cp>*U565lc]Sb@s%9l7kfllUlHGal7XMHqM!%ka_EorsMro71%$(]\^NHV<o4bb3bP009MR@i4F$oS,U0hG@PfE,Rh[=fjFBu"AAN#%7jX45\`up-fbsF&mPPMFhGjsA3TQ#-n*`8*qh9PUDDS4';_88Cg_1L-[+_AqR1Z%*PmGd9KlQ;Gbrr0giCRUE9%/:etbRPak\FTtc*e;-g,L6FHr*EP^<]!hmV]b/:EX3Q,p]W'18L+4_aW:/P*@>=\G;=9-pI<TGF<S=nL-hMS6^?HK`hO%Z9IWW?)bE8Ar'79&Q]8)S;-#VO[+f7f/p,rfAS$R,V`s@2G+u9Q2<Bf3<dFlLO>=_6/h8@Y=^\\>.+d4UZ;st@7]tJNQ3%!`N@4\2IHZb%[0AE.Sk-4hDm<tA/1EqUg:$]MOqjm$fTYupgIA>fK*AKrX_>X3q[5,?n*$6`i=H,uVj=@>Jsq_"ai'!*3@X#6rI(ea%26R<RHC@"n%Scf#PTpMdM#V`fneF`7u78[X(4T4hV9d`I=HIS^^-.\%4nZ#Dsfe?D\g+%*X-UL)RoY3qNusil=1-mY9aSin2]kSAO3qQk&llGeOl/3<+BnU:K6&.Zj:hr>tPL$aY/sF-L/0AGrHV1f.=%d,"03bOg%oU7go-kjN\(9:ob=f'aV\j]k($a'hM?I>QO>ndhYSr/$M&uPd^k>;85CW5DeND!KKZ4lmp]<9!-jf=`dP;E=s@Tqtin-)!T6l=Ns<9=/qJnCt\EX+D9Bod%;395dK&_>+O[iJ"n`."?7g),bk\#dO,BNGBP":2]Qnc!/2@XSGY+l7"]05:/G@XYAPaR\=Er'D4hI93YK0"l9>f$'['6#d'0ZJDt,C"G6g,kjB1C'MH2]5>Bn]bPg)-",7=,eS>q0n5oE&o'`Q`r=S'+cR2Z)F4uf@8'JOQRR[(40IaknV>qEU?F!Yj'@N4In%EZaQkDF$?/fZn"\Ef?3Uuu^L:u$H!9Me7XYq2KZKR-u?3"?IIiP#L:9Y42<qM#pE>*]VXmM8$!,?QU:PR=r6D/&a$RYg(r$-,061D!=0LRRa\oWaWam"IF"@-f.oW1M;M+WnhSaei.`J5$R&W'\)Vo6B>&`suaKEYRSr>Xk_Ghr0s+`"qYrP1.fTluGB<Z/3s>fou'RcPN[Z5\d[@'<101];[f]MNU$=j",O7PSIF2._A!7dll9;c3r5%LsMttXc+(FY02E:J:<7E+CB+Aj$lm_pS55:8,_s\J,ek_edpbL(^!;fL5TKamtZ9Lo(*7B45EtJcYpecW$U:e7A[.KI4?l+:DFOO(4+)pY(re%MdNWBTeX\_>tNaP>FRS#.7Q5_K81@aqMQiQ>*P3j%0qqi=H4%YX$$;!6RFJMkiVl!7StT)cNmM?;!ojRqR?l>2>T779b<S^\]?g\%+Y1>V/nUh7s<0U3Zk_%2%6;;;W:tiHU!>ohrqNDg&:t`$e_4Y?FpE`*Ck"bk$YlB=%8&ohg!)1gp"[T1?>dJkt\*gebYTd4h=";I=&;&%ZR$\*`\scL[+/;]/OHMTPh9+,G""7X^lFW<"AlnJB\$phVVgaW.K%BHqp@=;0%21XB*rbF^B(R4"n;8?+P]@3:@U<)7fM.-$Q*';)>R7hq'_;3.WthBN%aM]C`@UWo[OCW7kQ$GHO@lPUi2L+(Ud/kL(3m`@UVo1XR!.i(b$NJbCB3Y2C..Q0bNa5'+W,/S*g;Ds+@69=13rgCDS#A25s>W`s6)mTs#8C0d:k$h^4W;P+gXH$6W;gmKP>UK`Ln/AP/e<W4l.2Qsm(=ao<J^S?1,'")s\V'BL-1i?./X>d'[$`0K=OtQ_=s#_`m~>endstream
|
|
160
160
|
endobj
|
|
161
161
|
22 0 obj
|
|
162
162
|
<<
|
|
163
|
-
/Filter [ /ASCII85Decode /FlateDecode ] /Length
|
|
163
|
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1981
|
|
164
164
|
>>
|
|
165
165
|
stream
|
|
166
|
-
|
|
166
|
+
Gau0CD/\/e&H88.EA0'hh&JkHAQs&,!DOO=fod[VgjN?"JX0u+%4,a7jj`&]hfkmQCc?LBTlYb*VN9'ZnXb)fp;"X3ci/t\JC?LucTL]EQnQ8`S,h\QE'?M]j1oY)r\taHj,HBQ#EBmbh;JKIEff>Dd$m"'3!j"Q)*7bA3!.tB8R_GnJI>4,$/NE#S=qkYqnm/E&8l:k+K2E5E#;8R+.TRl1TC*'?/V;_#XJG.$jYh8$%ClQIo(n@R]%UZW".N!ptftC&-2i@3)20Ef@[UR%:5Sd@LcY1B5i+3oIWYu<(%)ODh)2o<(p\CNpCqm>rp:Fc;aWIjr\%2]lC?72"7'_+-.>Q_1pW)4Mo*U'Ynt[<gcGqIduJ*D#h1m3XBsmo3l)91GB[fhVR)dI"!u/Mt`ReF#XAJgYo;.J$S$R:H>m(%i`RgaESbNf(6S@AY_u#(s-89,ZQ\Q7,q_CMdS@_Ce!=lbR6SGj"N15VlJdo^op'i<k9"rD$Y&&(/^JWIUQ4m.jYN:/Vk[@JeY&a@RS*H,/H:!N4FP:O?cC%iaT&&"n]C!Y9Ai$9aZYJPVSt'.n1V[lpId/hM2i(WTXF5@j\5Bj/%C@d#q8uS.`s7":,^_,e0@26uqT[ZA",]/%K6qViBH^fn,.G5rk#^.Z',4[@ne_<)]3i*2.LI_&@ld0pO,WjgE3Ia3s+>@/`T+md)N!&H"%:[\PUb^ktg%78+Puc'PXS1*N\he3<?=d,4?,:&C(C<)pS@^t4tVL[Pr]<A(@O<0X=L<id]VK,/\C$-CkmGkT4<7+d*Z$H?%ZQ<P89!T#Y?YAGm@=W%DEbmM.%X&T_%*^uSf%h;j$LiA$L8OdJF1l%`lk&m<'RnfWp3),qL[LqK6>DsjqCL_&r8m7;-6pAQK1#Ir@J_TFjVK^6T7<^"c=VO2;9>T3qi:+eP_;abUdn\3[P[^JVJm=\QQRou0Na(DO2,90@>$tU*APDRS;_[JdqVA9LQq9cSVXZ7HjbotUF).?V.Ui'6Vp`8MXmT%Y#nm+`MgMYd\%gX)!IDs@H*5cV>bjA4DOTOQXUQoW/kTqqea#T+/!='(osZk:eCo&UNHS*?=mTsY?0HrU;]o$oF_q*.$DriaH#l[Nj+M/on4F@Na6-j5>G.U<htZuWIGZW+3I(\`rsp=?KhmR[-45WEl559&fIF[^:)4h+N"*6A*,0;9$qj@fetd9C/Qo?S;K'H]&k,c.hkUs?&<Ln%2f6u71<J`t^W+o/g*.[6S*iZ49i&0C\<jOSal"+Oi2K+B7^C5R-nPgXda@^S?JiTggC6VVO#s*>QIL.'VB48ed#p'mM_uR7P2IT@C=`kh,Bap.P\(TXJC8$%A6PD$%Et$6FK(_:>:;POR]cuM.6K@bNXilt%aG<5r$c<tQ7U`$SotXq[rl4?-YDtL1rVql,2K%r<Mrs)R7u"qj"LV@Cb#KT0[N;VkCGSg#!A:%:V%JAJh%g'E//WH%@=T3G8>Lgnc,VZbQP/FK=uIT8lF9"k%j0P'<m<05N6O@U,6VJ(u^pgHYVsh4nuZ9YZE)G8lW0EC+`XU5*'d$`IdNp+>L/<A"9Rr17t7<m%V_nEi?-09V4\^Nb9[$.ZtJN`"'k*]UU0c\01>5ag@@@K%q%s^WbT`a#R9b%s7dWDfRks="JjR"e4(e?DPSu#s3p65s%a(8rEP(0(mi3hBH*0%!9OQe0&nOk3K@ng]#=b6=$WEI:)3l/LQ[C'^U1Opk\9e1<92tbo\/XMKU"Qk(`!oQIm)"8SCkY@`5\25Xs>'Fa*prh.=5^#?XT\<CfjoUJ?d#Qn'?'@tm2Qbl+Zud#L8:UJgUf)Get9S&2NJ=t6%5IIg*"a=.HpldA=m?+huuN7U>;@iU6"dNUJ7XGR&([,aIL!ZqouZ5B4t0I+uirJ+Gn,F"nY6]RAYgjh2nK6C!jW;gHLi6AN=OPQ6B\S?RhFf.bUD,o9U1,Hb&X.@+gAA'LhE:=B?\uW(~>endstream
|
|
167
167
|
endobj
|
|
168
168
|
23 0 obj
|
|
169
169
|
<<
|
|
170
|
-
/Filter [ /ASCII85Decode /FlateDecode ] /Length
|
|
170
|
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1839
|
|
171
171
|
>>
|
|
172
172
|
stream
|
|
173
|
-
|
|
173
|
+
GatU3gN)%,&:O:SltE7P9#cI-Q)NcCM4NCsM/"PhWVZ[XOGni:(]^r&VYTuS!i/5\[`2&&Yq@<+]@_2ulnX4os$HIODZH@\@/M4%0S77N_Ls5>GRN\mPKtU-QpfCK"Vsigr!"]EVEm6F]frE7Eu*&'QH_0UB.8b9kld^d["-]eP5n]?bCXsC/.LWRPkmO7f%ZESd]R1bR`p?h=Ouo.q)oNIEDN#hP/%:MGj:jXY7`H`g9<AjHH%:Kcn(3oFFkhP1kahlA:h!6\]5.fHZZV4#I)jrn>3L5^(t?22ZWjXr#rG0$;\\D('a3TH*o9$\UF[>O0Ek&:AU:9Lh4tUdb.9>bC7JGG3^I]9W*G+H+q*6G@mdd35FmR_=<EhAe(2q:,nbN]RP#%HiYlb]KSE40a*7A^NUR?H7k8oH/L[L*(L\5*/Di2#:%#j9*=dl(VgK!d&OA1R/9H5mCNm=HD0)$RO.TO(GtoZH2gFW^f/\W?X*sM?hgKNOY[X-8pMX8$k$ibCW*GB%*.f'`e.sE*lYC_`k=7)>-!].\"e'j$c2+;`INmd^=f&hKKGAh1dfl!(q'il-dR&A96+?e&d>ADg&Nd!b`!;=A7^I$nJq#hC>GOMo+Xf^o2>RIX)Yn*%DO1kVQ&lZi^G),Y.5;//aL%SjRpfOVV2!DcjiXi+_GcW13k=N(iAg0:l#j)8o'H<Qt@cT>+`RR[9+lkiRWlqNaY/B;b0:u9^GD1%%1c#!!*p!JZi>f6\'`dpp(S;?FIEWVu9i-(,o--cgP4<W,5Na?6!+BC/M[IhMLWO0+XE:<dhTpOOIa4Oe8I-&hT'*NbJ%(,*N.1R]7qo(n.H9)@RgEj>p[pY,[alZ]@RUT"i4hQ/K):;<:dYd[HJf4SQiThJ#o85dfSA[\EnVf2Wu4AC9np=`d)M*:4KlPpY3mLsY/>4=qLf;)=39<`X"RNm]AHoTJsD'^fMc-_\BQTjOoa*-33s,"=fAk&;6p94sm$O_=?Z#IKf8Z7%o0U6W/$`.)5ZILbLHS\V3<>R_9uX%*9eG$"qJW>W:gmIgC;)pk#PBqZLdfKBN)+f5"-id=jRUA')8rjCWJfSHO^UMI]NDB94<9@)3Q)#&Q"l>o)19:::(AX'/A;*6fDk'l:)nRY5)LC6Tlh:W<g'7)66[E)?NMRLU2#:W`J2[;52'FG#/Z8cmT-$?/`d\=[o;m[jri7F^e2(P#O;kSO+%S+K5)*eqA>#P)P:^L!T_Fr6Z<'i[9?)Qh]7OW./Wk<-TgsPiD;j](PRrq*WPM+-J=1p%u\8S4GYG8*1-'MYIIoKG1T"q8NZ.)3cXUN>*1&#+BquEtCjA'+;-rA*(Np&MTC#D"*)hb*H,fc_JUs;H4X1dNEg_^+3h0N,%-+$Xe2)m/';QHq9G!b>FhBd8gej&SL/3`>V'o$,l')Brm0DV/c'`;02R,-]LFVl;)jB<EW;Hg6N9J,m+)C"1dh:;#jqhrXu7t,as?P)E.]+%5!P\"g:[F,7"D`AZFO[c&H0K>8NUgVf"n8-aan2N$tL_*J<aqAlq;0qErqa9<Zl\ZO9HPG(<\+om:B+$9C),!&%1]"\'%p&lc[:k6!lg&sbG2:hRqFP6u2bOPj#Z8Nd/$\:L"0'+:/YPaiBIFfPEEIeT]1f4okNHI*(^l/V/e,!"M`IX<kjstR4.csSFY:`\VjTAcc#eoukrJCpiiP40RlG.eSmS68=Rc1P`WFR&m%RU\]QLk?T0;CUTFS:bG4UGe)6,1o"s:Zf2+sU_0]Q`?j!iP"1(<j!C/s[nn**Im8+]68[o?=2W)_['L;Iq`ojcGXW1OVcG`2NE_[f4X#8,nT?dKlX\c~>endstream
|
|
174
174
|
endobj
|
|
175
175
|
24 0 obj
|
|
176
176
|
<<
|
|
177
|
-
/Filter [ /ASCII85Decode /FlateDecode ] /Length
|
|
177
|
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1892
|
|
178
178
|
>>
|
|
179
179
|
stream
|
|
180
|
-
|
|
180
|
+
GatU3gN)%,&:O:Sm!,B`DFQp:Q)NieM="!j-?3NQI>19`6;.D2!D:qMq=bq\'M[K7>jS^H&UWDVG+k!!r.b2.?PC,Ad>NpE_MDe3$58`PlutL_*W:E)JoNV=;I\TE_`M=)1'uAXe]T0@jXcq-/=U79:/_p&dP40&eUeR_NWN\31^i:lYr%Ce;;1:\fg%![Um#CnRS8?i=Ou_1>FggnTT`uP,daF*T!V8^WMHSi0'peN4_<Y+BGO*H3eiIoL(Fhf`qYr]pJ;.-e6t-CBXXe%2pu%'V)Zr7+o7PhPGjJjaGpET%/clA[4J.WrCjQD1jeAT$n]F1bG*+'D_E,erIGULji.U$-:+,H^;e!a'cIo!:`UC#E=pUJ2^W\cSm6aBnE]o9)85k;mFaM5T\uujq_"Z.^u^,jhJo(R*CjW&3=`ac;d/Ct0qpq^GTkV#`(_Om.9%o0`A!mD^FAR,H^OT@Vr%;h6<(YYm7N[rep?@?fN#&CjU2"k'o6f\PiWZD4;_%f$k!`gmKWn%-<]@-56`$JADG0/Z32a^Hu'V%/dS@?!7Fgmh\ga\lg$lU'hLj,&%n":e4W9oEk/J4DlhL3:fS_R-nf+Jlj+]P7dA!P8;S9Y>SU4YA,#5X.)(g:T-66ndp1WB)3MN9`_5d$?l31c.nZ)1`27^uW0s=SDD2#&ZH`:ZJ_o):(8FsB;$F.IIFt0]F[]@._Ag[698H'Q^L!#[q21JO9Z:]-)WMKT@]59hKGsYW3E"Wrn3qE'PV*bFd[ITqqhWq!Y,4e1-=']&\uZ(XZf]hrif_pkX5Q8L=kNF.DPp,EZBfmY^=2Ptki6$ker:O>YobV'8,r4BM2lX_mEQG:Q&>lN3-HDn2(oGqFK*%DqgQms>Jm@lHeC&J&#pl_qD/$u3M'`B-50JKfbW&;jLK5[0n>4e(?dRX=G`K*["?\@'[%`]X=F[`F[;BU*bDlg=/E,&5a+G=070.I88Nsr?k>Kg"7OXHL!3/-JNHm"n0300dB'=4j(7t8#1V(Z7Ao91DcaN_*A7i[[I5.]V7DnW!>-kpUS4fs/)==gi7`-_/i^`gNkr5gX(?oHjE%MYW=Y.7nAdSP>Stq:!`ei-F-$Vu)@d\\]d*87pRs$BfDdp.j!8'L%l8,BZcNm)CPs=uZBTNVT46eo54m7[dlFAgGU+';.IBWC*MLBk:I"(V-ue@%j"IkU)iTQ[^^*';aih\sW8PL0cL^@KUjP_PBH6\frH]rRK1G[#)oQV-JSedo$g`-JLuZ<O,m6^2eP8,J8jfMCD]*u=Uo)ULkrXF(lO:Zq?YKsmEnY2p%uQaXJ7pVGAdbfKn[08qVlF#=fQ8*QN#^\ojL0iK\m$#O"eW72HC!KAY"*"p/BZ\M\\0LeQnT$00_KhVq`S'Nb.7Qn!;)RN?43I2&Pk>jQC`uj[\6#eIVGcCol)'a:H@dOq62YUX;S^dc\6P`-k)`Z9a[I2X+>\eo<R.+Eb#`h]-Q>@f3P`"COm45[g:(P</rLUWmU?dEI4<kD`SHp$gXX(Z0'JQlUHG9#DYSZ`rcTqmkFNeZ,rJ%]##?@eE@7j1FF^)#B,)8[ct7'pkap[?^R\^30U:No;HMYCKaO4(2#5U`Jl_Re0Uk1k1nK[G<,>M4Ls0Mi<o<0#Dg"64/A<L(ChAN!bc;QfBTOr]JTJYdZq>u+>,]\q06=U!<pkgXK?,o>[u]2-#bT7C7d>-.KKP2[!9^V*VMqLA[KL6>FKNo@X#G_pW(gtS.;8A9S-[p^Zo#=r_f'M4.3Xg$i`)jRmjdq=pT#8\t)TK]<fKT(CW@:nF)rQrS4bib-AlJk''<//9H+#_Hh2;I,7E!(%i^F_B1iaI?/@#']n>N5NlUe%5QO;l+2O1Y_;uW9=DjQkl\S*5W\`P'!QP<~>endstream
|
|
181
181
|
endobj
|
|
182
182
|
25 0 obj
|
|
183
183
|
<<
|
|
184
|
-
/Filter [ /ASCII85Decode /FlateDecode ] /Length
|
|
184
|
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2072
|
|
185
185
|
>>
|
|
186
186
|
stream
|
|
187
|
-
Gatm<>BALX'RnB33%m@Wm1eSBG2IJ,1n.6a6PIn954&V#N"Xn98hu'frUG5Ffu?kJ9iE/8,>7mYq9Du`^rEi^IjR1kmkYf1FMMm)[KOX[I$f>:X4c/jB9jRL'0cK?#p[(abOm6+&;*O"$="Q2Yn]]I"@4#0mN`(SF[8i+^,r[;o&Igb@^#pSS%+#Pj%$dO55<B=.gl4,G/9')26g;*GE$Bi#^d_7#eYup_-\)8T/C(J>3a`I)kek0Fb116n8TZea7;TF9f+sbE#R8H:X=bu%d2G;9h@r1Gp3:g"o(]DA/r"`
|
|
187
|
+
Gatm<>BALX'RnB33%m@Wm1eSBG2IJ,1n.6a6PIn954&V#N"Xn98hu'frUG5Ffu?kJ9iE/8,>7mYq9Du`^rEi^IjR1kmkYf1FMMm)[KOX[I$f>:X4c/jB9jRL'0cK?#p[(abOm6+&;*O"$="Q2Yn]]I"@4#0mN`(SF[8i+^,r[;o&Igb@^#pSS%+#Pj%$dO55<B=.gl4,G/9')26g;*GE$Bi#^d_7#eYup_-\)8T/C(J>3a`I)kek0Fb116n8TZea7;TF9f+sbE#R8H:X=bu%d2G;9h@r1Gp3:g"o(]DA/r"`Cs0*LTrTB^QsBRsZU^CrdieU[4P,JG8_EGIp837($JTj"&!Mie1f&/)EKm0R`\t,T)id.o&D)[,["dbm]A$+_(GiRM\@K8(1"cARLQHE/K,cT.*cTI-]:h^fS/V4_o*pdj!G+.?FKcr064W&FLQq0[*P^/`2OHVQd231=+g`3j6jN"X)J^$d2%EL(&ARb5hg)A?,JB9X7Tttp@J/AG<C_[IMrAiacpH\#-ZU+>a3u[ed[ik@r]]I\SL'gi93rI3?I[(_9:Z9$>)AD8qD&\4?sNXm:s)ao_6h!c)HQ/LBGZ7577"%(3_6MdBdJS`Z)bPPAZ0WQ-o3%\Z<Zs:@1@88SV$2L#;@'uBN>UAE>$Wf6C'H*2&EPJ9.goaFCA)]ZHPihL\8,PliX297^fs-`]V.$S-8bY(0%Y9_+SWlP(=3Shan$?3(_WmM>5ta3!nS3\^7p_br+oT#RHmYf<>LM3XJ'CPTU\QC/F_i^trjog?sGs9L2R]V?4:,OD;Tk/@b`^8]HjS5nZqa"nVu0!%g"@*TZ0)a;9i&;jc.GFigK^e^&#SYi.;_4>D;iiSnR>n]`1(VtQ%38;Y."`U>'0U16RV^)mq48Z7l8@a#fjrY,8q%^i07!1UQhE$bVZVn/MI=1U>m7g$@D`N*n+mH2!n\TTp`hTbGrmHrVEg=rsgZF==*c-6$)UgK"LY$X6&jm@2MYN4S^>6?^qPAcVIUf[ls"qu(FMkcE-,mT-R7&8=cX<*NuENuq0Y1ba\YS92)VBcGmPm&t6X8>`+=^bcXmFgUPo4HrPQUA2l8Q,cQHRK&)ZNU^+IBTm@BOOY;ABhVL1$G(R%AZ]e_.pP*"U7p225_9i[(#hl#h#5(5M#`Smt\YmO[p/#4k>@L]h.u'CHBj?C[.d^)4U#\ksr2MZD]ICi_-WY6T]!/2=mVoN0D48%=jgOEBPYDhVmIa//A<IoY[>^6"C.YNk\8A[S0F1au1Pt]_^FD=e8LE1T*jcYtPp9.94M$j"WS+91_$6pju\Jor=HbN0!LDU^7lP#0,P<+7B,W\A,U2=*I`pg\[JnmG58Ab==qGSTOG;h)d7T&d-eQ@--,W3n=7-c'pbE1r"D>5S;d2ZJqLRd.-d#r"t4R$:q!okQ!%^3o_";1V?[;]<os?g*Vj_@UJ9Jp&.XbT?^uR'pDq6`"]TG63*<&UR5O(F!=3@+DFGd-!,5pX0Z'VZ.@F0Z&>42OubsQP]R1YXp?Og]sNV=;&+uMoY$!HZN@,C@,.D"eruPUH;N^"#l:Vu"=T@L`Y;'LXH@AQYqtoI^C?_57A#k<BKX6>fqqB+E_\<LQNWHA8h/=s-*)[J>sj``$OP+o[!clrX6+_RQR$F-H.3FsTP(U?`kp6$j]Y&GrK$es<0H=!oMYH=F=6S7i%]\*e73BR[cQeG1%"1NO64O2^n\F_"d3R^7BeVF_AJh-1T>Ir.a!/%GafF*gG\>=NjEUE?(mT#>eu`+[Q)Zg"ZO&#Ap;4>L-DZMASjD4<a10+'flP5Z(OOk"`2]8pF<.2_3H$Kch*Bpml(F(jI8nN'?kf@/87\_o4M1nlOFANdlBqUl5!gJY;-bX]0_TjXb>'bMA):J2\rnGUZeG)2:up)^276MUepf*<mY#/d[0?2U%:o`'5bV"2Nm&qFMHMEfYJ-7+t/RC*+s&X+eImu>+f(E>-+.MKoQgK'>_aPCRXtcfTe>-*??JklY+h6<D.qJ8iq?'?aD>c\C=)>-Rd%bZF#<GNaa/!A*P=na;%=@Yk:'8%aP%U!>`ph~>endstream
|
|
188
188
|
endobj
|
|
189
189
|
26 0 obj
|
|
190
190
|
<<
|
|
191
|
-
/Filter [ /ASCII85Decode /FlateDecode ] /Length
|
|
191
|
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1932
|
|
192
192
|
>>
|
|
193
193
|
stream
|
|
194
|
-
Gatm
|
|
194
|
+
Gatm<=``=U&:XAWf^Z=)DFT2%+3@/Sa**V;-AnS\V:3i-,XfHq#mLMaX(hQ[(VE/Z17LYZ8-0UCIZ(l_'+B8XollW$r%Wuk\I#,:o-Kb6EFAb]cK7WhO,2at^>f8L]`:Pf/B9^)&7fgGj6",c8J$OU\=lPHht=dj5VcG*3AQ+E@:7_2&D+:;bAHr4_-iH/::lqtXqM]hOJ(DC2L@&0E/trgj$3gOm5H0_PetJ9<pW(E*>5OjRb3qjHH<rh7OSad4FHrC*]KJRd?1>D^c[75$a+(u@4t&K!rNGqM91ng4<6/4C"/rb4@sh/q@2T=0Rof_L7E(<"IAM!r;=C:&#d?_S`bOl)pQL"$n(a`BY`7cm3'=2\HQDY(gEX%A9ReJc.V>$0)g7sndMC'g]uVg[))k)LcOo)],e-;Bk5u"O\\E;ZUfXN0mIn'K9F>\-HFKH^`T;?[XKC"i<PDBh.IW'":[J>UsXF_L4>'b0`i#bT!.*`N\WHd_!VP,Z4\\jPRqO81lh[JZ;OXW_?mW5U.SH_WgF.qY8)"]"OW+)0bdODRM*QE5?F(iQE(=n\QXh^FU'a<@%,!6q0WC#O:$Yo.iR4ha<*-Hatf)(5[Gq/VE@XhQD\Y."4*aLMJH@@\[@f0Pp!,4nViT-7Cp<ZGtr9CXZP$?=<$brNb1`&g&jYeng.']8JV+!(qOLm,](kXSOp7(18@IHGXa"XAu@EOJ:rneFq_6[8K+6#d\395*&m.3O.X7MN"ZM!"\*6cOnrGuVq%YP83a9%Hp$)QN^T2,b4UWs`9cFa.ML)$Y8o[Lr:4DNj@re(Ln0G\B(G7eZWL`^Y#8:qIih3>7HI9i*j[qk?'c'uOBWJ8`tL$OQ0NU,qX92KYA97BMK"(2f>5pZr:TSbjEOmurbQ7W1h&kXf"7rfp%(s$i=shl`73/cTQ)(U04J*Aq.)'k;.*3K!?2I%c:)l7gb;dm2>sM]-?O4G>[f`,EW`[WK!B^*'9j14REo$8!;!X&/3-n5k1-VZ2P!H0j,Cg>G%T<`VqFt]lB\3*7mk_0]n$671aM7,`k'kh;+[=u`Xj^d*1AG.0Gnu,L[jNc00VFFBf961*']+S>*QH>lZXT)^k,ToloQUoa/\f\No>)/0e?>f>47NDaMaTg(n@^j-_Tj1O"l,WY#mb<)3rTadG"V?RIJDh%j9<%FWglg<ACY/K)jI`TR>/_/ukWj@@CXS5'KcIL?g0Ob8V^cW?aHVOg)[%1*+gMbLupF*3BumiP$s&q>3um0XcdAp_nAY4e3?nc]nT19GP78-#;^mg?Idie1p$8Y(a"o.BQgfBhXrI]`,Q!?fX'"Pe9S&P,/T+*KN&Di=;MUWcA&IMl*mc7-Ie;5V5hgb[=['j=RJC\34#S<]!TS.[#?,gQO1/TuN+&J9Lu6^8!el/>mdcGh/u;nGl\#2!&`CL?NAP&O5d,4Yj[dch5rHLq'[,Z9:,2=e5$S87.BlWaU'M*-G6,DM^@:BZR?MiLlq`/]jq?+8450UT[2";iZ-Rics.cnCl.QFH-NO7;o^R]lod:r<'_BQD/f@bp>jVTPl6DXQi'C%#BmC\'IdGS_S!>[^!*lKPZ9N4%&hNcf@0Y$ViPsS\R[d9&$D-`+gOeJ_a`:oKH&0_]maNln&>tb!*j^'joSEkB3D^;XCKRV>;BiD7+81&NmnkUJ6s:)FM\qdo@F%djK$GRm7Lr[UiZT,KXC/Qr?rcG5<Vi'Nop\lRmH6^ZAASqIn31=0Ylc5qqO'Xd$WHPXftJgH[78oE7,;MdCUm];8N-qEsO@EMH1Bp,1m,rpQMuqd-tMl!asH`4QlEI7]c5V/%2cmSa'o]3DK)R)FFA$0r>L#IRHf5eF,DqrDuGg#i\]>o%2i#'d\G?CniTq<j2PZ0nrLi;p2NQ:Ypjm"CH^YiSbAb1bo*ca_[d)BA\\pAr\2~>endstream
|
|
195
195
|
endobj
|
|
196
196
|
27 0 obj
|
|
197
197
|
<<
|
|
198
|
-
/Filter [ /ASCII85Decode /FlateDecode ] /Length
|
|
198
|
+
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2191
|
|
199
199
|
>>
|
|
200
200
|
stream
|
|
201
|
-
|
|
201
|
+
Gatm<D0)1;')q<+d8a7LQ.qHV+:sX8qlj]p=f:8tX!i=e7kg)Q#)4-`?>\MZ^Sci'a^/,Xfoo^McnJ.;5Mc9[2]fO)p$D^c+SthaY24Hbq6X7d(H;FI518iXin"RYSbZ+oP2jer>`n%OOW,WXee]VRNkNAfj!:KU#ou5;BB8r#,cuO*E6/ELfUXAMK\eQV_sWp85'SKKT\o.T@?@u_3H>'mdQKC9O(Z=sJq+18VbnfEhfAR6dAn:oeql3KQ$0%=(X?tfJ:jMT'?oqZZ$8ChoqpcnWCr/$hRlq7K36;9S^p4/-2L'!>%q+%\;ob+V;$$]X*X@J>(!*a%kQf2UoEh$IP`"hM\!8p$j_W:Z[edkm4;$@gc12<_8.bN_1>\VHqLJMVJP4\L\^*D\(;"6s7PgBQEJ;W0(>].5<0:#_O]!ULP&ua`fd6kQ$b5ag#.oZR8II9]?Fj"dCM?7^atn%Qd):=0<dnn<qKiGBe+4hM2$GBCL*JF3XlS$p87`iCY^BKq"%TU!:Eu;)k#W-R:'TUXX,idDe,\[eS):aNA.31CC<N6(fX+X7[fT5APJ/]<,\VLs)OseXg(JoTXDiP>SF1TPqHY$F=4H'1kRZ(<k3[Z*Vsd+n,XJ*Y#W$09WgdQ2pY8FD<U:+j^KZ[S8.+gQ4gYfFmE#.<]\R.LjE.")l$(!]=g3s>IJ+/bDbM#U8W*HpF\ldEs;F\6;k/oo^'Lr8/#ZqN#`%4Znf4c1fmc*XMN2_%!cqD9;hPc:I['^Z"eO2MWctKr7sBpa"W=?W;#?0+,jH=;htWu++t5U3gq;>nN+uk40n?<Votp:X9p_"8^4E$kshP2UWVUK5g_]$Q+tG*[]5I4_`Rkm86tFLq,ZSP+)``8Q"T.Jhrou7ki),\nZSqT\d0MG]#s6$_b6;""fJU1BZ\7e=rN&!,(kU<YraWBlYiUQ?RMPoMagD?O+]VdIh#9_*_>iI(\g:@+PKCh*o*++i3sRfnMM/!$^-a+.&"gu4I-]\mIWK];LbcKK.,M?."#[u&%R22[J-](ffG/k<t4a4K)RV%5&jnN9\qY%fTD/2OiMZ)bShpdms!&7Kab(OZU(m8q^R;q#Nu9-+AuB^71GU9PqbH^ksT9=Wg4*@lpThfHu<s/q#5p(?$Ao+<iPa`&A;Ut4qR%'aauUg@73Q<W3*_V_5Js@8UC2,VT9plAkk5&L_Zs?Z[7/r[M2B37g2dLXZQoX(O9YP30ipFG9!^R40.+UYW<.(7Y'Y31-odmb*d#8h,'S3!6hIkLA?;D)i8di]G6?(MIMXjS%7<(q*[)ARND;lU2K)HS.7QHE<c>)C$9('qRG&_+b(D"h`Y>j%HQ<^AaNQ1h4PA\3aHaMKQAg4*?qTKeT9pjqalJAjMi<5pM"ET!*^'qA@[7N%:TsA!Q0\^GEduje.!miFlu=%A,lH4Z3iaP'5PAE^9@-h(=VTqo.LU0Jcg3TXXt(_g+!1=D3m3`aQG*u.#S%8pe/m`6&f!0aD8J=W7"[M&c>RHqW[Pr`o/p-$S.P-Vik=X95sg(bYFlPS?]lZ\i$JR$\DQ^>W'+q@"6U<CdudD<3tg-8p!2NEqY_?c1[fID)MIcSoaMWT6iWPcV\$:Y9.F(<,Od8A=7_Vq-X?O=Bn&S9KHj+/M>fg[Z.+\0$Y,VdcSq8m>.moc3oR_RUkjHl39%pEVL1n*gL;i&:qoiU<Wl%%pqMM\stui+%,Q#rk=pAR@TG2\fT"T0fO.i`E,/Xo;\.er@206X._bZibD`kJmm1;``5^Eh'+J+[HSfK\sG7pl(n6)Ua)DT`fBQM/b^65lFYW_7tqCVG,kRm5jqj"H=Setk.uK/Gt]Sr[aEl4*0,sDrqYrB2tsd^rp(.eXP58GnsEQu&0?T[/=;t)/Gr/=?>CVZOOsF]%_<J=Oa.8`W,+p%f2(Pi`5!^Z/5uA1W<$/%o<'0&W*9UT]f*2]>lSbHpf"A=&Ftqs%Z).rjY.j"mh!(=)(9\%eYpf.hIc??XM/FB>?F]r)C:O1l`P*mGXc;/JOF@o_@8&H"q6l@6J!=J-3O>B")o]tC-<PrTc+/"A)E-FGW\>$9\uXVQ@e3*PAWXuC"!t\6#U,lHH--HjMe_2:lVLMJO6Jc,PL3r@T]sY"Be2G>Ma(@i0rOV0V@_oQ=7jZg;q]?IKr09<q'n\c2Prlc*>JlF/3X#`W#p[\S/&~>endstream
|
|
202
202
|
endobj
|
|
203
203
|
xref
|
|
204
204
|
0 28
|
|
@@ -217,23 +217,23 @@ xref
|
|
|
217
217
|
0000001873 00000 n
|
|
218
218
|
0000002063 00000 n
|
|
219
219
|
0000002253 00000 n
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
220
|
+
0000002489 00000 n
|
|
221
|
+
0000002703 00000 n
|
|
222
|
+
0000002949 00000 n
|
|
223
|
+
0000003019 00000 n
|
|
224
|
+
0000003354 00000 n
|
|
225
|
+
0000003459 00000 n
|
|
226
|
+
0000005553 00000 n
|
|
227
|
+
0000007702 00000 n
|
|
228
|
+
0000009775 00000 n
|
|
229
|
+
0000011706 00000 n
|
|
230
|
+
0000013690 00000 n
|
|
231
|
+
0000015854 00000 n
|
|
232
|
+
0000017878 00000 n
|
|
233
233
|
trailer
|
|
234
234
|
<<
|
|
235
235
|
/ID
|
|
236
|
-
[<
|
|
236
|
+
[<a8ed54167784a3b505d33033840a1191><a8ed54167784a3b505d33033840a1191>]
|
|
237
237
|
% ReportLab generated PDF document -- digest (opensource)
|
|
238
238
|
|
|
239
239
|
/Info 18 0 R
|
|
@@ -241,5 +241,5 @@ trailer
|
|
|
241
241
|
/Size 28
|
|
242
242
|
>>
|
|
243
243
|
startxref
|
|
244
|
-
|
|
244
|
+
20161
|
|
245
245
|
%%EOF
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { PACKAGE_VERSION } from "../contracts/doc-versions.mjs";
|
|
2
|
+
|
|
3
|
+
const docsDirectory = `gitpagedocs/docs/versions/${PACKAGE_VERSION}`;
|
|
4
|
+
const localizedPath = (file) => Object.fromEntries(["en", "pt", "es"].map((language) => [language, `${docsDirectory}/${language}/${file}`]));
|
|
5
|
+
|
|
6
|
+
const menuLabels = (titles, file) => Object.fromEntries(["en", "pt", "es"].map((language) => [language, {
|
|
7
|
+
title: titles[language], "path-click": `${docsDirectory}/${language}/${file}`,
|
|
8
|
+
}]));
|
|
9
|
+
|
|
10
|
+
export const PARENT_MENU_JSON = JSON.stringify({
|
|
11
|
+
id: 1000,
|
|
12
|
+
...menuLabels({ en: "Guides", pt: "Guias", es: "Guías" }, "guides.md"),
|
|
13
|
+
submenus: [{
|
|
14
|
+
id: 1001,
|
|
15
|
+
...menuLabels({ en: "Configure your site", pt: "Configure seu site", es: "Configura tu sitio" }, "configure-your-site.md"),
|
|
16
|
+
submenus: [{ id: 13, ...menuLabels({ en: "Configuration", pt: "Configuração", es: "Configuración" }, "configuration.md") }],
|
|
17
|
+
}],
|
|
18
|
+
}, null, 2);
|
|
19
|
+
|
|
20
|
+
export const HTML_ROUTE_JSON = JSON.stringify({
|
|
21
|
+
id: 29,
|
|
22
|
+
title: { en: "DOOM: HTML example", pt: "DOOM: exemplo HTML", es: "DOOM: ejemplo HTML" },
|
|
23
|
+
description: { en: "An interactive HTML container", pt: "Um container HTML interativo", es: "Un contenedor HTML interactivo" },
|
|
24
|
+
titleIsVisible: true,
|
|
25
|
+
descriptionIsVisible: true,
|
|
26
|
+
path: localizedPath("doom.html"),
|
|
27
|
+
container: "full",
|
|
28
|
+
fullscreenEnabled: true,
|
|
29
|
+
blockLink: true,
|
|
30
|
+
}, null, 2);
|
|
31
|
+
|
|
32
|
+
export const RECIPE_ROOT_JSON = JSON.stringify({
|
|
33
|
+
site: {
|
|
34
|
+
name: "Documentação • Guía • Documentation",
|
|
35
|
+
docsVersion: PACKAGE_VERSION,
|
|
36
|
+
languages: { en: true, pt: true, es: true },
|
|
37
|
+
nestedMenusEnabled: true,
|
|
38
|
+
ActiveNavigation: true,
|
|
39
|
+
RouteGuide: true,
|
|
40
|
+
FocusMode: true,
|
|
41
|
+
focusMode: { copyEnabled: true, downloadEnabled: true, sectionNavigationEnabled: true, documentNavigationEnabled: true },
|
|
42
|
+
icons: {
|
|
43
|
+
defaults: { reactIcon: true, size: "22px", colorDark: "currentColor", colorLight: "currentColor" },
|
|
44
|
+
LanguageSelector: { tag: "SiGoogletranslate" },
|
|
45
|
+
ThemeSelector: { tag: "LuPencil" },
|
|
46
|
+
FocusMode: { tag: "LuBookOpen" },
|
|
47
|
+
QuickNavigation: { tag: "LuSearch" },
|
|
48
|
+
PdfDownload: { tag: "LuDownload" },
|
|
49
|
+
PdfOpenInNewTab: { tag: "LuExternalLink" },
|
|
50
|
+
DocumentPrevious: { tag: "LuChevronLeft" },
|
|
51
|
+
DocumentNext: { tag: "LuChevronRight" },
|
|
52
|
+
},
|
|
53
|
+
pdf: { enabled: true, previewEnabled: true, downloadEnabled: true, openInNewTabEnabled: true },
|
|
54
|
+
},
|
|
55
|
+
VersionControl: { versions: [{ id: PACKAGE_VERSION, path: `${docsDirectory}/config.json` }] },
|
|
56
|
+
}, null, 2);
|
|
57
|
+
|
|
58
|
+
export const RECIPE_VERSION_JSON = JSON.stringify({
|
|
59
|
+
routeDefaults: { RouteGuide: true },
|
|
60
|
+
"routes-md": [
|
|
61
|
+
{ id: 101, title: { en: "Start", pt: "Início", es: "Inicio" }, path: localizedPath("start.md") },
|
|
62
|
+
{ id: 102, title: { en: "Next steps", pt: "Próximos passos", es: "Próximos pasos" }, path: localizedPath("next-steps.md") },
|
|
63
|
+
],
|
|
64
|
+
"menus-header-md": [{
|
|
65
|
+
id: 3100,
|
|
66
|
+
en: { title: "Guides" }, pt: { title: "Guias" }, es: { title: "Guías" },
|
|
67
|
+
submenus: [{
|
|
68
|
+
id: 3101,
|
|
69
|
+
en: { title: "Getting started" }, pt: { title: "Primeiros passos" }, es: { title: "Primeros pasos" },
|
|
70
|
+
submenus: [
|
|
71
|
+
{ id: 101, en: { title: "Start", "path-click": `${docsDirectory}/en/start.md` }, pt: { title: "Início", "path-click": `${docsDirectory}/pt/start.md` }, es: { title: "Inicio", "path-click": `${docsDirectory}/es/start.md` } },
|
|
72
|
+
{ id: 102, en: { title: "Next steps", "path-click": `${docsDirectory}/en/next-steps.md` }, pt: { title: "Próximos passos", "path-click": `${docsDirectory}/pt/next-steps.md` }, es: { title: "Próximos pasos", "path-click": `${docsDirectory}/es/next-steps.md` } },
|
|
73
|
+
],
|
|
74
|
+
}],
|
|
75
|
+
}],
|
|
76
|
+
}, null, 2);
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { COMPOSED_PAGES } from "../data/composed-pages.mjs";
|
|
2
|
+
|
|
3
|
+
const blocksExample = JSON.stringify({ pages: COMPOSED_PAGES }, null, 2);
|
|
4
|
+
const layoutExample = JSON.stringify({
|
|
5
|
+
id: 23,
|
|
6
|
+
layout: {
|
|
7
|
+
title: { placement: "outside", position: "before" },
|
|
8
|
+
description: { placement: "inside", position: "after" },
|
|
9
|
+
},
|
|
10
|
+
}, null, 2);
|
|
11
|
+
|
|
12
|
+
export const CONTENT_BLOCKS_DOCS = {
|
|
13
|
+
en: `# Ordered content blocks
|
|
14
|
+
|
|
15
|
+
A page can contain several Markdown documents, HTML players, videos, audio tracks and PDFs in any order. Add a top-level \`pages\` array to the version configuration. Each block references a route already defined in the corresponding \`routes-md\`, \`routes-html\`, \`routes-video\`, \`routes-audio\` or \`routes-pdf\` list. The page has one URL; blocks do not create separate navigation destinations.
|
|
16
|
+
|
|
17
|
+
## Complete repeated-block example
|
|
18
|
+
|
|
19
|
+
The scaffold's page 39 combines three Markdown blocks, two HTML blocks, two videos, two audio tracks and three PDFs. It references the included routes 1, 2, 30, 29, 11, 12 and 23. Merge the following object into \`gitpagedocs/docs/versions/0.0.10/config.json\` or the current version's config; retain those route definitions and their files. The same example is included in the new scaffold.
|
|
20
|
+
|
|
21
|
+
\`\`\`json
|
|
22
|
+
${blocksExample}
|
|
23
|
+
\`\`\`
|
|
24
|
+
|
|
25
|
+
Add a menu destination with \`"path-click": "page:39"\` in each language. The bundled entry is under Guides → Read and explore → Multiple content blocks. Its label is independent of the labels of the individual blocks.
|
|
26
|
+
|
|
27
|
+
## Ordering, repetition and individual settings
|
|
28
|
+
|
|
29
|
+
- \`pages[].id\` is an integer page identity. Use a new ID that does not collide with an existing route ID.
|
|
30
|
+
- \`blocks[].id\` is a nonempty string, unique within its page. Two instances may use the same \`routeId\`, but need different block IDs.
|
|
31
|
+
- \`type\` is exactly \`md\`, \`html\`, \`video\`, \`audio\` or \`pdf\`; \`routeId\` selects a route from that type's list.
|
|
32
|
+
- Array order is display order. Move a block object to reorder it, remove it to hide that instance, or copy it with a new block ID to repeat it. \`hierarchyPage\` still applies to legacy pages and does not reorder this array.
|
|
33
|
+
|
|
34
|
+
Each reference uses its route's source, translation, visibility, sizing, PDF actions, media controls and authorization. To give two occurrences of the same file different options, define two routes with distinct IDs and the same source path, then reference those IDs. Do not put a second copy of route parameters inside a block.
|
|
35
|
+
|
|
36
|
+
A Markdown block renders only that Markdown document; inline legacy audio attached to its route does not become an extra block. Refer to an audio route explicitly when it belongs in the sequence. Blocks select fixed routes and do not share a \`browseAll\` index. Media exclusivity and browser restrictions still apply; repeating a player does not start playback automatically.
|
|
37
|
+
|
|
38
|
+
Focus mode and narration read the authorized Markdown blocks available in the selected language, in array order, including repetitions. Focus copy/download joins their original sources with two newline characters and uses \`page-39.md\` for this example. Each visible Markdown container keeps its individual copy/download actions and original filename. Rendered heading IDs are namespaced per block to avoid duplicate anchors; the downloaded source is unchanged. Denied pages or blocks are excluded from rendering, copy, focus and narration. This client-side gate does not protect public assets or prevent the document loader from reading their sources.
|
|
39
|
+
|
|
40
|
+
## Position titles and descriptions
|
|
41
|
+
|
|
42
|
+
Every content route accepts \`layout.title\` and \`layout.description\` independently. \`placement\` is \`outside\` or \`inside\` the content container; \`position\` is \`before\` or \`after\` the content. Merge this presentation fragment into an existing route, preserving its content fields:
|
|
43
|
+
|
|
44
|
+
\`\`\`json
|
|
45
|
+
${layoutExample}
|
|
46
|
+
\`\`\`
|
|
47
|
+
|
|
48
|
+
For Markdown, configured title and description always remain outside the rendered document; before/after positioning is honored. Headings authored inside the Markdown remain part of that document. HTML, video, audio and PDF accept both placements. These fields change presentation, not the source file or media contents. Existing \`titleIsVisible\`, \`descriptionIsVisible\`, alignment and styling options continue to apply. Omit \`layout\` to preserve the existing presentation. Shared values may live in \`routeDefaults\`; an explicit route-level \`layout\` replaces that defaults object.
|
|
49
|
+
|
|
50
|
+
## Compatibility and access
|
|
51
|
+
|
|
52
|
+
Configs without \`pages\` keep their existing single-container or mixed-route behavior. A version-level \`pages\` array overrides the root array; \`[]\` clears it. Invalid definitions or unresolved references are ignored without preventing other pages from loading. Duplicate page or block identities keep the first valid entry, and a page ID colliding with a route is ignored so the existing route remains available. Review these mistakes in your configuration rather than relying on omission.
|
|
53
|
+
|
|
54
|
+
Page-level \`authorization\` protects the composed destination, and each referenced route retains its own access requirements. Hiding a block does not protect publicly hosted files. Markdown and PDF do not invent a translation when their selected-language file is absent; other types retain their existing route fallback behavior, including English fallback for video/audio and external HTML URLs. Test every block and language, direct page navigation, restricted routes, repeated media, download errors and browser resource limits before publishing. Large numbers of active embeds or PDFs consume memory and network bandwidth; include only what readers need.
|
|
55
|
+
`,
|
|
56
|
+
pt: `# Blocos de conteúdo ordenados
|
|
57
|
+
|
|
58
|
+
Uma página pode conter vários documentos Markdown, players HTML, vídeos, faixas de áudio e PDFs em qualquer ordem. Adicione um array \`pages\` no nível principal do config da versão. Cada bloco referencia uma rota já definida em \`routes-md\`, \`routes-html\`, \`routes-video\`, \`routes-audio\` ou \`routes-pdf\`. A página possui uma única URL; os blocos não criam destinos de navegação separados.
|
|
59
|
+
|
|
60
|
+
## Exemplo completo com repetições
|
|
61
|
+
|
|
62
|
+
A página 39 do scaffold reúne três blocos Markdown, dois HTML, dois vídeos, dois áudios e três PDFs. Ela referencia as rotas incluídas 1, 2, 30, 29, 11, 12 e 23. Combine o objeto abaixo com \`gitpagedocs/docs/versions/0.0.10/config.json\` ou com o config da versão atual; preserve as definições dessas rotas e seus arquivos. O mesmo exemplo acompanha o novo scaffold.
|
|
63
|
+
|
|
64
|
+
\`\`\`json
|
|
65
|
+
${blocksExample}
|
|
66
|
+
\`\`\`
|
|
67
|
+
|
|
68
|
+
Adicione um destino de menu com \`"path-click": "page:39"\` em cada idioma. A entrada incluída fica em Guias → Leia e explore → Múltiplos blocos de conteúdo. Seu rótulo é independente dos rótulos de cada bloco.
|
|
69
|
+
|
|
70
|
+
## Ordem, repetição e opções individuais
|
|
71
|
+
|
|
72
|
+
- \`pages[].id\` é um identificador inteiro da página. Use um ID novo que não coincida com um ID de rota existente.
|
|
73
|
+
- \`blocks[].id\` é uma string não vazia, única dentro da página. Duas instâncias podem usar o mesmo \`routeId\`, mas precisam de IDs de bloco diferentes.
|
|
74
|
+
- \`type\` aceita exatamente \`md\`, \`html\`, \`video\`, \`audio\` ou \`pdf\`; \`routeId\` seleciona uma rota da lista desse tipo.
|
|
75
|
+
- A ordem do array é a ordem de exibição. Mova um objeto para reordená-lo, remova-o para ocultar aquela instância ou copie-o com um ID novo para repetir. \`hierarchyPage\` continua valendo para páginas legadas e não reordena esse array.
|
|
76
|
+
|
|
77
|
+
Cada referência usa a origem, tradução, visibilidade, dimensões, ações PDF, controles de mídia e autorização da sua rota. Para dar opções diferentes a duas ocorrências do mesmo arquivo, defina duas rotas com IDs distintos e o mesmo caminho de origem; depois referencie esses IDs. Não duplique parâmetros de rota dentro do bloco.
|
|
78
|
+
|
|
79
|
+
Um bloco Markdown renderiza apenas seu documento; um áudio inline legado da rota não se transforma em bloco extra. Referencie uma rota de áudio explicitamente quando ela fizer parte da sequência. Os blocos selecionam rotas fixas e não compartilham um índice de \`browseAll\`. A exclusividade de mídia e as restrições do navegador continuam valendo; repetir um player não inicia reprodução automaticamente.
|
|
80
|
+
|
|
81
|
+
Modo foco e narração leem os blocos Markdown autorizados e disponíveis no idioma selecionado, na ordem do array, incluindo repetições. Copiar/baixar no foco reúne as fontes originais com duas quebras de linha e usa \`page-39.md\` neste exemplo. Cada container Markdown visível mantém suas ações individuais de cópia/download e o nome original do arquivo. IDs de títulos renderizados recebem um prefixo por bloco para evitar âncoras duplicadas; a fonte baixada não muda. Páginas ou blocos negados são excluídos da renderização, cópia, foco e narração. Esse controle no cliente não protege arquivos públicos nem impede o carregador de documentos de ler suas fontes.
|
|
82
|
+
|
|
83
|
+
## Posicionar títulos e descrições
|
|
84
|
+
|
|
85
|
+
Toda rota de conteúdo aceita \`layout.title\` e \`layout.description\` independentemente. \`placement\` vale \`outside\` ou \`inside\` do container; \`position\` vale \`before\` ou \`after\` do conteúdo. Combine este fragmento de apresentação com uma rota existente, preservando os campos do conteúdo:
|
|
86
|
+
|
|
87
|
+
\`\`\`json
|
|
88
|
+
${layoutExample}
|
|
89
|
+
\`\`\`
|
|
90
|
+
|
|
91
|
+
No Markdown, título e descrição configurados sempre ficam fora do documento renderizado; a posição antes/depois é respeitada. Títulos escritos dentro do Markdown continuam pertencendo ao documento. HTML, vídeo, áudio e PDF aceitam as duas posições de container. Esses campos mudam a apresentação, não o arquivo de origem nem o conteúdo da mídia. \`titleIsVisible\`, \`descriptionIsVisible\`, alinhamento e estilos existentes continuam valendo. Omita \`layout\` para manter a apresentação atual. Valores compartilhados podem ficar em \`routeDefaults\`; um \`layout\` explícito da rota substitui esse objeto dos defaults.
|
|
92
|
+
|
|
93
|
+
## Compatibilidade e acesso
|
|
94
|
+
|
|
95
|
+
Configs sem \`pages\` mantêm o comportamento existente de containers únicos ou rotas mistas. O array \`pages\` da versão sobrescreve o array raiz; \`[]\` limpa a lista. Definições inválidas ou referências inexistentes são ignoradas sem impedir o carregamento das outras páginas. IDs duplicados de página ou bloco preservam a primeira entrada válida; um ID de página que coincide com uma rota é ignorado para preservar a rota existente. Corrija esses erros na configuração em vez de depender da omissão.
|
|
96
|
+
|
|
97
|
+
O campo \`authorization\` da página protege o destino composto, e cada rota referenciada mantém suas próprias exigências de acesso. Ocultar um bloco não protege arquivos públicos. Markdown e PDF não inventam uma tradução quando falta o arquivo do idioma selecionado; os outros tipos preservam o fallback existente da rota, incluindo inglês para vídeo/áudio e URLs HTML externas. Teste todos os blocos e idiomas, navegação direta, rotas protegidas, mídias repetidas, erros de download e limites do navegador antes de publicar. Muitos embeds ou PDFs ativos consomem memória e rede; inclua apenas o que o leitor precisa.
|
|
98
|
+
`,
|
|
99
|
+
es: `# Bloques de contenido ordenados
|
|
100
|
+
|
|
101
|
+
Una página puede contener varios documentos Markdown, reproductores HTML, vídeos, pistas de audio y PDFs en cualquier orden. Añade un array \`pages\` en el nivel principal del config de la versión. Cada bloque referencia una ruta ya definida en \`routes-md\`, \`routes-html\`, \`routes-video\`, \`routes-audio\` o \`routes-pdf\`. La página tiene una sola URL; los bloques no crean destinos de navegación separados.
|
|
102
|
+
|
|
103
|
+
## Ejemplo completo con repeticiones
|
|
104
|
+
|
|
105
|
+
La página 39 del scaffold combina tres bloques Markdown, dos HTML, dos vídeos, dos audios y tres PDFs. Referencia las rutas incluidas 1, 2, 30, 29, 11, 12 y 23. Combina el siguiente objeto con \`gitpagedocs/docs/versions/0.0.10/config.json\` o con el config de la versión actual; conserva las definiciones de esas rutas y sus archivos. El mismo ejemplo se incluye en el nuevo scaffold.
|
|
106
|
+
|
|
107
|
+
\`\`\`json
|
|
108
|
+
${blocksExample}
|
|
109
|
+
\`\`\`
|
|
110
|
+
|
|
111
|
+
Añade un destino de menú con \`"path-click": "page:39"\` en cada idioma. La entrada incluida está en Guías → Lee y explora → Múltiples bloques de contenido. Su etiqueta es independiente de las etiquetas de cada bloque.
|
|
112
|
+
|
|
113
|
+
## Orden, repetición y opciones individuales
|
|
114
|
+
|
|
115
|
+
- \`pages[].id\` es un identificador entero de página. Usa un ID nuevo que no coincida con una ruta existente.
|
|
116
|
+
- \`blocks[].id\` es una cadena no vacía, única dentro de su página. Dos instancias pueden usar el mismo \`routeId\`, pero necesitan IDs de bloque distintos.
|
|
117
|
+
- \`type\` acepta exactamente \`md\`, \`html\`, \`video\`, \`audio\` o \`pdf\`; \`routeId\` selecciona una ruta de la lista correspondiente.
|
|
118
|
+
- El orden del array determina el orden de presentación. Mueve un objeto para reordenarlo, elimínalo para ocultar esa instancia o cópialo con un ID nuevo para repetirlo. \`hierarchyPage\` sigue aplicándose a las páginas anteriores y no reordena este array.
|
|
119
|
+
|
|
120
|
+
Cada referencia utiliza el origen, traducción, visibilidad, dimensiones, acciones PDF, controles multimedia y autorización de su ruta. Para asignar opciones diferentes a dos apariciones del mismo archivo, define dos rutas con IDs distintos y la misma ruta de origen; después referencia esos IDs. No dupliques parámetros de ruta dentro del bloque.
|
|
121
|
+
|
|
122
|
+
Un bloque Markdown renderiza solo su documento; el audio inline antiguo de su ruta no se convierte en un bloque adicional. Referencia explícitamente una ruta de audio cuando forme parte de la secuencia. Los bloques seleccionan rutas fijas y no comparten un índice de \`browseAll\`. La exclusividad multimedia y las restricciones del navegador siguen aplicándose; repetir un reproductor no inicia la reproducción automáticamente.
|
|
123
|
+
|
|
124
|
+
El modo foco y la narración leen los bloques Markdown autorizados y disponibles en el idioma seleccionado, en el orden del array, incluidas las repeticiones. Copiar/descargar desde foco une sus fuentes originales con dos saltos de línea y utiliza \`page-39.md\` en este ejemplo. Cada contenedor Markdown visible conserva sus acciones individuales de copia/descarga y el nombre original. Los IDs de encabezados renderizados reciben un prefijo por bloque para evitar anclas duplicadas; la fuente descargada no cambia. Las páginas o bloques denegados se excluyen de renderización, copia, foco y narración. Este control del cliente no protege archivos públicos ni impide que el cargador de documentos lea sus fuentes.
|
|
125
|
+
|
|
126
|
+
## Posicionar títulos y descripciones
|
|
127
|
+
|
|
128
|
+
Cada ruta de contenido acepta \`layout.title\` y \`layout.description\` independientemente. \`placement\` admite \`outside\` o \`inside\` del contenedor; \`position\` admite \`before\` o \`after\` del contenido. Combina este fragmento de presentación con una ruta existente, conservando sus campos de contenido:
|
|
129
|
+
|
|
130
|
+
\`\`\`json
|
|
131
|
+
${layoutExample}
|
|
132
|
+
\`\`\`
|
|
133
|
+
|
|
134
|
+
En Markdown, el título y la descripción configurados siempre permanecen fuera del documento renderizado; se respeta su posición anterior/posterior. Los encabezados escritos en Markdown siguen perteneciendo al documento. HTML, vídeo, audio y PDF admiten ambas ubicaciones. Estos campos cambian la presentación, no el archivo de origen ni el contenido multimedia. \`titleIsVisible\`, \`descriptionIsVisible\`, alineación y estilos existentes siguen aplicándose. Omite \`layout\` para conservar la presentación actual. Los valores compartidos pueden estar en \`routeDefaults\`; un \`layout\` explícito de la ruta sustituye ese objeto de defaults.
|
|
135
|
+
|
|
136
|
+
## Compatibilidad y acceso
|
|
137
|
+
|
|
138
|
+
Los configs sin \`pages\` mantienen su comportamiento de contenedor único o rutas mixtas. El array \`pages\` de la versión sustituye al array raíz; \`[]\` lo vacía. Las definiciones inválidas o referencias inexistentes se ignoran sin impedir que carguen las otras páginas. Las identidades duplicadas de página o bloque conservan la primera entrada válida; un ID de página que coincide con una ruta se ignora para conservar la ruta existente. Corrige esos errores en la configuración en lugar de depender de su omisión.
|
|
139
|
+
|
|
140
|
+
El campo \`authorization\` de la página protege el destino compuesto, y cada ruta referenciada mantiene sus propios requisitos de acceso. Ocultar un bloque no protege archivos públicos. Markdown y PDF no inventan traducciones cuando falta el archivo del idioma seleccionado; los demás tipos conservan el fallback de la ruta, incluido inglés para vídeo/audio y URLs HTML externas. Prueba todos los bloques e idiomas, navegación directa, rutas protegidas, medios repetidos, errores de descarga y límites del navegador antes de publicar. Muchos embeds o PDFs activos consumen memoria y red; incluye solo lo que necesita el lector.
|
|
141
|
+
`,
|
|
142
|
+
};
|