mirror of
https://github.com/getgrav/grav.git
synced 2025-12-05 15:29:57 +01:00
Compare commits
1526 Commits
1.7.0-rc.8
...
1.7.42.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4cd137830b | ||
|
|
cf6bf7d1ec | ||
|
|
47665dbddb | ||
|
|
dc209453d0 | ||
|
|
5b89091f13 | ||
|
|
50ee844759 | ||
|
|
244758d438 | ||
|
|
71bbed12f9 | ||
|
|
8c2c1cb726 | ||
|
|
9d01140a63 | ||
|
|
259e775db8 | ||
|
|
d4c617ff19 | ||
|
|
c7680bb50a | ||
|
|
722ce55ccb | ||
|
|
5b950ce73f | ||
|
|
8dfa2110bf | ||
|
|
31aeaf6309 | ||
|
|
d96b023d72 | ||
|
|
4de3cab522 | ||
|
|
b34f70f91d | ||
|
|
9da8cad7fe | ||
|
|
e4a30f5966 | ||
|
|
814a050858 | ||
|
|
b6179bd2de | ||
|
|
e5ac37e3cf | ||
|
|
66463ddff3 | ||
|
|
956c2993ae | ||
|
|
3cf67cb2fd | ||
|
|
36afa9d848 | ||
|
|
694ab76d1e | ||
|
|
369c2e9ffa | ||
|
|
95ae35216a | ||
|
|
9c0477fa52 | ||
|
|
e1ab15e323 | ||
|
|
ff77d58acb | ||
|
|
adfbd5730b | ||
|
|
bf175983ec | ||
|
|
470b69c775 | ||
|
|
60648c43db | ||
|
|
75cd4f4306 | ||
|
|
2412115f41 | ||
|
|
598836d656 | ||
|
|
e1019c4420 | ||
|
|
a8a6c0c520 | ||
|
|
685d76231a | ||
|
|
0f9b9f780f | ||
|
|
1e2792874d | ||
|
|
0a061ce95e | ||
|
|
d82ee029e1 | ||
|
|
3b83c8204d | ||
|
|
9ab7a4759a | ||
|
|
c261d0d3f7 | ||
|
|
940415dddb | ||
|
|
60506e6f34 | ||
|
|
bd7a74d79e | ||
|
|
5fcf690918 | ||
|
|
904ec46a9f | ||
|
|
259c148edb | ||
|
|
0ae980062f | ||
|
|
a888f19ad1 | ||
|
|
479b89134d | ||
|
|
d0d083d985 | ||
|
|
396b412dda | ||
|
|
8be02e44c6 | ||
|
|
ec115a6a64 | ||
|
|
3b92c1aca4 | ||
|
|
2d9df03766 | ||
|
|
f086f84ff2 | ||
|
|
a2b23ad80e | ||
|
|
88350d9090 | ||
|
|
b2f27fbdf2 | ||
|
|
72b769aa63 | ||
|
|
8a7e38751a | ||
|
|
3e6c719441 | ||
|
|
8efb000801 | ||
|
|
6d6e92048e | ||
|
|
8c365d45a4 | ||
|
|
ee6448c307 | ||
|
|
f8c9e9ada4 | ||
|
|
87ab3ae4a7 | ||
|
|
68dc461bc0 | ||
|
|
4dd98610a4 | ||
|
|
0358e55aed | ||
|
|
9e5ed10925 | ||
|
|
3b7eb198cf | ||
|
|
81ed7379a9 | ||
|
|
e1950e985b | ||
|
|
84c61af807 | ||
|
|
93755c7329 | ||
|
|
5329918e2f | ||
|
|
efd7726646 | ||
|
|
4c762c0ac3 | ||
|
|
81a911572c | ||
|
|
c56bb86b61 | ||
|
|
ea010f19f0 | ||
|
|
1fae4504a2 | ||
|
|
d99c84d9f8 | ||
|
|
c732bfaeef | ||
|
|
4f0fee684a | ||
|
|
884faa91bb | ||
|
|
8c261a05cc | ||
|
|
95aa57ca50 | ||
|
|
0bc0e58707 | ||
|
|
a86e0d4b96 | ||
|
|
44c819b021 | ||
|
|
3f13d81c6f | ||
|
|
720a965c7e | ||
|
|
f0e263a404 | ||
|
|
ad33a63ad2 | ||
|
|
f7b7f3337d | ||
|
|
983fcc5e40 | ||
|
|
9c5b8b6496 | ||
|
|
71fc4eb16b | ||
|
|
ea2858ea2b | ||
|
|
d080578e83 | ||
|
|
8427eb6d3e | ||
|
|
e3a342dabd | ||
|
|
00b13d1093 | ||
|
|
7e5ff71623 | ||
|
|
72ba7ccab6 | ||
|
|
ea9c9fdca8 | ||
|
|
5e379bfa39 | ||
|
|
fb1e31d0e4 | ||
|
|
8e6b823833 | ||
|
|
6fcc4ec5d0 | ||
|
|
3e9866920b | ||
|
|
3a00ca0457 | ||
|
|
2f6e4b1ad8 | ||
|
|
01d627e8f7 | ||
|
|
51a386e252 | ||
|
|
30502e8042 | ||
|
|
01264ef70d | ||
|
|
de642df06e | ||
|
|
dd8945124e | ||
|
|
0b6428ec29 | ||
|
|
840862c26d | ||
|
|
f799a71001 | ||
|
|
3f10c05840 | ||
|
|
dbca0b451c | ||
|
|
6882037b85 | ||
|
|
5d2dc6c329 | ||
|
|
e9f28ab824 | ||
|
|
186eb8ae6c | ||
|
|
2258adcb05 | ||
|
|
20c4cdefe8 | ||
|
|
aba6382f2e | ||
|
|
32dd550178 | ||
|
|
ec3175fc89 | ||
|
|
dac1614306 | ||
|
|
37e92e4f55 | ||
|
|
1b0c3d1fce | ||
|
|
00cb9c3540 | ||
|
|
b9800b7c35 | ||
|
|
b5ab00639b | ||
|
|
cf38cccda1 | ||
|
|
024964eafb | ||
|
|
f8d736b24a | ||
|
|
62c4f3c768 | ||
|
|
31920bb153 | ||
|
|
b18b49a239 | ||
|
|
9d6a2dba09 | ||
|
|
de4af5dbcc | ||
|
|
f31541250f | ||
|
|
f570cea3bd | ||
|
|
0b54a7b4bc | ||
|
|
f464492582 | ||
|
|
81aa4601e4 | ||
|
|
6b57f29511 | ||
|
|
74296a80d0 | ||
|
|
8dbc394ae7 | ||
|
|
89709a7190 | ||
|
|
e6320fa327 | ||
|
|
3bf979bd0f | ||
|
|
6fa96ca554 | ||
|
|
60ce105fa5 | ||
|
|
ec16b5184e | ||
|
|
a7a9b5d132 | ||
|
|
460ca49f9b | ||
|
|
32a486f1d4 | ||
|
|
1237f0a6d6 | ||
|
|
9ec3e7d731 | ||
|
|
d6dcd96301 | ||
|
|
2957077935 | ||
|
|
6ba1cff114 | ||
|
|
6218a4b366 | ||
|
|
28c4305d46 | ||
|
|
a2413718f3 | ||
|
|
767a17bf50 | ||
|
|
d75c87ca5e | ||
|
|
c2a8145f2c | ||
|
|
26e4768bc5 | ||
|
|
4464f29169 | ||
|
|
2ea39309b6 | ||
|
|
1c0ed43afa | ||
|
|
a092aed4ed | ||
|
|
7c2b21fb60 | ||
|
|
e1ca3c2f70 | ||
|
|
0da5ccb3e1 | ||
|
|
2830ba9120 | ||
|
|
5a355fb94e | ||
|
|
b0add67cdd | ||
|
|
236c38e65d | ||
|
|
c9c23c6c4f | ||
|
|
8f0443a73d | ||
|
|
c9271c80a7 | ||
|
|
62d9db7650 | ||
|
|
4f7dad2872 | ||
|
|
57d6be0f78 | ||
|
|
ae55b4794f | ||
|
|
d82851af10 | ||
|
|
730231b8b7 | ||
|
|
82015d4ae7 | ||
|
|
4376c8ce57 | ||
|
|
aa1e1bc0ad | ||
|
|
35d4d00429 | ||
|
|
3e7f67f589 | ||
|
|
c08341046b | ||
|
|
010753bdd6 | ||
|
|
d36bc4b8a2 | ||
|
|
847f09a2ac | ||
|
|
28469a6bf6 | ||
|
|
0d19bc6e97 | ||
|
|
492cc1d2f1 | ||
|
|
4d4efb31e3 | ||
|
|
c7bc5f5b59 | ||
|
|
41b8fbb0e0 | ||
|
|
e60ba13d75 | ||
|
|
e0deeeb551 | ||
|
|
499b25aad8 | ||
|
|
9fd580c49b | ||
|
|
e09bae918c | ||
|
|
0abde01442 | ||
|
|
03f71fa49d | ||
|
|
4f92568171 | ||
|
|
b80fcca0cf | ||
|
|
879eb27540 | ||
|
|
7b7235297e | ||
|
|
34ab8408fa | ||
|
|
f19297d5f7 | ||
|
|
78b8051627 | ||
|
|
3dd0cabeac | ||
|
|
b992d7f185 | ||
|
|
a7e82f279a | ||
|
|
6d0d6c22d3 | ||
|
|
7e52112b21 | ||
|
|
a900b89795 | ||
|
|
cad8510dae | ||
|
|
7cafeb2870 | ||
|
|
b3b5fca16c | ||
|
|
ec884997ef | ||
|
|
3a45748ce6 | ||
|
|
c4e10cf59f | ||
|
|
2c252c43b4 | ||
|
|
382756f79b | ||
|
|
11013cbb57 | ||
|
|
2377be9a2b | ||
|
|
b1938c9790 | ||
|
|
5d842349e5 | ||
|
|
0323a898cb | ||
|
|
d275532cf8 | ||
|
|
7306f164e9 | ||
|
|
3ca58e9ae1 | ||
|
|
88219fbf0e | ||
|
|
5eefc91781 | ||
|
|
67ef9b221a | ||
|
|
c82a35cea0 | ||
|
|
840441bc9b | ||
|
|
9556e47874 | ||
|
|
45fd533186 | ||
|
|
5248519c37 | ||
|
|
5b9a0fb237 | ||
|
|
389ffe1c7a | ||
|
|
7b39a1bd8f | ||
|
|
4c5c5925b2 | ||
|
|
96df7deaf4 | ||
|
|
7666651324 | ||
|
|
b9db2f3322 | ||
|
|
84a1ab6ca5 | ||
|
|
3b89377570 | ||
|
|
c3c31880b0 | ||
|
|
52449246e5 | ||
|
|
b03de18304 | ||
|
|
9bb6f5366e | ||
|
|
d126d1b656 | ||
|
|
6f2fa9311a | ||
|
|
61061220d7 | ||
|
|
aa7e64f2b7 | ||
|
|
b58210de1a | ||
|
|
0bb52c75ce | ||
|
|
da6b41f8a6 | ||
|
|
1ab2f7083c | ||
|
|
707710d679 | ||
|
|
bab83ed977 | ||
|
|
c103efea22 | ||
|
|
3e784a2f15 | ||
|
|
21f76a1e34 | ||
|
|
a8c4e730f6 | ||
|
|
c1a9a7d648 | ||
|
|
d329df2bb0 | ||
|
|
f90232e511 | ||
|
|
57bd3c9cb5 | ||
|
|
419692b9e4 | ||
|
|
b422d9585c | ||
|
|
67b9623d6c | ||
|
|
bda6b26896 | ||
|
|
9b2af98b0b | ||
|
|
b07bf96ad9 | ||
|
|
fb2c4f48f7 | ||
|
|
308383b093 | ||
|
|
f8f5502c40 | ||
|
|
55b45fcf2f | ||
|
|
bd471cb61b | ||
|
|
2ac38d39ea | ||
|
|
7bb8d10b22 | ||
|
|
f9fcdd6c51 | ||
|
|
3febaaa802 | ||
|
|
178cc9c5ea | ||
|
|
8d51911873 | ||
|
|
99ceb40c5f | ||
|
|
8767bfb9b0 | ||
|
|
756b088ada | ||
|
|
c962201bae | ||
|
|
2335271472 | ||
|
|
47d7927bac | ||
|
|
d15542e553 | ||
|
|
e6447f7203 | ||
|
|
fbcaf991aa | ||
|
|
cc8ec10098 | ||
|
|
92824f44e6 | ||
|
|
c4eefc13a7 | ||
|
|
d541808604 | ||
|
|
231c8a0f4c | ||
|
|
ea39587329 | ||
|
|
8f3ac75afd | ||
|
|
b40b543790 | ||
|
|
3b7921b698 | ||
|
|
6af1ee48a5 | ||
|
|
4519971a76 | ||
|
|
26295d5cf2 | ||
|
|
bfc9e26f26 | ||
|
|
d939b1e563 | ||
|
|
8343cfb278 | ||
|
|
290a28109e | ||
|
|
5bec5db5e1 | ||
|
|
a6fb0a14f0 | ||
|
|
7cb62ddc75 | ||
|
|
0f85b831b5 | ||
|
|
530e6a4399 | ||
|
|
c7700c2e16 | ||
|
|
89acc59ac3 | ||
|
|
9a25c88471 | ||
|
|
4ccbdafe8a | ||
|
|
74096e836f | ||
|
|
1c51bf8a66 | ||
|
|
a4beb9b8bd | ||
|
|
484a41e42a | ||
|
|
def62ec2a2 | ||
|
|
fae431bc39 | ||
|
|
25bc1edf31 | ||
|
|
945b90fa46 | ||
|
|
420a4e3566 | ||
|
|
f2a7833933 | ||
|
|
491252476d | ||
|
|
6ed453890d | ||
|
|
432f0eb9e5 | ||
|
|
236c068d70 | ||
|
|
3f3503e0f3 | ||
|
|
bc70c9b93c | ||
|
|
90f5ff7c74 | ||
|
|
3bfbb1a4ef | ||
|
|
1f3f1828c2 | ||
|
|
6c7064db93 | ||
|
|
9df7b35c65 | ||
|
|
5552ea2d70 | ||
|
|
6079562c90 | ||
|
|
a56453cf0a | ||
|
|
c2f394de17 | ||
|
|
878de339e5 | ||
|
|
86cfba3bc9 | ||
|
|
ad1e20abb7 | ||
|
|
2165743810 | ||
|
|
f3789bb17e | ||
|
|
8f2f5e3373 | ||
|
|
70c0dc6419 | ||
|
|
5b84213fce | ||
|
|
3ad68d6d5a | ||
|
|
627a1510dc | ||
|
|
042d4a4603 | ||
|
|
b2cfc4ef5f | ||
|
|
1c148ab6fb | ||
|
|
cf6159ffe3 | ||
|
|
f04f13723d | ||
|
|
5fd4f5f3eb | ||
|
|
512c2e5d9d | ||
|
|
da3e32f945 | ||
|
|
ae74f29b69 | ||
|
|
ecb2d31df0 | ||
|
|
2355d799f2 | ||
|
|
589f75b60d | ||
|
|
6aebbc2be4 | ||
|
|
fb4bce36cb | ||
|
|
3321f49253 | ||
|
|
5c6fd0453b | ||
|
|
179dec4c3b | ||
|
|
d59a4c63db | ||
|
|
4c3daf6e6f | ||
|
|
c220b6e0c2 | ||
|
|
e4f79dbfce | ||
|
|
d220812f5e | ||
|
|
d4a23c1fbe | ||
|
|
a57c18f63f | ||
|
|
8256af5cfa | ||
|
|
eae3668aee | ||
|
|
8d04330dc5 | ||
|
|
b7ab1df4e3 | ||
|
|
664c95e95a | ||
|
|
a8d292a0d9 | ||
|
|
6e9f6e8f7a | ||
|
|
d0604a055f | ||
|
|
193475a0b6 | ||
|
|
47b444a742 | ||
|
|
3c3b44d6de | ||
|
|
88c2b40ec7 | ||
|
|
88ffa163c4 | ||
|
|
956ed013cf | ||
|
|
061ebf06c6 | ||
|
|
e6911ce24a | ||
|
|
d9c9f6a5eb | ||
|
|
2a04628459 | ||
|
|
33b473c290 | ||
|
|
58b48c2f26 | ||
|
|
ad003a0fc4 | ||
|
|
8f9c417c04 | ||
|
|
8bbf7a849b | ||
|
|
a723bcdb46 | ||
|
|
3d0d836d92 | ||
|
|
67ea6c8066 | ||
|
|
cd1dc5b43d | ||
|
|
1d1c10f0a6 | ||
|
|
125f2a8662 | ||
|
|
4046fed60f | ||
|
|
78ca2f68cc | ||
|
|
18fcf80b4f | ||
|
|
4db28bf47e | ||
|
|
917aa9407d | ||
|
|
6fc2bc4f91 | ||
|
|
7dc6b71252 | ||
|
|
53c7f4c119 | ||
|
|
af4243aff2 | ||
|
|
afc69a3229 | ||
|
|
17dfd130b6 | ||
|
|
05101650ce | ||
|
|
715477586c | ||
|
|
fd61f82f5a | ||
|
|
8b0a6906c7 | ||
|
|
be44bf0b55 | ||
|
|
d2536379e5 | ||
|
|
08d7ad80df | ||
|
|
33a5709903 | ||
|
|
280cbc2330 | ||
|
|
746e75b9e4 | ||
|
|
11decd5889 | ||
|
|
be136d3ce4 | ||
|
|
60fd4ec516 | ||
|
|
b136480669 | ||
|
|
07bd1e03d0 | ||
|
|
75ef1341eb | ||
|
|
ed6b60429c | ||
|
|
2edb12bc18 | ||
|
|
5843e226c3 | ||
|
|
4fc73fdc35 | ||
|
|
78fbc787a4 | ||
|
|
8af71742a0 | ||
|
|
22e550820d | ||
|
|
372f81a09e | ||
|
|
22f5ba4bb1 | ||
|
|
028e247df8 | ||
|
|
4038c0649c | ||
|
|
8aee574069 | ||
|
|
c220aa746a | ||
|
|
da00dd9eec | ||
|
|
30b55ae150 | ||
|
|
6b70826961 | ||
|
|
ae8dfde69d | ||
|
|
63661a40e3 | ||
|
|
b76ee25d49 | ||
|
|
3f7c7692ab | ||
|
|
e34d896278 | ||
|
|
3e90baef02 | ||
|
|
7ed87f87e0 | ||
|
|
35af0aa4b0 | ||
|
|
370b0674bd | ||
|
|
e0c3e28809 | ||
|
|
53302ac082 | ||
|
|
9ff605e08b | ||
|
|
5593327dbc | ||
|
|
31b0510bbd | ||
|
|
beba9c029d | ||
|
|
243053659c | ||
|
|
f2d30e3680 | ||
|
|
76d881bac1 | ||
|
|
c5fd282653 | ||
|
|
d276af6fa9 | ||
|
|
ba19ce4919 | ||
|
|
d86a7a1653 | ||
|
|
f3c82f85c8 | ||
|
|
b17eaba8bf | ||
|
|
0600d6a4d8 | ||
|
|
c51fb1779b | ||
|
|
34b7a28fbe | ||
|
|
a446152631 | ||
|
|
61c2abee35 | ||
|
|
c1d520f1cf | ||
|
|
3bd9e44155 | ||
|
|
7311517d65 | ||
|
|
4568a197e7 | ||
|
|
350134b256 | ||
|
|
1350cf5675 | ||
|
|
21db2e7d4a | ||
|
|
cda08242f1 | ||
|
|
fc8936986f | ||
|
|
ec37fd065f | ||
|
|
47875a4525 | ||
|
|
61adb1e6cf | ||
|
|
907e46631c | ||
|
|
aedf8cda47 | ||
|
|
7a1f5539ed | ||
|
|
49087e9a53 | ||
|
|
a128c7f18d | ||
|
|
c6704d8129 | ||
|
|
c43b375d3b | ||
|
|
9523bab910 | ||
|
|
a8fe62a829 | ||
|
|
4708a46ec9 | ||
|
|
7a99aaa53f | ||
|
|
e54e488f80 | ||
|
|
bf471cc3fa | ||
|
|
fd8c44ba90 | ||
|
|
f9e7f1c08e | ||
|
|
8042caee57 | ||
|
|
3f3f63f411 | ||
|
|
292687ea00 | ||
|
|
aa47cb7b97 | ||
|
|
794237bf30 | ||
|
|
de3aa16aca | ||
|
|
34d001cbef | ||
|
|
21bd51aef9 | ||
|
|
f45afd1f54 | ||
|
|
c975f894ae | ||
|
|
a9b59596d8 | ||
|
|
9333fcc1d6 | ||
|
|
b3426f86a3 | ||
|
|
b3e9682511 | ||
|
|
b3af6c9920 | ||
|
|
2e9fe80e33 | ||
|
|
def389356e | ||
|
|
c5dfa65994 | ||
|
|
c9159695aa | ||
|
|
17d1786e5c | ||
|
|
5437d2db1a | ||
|
|
e390e9901e | ||
|
|
7c946c59f8 | ||
|
|
506c74de55 | ||
|
|
ab9783102e | ||
|
|
a8a8cce25f | ||
|
|
d62e869044 | ||
|
|
6dd5e0fd20 | ||
|
|
c57a29c23f | ||
|
|
2866a51326 | ||
|
|
21f5488d3b | ||
|
|
7b1a188cfe | ||
|
|
fdcf7026d2 | ||
|
|
b8ada23e2b | ||
|
|
5def813a2e | ||
|
|
551a8251f9 | ||
|
|
951ce6f9f8 | ||
|
|
c9448870fa | ||
|
|
1d552ab603 | ||
|
|
e39d01e139 | ||
|
|
d4805bc709 | ||
|
|
35db2f61f7 | ||
|
|
8af1229f65 | ||
|
|
9aa6f5b1f7 | ||
|
|
da8e374443 | ||
|
|
95851e8f52 | ||
|
|
d2350b6786 | ||
|
|
08a2abb713 | ||
|
|
ac62f54aa5 | ||
|
|
fb189a3ce4 | ||
|
|
7e41938317 | ||
|
|
d90b28a399 | ||
|
|
90f5635478 | ||
|
|
acf8724402 | ||
|
|
f1c623c14b | ||
|
|
ee40ad59f2 | ||
|
|
845fac8adf | ||
|
|
896695b30f | ||
|
|
fbfa88739d | ||
|
|
ea191602da | ||
|
|
564287eb21 | ||
|
|
28790197aa | ||
|
|
1db66fd43d | ||
|
|
8d506db73c | ||
|
|
c288d4bd0b | ||
|
|
39247ac7ef | ||
|
|
47b5b10bf4 | ||
|
|
ad1cf15d7c | ||
|
|
6339d9f3cd | ||
|
|
fc36a76fc0 | ||
|
|
18d7fd4c7d | ||
|
|
76e44a1043 | ||
|
|
4c0d107562 | ||
|
|
d359120d81 | ||
|
|
278671deec | ||
|
|
e28360f86a | ||
|
|
75cef03644 | ||
|
|
33be6946f7 | ||
|
|
7f23b088a4 | ||
|
|
c56f9f3277 | ||
|
|
6198d5abf3 | ||
|
|
3f8c51cc01 | ||
|
|
b693ed4071 | ||
|
|
5621f5cdb0 | ||
|
|
83f2097f40 | ||
|
|
879de1d95e | ||
|
|
ec018f40aa | ||
|
|
0866753617 | ||
|
|
5f66f2c4a9 | ||
|
|
40f08a7f8b | ||
|
|
c274337fed | ||
|
|
7d01977a89 | ||
|
|
d058c1d4fc | ||
|
|
1a28155f1c | ||
|
|
7ca7d8e045 | ||
|
|
ec98ddc2df | ||
|
|
72b520745a | ||
|
|
9b4f0ca951 | ||
|
|
a761df80db | ||
|
|
9059904c1a | ||
|
|
568e728d20 | ||
|
|
e56d414357 | ||
|
|
668f8ccdbf | ||
|
|
9281be57fc | ||
|
|
d1e58eb95e | ||
|
|
9f5a15f00a | ||
|
|
3aa47043c9 | ||
|
|
8532db70d2 | ||
|
|
f8106a48ae | ||
|
|
2813934d21 | ||
|
|
defb793b0b | ||
|
|
1fd2162d4f | ||
|
|
094a1bd5ee | ||
|
|
2cf7a5f281 | ||
|
|
2ed451130c | ||
|
|
4d1f88627a | ||
|
|
ed7e51480b | ||
|
|
3e91be9a4d | ||
|
|
3e9bfad78f | ||
|
|
fd34fce3c1 | ||
|
|
0cf684300d | ||
|
|
fe1c808dfd | ||
|
|
aa8c67061c | ||
|
|
8e8de1eeec | ||
|
|
b9fb284a52 | ||
|
|
5efe447861 | ||
|
|
b9ab491cbb | ||
|
|
fb8d76922a | ||
|
|
1a97986bd2 | ||
|
|
a2bb650518 | ||
|
|
f4398a0867 | ||
|
|
b44a1ce939 | ||
|
|
59fb9b2202 | ||
|
|
86ba7333ad | ||
|
|
7e7eac0c75 | ||
|
|
ad50017235 | ||
|
|
aeb2e3a715 | ||
|
|
3d10282567 | ||
|
|
9e89666a24 | ||
|
|
953cf65223 | ||
|
|
371eb76b2b | ||
|
|
75c63704f6 | ||
|
|
16dab2c9f1 | ||
|
|
7fdaf62684 | ||
|
|
312c11b8da | ||
|
|
2ef4c28401 | ||
|
|
27dc8ffb45 | ||
|
|
c5296cd7e0 | ||
|
|
029b408915 | ||
|
|
4fdff81762 | ||
|
|
f3e4f9d311 | ||
|
|
74a667bbef | ||
|
|
7f8263318e | ||
|
|
e0fc832621 | ||
|
|
34aea14ff9 | ||
|
|
284d9ea22b | ||
|
|
1e2d86f054 | ||
|
|
aa81350b6f | ||
|
|
e02d298ff4 | ||
|
|
67f172b741 | ||
|
|
e97fe9de86 | ||
|
|
770bf15342 | ||
|
|
38b1556ee0 | ||
|
|
0af33850a6 | ||
|
|
edafa68414 | ||
|
|
f78debe768 | ||
|
|
4f0f7876a8 | ||
|
|
2a4376b7cb | ||
|
|
1d3d2a0bf9 | ||
|
|
bbddb0a036 | ||
|
|
a8e6aedd04 | ||
|
|
1b9fd6276e | ||
|
|
e229ab191f | ||
|
|
42084ea0cb | ||
|
|
35468bb417 | ||
|
|
9eb20e37c8 | ||
|
|
fa819064ef | ||
|
|
eb89c00bd5 | ||
|
|
0491bd1a76 | ||
|
|
802ae5b712 | ||
|
|
38a393d605 | ||
|
|
ba8b91ad29 | ||
|
|
4b88122ab2 | ||
|
|
0a9b0c107f | ||
|
|
ff1bc03361 | ||
|
|
3967862f10 | ||
|
|
70ab9b4b1b | ||
|
|
50682d73dc | ||
|
|
3926a61528 | ||
|
|
9082cd5b17 | ||
|
|
1c24f9f473 | ||
|
|
0d1c63f0fd | ||
|
|
29a4c66364 | ||
|
|
73bb1f3046 | ||
|
|
86169bbf7c | ||
|
|
bde65bf056 | ||
|
|
0ab7d3ca63 | ||
|
|
644a54e441 | ||
|
|
62ff25f96d | ||
|
|
dabb4402a7 | ||
|
|
4ae9c42cc6 | ||
|
|
be3d49163d | ||
|
|
0cf39a07f5 | ||
|
|
8697a79df0 | ||
|
|
f5e6a1f3de | ||
|
|
7a0ec5f51c | ||
|
|
dfcda95642 | ||
|
|
047ae7b033 | ||
|
|
fad681430e | ||
|
|
4f1af3709e | ||
|
|
2681a8196b | ||
|
|
25e7f6c5e8 | ||
|
|
a67a538dfd | ||
|
|
6dd7044786 | ||
|
|
16eaba1774 | ||
|
|
054805349c | ||
|
|
ec661d2c15 | ||
|
|
58533c495c | ||
|
|
5c1c68c553 | ||
|
|
a9c01926e8 | ||
|
|
8ef52d87f5 | ||
|
|
35296f9f82 | ||
|
|
898759b3b9 | ||
|
|
7cbd067daf | ||
|
|
3b6f5353fd | ||
|
|
47bc6b0411 | ||
|
|
b56ff0c31c | ||
|
|
5376ce0909 | ||
|
|
807df2ac55 | ||
|
|
2727f92a53 | ||
|
|
1297114b3e | ||
|
|
1ba35f0bc3 | ||
|
|
f5a6f51abc | ||
|
|
8431452f73 | ||
|
|
27aff76b20 | ||
|
|
e767e00a82 | ||
|
|
aab17ca79a | ||
|
|
94876d1019 | ||
|
|
7d7726e345 | ||
|
|
d16a65ebd7 | ||
|
|
e802d0098f | ||
|
|
62fd24bcfb | ||
|
|
02185145c9 | ||
|
|
4acb0f15ad | ||
|
|
c8d0b4dd3f | ||
|
|
4802bce06d | ||
|
|
5bec0ee6b6 | ||
|
|
a938a3a350 | ||
|
|
04567817b2 | ||
|
|
061a65f730 | ||
|
|
470894577d | ||
|
|
7db4da4154 | ||
|
|
78b5f6ef5c | ||
|
|
340f478bfa | ||
|
|
2108af8f36 | ||
|
|
1728b6c8bf | ||
|
|
bbfd514342 | ||
|
|
e42ae65355 | ||
|
|
a58298bb01 | ||
|
|
0e8e00ddd7 | ||
|
|
e492dfe12c | ||
|
|
7f533c7121 | ||
|
|
7e4c189136 | ||
|
|
a591b657fa | ||
|
|
7ec8fd2003 | ||
|
|
20e22f015a | ||
|
|
cec781ad72 | ||
|
|
9faf42c5da | ||
|
|
bf895820b3 | ||
|
|
f4180584d6 | ||
|
|
66c653b6f5 | ||
|
|
5f596fb4fd | ||
|
|
a1306d9eb4 | ||
|
|
2195bf2307 | ||
|
|
c4296121b1 | ||
|
|
3871196246 | ||
|
|
c626b1599e | ||
|
|
129fd7fdad | ||
|
|
49fca0da2b | ||
|
|
8c00a0bc00 | ||
|
|
45cea4fc4b | ||
|
|
13f8b65e08 | ||
|
|
6ed28c5fb8 | ||
|
|
b534fbb364 | ||
|
|
1cfcf1ded0 | ||
|
|
87a01bbe0a | ||
|
|
5a9477a402 | ||
|
|
bd97e817c2 | ||
|
|
1fcc049db7 | ||
|
|
92fdaed81b | ||
|
|
feee0e62cc | ||
|
|
3ee9e65f2d | ||
|
|
f004451740 | ||
|
|
9964285cae | ||
|
|
6b25a9f00c | ||
|
|
99c870c5cc | ||
|
|
e520cf949a | ||
|
|
96aac79eb2 | ||
|
|
11d0103f0d | ||
|
|
c7dcb9144c | ||
|
|
8ea4216672 | ||
|
|
79640283f3 | ||
|
|
1347c76594 | ||
|
|
7d95fb7169 | ||
|
|
d710205355 | ||
|
|
afc5f5a13f | ||
|
|
d91e91128c | ||
|
|
3d73e92058 | ||
|
|
aa8778a0fb | ||
|
|
51cc9cd13e | ||
|
|
c3ebd529c1 | ||
|
|
322d310843 | ||
|
|
09f5c0ffc1 | ||
|
|
7d6ed94e2d | ||
|
|
1292f40710 | ||
|
|
830fa40bb7 | ||
|
|
25f8b787b6 | ||
|
|
ca6600bebf | ||
|
|
100babc11b | ||
|
|
ef00b0d14d | ||
|
|
359f6c82c5 | ||
|
|
a376c37a91 | ||
|
|
16f610bfdf | ||
|
|
02e41ae7ce | ||
|
|
ae9b096ab0 | ||
|
|
84d0b5e35d | ||
|
|
a0fd46edb8 | ||
|
|
b681a86646 | ||
|
|
6c3c068485 | ||
|
|
caf431d22e | ||
|
|
2044a649ba | ||
|
|
7def7af8ff | ||
|
|
e85121f35a | ||
|
|
dbfc108fec | ||
|
|
4e01de183f | ||
|
|
e8612833c3 | ||
|
|
953b500fa0 | ||
|
|
1aa15b24a2 | ||
|
|
b6d720791a | ||
|
|
21c6b56a27 | ||
|
|
b20838531c | ||
|
|
2c866f3c10 | ||
|
|
3d510a338e | ||
|
|
95c4438091 | ||
|
|
76e887e3fb | ||
|
|
72b1a18744 | ||
|
|
679a27a5ff | ||
|
|
55241864bc | ||
|
|
a8a960d10b | ||
|
|
4ce3ff52bf | ||
|
|
10be5d5a7c | ||
|
|
711d7b122d | ||
|
|
ea758e9dca | ||
|
|
ee379a512a | ||
|
|
ea519c66f2 | ||
|
|
51bff9f1f0 | ||
|
|
aeb9777972 | ||
|
|
3b61aedc66 | ||
|
|
cb2c9616d7 | ||
|
|
a35b9b1279 | ||
|
|
0ba23ca278 | ||
|
|
2a67b5b827 | ||
|
|
0918419191 | ||
|
|
a4481bfd33 | ||
|
|
fcf24a40e2 | ||
|
|
59a70e0077 | ||
|
|
5037941897 | ||
|
|
3dfbe8e49c | ||
|
|
1cd34736ed | ||
|
|
1b6e4d4300 | ||
|
|
b598f8f972 | ||
|
|
7c145c7b1e | ||
|
|
38030c348d | ||
|
|
625aa3f1bd | ||
|
|
8e337647a2 | ||
|
|
7cfc8dc00e | ||
|
|
30195b6c9e | ||
|
|
a628cb6775 | ||
|
|
531ce433fe | ||
|
|
849097921a | ||
|
|
c8af0d8a38 | ||
|
|
9a1ab6ee0b | ||
|
|
04615b3a17 | ||
|
|
70ff5c2e94 | ||
|
|
b82d51e3cc | ||
|
|
4d26acfd66 | ||
|
|
42f976c82a | ||
|
|
6477d13bea | ||
|
|
ba1e106aaf | ||
|
|
5f9fa481cb | ||
|
|
84554ae71f | ||
|
|
5f9c434aea | ||
|
|
a0c3140e6d | ||
|
|
440fa263c2 | ||
|
|
f5b10564ca | ||
|
|
eb98597220 | ||
|
|
6992d52767 | ||
|
|
3a31d54600 | ||
|
|
3d5b54515a | ||
|
|
b9f1741ea1 | ||
|
|
0fa5273c56 | ||
|
|
916b7cfc44 | ||
|
|
317efc182a | ||
|
|
4bcfcfc4f8 | ||
|
|
02b3b9a4d7 | ||
|
|
57d0fc3774 | ||
|
|
2d1bca11df | ||
|
|
ac0de93139 | ||
|
|
9e39860868 | ||
|
|
b13a4d331c | ||
|
|
065cd5b7b7 | ||
|
|
1d34b5389e | ||
|
|
23df7cc90d | ||
|
|
c9a5d5a406 | ||
|
|
a5d2c86e59 | ||
|
|
f095cc760b | ||
|
|
c256b0675d | ||
|
|
a7af12d026 | ||
|
|
d7995e9be4 | ||
|
|
af2f4b66b9 | ||
|
|
15464aa10c | ||
|
|
7cfc02e7d9 | ||
|
|
c6b0a50e4e | ||
|
|
ac4f093590 | ||
|
|
a03746145b | ||
|
|
3a3b84af61 | ||
|
|
3ba68bf5c5 | ||
|
|
42daf75124 | ||
|
|
454e9c1d8e | ||
|
|
ee9fb4aeec | ||
|
|
ba2c224d5d | ||
|
|
515eab7dad | ||
|
|
18b0e01a3e | ||
|
|
57c6414d1c | ||
|
|
fdfcaaeb39 | ||
|
|
561b91894c | ||
|
|
aea01a3937 | ||
|
|
9b34178332 | ||
|
|
eced8facb8 | ||
|
|
074e13325e | ||
|
|
d7378f87c5 | ||
|
|
4091c16e97 | ||
|
|
56408b37ac | ||
|
|
fd18eeb62c | ||
|
|
cbd4ed311f | ||
|
|
8122703e3b | ||
|
|
2920b6143b | ||
|
|
8870463afc | ||
|
|
f8972f812a | ||
|
|
23fa2324a8 | ||
|
|
0df1082778 | ||
|
|
6647b8da3c | ||
|
|
f0b9411e19 | ||
|
|
5c1cc5cdd7 | ||
|
|
df9eb60ffa | ||
|
|
9893792768 | ||
|
|
379033aae4 | ||
|
|
193ab52a35 | ||
|
|
9eb6662db8 | ||
|
|
5e48146f59 | ||
|
|
627702a3a1 | ||
|
|
d9ee6de3d0 | ||
|
|
14df5a6d5f | ||
|
|
a809fb8c41 | ||
|
|
2738107b1e | ||
|
|
e53f26ca13 | ||
|
|
d3e80d62e5 | ||
|
|
b7aa20ed88 | ||
|
|
26da4a1aa3 | ||
|
|
4345a629f1 | ||
|
|
5bb4ca7822 | ||
|
|
79ee06f518 | ||
|
|
bc2435efe9 | ||
|
|
504a29f496 | ||
|
|
0948e9db9d | ||
|
|
c298464314 | ||
|
|
67a00a799c | ||
|
|
589c9e4445 | ||
|
|
d1925c8935 | ||
|
|
2923658bb9 | ||
|
|
c333da60d6 | ||
|
|
cf62db1329 | ||
|
|
625a39a892 | ||
|
|
ffc93a77a9 | ||
|
|
0cee2b6a97 | ||
|
|
a24ec2c433 | ||
|
|
e5727462e7 | ||
|
|
c1cb4e192f | ||
|
|
b0c12063a1 | ||
|
|
e4b1e87b9a | ||
|
|
6e136bf83f | ||
|
|
36504d7123 | ||
|
|
8ac4615117 | ||
|
|
7ed04ed3b0 | ||
|
|
c5b2440488 | ||
|
|
37ce236a43 | ||
|
|
31ab55558c | ||
|
|
c51830feec | ||
|
|
291e91891a | ||
|
|
307ede3183 | ||
|
|
d4a20c71c2 | ||
|
|
ec68068b97 | ||
|
|
d9c1445542 | ||
|
|
26f4d05e87 | ||
|
|
b6c941fc3e | ||
|
|
cedcc845d5 | ||
|
|
02a3ed2e0e | ||
|
|
a729daa3d3 | ||
|
|
ba23cceae7 | ||
|
|
d3e9083869 | ||
|
|
09d92ebab6 | ||
|
|
2777bedb51 | ||
|
|
f181e1d237 | ||
|
|
8f7dc43e1f | ||
|
|
249c2f1e69 | ||
|
|
6a4686d17b | ||
|
|
3529943bb0 | ||
|
|
1c63f4bf46 | ||
|
|
380177b777 | ||
|
|
bc22c8d2b1 | ||
|
|
c5cdeaef07 | ||
|
|
a1fb4a2487 | ||
|
|
d34593928d | ||
|
|
5184f8e6a3 | ||
|
|
ea358c239f | ||
|
|
2cf90cc60b | ||
|
|
db24d3e53e | ||
|
|
6a0caebe2e | ||
|
|
ac85946e0f | ||
|
|
fc55a8e49b | ||
|
|
b093aa9fa6 | ||
|
|
e60e9fa3dd | ||
|
|
29bcbf042f | ||
|
|
19719ecac1 | ||
|
|
4d288ad2ee | ||
|
|
eccaf4acff | ||
|
|
c2a2ef212e | ||
|
|
47ab76c7e3 | ||
|
|
dd30b96210 | ||
|
|
3e053784c2 | ||
|
|
7b97cd0cf1 | ||
|
|
809767883b | ||
|
|
d8e38665f1 | ||
|
|
f25ea8f056 | ||
|
|
7c0ba80530 | ||
|
|
6eb083bebe | ||
|
|
3a822f7bc4 | ||
|
|
9a2268a54e | ||
|
|
611171371b | ||
|
|
e1d4fe36f4 | ||
|
|
079d8c19a4 | ||
|
|
418c6dd7f8 | ||
|
|
08304d5064 | ||
|
|
5cdeb28e6b | ||
|
|
c5efd17a9c | ||
|
|
6276ead820 | ||
|
|
b5cdc12478 | ||
|
|
ff511b8968 | ||
|
|
037a84c46f | ||
|
|
3d0f29a172 | ||
|
|
85c239bc18 | ||
|
|
1fb6a39d9d | ||
|
|
9aeac93c9a | ||
|
|
6188076fe6 | ||
|
|
0fc7fd3411 | ||
|
|
078c8d23d5 | ||
|
|
8c845c77c1 | ||
|
|
cb373dae59 | ||
|
|
0a42a889ec | ||
|
|
e8f5080f35 | ||
|
|
00f73957dd | ||
|
|
3a0480e0d8 | ||
|
|
0cee7bcdc8 | ||
|
|
30401df4b7 | ||
|
|
f5d1e98491 | ||
|
|
8f9b2d22c1 | ||
|
|
2b17767b53 | ||
|
|
00a7094802 | ||
|
|
6eaf44e397 | ||
|
|
24b52c77fe | ||
|
|
7a9b906925 | ||
|
|
53bef264e7 | ||
|
|
75b74c4ab3 | ||
|
|
ca3a9aecd6 | ||
|
|
8f7902af94 | ||
|
|
8df3fa31fb | ||
|
|
ff7a1b861e | ||
|
|
d6a82e5c56 | ||
|
|
f714e6fa14 | ||
|
|
6817133819 | ||
|
|
76670e47a1 | ||
|
|
961b24a019 | ||
|
|
068de42e83 | ||
|
|
75f9c0a892 | ||
|
|
3a1b301b32 | ||
|
|
9bb1d99ae4 | ||
|
|
cf052b5bd4 | ||
|
|
65a18fd270 | ||
|
|
d4775cc970 | ||
|
|
07ee5b42f7 | ||
|
|
d5048fea10 | ||
|
|
f3149068e3 | ||
|
|
f5d3a5132a | ||
|
|
70e0ecfef5 | ||
|
|
631e0e0f3f | ||
|
|
b66287cbb9 | ||
|
|
9e6d38bc1a | ||
|
|
6cbe4aeec4 | ||
|
|
e219f56ff4 | ||
|
|
e16b29c566 | ||
|
|
1b3e3ede4d | ||
|
|
0a601f10c0 | ||
|
|
56ce4ab0f2 | ||
|
|
1f6c2f5a0a | ||
|
|
5f3ddd9389 | ||
|
|
fd0c9823fa | ||
|
|
d23588a217 | ||
|
|
ca53b8afca | ||
|
|
053bc03a54 | ||
|
|
78dc70bcdc | ||
|
|
ea00c044d3 | ||
|
|
11cd2b086e | ||
|
|
ae6f0b5505 | ||
|
|
247d1a9aa6 | ||
|
|
6273c2395d | ||
|
|
1396525251 | ||
|
|
de46afff1c | ||
|
|
54fd54d3f0 | ||
|
|
0b41eea2bb | ||
|
|
63207d370b | ||
|
|
e92d88df8b | ||
|
|
a9e6d3665f | ||
|
|
2453927ba3 | ||
|
|
94e6cb02f3 | ||
|
|
9b2b909139 | ||
|
|
c9a3f349ad | ||
|
|
439b539dcb | ||
|
|
ab7f0a2e95 | ||
|
|
b50dbf3ff0 | ||
|
|
d3f1f833ab | ||
|
|
3df099a0e3 | ||
|
|
54dccd11ef | ||
|
|
77ec847e20 | ||
|
|
8bf5fcb8ec | ||
|
|
ff41d76501 | ||
|
|
d9772ed5c6 | ||
|
|
8dba1b37c7 | ||
|
|
8b017dc647 | ||
|
|
c8ee05d671 | ||
|
|
40216e310d | ||
|
|
6a6f99e9ae | ||
|
|
14ad7cf3ac | ||
|
|
ce327dca42 | ||
|
|
ded7670ac3 | ||
|
|
5bf1ec0fd9 | ||
|
|
306c0505a6 | ||
|
|
325cb69a65 | ||
|
|
c3df9b6484 | ||
|
|
db6bfc00fc | ||
|
|
51b5d7a939 | ||
|
|
9490f62dee | ||
|
|
1661dc9ef7 | ||
|
|
aa7731dc5d | ||
|
|
4150564538 | ||
|
|
38043ebade | ||
|
|
9a694a8d3d | ||
|
|
f6997f54eb | ||
|
|
2631c18484 | ||
|
|
c0d819b97a | ||
|
|
972d32c969 | ||
|
|
7f0e51f92f | ||
|
|
6f78c2288f | ||
|
|
b331ba42b8 | ||
|
|
fb3efba204 | ||
|
|
58e09dcff4 | ||
|
|
747055f60e | ||
|
|
aa07c64440 | ||
|
|
6b9f1d8414 | ||
|
|
b4bc1d292a | ||
|
|
c98553d19b | ||
|
|
1ace31216f | ||
|
|
495cec930c | ||
|
|
44ad0ca1ea | ||
|
|
4ba8e9e99d | ||
|
|
1eb85b366d | ||
|
|
3821ae441f | ||
|
|
b01e5f7366 | ||
|
|
b375a543ec | ||
|
|
2c9d848af5 | ||
|
|
8d65c5c2c0 | ||
|
|
0af731b6a2 | ||
|
|
9d870b2c45 | ||
|
|
82abf87f75 | ||
|
|
81ef023b37 | ||
|
|
776fffb2dc | ||
|
|
cfd5d9e209 | ||
|
|
23716ff729 | ||
|
|
18921a4f14 | ||
|
|
569c42724b | ||
|
|
18abf7d644 | ||
|
|
12efdb9fe4 | ||
|
|
fdf884036d | ||
|
|
998018af3e | ||
|
|
cae71f3d60 | ||
|
|
f7e43fab35 | ||
|
|
4f7a4ac1e2 | ||
|
|
5fc7b34ce7 | ||
|
|
cbf73b2290 | ||
|
|
f344a8166e | ||
|
|
9532317928 | ||
|
|
4cf85c462d | ||
|
|
6fe2964f37 | ||
|
|
2108a902c2 | ||
|
|
1520eec677 | ||
|
|
e3ba3a3ea4 | ||
|
|
1c104f9358 | ||
|
|
f8b9536eb8 | ||
|
|
0e34628c6f | ||
|
|
614bc0b254 | ||
|
|
cc6eafdb09 | ||
|
|
df4cbdcc09 | ||
|
|
f5e53a9a4c | ||
|
|
46f654fcee | ||
|
|
aa3a3f4a17 | ||
|
|
59b3b6cc02 | ||
|
|
6d4b8e8401 | ||
|
|
9ac7a60835 | ||
|
|
790dbd381d | ||
|
|
ac6c8a985b | ||
|
|
fea22e0409 | ||
|
|
ac7d595a2d | ||
|
|
819e412e09 | ||
|
|
bdfec68340 | ||
|
|
0b7ef6c8fb | ||
|
|
9880ce977a | ||
|
|
e88f924274 | ||
|
|
fe53dc88e5 | ||
|
|
fdfd6558f2 | ||
|
|
6d9e3dcad1 | ||
|
|
20c4468edd | ||
|
|
7f80e650b1 | ||
|
|
1995837b3f | ||
|
|
88c0617279 | ||
|
|
b8b1bed7ed | ||
|
|
03c6e74c4d | ||
|
|
71639de5ec | ||
|
|
39310cd4af | ||
|
|
582352b2d2 | ||
|
|
f2c271f66d | ||
|
|
d99e1f519e | ||
|
|
c53e2843be | ||
|
|
f438ce04fb | ||
|
|
8be5952b92 | ||
|
|
cfc8610a16 | ||
|
|
ad8a5d9870 | ||
|
|
75cb4e392d | ||
|
|
ec9dd14cb4 | ||
|
|
6e8c852bfa | ||
|
|
f204979ada | ||
|
|
6275327b0a | ||
|
|
f1126e63b1 | ||
|
|
7157ed08f9 | ||
|
|
d33627f1fe | ||
|
|
c2611cfeaf | ||
|
|
056614fa6b | ||
|
|
4c19226959 | ||
|
|
d41a31f614 | ||
|
|
d83dc07368 | ||
|
|
f30d8748f1 | ||
|
|
b4710c292f | ||
|
|
c3cd399087 | ||
|
|
f8a2c94903 | ||
|
|
747b081809 | ||
|
|
55903dab11 | ||
|
|
a6c094f9aa | ||
|
|
b9b978e452 | ||
|
|
bad24f8a85 | ||
|
|
57cffbc4c8 | ||
|
|
86d71bf37f | ||
|
|
c6dd169916 | ||
|
|
cbc85b7a09 | ||
|
|
016af0f419 | ||
|
|
1903d44bf8 | ||
|
|
351c270e0e | ||
|
|
ab3d9f89ec | ||
|
|
97220a27df | ||
|
|
0310fdf99f | ||
|
|
f1a535b7d4 | ||
|
|
6879d8b6ce | ||
|
|
046c5f69ac | ||
|
|
40687f8cc0 | ||
|
|
b8f27ecfd0 | ||
|
|
16dd2ef9d0 | ||
|
|
aaff2f486f | ||
|
|
d9a62373b8 | ||
|
|
bef4f6a0db | ||
|
|
a66c282ee5 | ||
|
|
2d50cc2b2d | ||
|
|
82f1182503 | ||
|
|
360bed8697 | ||
|
|
e4a833b59e | ||
|
|
f8809d5d62 | ||
|
|
8adffb8714 | ||
|
|
9b6649174c | ||
|
|
7f03f7c844 | ||
|
|
843596944f | ||
|
|
0f6c5fe49d | ||
|
|
b94c4e775a | ||
|
|
fc97e88928 | ||
|
|
5b47e6130c | ||
|
|
86edc18f21 | ||
|
|
5ee36e786a | ||
|
|
c4e2e5da8d | ||
|
|
2c14ec0abd | ||
|
|
5b782fd04c | ||
|
|
bdd579ad2d | ||
|
|
d94fa8d2de | ||
|
|
c0f1d4e2da | ||
|
|
e82f49bdab | ||
|
|
b65d48541d | ||
|
|
e2f68194d7 | ||
|
|
bd6f8f4ae6 | ||
|
|
9d4cce93fc | ||
|
|
28ce18f8f0 | ||
|
|
c060d1a36e | ||
|
|
3a05dcf659 | ||
|
|
291ed38a5a | ||
|
|
411d689a48 | ||
|
|
df279f879f | ||
|
|
9e58bccd49 | ||
|
|
092f3b4e24 | ||
|
|
005bb77f55 | ||
|
|
258840d198 | ||
|
|
c483da9efe | ||
|
|
4b3f202c6f | ||
|
|
07571465a7 | ||
|
|
7d7590b914 | ||
|
|
f965961401 | ||
|
|
814ea7f81a | ||
|
|
91a0790695 | ||
|
|
2b8a6c6a89 | ||
|
|
55648d3452 | ||
|
|
60316d1b75 | ||
|
|
7826608384 | ||
|
|
de151c8a9d | ||
|
|
b0a1effaf9 | ||
|
|
fd52d124dd | ||
|
|
b772864f2d | ||
|
|
cdb10cfc1f | ||
|
|
da7f0b7dce | ||
|
|
25461f7ca8 | ||
|
|
da7df9f865 | ||
|
|
00c5dba210 | ||
|
|
f30219d85a | ||
|
|
223e75d326 | ||
|
|
46d4f4a481 | ||
|
|
419ebeafa8 | ||
|
|
4be7917d41 | ||
|
|
191686dffe | ||
|
|
fa791ed4ab | ||
|
|
e29f8a9657 | ||
|
|
e66f6583b1 | ||
|
|
399d90e6cd | ||
|
|
ec2eaae0d3 | ||
|
|
12389b1e0d | ||
|
|
ff6e5a20c3 | ||
|
|
7d6526f962 | ||
|
|
b8fad8452b | ||
|
|
5e9107f376 | ||
|
|
7faaff304a | ||
|
|
94acbf6005 | ||
|
|
a65c21acba | ||
|
|
bfbe4ce1b8 | ||
|
|
aaa636f357 | ||
|
|
d0241ba7ee | ||
|
|
b2230225cc | ||
|
|
e063718e4f | ||
|
|
03436a670f | ||
|
|
8be508de5d | ||
|
|
9370a86246 | ||
|
|
6c5237cdd8 | ||
|
|
2cf5ecd212 | ||
|
|
8e9125772e | ||
|
|
62e863dec0 | ||
|
|
e00098ea6a | ||
|
|
f12bd1b51f | ||
|
|
93942a74cf | ||
|
|
401fd04379 | ||
|
|
4fd54f1692 | ||
|
|
9565994e5c | ||
|
|
6876e1a38a | ||
|
|
7a8e737802 | ||
|
|
9f968611b1 | ||
|
|
3bd4f9499a | ||
|
|
069ef7b12c | ||
|
|
9d6207f80e | ||
|
|
22b493996c | ||
|
|
5284717570 | ||
|
|
96d11e4ffa | ||
|
|
a156247dc3 | ||
|
|
0e4a88d538 | ||
|
|
a2d1cdfc13 | ||
|
|
dcb0c490ba | ||
|
|
7687bdf751 | ||
|
|
85ef04abc4 | ||
|
|
69ae59b933 | ||
|
|
c5e538421e | ||
|
|
d7b1689047 | ||
|
|
bd8396ba6e | ||
|
|
859aff590b | ||
|
|
73d8a844d9 | ||
|
|
5db395799d | ||
|
|
ad1ecf21c3 | ||
|
|
497ca2a5cd | ||
|
|
4e578ed95e | ||
|
|
8b258c8828 | ||
|
|
148117edcb | ||
|
|
a57358f311 | ||
|
|
ee0ad1126d | ||
|
|
2db0002ffd | ||
|
|
a74e07c491 | ||
|
|
8a12abf795 | ||
|
|
62c7cfcd10 | ||
|
|
9257d6982f | ||
|
|
58da1cd489 | ||
|
|
69078aaf49 | ||
|
|
33aa0737a4 | ||
|
|
8b47608cc0 | ||
|
|
d25014779d | ||
|
|
5f0380f547 | ||
|
|
bdbd392c6e | ||
|
|
d53a594971 | ||
|
|
2604da4b04 | ||
|
|
77bc8029bb | ||
|
|
11e4a4cad8 | ||
|
|
e37f634a38 | ||
|
|
0a18502c2c | ||
|
|
b8c81c72e4 | ||
|
|
37c2219b87 | ||
|
|
62f6f3910a | ||
|
|
b450e6998e | ||
|
|
10800a0896 | ||
|
|
cf61525130 | ||
|
|
24db65cd90 | ||
|
|
daf7e66ec3 | ||
|
|
18c9a1793e | ||
|
|
2b0f235e23 | ||
|
|
24eca428a6 | ||
|
|
677b0b7055 | ||
|
|
10bd72ad51 | ||
|
|
4ddc98b2b6 | ||
|
|
c1f18f5ecf | ||
|
|
d16a88e731 | ||
|
|
39d0d640e6 | ||
|
|
bfb55f0e1d | ||
|
|
44b07712d5 | ||
|
|
c8ae9e4dcc | ||
|
|
52d1412e4c | ||
|
|
b820130636 | ||
|
|
7d4ecd4272 | ||
|
|
f907b589e1 | ||
|
|
a9d80d73d6 | ||
|
|
fe0ad9c9c2 | ||
|
|
dfa8ce1ad4 | ||
|
|
1ea5dad728 | ||
|
|
a2b81c9378 | ||
|
|
01b0b1602b | ||
|
|
7d4aef0f3b | ||
|
|
5485893c8b | ||
|
|
124543f4a7 | ||
|
|
e84488e126 | ||
|
|
ed2cf5174d | ||
|
|
d0d0a6c224 | ||
|
|
b04f4f0001 | ||
|
|
c822920c36 | ||
|
|
e6354236c1 | ||
|
|
068948e1a2 | ||
|
|
f8bf7ba010 | ||
|
|
586105907d | ||
|
|
abd56ffee3 | ||
|
|
5678b4d067 | ||
|
|
1abb940318 | ||
|
|
15af5bfae7 | ||
|
|
d550a016a9 | ||
|
|
9c8df27bf1 | ||
|
|
1ce0176ab6 | ||
|
|
490662152a |
@@ -7,11 +7,11 @@ root = true
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
# 2 space indentation
|
||||
[*.{yaml,yml}]
|
||||
[*.{yaml,yml,vue,js,css}]
|
||||
indent_size = 2
|
||||
|
||||
79
.github/workflows/build.yaml
vendored
Normal file
79
.github/workflows/build.yaml
vendored
Normal file
@@ -0,0 +1,79 @@
|
||||
name: Release Builds
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
permissions: {}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
permissions:
|
||||
contents: write # for release creation (svenstaro/upload-release-action)
|
||||
|
||||
if: "!github.event.release.prerelease"
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Extract Tag
|
||||
run: echo "PACKAGE_VERSION=${{ github.ref }}" >> $GITHUB_ENV
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: 7.3
|
||||
extensions: opcache, gd
|
||||
tools: composer:v2
|
||||
coverage: none
|
||||
env:
|
||||
COMPOSER_TOKEN: ${{ secrets.GLOBAL_TOKEN }}
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
sudo apt-get -y update -qq < /dev/null > /dev/null
|
||||
sudo apt-get -y install -qq git zip < /dev/null > /dev/null
|
||||
|
||||
- name: Retrieval of Builder Scripts
|
||||
run: |
|
||||
# Real Grav URL
|
||||
curl --silent -H "Authorization: token ${{ secrets.GLOBAL_TOKEN }}" -H "Accept: application/vnd.github.v3.raw" ${{ secrets.BUILD_SCRIPT_URL }} --output build-grav.sh
|
||||
|
||||
# Development Local URL
|
||||
# curl ${{ secrets.BUILD_SCRIPT_URL }} --output build-grav.sh
|
||||
|
||||
- name: Grav Builder
|
||||
run: |
|
||||
bash ./build-grav.sh
|
||||
|
||||
- name: Upload packages to release
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
tag: ${{ env.PACKAGE_VERSION }}
|
||||
file: ./grav-dist/*.zip
|
||||
overwrite: true
|
||||
file_glob: true
|
||||
|
||||
slack:
|
||||
permissions:
|
||||
actions: read # to list jobs for workflow run (technote-space/workflow-conclusion-action)
|
||||
|
||||
name: Slack
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
if: always()
|
||||
steps:
|
||||
- uses: technote-space/workflow-conclusion-action@v2
|
||||
- uses: 8398a7/action-slack@v3
|
||||
with:
|
||||
status: failure
|
||||
fields: repo,message,author,action
|
||||
icon_emoji: ':octocat:'
|
||||
author_name: 'Github Action Build'
|
||||
text: '🚚 Automated Build Failure'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GLOBAL_TOKEN }}
|
||||
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
if: env.WORKFLOW_CONCLUSION == 'failure'
|
||||
76
.github/workflows/tests.yaml
vendored
Normal file
76
.github/workflows/tests.yaml
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
name: PHP Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ develop ]
|
||||
pull_request:
|
||||
branches: [ develop ]
|
||||
|
||||
permissions:
|
||||
contents: read # to fetch code (actions/checkout)
|
||||
|
||||
jobs:
|
||||
|
||||
unit-tests:
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php: [8.2, 8.1, 8.0, 7.4, 7.3]
|
||||
os: [ubuntu-latest]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
extensions: opcache, gd
|
||||
tools: composer:v2
|
||||
coverage: none
|
||||
env:
|
||||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# - name: Update composer
|
||||
# run: composer update
|
||||
#
|
||||
# - name: Validate composer.json and composer.lock
|
||||
# run: composer validate
|
||||
|
||||
- name: Get composer cache directory
|
||||
id: composer-cache
|
||||
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
|
||||
|
||||
- name: Cache dependencies
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ steps.composer-cache.outputs.dir }}
|
||||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
|
||||
restore-keys: ${{ runner.os }}-composer-
|
||||
|
||||
- name: Install dependencies
|
||||
run: composer install --prefer-dist --no-progress
|
||||
|
||||
- name: Run test suite
|
||||
run: vendor/bin/codecept run
|
||||
|
||||
# slack:
|
||||
# name: Slack
|
||||
# needs: unit-tests
|
||||
# runs-on: ubuntu-latest
|
||||
# if: always()
|
||||
# steps:
|
||||
# - uses: technote-space/workflow-conclusion-action@v2
|
||||
# - uses: 8398a7/action-slack@v3
|
||||
# with:
|
||||
# status: failure
|
||||
# fields: repo,message,author,action
|
||||
# icon_emoji: ':octocat:'
|
||||
# author_name: 'Github Action Tests'
|
||||
# text: '💥 Automated Test Failure'
|
||||
# env:
|
||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||
# if: env.WORKFLOW_CONCLUSION == 'failure'
|
||||
48
.github/workflows/trigger-skeletons.yml
vendored
Normal file
48
.github/workflows/trigger-skeletons.yml
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
name: Trigger Skeletons Build
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: 'Which Grav release to use'
|
||||
required: true
|
||||
default: 'latest'
|
||||
admin:
|
||||
description: 'Create also a package with Admin'
|
||||
required: true
|
||||
default: true
|
||||
|
||||
permissions:
|
||||
contents: read # to fetch code (actions/checkout)
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
WORKFLOW: "build-skeleton.yml"
|
||||
AUTH: ":${{secrets.GLOBAL_TOKEN}}"
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Make it rain ☔️
|
||||
run: |
|
||||
SKELETONS=`curl -s "${{secrets.SKELETONS_JSON_LIST}}"`
|
||||
echo "$SKELETONS" | jq -cr '.[]' | while read SKELETON; do
|
||||
KEY=$(echo "$SKELETON" | jq -cr 'keys[0]')
|
||||
VERSION=$(echo "$SKELETON" | jq -cr '.[]')
|
||||
URL="https://api.github.com/repos/${KEY}/actions/workflows/${WORKFLOW}/dispatches"
|
||||
|
||||
curl -X POST \
|
||||
-u "${AUTH}" \
|
||||
-H "Accept: application/vnd.github.everest-preview+json" \
|
||||
-H "Content-Type: application/json" \
|
||||
-sS \
|
||||
${URL} \
|
||||
--data '{ "ref": "develop",
|
||||
"inputs": {
|
||||
"tag": "'"$VERSION"'",
|
||||
"version": "'"$INPUT_VERSION"'",
|
||||
"admin": "'"$INPUT_ADMIN"'"
|
||||
}
|
||||
}' > /dev/null
|
||||
echo "Dispatched Worfklow for ${KEY}@$VERSION"
|
||||
done
|
||||
8
.gitignore
vendored
8
.gitignore
vendored
@@ -25,8 +25,11 @@ user/plugins/*
|
||||
!user/plugins/.*
|
||||
user/themes/*
|
||||
!user/themes/.*
|
||||
user/localhost/config/security.yaml
|
||||
user/config/security.yaml
|
||||
user/**/config/security.yaml
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.gravenv
|
||||
|
||||
# OS Generated
|
||||
.DS_Store*
|
||||
@@ -44,3 +47,4 @@ tests/_support/_generated/*
|
||||
tests/cache/*
|
||||
tests/error.log
|
||||
system/templates/testing/*
|
||||
/user/config/versions.yaml
|
||||
|
||||
@@ -27,6 +27,9 @@ RewriteEngine On
|
||||
# If you experience problems on your site block out the operations listed below
|
||||
# This attempts to block the most common type of exploit `attempts` to Grav
|
||||
#
|
||||
# Block out any script trying to use twig tags in URL.
|
||||
RewriteCond %{REQUEST_URI} ({{|}}|{%|%}) [OR]
|
||||
RewriteCond %{QUERY_STRING} ({{|}}|{%25|%25}) [OR]
|
||||
# Block out any script trying to base64_encode data within the URL.
|
||||
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
|
||||
# Block out any script that includes a <script> tag in URL.
|
||||
@@ -56,9 +59,9 @@ RewriteRule .* index.php [L]
|
||||
# Block all direct access for these folders
|
||||
RewriteRule ^(\.git|cache|bin|logs|backup|webserver-configs|tests)/(.*) error [F]
|
||||
# Block access to specific file types for these system folders
|
||||
RewriteRule ^(system|vendor)/(.*)\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ error [F]
|
||||
RewriteRule ^(system|vendor)/(.*)\.(txt|xml|md|html|json|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ error [F]
|
||||
# Block access to specific file types for these user folders
|
||||
RewriteRule ^(user)/(.*)\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ error [F]
|
||||
RewriteRule ^(user)/(.*)\.(txt|md|json|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ error [F]
|
||||
# Block all direct access to .md files:
|
||||
RewriteRule \.md$ error [F]
|
||||
# Block all direct access to files and folders beginning with a dot
|
||||
|
||||
13
.travis.yml
13
.travis.yml
@@ -6,8 +6,6 @@ php:
|
||||
- '7.4'
|
||||
branches:
|
||||
only:
|
||||
- develop
|
||||
- master
|
||||
- build_test
|
||||
notifications:
|
||||
email:
|
||||
@@ -46,10 +44,11 @@ before_install:
|
||||
- if [ $TRAVIS_BRANCH == 'develop' ] || [ $TRAVIS_PULL_REQUEST != 'false' ]; then
|
||||
composer install --dev --prefer-dist;
|
||||
fi
|
||||
- if [ $TRAVIS_BRANCH != 'develop' ] && [ $TRAVIS_PHP_VERSION == "7.1" ] && [ $TRAVIS_PULL_REQUEST == "false" ]; then
|
||||
export TRAVIS_TAG=$(curl --fail --user "${GH_API_USER}" -s https://api.github.com/repos/getgrav/grav/releases/latest | grep tag_name | head -n 1 | cut -d '"' -f 4);
|
||||
eval "$(curl -sL https://raw.githubusercontent.com/travis-ci/gimme/master/gimme | GIMME_GO_VERSION=1.8 bash)";
|
||||
go get github.com/aktau/github-release;
|
||||
- |
|
||||
if [ $TRAVIS_BRANCH != 'develop' ] && [ $TRAVIS_PHP_VERSION == "7.1" ] && [ $TRAVIS_PULL_REQUEST == "false" ]; then
|
||||
export TRAVIS_TAG=$(curl -H "Authorization: token ${GH_TOKEN}" --fail -s https://api.github.com/repos/getgrav/grav/releases/latest | grep tag_name | head -n 1 | cut -d '"' -f 4);
|
||||
eval "$(curl -sL https://raw.githubusercontent.com/travis-ci/gimme/master/gimme | GIMME_GO_VERSION=1.13 bash)";
|
||||
go get github.com/github-release/github-release;
|
||||
git clone --quiet --depth=50 --branch=master https://${BB_TOKEN}bitbucket.org/rockettheme/grav-devtools.git $RT_DEVTOOLS &>/dev/null;
|
||||
if [ ! -z "$TRAVIS_TAG" ]; then
|
||||
cd ${RT_DEVTOOLS};
|
||||
@@ -57,7 +56,7 @@ before_install:
|
||||
fi;
|
||||
fi
|
||||
before_script:
|
||||
- if [ $TRAVIS_PHP_VERSION != 'hhvm' ]; then phpenv config-rm xdebug.ini; fi
|
||||
- phpenv config-rm xdebug.ini
|
||||
script:
|
||||
- if [ $TRAVIS_BRANCH == 'develop' ] || [ $TRAVIS_PULL_REQUEST != 'false' ]; then
|
||||
vendor/bin/codecept run;
|
||||
|
||||
1074
CHANGELOG.md
1074
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@@ -1,46 +1,133 @@
|
||||
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at contact@getgrav.org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
[INSERT CONTACT METHOD].
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
|
||||
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
|
||||
at [https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2018 Grav
|
||||
Copyright (c) 2021 Grav
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
38
README.md
38
README.md
@@ -1,29 +1,32 @@
|
||||
#  Grav
|
||||
|
||||
[](https://github.com/phpstan/phpstan)
|
||||
[](https://insight.sensiolabs.com/projects/cfd20465-d0f8-4a0a-8444-467f5b5f16ad)
|
||||
[](https://chat.getgrav.org)
|
||||
[](https://travis-ci.org/getgrav/grav) [](#backers) [](#sponsors)
|
||||
[](https://github.com/getgrav/grav/actions?query=workflow%3A%22PHP+Tests%22) [](#backers) [](#supporters) [](#sponsors)
|
||||
|
||||
Grav is a **Fast**, **Simple**, and **Flexible**, file-based Web-platform. There is **Zero** installation required. Just extract the ZIP archive, and you are already up and running. It follows similar principles to other flat-file CMS platforms, but has a different design philosophy than most. Grav comes with a powerful **Package Management System** to allow for simple installation and upgrading of plugins and themes, as well as simple updating of Grav itself.
|
||||
|
||||
The underlying architecture of Grav is designed to use well-established and _best-in-class_ technologies to ensure that Grav is simple to use and easy to extend. Some of these key technologies include:
|
||||
|
||||
* [Twig Templating](https://twig.sensiolabs.org/): for powerful control of the user interface
|
||||
* [Twig Templating](https://twig.symfony.com/): for powerful control of the user interface
|
||||
* [Markdown](https://en.wikipedia.org/wiki/Markdown): for easy content creation
|
||||
* [YAML](https://yaml.org): for simple configuration
|
||||
* [Parsedown](https://parsedown.org/): for fast Markdown and Markdown Extra support
|
||||
* [Doctrine Cache](https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html): layer for performance
|
||||
* [Pimple Dependency Injection Container](https://pimple.sensiolabs.org/): for extensibility and maintainability
|
||||
* [Pimple Dependency Injection Container](https://github.com/silexphp/Pimple): for extensibility and maintainability
|
||||
* [Symfony Event Dispatcher](https://symfony.com/doc/current/components/event_dispatcher/introduction.html): for plugin event handling
|
||||
* [Symfony Console](https://symfony.com/doc/current/components/console/introduction.html): for CLI interface
|
||||
* [Gregwar Image Library](https://github.com/Gregwar/Image): for dynamic image manipulation
|
||||
|
||||
# Requirements
|
||||
|
||||
- PHP 7.1.3 or higher. Check the [required modules list](https://learn.getgrav.org/basics/requirements#php-requirements)
|
||||
- PHP 7.3.6 or higher. Check the [required modules list](https://learn.getgrav.org/basics/requirements#php-requirements)
|
||||
- Check the [Apache](https://learn.getgrav.org/basics/requirements#apache-requirements) or [IIS](https://learn.getgrav.org/basics/requirements#iis-requirements) requirements
|
||||
|
||||
# Documentation
|
||||
|
||||
The full documentation can be found from [learn.getgrav.org](https://learn.getgrav.org).
|
||||
|
||||
# QuickStart
|
||||
|
||||
These are the options to get Grav:
|
||||
@@ -84,6 +87,11 @@ To update plugins and themes:
|
||||
$ bin/gpm update
|
||||
```
|
||||
|
||||
## Upgrading from older version
|
||||
|
||||
* [Upgrading to Grav 1.7](https://learn.getgrav.org/16/advanced/grav-development/grav-17-upgrade-guide)
|
||||
* [Upgrading to Grav 1.6](https://learn.getgrav.org/16/advanced/grav-development/grav-16-upgrade-guide)
|
||||
* [Upgrading from Grav <1.6](https://learn.getgrav.org/16/advanced/grav-development/grav-15-upgrade-guide)
|
||||
|
||||
# Contributing
|
||||
We appreciate any contribution to Grav, whether it is related to bugs, grammar, or simply a suggestion or improvement! Please refer to the [Contributing guide](CONTRIBUTING.md) for more guidance on this topic.
|
||||
@@ -109,12 +117,19 @@ If you discover a possible security issue related to Grav or one of its plugins,
|
||||
* More [Awesome Grav Stuff](https://github.com/getgrav/awesome-grav)
|
||||
|
||||
# Backers
|
||||
Support Grav with a monthly donation to help us continue development. [[Become a backer](https://opencollective.com/grav#backer)]
|
||||
Support Grav with a monthly donation to help us continue development. [[Become a backer](https://opencollective.com/grav/contribute)]
|
||||
|
||||
<img src="https://opencollective.com/grav/tiers/backers.svg?avatarHeight=36&width=600" />
|
||||
|
||||
|
||||
# Supporters
|
||||
Support Grav with a monthly donation to help us continue development. [[Become a supporter](https://opencollective.com/grav/contribute)]
|
||||
|
||||
<img src="https://opencollective.com/grav/tiers/supporters.svg?avatarHeight=36&width=600" />
|
||||
|
||||
|
||||
# Sponsors
|
||||
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/grav#sponsor)]
|
||||
Support Grav with a yearly donation to help us continue development. [[Become a sponsor](https://opencollective.com/grav/contribute)]
|
||||
|
||||
<img src="https://opencollective.com/grav/tiers/sponsors.svg?avatarHeight=36&width=600" />
|
||||
|
||||
@@ -128,7 +143,14 @@ See [LICENSE](LICENSE.txt)
|
||||
|
||||
# Running Tests
|
||||
|
||||
First install the dev dependencies by running `composer update` from the Grav root.
|
||||
First install the dev dependencies by running `composer install` from the Grav root.
|
||||
|
||||
Then `composer test` will run the Unit Tests, which should be always executed successfully on any site.
|
||||
Windows users should use the `composer test-windows` command.
|
||||
You can also run a single unit test file, e.g. `composer test tests/unit/Grav/Common/AssetsTest.php`
|
||||
|
||||
To run phpstan tests, you should run:
|
||||
|
||||
* `composer phpstan` for global tests
|
||||
* `composer phpstan-framework` for more strict tests
|
||||
* `composer phpstan-plugins` to test all installed plugins
|
||||
|
||||
21
SECURITY.md
Normal file
21
SECURITY.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
We are focusing our security updates on the following versions
|
||||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 1.7.x | :white_check_mark: |
|
||||
| 1.6.x | :warning: |
|
||||
| < 1.6 | :x: |
|
||||
|
||||
## :warning: Versions
|
||||
|
||||
Versions with :warning: will be supported for security issues, however you won't be able to update to them, you will need to manually update through the [`direct-install` command](https://learn.getgrav.org/17/admin-panel/tools).
|
||||
|
||||
If you cannot update to the latest stable version available because, for example, your server does not meet the minimum PHP requirements, you can manually install a previous version by downloading the package from our Releases directory (https://github.com/getgrav/grav/releases).
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
Please contact security@getgrav.org with a detailed explaination of the security issue found and we will work with you to get it resolved as fast as possible.
|
||||
305
UPGRADE-1.7.md
305
UPGRADE-1.7.md
@@ -1,305 +0,0 @@
|
||||
# UPGRADE FROM 1.6 TO 1.7
|
||||
|
||||
## ADMINISTRATORS
|
||||
|
||||
### YAML files
|
||||
|
||||
* Please run `bin/grav yamllinter` to find any YAML parsing errors in your site. You should run this command before and after upgrade. Grav falls back to older YAML parser if it detects an error, but it will slow down your site.
|
||||
|
||||
## Forms
|
||||
|
||||
* **BC BREAK** Fixed `validation: strict`. Please search through all your forms if you were using this feature. If you were, either remove the line or test if the form still works.
|
||||
* Added configuration option `system.strict_mode.blueprint_compat` to maintain old `validation: strict` behavior
|
||||
* If you disable compatibiity, form validation will be much more strict (recommended, but may break existing forms)
|
||||
|
||||
### Pages
|
||||
|
||||
* **BC BREAK** Fixed 404 error page when you go to non-routable page with routable child pages under it. Now you get redirected to the first routable child page instead. This is probably what you wanted in the first place. If you do not want this new behavior, you need to **TODO**
|
||||
|
||||
### Multi-language
|
||||
|
||||
* Improved language support
|
||||
* **BC BREAK** Please check that your fallback languages are correct. Old implementation had a fallback to any other language, now only default language is being used unless you use `system.languages.content_fallback` configuration option to override the default behavior.
|
||||
|
||||
### Admin
|
||||
|
||||
* If you upgrade from older 1.7 RC, you need to go to Flex Objects plugin settings and turn on `Pages`, `User Accounts` and `User Groups` directories (upgrading 1.6 automatically turns them on)
|
||||
* Disabling `User Accounts` and `User Groups` directories in Flex Objects plugin should be kept enabled; fine tuned **ACL** may not work without
|
||||
|
||||
### Sessions
|
||||
|
||||
* Session ID now changes on login to prevent session fixation issues
|
||||
|
||||
### CLI
|
||||
|
||||
* Added new `bin/grav server` CLI command to easily run Symfony or PHP built-in web servers
|
||||
* Added new `bin/grav page-system-validator [-r|--record] [-c|--check]` CLI command to test Flex Pages
|
||||
* Improved `Scheduler` cron command check and more useful CLI information
|
||||
* Added new `-r <job-id>` option for Scheduler CLI command to force-run a job
|
||||
* Improved `bin/grav yamllinter` CLI command by adding an option to find YAML Linting issues from the whole site or custom folder
|
||||
|
||||
### Configuration
|
||||
|
||||
* Added new configuration option `system.debugger.provider` to choose between debugbar and clockwork
|
||||
* Added new configuration option `system.debugger.censored` to hide potentially sensitive information
|
||||
* Added new configuration option `system.pages.type` to enable Flex Pages
|
||||
* Added new configuration option `system.languages.include_default_lang_file_extension` to keep default language in `.md` files if set to `false`
|
||||
* Added new configuration option `system.languages.content_fallback` to set fallback content languages individually for every language
|
||||
* Added new configuration option `security.sanitize_svg` to remove potentially dangerous code from SVG files
|
||||
|
||||
### Debugging
|
||||
|
||||
* Added support for [Clockwork](https://underground.works/clockwork) developer tools (now default debugger)
|
||||
* Added support for [Tideways XHProf](https://github.com/tideways/php-xhprof-extension) PHP Extension for profiling method calls
|
||||
* Added Twig profiling for Clockwork debugger
|
||||
|
||||
## DEVELOPERS
|
||||
|
||||
### Use composer autoloader
|
||||
|
||||
* Please add `composer.json` file to your plugin and run `composer update --no-dev` (and remember to keep it updated):
|
||||
|
||||
composer.json
|
||||
```json
|
||||
{
|
||||
"name": "getgrav/grav-plugin-example",
|
||||
"type": "grav-plugin",
|
||||
"description": "Example plugin for Grav CMS",
|
||||
"keywords": ["example", "plugin"],
|
||||
"homepage": "https://github.com/getgrav/grav-plugin-example",
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
{
|
||||
"name": "...",
|
||||
"email": "...",
|
||||
"homepage": "...",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/getgrav/grav-plugin-example/issues",
|
||||
"docs": "https://github.com/getgrav/grav-plugin-example/blob/master/README.md"
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1.3"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Grav\\Plugin\\Example\\": "classes/",
|
||||
"Grav\\Plugin\\Console\\": "cli/"
|
||||
},
|
||||
"classmap": [
|
||||
"example.php"
|
||||
]
|
||||
},
|
||||
"config": {
|
||||
"platform": {
|
||||
"php": "7.1.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
See [Composer schema](https://getcomposer.org/doc/04-schema.md)
|
||||
|
||||
* Please use autoloader instead of `require` in the code:
|
||||
|
||||
example.php
|
||||
```php
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function getSubscribedEvents()
|
||||
{
|
||||
return [
|
||||
'onPluginsInitialized' => [
|
||||
// This is only required in Grav 1.6. Grav 1.7 automatically calls $plugin->autolaod() method.
|
||||
['autoload', 100000],
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Composer autoload.
|
||||
*
|
||||
* @return \Composer\Autoload\ClassLoader
|
||||
*/
|
||||
public function autoload()
|
||||
{
|
||||
return require __DIR__ . '/vendor/autoload.php';
|
||||
}
|
||||
```
|
||||
|
||||
* Plugins & Themes: Call `$plugin->autoload()` and `$theme->autoload()` automatically when object gets initialized
|
||||
* Make sure your code does not use `require` or `include` for loading classes
|
||||
|
||||
### Dependencies
|
||||
|
||||
* Make sure you update your plugin/theme dependencies. I recommend setting Grav to either 1.6 or 1.7 and update your code/vendor to PHP 7.1
|
||||
|
||||
blueprints.yaml
|
||||
```yaml
|
||||
dependencies:
|
||||
- { name: grav, version: '>=1.6.0' }
|
||||
```
|
||||
|
||||
### ACL
|
||||
|
||||
* `user.authorize()` now requires user to be authorized (passed 2FA check), unless the rule contains `login` in its name.
|
||||
* Added support for more advanced ACL (CRUD)
|
||||
|
||||
* **BC BREAK** `user.authorize()` and Flex `object.isAuthorized()` now have two deny states: `false` and `null`.
|
||||
|
||||
Make sure you do not have strict checks against false: `$user->authorize($action) === false` (PHP) or `user.authorize(action) is same as(false)` (Twig).
|
||||
|
||||
For the negative checks you should be using `!user->authorize($action)` (PHP) or `not user.authorize(action)` (Twig).
|
||||
|
||||
The change has been done to allow strong deny rules by chaining the actions if previous ones do not match: `user.authorize(action1) ?? user.authorize(action2) ?? user.authorize(action3)`.
|
||||
|
||||
Note that Twig function `authorize()` will still **keeps** the old behavior!
|
||||
|
||||
### Pages
|
||||
|
||||
* Added experimental support for `Flex Pages`
|
||||
* Added page specific permissions support for `Flex Pages`
|
||||
* Added root page support for `Flex Pages`
|
||||
* Fixed wrong `Pages::dispatch()` calls (with redirect) when we really meant to call `Pages::find()`
|
||||
* Added `Pages::getCollection()` method
|
||||
* Moved `collection()` and `evaluate()` logic from `Page` class into `Pages` class
|
||||
* **DEPRECATED** `$page->modular()` in favor of `$page->isModule()`
|
||||
* **BC BREAK** Fixed `Page::modular()` and `Page::modularTwig()` returning `null` for folders and other non-initialized pages. Should not affect your code unless you were checking against `false` or `null`.
|
||||
* **BC BREAK** Always use `\Grav\Common\Page\Interfaces\PageInterface` instead of `\Grav\Common\Page\Page` in method signatures
|
||||
* Admin now uses `Flex Pages` by default, collection will behave in slightly different way
|
||||
|
||||
### Markdown
|
||||
|
||||
* **BC BREAK** Upgraded Parsedown to 1.7 for Parsedown-Extra 0.8. Plugins that extend Parsedown may need a fix to render as HTML
|
||||
|
||||
### Users
|
||||
|
||||
* Improved `Flex Users`: obey blueprints and allow Flex to be used in admin only
|
||||
* Improved `Flex Users`: user and group ACL now supports deny permissions
|
||||
* Changed `UserInterface::authorize()` to return `null` having the same meaning as `false` if access is denied because of no matching rule
|
||||
* **DEPRECATED** `\Grav\Common\User\Group` in favor of `$grav['user_groups']`, which contains Flex UserGroup collection
|
||||
* **BC BREAK** Always use `\Grav\Common\User\Interfaces\UserInterface` instead of `\Grav\Common\User\User` in method signatures
|
||||
|
||||
### Flex
|
||||
|
||||
* Added `$grav['flex']` to access all registered Flex Directories
|
||||
* Added `FlexRegisterEvent` which triggers when `$grav['flex']` is being accessed the first time
|
||||
* Added `hasFlexFeature()` method to test if `FlexObject` or `FlexCollection` implements a given feature
|
||||
* Added `getFlexFeatures()` method to return all features that `FlexObject` or `FlexCollection` implements
|
||||
* Added `FlexStorage::getMetaData()` to get updated object meta information for listed keys
|
||||
* `FlexDirectory::getObject()` can now be called without any parameters to create a new object
|
||||
* **DEPRECATED** `FlexDirectory::update()` and `FlexDirectory::remove()`
|
||||
* **BC BREAK** Moved all Flex type classes under `Grav\Common\Flex`
|
||||
* **BC BREAK** `FlexStorageInterface::getStoragePath()` and `getMediaPath()` can now return null
|
||||
* **BC BREAK** Flex objects no longer return temporary key if they do not have one; empty key is returned instead
|
||||
|
||||
### Templating
|
||||
|
||||
* Added support for Twig 2.12 (still using Twig 1.42)
|
||||
* Added a new `{% cache %}` Twig tag eliminating need for `twigcache` extension.
|
||||
* Added `array_diff()` twig function
|
||||
* Added `template_from_string()` twig function
|
||||
* Improved `url()` twig function to take third parameter (`true`) to return URL on non-existing file instead of returning false
|
||||
* Improved `|array` twig filter to work with iterators and objects with `toArray()` method
|
||||
* Improved `authorize()` twig function to work better with nested rule parameters
|
||||
* Improved `|yaml_serialize` twig filter: added support for `JsonSerializable` objects and other array-like objects
|
||||
|
||||
### Multi-language
|
||||
|
||||
* Improved language support for `Route` class
|
||||
* Translations: rename MODULAR to MODULE everywhere
|
||||
* Added `Language::getPageExtensions()` to get full list of supported page language extensions
|
||||
* **BC BREAK** Fixed `Language::getFallbackPageExtensions()` to fall back only to default language instead of going through all languages
|
||||
|
||||
### Blueprints
|
||||
|
||||
* Added `flatten_array` filter to form field validation
|
||||
* Added support for `security@: or: [admin.super, admin.pages]` in blueprints (nested AND/OR mode support)
|
||||
* Blueprint validation: Added `validate: value_type: bool|int|float|string|trim` to `array` to filter all the values inside the array
|
||||
* If your plugins has blueprints folder, initializing it in the event will be too late. Do this instead:
|
||||
|
||||
```php
|
||||
class MyPlugin extends Plugin
|
||||
{
|
||||
/** @var array */
|
||||
public $features = [
|
||||
'blueprints' => 0, // Use priority 0
|
||||
];
|
||||
}
|
||||
```
|
||||
|
||||
### Events
|
||||
|
||||
* Use `Symfony EventDispatcher` directly instead of `rockettheme/toolbox` wrapper.
|
||||
* Added `$grav->dispatchEvent()` method for PSR-14 events
|
||||
* Added `PluginsLoadedEvent` which triggers after plugins have been loaded but not yet initialized
|
||||
* Added `SessionStartEvent` which triggers when session is started
|
||||
* Added `FlexRegisterEvent` which triggers when `$grav['flex']` is being accessed the first time
|
||||
* Added `PermissionsRegisterEvent` which triggers when `$grav['permissions']` is being accessed the first time
|
||||
* Check `onAdminTwigTemplatePaths` event, it should NOT be:
|
||||
|
||||
```php
|
||||
public function onAdminTwigTemplatePaths($event)
|
||||
{
|
||||
// This code breaks all the other plugins in admin, including Flex Objects
|
||||
$event['paths'] = [__DIR__ . '/admin/themes/grav/templates'];
|
||||
}
|
||||
```
|
||||
but:
|
||||
```php
|
||||
public function onAdminTwigTemplatePaths($event)
|
||||
{
|
||||
// Add plugin template path for admin.
|
||||
$paths = $event['paths'];
|
||||
$paths[] = __DIR__ . '/admin/themes/grav/templates';
|
||||
$event['paths'] = $paths;
|
||||
}
|
||||
```
|
||||
|
||||
### Misc
|
||||
|
||||
* Added `Utils::isAssoc()` and `Utils::isNegative()` helper methods
|
||||
* Added `Utils::simpleTemplate()` method for very simple variable templating
|
||||
* Support customizable null character replacement in `CSVFormatter::decode()`
|
||||
* Added new `Security::sanitizeSVG()` function
|
||||
* Added `$grav->close()` method to properly terminate the request with a response
|
||||
* **BC BREAK** Make `Route` objects immutable. This means that you need to do: `{% set route = route.withExtension('.html') %}` (for all `withX` methods) to keep the updated version.
|
||||
|
||||
### CLI
|
||||
|
||||
* **BC BREAK** Many plugins initialize Grav in a wrong way, it is not safe to initialize plugins and theme by yourself
|
||||
* Following calls require Grav 1.6.21 or later, so it is recommended to set Grav dependency to that version
|
||||
* Inside `serve()` method:
|
||||
* Call `$this->setLanguage($langCode);` before doing anything else if you want to set the language (or use default)
|
||||
* Call one of following:
|
||||
* `$this->initializeGrav();` Already called if you're in `bin/plugin`, otherwise you may need to call this one
|
||||
* `$this->initializePlugins();` This initializes grav, plugins (up to `onPluginsInitialized`)
|
||||
* `$this->initializeThemes();` This initializes grav, plugins and theme
|
||||
* `$this->initializePages();` This initializes grav, plugins, theme and everything needed by pages
|
||||
* It is a good idea to prefix your CLI command classes with your plugin name, otherwise there may be naming conflicts (we already have some!)
|
||||
|
||||
### Composer dependencies
|
||||
|
||||
* Updated Symfony Components to 4.4, please update any deprecated features in your code
|
||||
* **BC BREAK** Please run `bin/grav yamllinter -f user://` to find any YAML parsing errors in your site (including your plugins and themes).
|
||||
|
||||
## PLUGINS
|
||||
|
||||
### Admin
|
||||
|
||||
* **BC BREAK** Admin will not initialize frontend pages anymore, this has been done to greatly speed up Admin plugin.
|
||||
|
||||
Please call `$grav['admin']->enablePages()` or `{% do admin.enablePages() %}` if you need to access frontend pages. This call can be safely made multiple times.
|
||||
|
||||
If you're using `Flex Pages`, please use Flex Directory instead, it will make your code so much faster.
|
||||
|
||||
* Admin now uses Flex for editing `Accounts` and `Pages`. If your plugin hooks into either of those, please make sure they still work.
|
||||
|
||||
* Admin cache is enabled by default, make sure your plugin clears cache when needed. Please avoid clearing all cache!
|
||||
|
||||
### Shortcode Core
|
||||
|
||||
* **DEPRECATED** Every shortcode needs to have `init()` method, classes without it will stop working in the future.
|
||||
@@ -0,0 +1 @@
|
||||
/* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. */
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
/* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. */
|
||||
|
||||
Binary file not shown.
51
bin/gpm
51
bin/gpm
@@ -1,9 +1,14 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
|
||||
* @license MIT License; see LICENSE file for details.
|
||||
*/
|
||||
|
||||
use Grav\Common\Composer;
|
||||
use Symfony\Component\Console\Application;
|
||||
use Grav\Common\Grav;
|
||||
use Grav\Console\Application\GpmApplication;
|
||||
|
||||
\define('GRAV_CLI', true);
|
||||
\define('GRAV_REQUEST_TIME', microtime(true));
|
||||
@@ -20,18 +25,10 @@ if (!file_exists(__DIR__ . '/../vendor/autoload.php')){
|
||||
|
||||
$autoload = require __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
if (version_compare($ver = PHP_VERSION, $req = GRAV_PHP_MIN, '<')) {
|
||||
exit(sprintf("You are running PHP %s, but Grav needs at least PHP %s to run.\n", $ver, $req));
|
||||
}
|
||||
|
||||
if (!ini_get('date.timezone')) {
|
||||
date_default_timezone_set('UTC');
|
||||
}
|
||||
// Set timezone to default, falls back to system if php.ini not set
|
||||
date_default_timezone_set(@date_default_timezone_get());
|
||||
|
||||
// Set internal encoding.
|
||||
if (!\extension_loaded('mbstring')) {
|
||||
die("'mbstring' extension is not loaded. This is required for Grav to run correctly");
|
||||
}
|
||||
@ini_set('default_charset', 'UTF-8');
|
||||
mb_internal_encoding('UTF-8');
|
||||
|
||||
@@ -43,37 +40,7 @@ if (!function_exists('curl_version')) {
|
||||
exit('FATAL: GPM requires PHP Curl module to be installed');
|
||||
}
|
||||
|
||||
$climate = new League\CLImate\CLImate;
|
||||
$climate->arguments->add([
|
||||
'environment' => [
|
||||
'prefix' => 'e',
|
||||
'longPrefix' => 'env',
|
||||
'description' => 'Configuration Environment',
|
||||
'defaultValue' => 'localhost'
|
||||
]
|
||||
]);
|
||||
$climate->arguments->parse();
|
||||
|
||||
// Set up environment based on params.
|
||||
$environment = $climate->arguments->get('environment');
|
||||
|
||||
$grav = Grav::instance(array('loader' => $autoload));
|
||||
$grav->setup($environment);
|
||||
|
||||
$grav['config']->init();
|
||||
$grav['uri']->init();
|
||||
$grav['accounts'];
|
||||
|
||||
$app = new Application('Grav Package Manager', GRAV_VERSION);
|
||||
$app->addCommands(array(
|
||||
new \Grav\Console\Gpm\IndexCommand(),
|
||||
new \Grav\Console\Gpm\VersionCommand(),
|
||||
new \Grav\Console\Gpm\InfoCommand(),
|
||||
new \Grav\Console\Gpm\InstallCommand(),
|
||||
new \Grav\Console\Gpm\UninstallCommand(),
|
||||
new \Grav\Console\Gpm\UpdateCommand(),
|
||||
new \Grav\Console\Gpm\SelfupgradeCommand(),
|
||||
new \Grav\Console\Gpm\DirectInstallCommand(),
|
||||
));
|
||||
|
||||
$app = new GpmApplication('Grav Package Manager', GRAV_VERSION);
|
||||
$app->run();
|
||||
|
||||
52
bin/grav
52
bin/grav
@@ -1,10 +1,14 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
|
||||
* @license MIT License; see LICENSE file for details.
|
||||
*/
|
||||
|
||||
use Grav\Common\Composer;
|
||||
use Grav\Common\Grav;
|
||||
use Grav\Console\Cli;
|
||||
use Symfony\Component\Console\Application;
|
||||
use Grav\Console\Application\GravApplication;
|
||||
|
||||
\define('GRAV_CLI', true);
|
||||
\define('GRAV_REQUEST_TIME', microtime(true));
|
||||
@@ -21,56 +25,18 @@ if (!file_exists(__DIR__ . '/../vendor/autoload.php')){
|
||||
|
||||
$autoload = require __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
if (version_compare($ver = PHP_VERSION, $req = GRAV_PHP_MIN, '<')) {
|
||||
exit(sprintf("You are running PHP %s, but Grav needs at least PHP %s to run.\n", $ver, $req));
|
||||
}
|
||||
|
||||
if (!ini_get('date.timezone')) {
|
||||
date_default_timezone_set('UTC');
|
||||
}
|
||||
// Set timezone to default, falls back to system if php.ini not set
|
||||
date_default_timezone_set(@date_default_timezone_get());
|
||||
|
||||
// Set internal encoding.
|
||||
if (!\extension_loaded('mbstring')) {
|
||||
die("'mbstring' extension is not loaded. This is required for Grav to run correctly");
|
||||
}
|
||||
@ini_set('default_charset', 'UTF-8');
|
||||
mb_internal_encoding('UTF-8');
|
||||
|
||||
$climate = new League\CLImate\CLImate;
|
||||
$climate->arguments->add([
|
||||
'environment' => [
|
||||
'prefix' => 'e',
|
||||
'longPrefix' => 'env',
|
||||
'description' => 'Configuration Environment',
|
||||
'defaultValue' => 'localhost'
|
||||
]
|
||||
]);
|
||||
$climate->arguments->parse();
|
||||
|
||||
// Set up environment based on params.
|
||||
$environment = $climate->arguments->get('environment');
|
||||
|
||||
$grav = Grav::instance(array('loader' => $autoload));
|
||||
$grav->setup($environment);
|
||||
|
||||
if (!file_exists(GRAV_ROOT . '/index.php')) {
|
||||
exit('FATAL: Must be run from ROOT directory of Grav!');
|
||||
}
|
||||
|
||||
$app = new Application('Grav CLI Application', GRAV_VERSION);
|
||||
$app->addCommands(array(
|
||||
new Cli\InstallCommand(),
|
||||
new Cli\ComposerCommand(),
|
||||
new Cli\SandboxCommand(),
|
||||
new Cli\CleanCommand(),
|
||||
new Cli\ClearCacheCommand(),
|
||||
new Cli\BackupCommand(),
|
||||
new Cli\NewProjectCommand(),
|
||||
new Cli\SchedulerCommand(),
|
||||
new Cli\SecurityCommand(),
|
||||
new Cli\LogViewerCommand(),
|
||||
new Cli\YamlLinterCommand(),
|
||||
new Cli\ServerCommand(),
|
||||
new Cli\PageSystemValidatorCommand(),
|
||||
));
|
||||
$app = new GravApplication('Grav CLI Application', GRAV_VERSION);
|
||||
$app->run();
|
||||
|
||||
131
bin/plugin
131
bin/plugin
@@ -1,13 +1,14 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
|
||||
* @license MIT License; see LICENSE file for details.
|
||||
*/
|
||||
|
||||
use Grav\Common\Composer;
|
||||
use Symfony\Component\Console\Application;
|
||||
use Symfony\Component\Console\Input\ArgvInput;
|
||||
use Symfony\Component\Console\Output\ConsoleOutput;
|
||||
use Symfony\Component\Console\Formatter\OutputFormatterStyle;
|
||||
use Grav\Common\Grav;
|
||||
use Grav\Common\Filesystem\Folder;
|
||||
use Grav\Console\Application\PluginApplication;
|
||||
|
||||
\define('GRAV_CLI', true);
|
||||
\define('GRAV_REQUEST_TIME', microtime(true));
|
||||
@@ -24,18 +25,10 @@ if (!file_exists(__DIR__ . '/../vendor/autoload.php')){
|
||||
|
||||
$autoload = require __DIR__ . '/../vendor/autoload.php';
|
||||
|
||||
if (version_compare($ver = PHP_VERSION, $req = GRAV_PHP_MIN, '<')) {
|
||||
exit(sprintf("You are running PHP %s, but Grav needs at least PHP %s to run.\n", $ver, $req));
|
||||
}
|
||||
|
||||
if (!ini_get('date.timezone')) {
|
||||
date_default_timezone_set('UTC');
|
||||
}
|
||||
// Set timezone to default, falls back to system if php.ini not set
|
||||
date_default_timezone_set(@date_default_timezone_get());
|
||||
|
||||
// Set internal encoding.
|
||||
if (!\extension_loaded('mbstring')) {
|
||||
die("'mbstring' extension is not loaded. This is required for Grav to run correctly");
|
||||
}
|
||||
@ini_set('default_charset', 'UTF-8');
|
||||
mb_internal_encoding('UTF-8');
|
||||
|
||||
@@ -43,112 +36,8 @@ if (!file_exists(GRAV_ROOT . '/index.php')) {
|
||||
exit('FATAL: Must be run from ROOT directory of Grav!');
|
||||
}
|
||||
|
||||
$climate = new League\CLImate\CLImate;
|
||||
$climate->arguments->add([
|
||||
'environment' => [
|
||||
'prefix' => 'e',
|
||||
'longPrefix' => 'env',
|
||||
'description' => 'Configuration Environment',
|
||||
'defaultValue' => 'localhost'
|
||||
]
|
||||
]);
|
||||
$climate->arguments->parse();
|
||||
|
||||
$environment = $climate->arguments->get('environment');
|
||||
|
||||
// Bootstrap Grav container.
|
||||
$grav = Grav::instance(array('loader' => $autoload));
|
||||
$grav->setup($environment);
|
||||
$grav->initializeCli();
|
||||
|
||||
$app = new Application('Grav Plugins Commands', GRAV_VERSION);
|
||||
$pattern = '([A-Z]\w+Command\.php)';
|
||||
|
||||
// get arguments and strip the application name
|
||||
if (null === $argv) {
|
||||
$argv = $_SERVER['argv'];
|
||||
}
|
||||
|
||||
$bin = array_shift($argv);
|
||||
$name = array_shift($argv);
|
||||
$argv = array_merge([$bin], $argv);
|
||||
|
||||
$input = new ArgvInput($argv);
|
||||
|
||||
/** @var \Grav\Common\Data\Data $plugin */
|
||||
$plugin = $grav['plugins']->get($name);
|
||||
|
||||
$output = new ConsoleOutput();
|
||||
$output->getFormatter()->setStyle('red', new OutputFormatterStyle('red', null, array('bold')));
|
||||
$output->getFormatter()->setStyle('white', new OutputFormatterStyle('white', null, array('bold')));
|
||||
|
||||
if (!$name) {
|
||||
$output->writeln('');
|
||||
$output->writeln('<red>Usage:</red>');
|
||||
$output->writeln(" {$bin} [slug] [command] [arguments]");
|
||||
$output->writeln('');
|
||||
$output->writeln('<red>Example:</red>');
|
||||
$output->writeln(" {$bin} error log -l 1 --trace");
|
||||
$list = Folder::all('plugins://', ['compare' => 'Pathname', 'pattern' => '/\/cli\/' . $pattern . '$/usm', 'levels' => 2]);
|
||||
|
||||
$total = 0;
|
||||
if (count($list)) {
|
||||
$available = [];
|
||||
$output->writeln('');
|
||||
$output->writeln('<red>Plugins with CLI available:</red>');
|
||||
foreach ($list as $index => $entry) {
|
||||
$split = explode('/', $entry);
|
||||
$entry = array_shift($split);
|
||||
$index = str_pad($index++ + 1, 2, '0', STR_PAD_LEFT);
|
||||
$total = str_pad($total++ + 1, 2, '0', STR_PAD_LEFT);
|
||||
if (\in_array($entry, $available, true)) {
|
||||
$total--;
|
||||
continue;
|
||||
}
|
||||
|
||||
$available[] = $entry;
|
||||
$commands_count = $index - $total + 1;
|
||||
$output->writeln(' ' . $total . '. <red>' . str_pad($entry, 15) . "</red> <white>{$bin} {$entry} list</white>");
|
||||
}
|
||||
}
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
if (null === $plugin) {
|
||||
$output->writeln('');
|
||||
$output->writeln("<red>$name plugin not found</red>");
|
||||
die;
|
||||
}
|
||||
|
||||
if (!$plugin->enabled) {
|
||||
$output->writeln('');
|
||||
$output->writeln("<red>$name not enabled</red>");
|
||||
die;
|
||||
}
|
||||
|
||||
|
||||
if ($plugin === null) {
|
||||
$output->writeln("<red>Grav Plugin <white>'{$name}'</white> is not installed</red>");
|
||||
exit;
|
||||
}
|
||||
|
||||
$path = 'plugins://' . $name . '/cli';
|
||||
|
||||
try {
|
||||
$commands = Folder::all($path, ['compare' => 'Filename', 'pattern' => '/' . $pattern . '$/usm', 'levels' => 1]);
|
||||
} catch (\RuntimeException $e) {
|
||||
$output->writeln("<red>No Console Commands for <white>'{$name}'</white> where found in <white>'{$path}'</white></red>");
|
||||
exit;
|
||||
}
|
||||
|
||||
foreach ($commands as $command_path) {
|
||||
$full_path = $grav['locator']->findResource("plugins://{$name}/cli/{$command_path}");
|
||||
require_once $full_path;
|
||||
|
||||
$command_class = 'Grav\Plugin\Console\\' . preg_replace('/.php$/', '', $command_path);
|
||||
$command = new $command_class();
|
||||
$app->add($command);
|
||||
}
|
||||
|
||||
$app->run($input);
|
||||
$app = new PluginApplication('Grav Plugins Commands', GRAV_VERSION);
|
||||
$app->run();
|
||||
|
||||
1
cache/.gitkeep
vendored
1
cache/.gitkeep
vendored
@@ -0,0 +1 @@
|
||||
/* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. */
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
actor: Tester
|
||||
bootstrap: _bootstrap.php
|
||||
paths:
|
||||
tests: tests
|
||||
log: tests/_output
|
||||
@@ -6,7 +7,6 @@ paths:
|
||||
support: tests/_support
|
||||
envs: tests/_envs
|
||||
settings:
|
||||
bootstrap: _bootstrap.php
|
||||
colors: true
|
||||
memory_limit: 1024M
|
||||
extensions:
|
||||
|
||||
123
composer.json
123
composer.json
@@ -12,101 +12,114 @@
|
||||
"homepage": "https://getgrav.org",
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": ">=7.1.3",
|
||||
"php": "^7.3.6 || ^8.0",
|
||||
"ext-json": "*",
|
||||
"ext-mbstring": "*",
|
||||
"ext-openssl": "*",
|
||||
"ext-curl": "*",
|
||||
"ext-zip": "*",
|
||||
"ext-dom": "*",
|
||||
"symfony/polyfill-iconv": "^1.9",
|
||||
"symfony/polyfill-php72": "^1.9",
|
||||
"symfony/polyfill-php73": "^1.9",
|
||||
"ext-libxml": "*",
|
||||
"ext-gd": "*",
|
||||
"symfony/polyfill-mbstring": "~1.23",
|
||||
"symfony/polyfill-iconv": "^1.23",
|
||||
"symfony/polyfill-php74": "^1.23",
|
||||
"symfony/polyfill-php80": "^1.23",
|
||||
"symfony/polyfill-php81": "^1.23",
|
||||
"psr/simple-cache": "^1.0",
|
||||
"psr/http-message": "^1.0",
|
||||
"psr/http-server-middleware": "^1.0",
|
||||
"kodus/psr7-server": "*",
|
||||
"nyholm/psr7": "^1.0",
|
||||
"twig/twig": "~1.0",
|
||||
"psr/container": "~1.1.0",
|
||||
"nyholm/psr7-server": "^1.0",
|
||||
"nyholm/psr7": "^1.3",
|
||||
"twig/twig": "~v1.44",
|
||||
"erusev/parsedown": "^1.7",
|
||||
"erusev/parsedown-extra": "~0.8",
|
||||
"symfony/contracts": "~1.0",
|
||||
"symfony/yaml": "~4.4.0",
|
||||
"symfony/console": "~4.4.0",
|
||||
"symfony/event-dispatcher": "~4.4.0",
|
||||
"symfony/var-dumper": "~4.4.0",
|
||||
"symfony/process": "~4.4.0",
|
||||
"doctrine/cache": "^1.8",
|
||||
"doctrine/collections": "^1.5",
|
||||
"guzzlehttp/psr7": "^1.4",
|
||||
"filp/whoops": "~2.2",
|
||||
"symfony/contracts": "~1.1",
|
||||
"symfony/yaml": "~4.4",
|
||||
"symfony/console": "~4.4",
|
||||
"symfony/event-dispatcher": "~4.4",
|
||||
"symfony/var-dumper": "~4.4",
|
||||
"symfony/process": "~4.4",
|
||||
"doctrine/cache": "^1.10",
|
||||
"doctrine/collections": "^1.6",
|
||||
"guzzlehttp/psr7": "^1.7",
|
||||
"filp/whoops": "~2.9",
|
||||
"matthiasmullie/minify": "^1.3",
|
||||
"monolog/monolog": "~1.0",
|
||||
"gregwar/image": "2.*",
|
||||
"donatj/phpuseragentparser": "~0.10",
|
||||
"pimple/pimple": "~3.2",
|
||||
"monolog/monolog": "~1.25",
|
||||
"getgrav/image": "^3.0",
|
||||
"getgrav/cache": "^2.0",
|
||||
"donatj/phpuseragentparser": "~1.1",
|
||||
"pimple/pimple": "~3.5.0",
|
||||
"rockettheme/toolbox": "~1.5",
|
||||
"maximebf/debugbar": "~1.0",
|
||||
"league/climate": "^3.4",
|
||||
"antoligy/dom-string-iterators": "^1.0",
|
||||
"miljar/php-exif": "^0.6.4",
|
||||
"composer/ca-bundle": "^1.0",
|
||||
"maximebf/debugbar": "~1.16",
|
||||
"league/climate": "^3.6",
|
||||
"miljar/php-exif": "^0.6",
|
||||
"composer/ca-bundle": "^1.2",
|
||||
"dragonmantank/cron-expression": "^1.2",
|
||||
"phive/twig-extensions-deferred": "^1.0",
|
||||
"willdurand/negotiation": "2.x-dev",
|
||||
"itsgoingd/clockwork": "@beta",
|
||||
"enshrined/svg-sanitize": "~0.1"
|
||||
"willdurand/negotiation": "^3.0",
|
||||
"itsgoingd/clockwork": "^5.0",
|
||||
"symfony/http-client": "^4.4",
|
||||
"composer/semver": "^1.4",
|
||||
"rhukster/dom-sanitizer": "^1.0",
|
||||
"multiavatar/multiavatar-php": "^1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"codeception/codeception": "^2.4",
|
||||
"phpstan/phpstan": "^0.11",
|
||||
"phpstan/phpstan-deprecation-rules": "^0.11",
|
||||
"phpunit/php-code-coverage": "~6.0",
|
||||
"fzaninotto/faker": "^1.8",
|
||||
"victorjonsson/markdowndocs": "dev-master"
|
||||
"codeception/codeception": "^4.1",
|
||||
"phpstan/phpstan": "^1.8",
|
||||
"phpstan/phpstan-deprecation-rules": "^1.0",
|
||||
"phpunit/php-code-coverage": "~9.2",
|
||||
"getgrav/markdowndocs": "^2.0",
|
||||
"codeception/module-asserts": "^1.3",
|
||||
"codeception/module-phpbrowser": "^1.0",
|
||||
"symfony/service-contracts": "*"
|
||||
},
|
||||
"replace": {
|
||||
"symfony/polyfill-php72": "*",
|
||||
"symfony/polyfill-php73": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "Recommended for better performance",
|
||||
"ext-iconv": "Recommended for better performance",
|
||||
"ext-zend-opcache": "Recommended for better performance",
|
||||
"ext-intl": "Recommended for multi-language sites",
|
||||
"ext-memcache": "Needed to support Memcache servers",
|
||||
"ext-memcached": "Needed to support Memcached servers",
|
||||
"ext-redis": "Needed to support Redis servers"
|
||||
"ext-redis": "Needed to support Redis servers",
|
||||
"ext-exif": "Needed to use exif data from images."
|
||||
},
|
||||
"config": {
|
||||
"apcu-autoloader": true,
|
||||
"platform": {
|
||||
"php": "7.1.3"
|
||||
"php": "7.3.6"
|
||||
}
|
||||
},
|
||||
"repositories": [{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/trilbymedia/PHP-Markdown-Documentation-Generator"
|
||||
},
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/itsgoingd/clockwork"
|
||||
}
|
||||
],
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Grav\\": "system/src/Grav"
|
||||
"Grav\\": "system/src/Grav",
|
||||
"Twig\\": "system/src/Twig"
|
||||
},
|
||||
"files": [
|
||||
"system/defines.php"
|
||||
"system/defines.php",
|
||||
"system/src/DOMLettersIterator.php",
|
||||
"system/src/DOMWordsIterator.php"
|
||||
]
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"PHPStan\\": "tests/phpstan/classes"
|
||||
}
|
||||
},
|
||||
"archive": {
|
||||
"exclude": [
|
||||
"VERSION"
|
||||
]
|
||||
},
|
||||
"scripts": {
|
||||
"api-16": "vendor/bin/phpdoc-md generate system/src > user/pages/14.api/default.16.md",
|
||||
"api-15": "vendor/bin/phpdoc-md generate system/src > user/pages/14.api/default.md",
|
||||
"api-17": "vendor/bin/phpdoc-md generate system/src > user/pages/14.api/default.17.md",
|
||||
"post-create-project-cmd": "bin/grav install",
|
||||
"phpstan": "vendor/bin/phpstan analyse -l 3 -c ./tests/phpstan/phpstan.neon system/src --memory-limit=340M",
|
||||
"phpstan-framework": "vendor/bin/phpstan analyse -l 7 -c ./tests/phpstan/phpstan.neon system/src/Grav/Framework --memory-limit=128M",
|
||||
"phpstan-plugins": "vendor/bin/phpstan analyse -l 1 -c ./tests/phpstan/plugins.neon user/plugins --memory-limit=300M",
|
||||
"phpstan": "vendor/bin/phpstan analyse -l 2 -c ./tests/phpstan/phpstan.neon --memory-limit=720M system/src",
|
||||
"phpstan-framework": "vendor/bin/phpstan analyse -l 5 -c ./tests/phpstan/phpstan.neon --memory-limit=480M system/src/Grav/Framework system/src/Grav/Events system/src/Grav/Installer",
|
||||
"phpstan-plugins": "vendor/bin/phpstan analyse -l 1 -c ./tests/phpstan/plugins.neon --memory-limit=400M user/plugins",
|
||||
"test": "vendor/bin/codecept run unit",
|
||||
"test-windows": "vendor\\bin\\codecept run unit"
|
||||
},
|
||||
|
||||
5139
composer.lock
generated
5139
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1 @@
|
||||
/* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. */
|
||||
|
||||
40
index.php
40
index.php
@@ -3,37 +3,23 @@
|
||||
/**
|
||||
* @package Grav.Core
|
||||
*
|
||||
* @copyright Copyright (C) 2015 - 2018 Trilby Media, LLC. All rights reserved.
|
||||
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
|
||||
* @license MIT License; see LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Grav;
|
||||
|
||||
\define('GRAV_REQUEST_TIME', microtime(true));
|
||||
\define('GRAV_PHP_MIN', '7.1.3');
|
||||
|
||||
if (version_compare($ver = PHP_VERSION, $req = GRAV_PHP_MIN, '<')) {
|
||||
die(sprintf('You are running PHP %s, but Grav needs at least <strong>PHP %s</strong> to run.', $ver, $req));
|
||||
}
|
||||
\define('GRAV_PHP_MIN', '7.3.6');
|
||||
|
||||
if (PHP_SAPI === 'cli-server') {
|
||||
$symfony_server = stripos(getenv('_'), 'symfony') !== false || stripos($_SERVER['SERVER_SOFTWARE'], 'symfony
|
||||
') !== false;
|
||||
$symfony_server = stripos(getenv('_'), 'symfony') !== false || stripos($_SERVER['SERVER_SOFTWARE'] ?? '', 'symfony') !== false || stripos($_ENV['SERVER_SOFTWARE'] ?? '', 'symfony') !== false;
|
||||
|
||||
if (!isset($_SERVER['PHP_CLI_ROUTER']) && !$symfony_server) {
|
||||
die("PHP webserver requires a router to run Grav, please use: <pre>php -S {$_SERVER['SERVER_NAME']}:{$_SERVER['SERVER_PORT']} system/router.php</pre>");
|
||||
}
|
||||
}
|
||||
|
||||
// Set timezone to default, falls back to system if php.ini not set
|
||||
date_default_timezone_set(@date_default_timezone_get());
|
||||
|
||||
// Set internal encoding.
|
||||
if (!\extension_loaded('mbstring')) {
|
||||
die("'mbstring' extension is not loaded. This is required for Grav to run correctly");
|
||||
}
|
||||
@ini_set('default_charset', 'UTF-8');
|
||||
mb_internal_encoding('UTF-8');
|
||||
|
||||
// Ensure vendor libraries exist
|
||||
$autoload = __DIR__ . '/vendor/autoload.php';
|
||||
if (!is_file($autoload)) {
|
||||
@@ -43,23 +29,23 @@ if (!is_file($autoload)) {
|
||||
// Register the auto-loader.
|
||||
$loader = require $autoload;
|
||||
|
||||
// Set timezone to default, falls back to system if php.ini not set
|
||||
date_default_timezone_set(@date_default_timezone_get());
|
||||
|
||||
// Set internal encoding.
|
||||
@ini_set('default_charset', 'UTF-8');
|
||||
mb_internal_encoding('UTF-8');
|
||||
|
||||
use Grav\Common\Grav;
|
||||
use RocketTheme\Toolbox\Event\Event;
|
||||
|
||||
// Get the Grav instance
|
||||
$grav = Grav::instance(
|
||||
array(
|
||||
'loader' => $loader
|
||||
)
|
||||
);
|
||||
$grav = Grav::instance(array('loader' => $loader));
|
||||
|
||||
// Process the page
|
||||
try {
|
||||
$grav->process();
|
||||
} catch (\Error $e) {
|
||||
$grav->fireEvent('onFatalException', new Event(array('exception' => $e)));
|
||||
throw $e;
|
||||
} catch (\Exception $e) {
|
||||
} catch (\Error|\Exception $e) {
|
||||
$grav->fireEvent('onFatalException', new Event(array('exception' => $e)));
|
||||
throw $e;
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
/* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved. */
|
||||
|
||||
2
now.json
2
now.json
@@ -1,4 +1,4 @@
|
||||
{
|
||||
{
|
||||
"version": 2,
|
||||
"builds": [{ "src": "*.php", "use": "@now/php" }]
|
||||
}
|
||||
|
||||
12
robots.txt
12
robots.txt
@@ -1,13 +1,21 @@
|
||||
User-agent: *
|
||||
Disallow: /.github/
|
||||
Disallow: /.phan/
|
||||
Disallow: /assets/
|
||||
Disallow: /backup/
|
||||
Disallow: /bin/
|
||||
Disallow: /cache/
|
||||
Disallow: /grav/
|
||||
Disallow: /logs/
|
||||
Disallow: /system/
|
||||
Disallow: /vendor/
|
||||
Disallow: /tests/
|
||||
Disallow: /tmp/
|
||||
Disallow: /user/
|
||||
Disallow: /vendor/
|
||||
Disallow: /webserver-configs/
|
||||
Allow: /user/pages/
|
||||
Allow: /user/themes/
|
||||
Allow: /user/images/
|
||||
Allow: /
|
||||
Allow: *.css$
|
||||
Allow: *.js$
|
||||
Allow: /system/*.js$
|
||||
|
||||
@@ -14,11 +14,8 @@ div.phpdebugbar {
|
||||
padding: 5px 8px;
|
||||
}
|
||||
|
||||
.phpdebugbar div.phpdebugbar-header, .phpdebugbar a.phpdebugbar-restore-btn {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAA/1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4AAAD///8EBAT7+/sLCwv29vYVFRUvLy/t7e3m5ubCwsKxsbE/Pz+mpqZMTEwcHBzy8vLp6emfn5+AgIA2Njbi4uLf39+rq6tzc3NWVlYhISHa2trW1tbS0tLMzMy7u7uZmZmUlJSMjIxvb29kZGRHR0c7Ozt5eXkqKiq1tbWQkJBqampbW1tSUlLHx8eHh4ckJCRDQ0M3wD42AAAAI3RSTlMA/PibTbQ0x76TVAlw4LhZLOuEYCAN9Hjx0a2ppGZEGYw97djhXHwAAATZSURBVFjDlVcHW+MwDO1eFCjj2McNOzvdpXTTXVbL/P+/5SQ7QSSX5Di1X1onfi/Sk+Q4sTDbKqWK+YuznZ2zi3wxVdqK/Zf92M1nT9gnO8rmd398GX6Z3xaoOFoiAQcx3E5efgmeSuN8F6Xg1x3G06l/wjNpMR1B0uif4EhnIuFb+0diIoFXk3IVfokisR+h52GO4JKgyjmfaMhAFNlSaPR7DpwI+lzn/E4QKIqmKIJirxCMP4izBPPZPXhgXwMBYgULw0nfg/BF5scDbslb7QeJ08yqqTEmGYoB95d4H8ETL8+n9wBqrLu6ao3bBsMwAnxISf/9BHcqxNB8Y7cWl3Zz7TAUfPrvAT6AoNEFFXvsjutL01yOuMrtBxnFXsmT/1wQHmdWAFNnI3uI48Yj0FUcHbKf62GfUfr8eeQt7Uk3mQZpZNoVRPEui5vtEz5zFEpgWnyqVBZMc6oaGNriH2hGVZ0OxEvInPeMaZWJBA7vmPbCr5jjws5HBnAUxvDMH40aCIf4G5BjRQSs8E8HFFYf8bGxgDvD55bzGhwWkoBcuIyHR/AMdaCagxXDhtL6tSqoWpd4BMnlIR+Or+rYTK/a3EAGcc6e4AWHISnWv20iCCojsHoVlQdjrMexFF2C7UMg2A2WEGWbQhXN6l3eXC6XGp4b9qxbuEB2EBGBwtocrK90cVG5mbRXm6vmx/0phq1sIAGKDgLOBiN1MrO5a9aDl+D0W6x0Ar9BCTRuIIANa90Y7LrLVRXzwVtDInCqMRWcf2bUOEAsa4wJqFowQALL9EiAtVRk8QC4OW+1pOM9jIaVASwYagyNXDj+W0NcfuZNzjtXOiL0Zzg30Llj+ptfxQs4+vBPNiL5PawFCBkgXpUaVtqGl+A8dgZHL34BcBUQrwPptToW+o37Ku+UH9eYByJIx3YkAeFnMFuGO7S5gEp7YhXxa5OOAM39RXDPXb0qmpROsswZe+twXdU55oUIZAiEv3bD1UFwIYKkmGqytPCDCwKFQCKK0yL7qtSAPX54UAbtsLuBHkb9zyLmPQSNjsSgmQwKUOIfEY8F8t4B34DvndJY9BA8tNBJq1Nev9axmaStFcQLhgYoCTo0salkIaW8OUDdWjMTR2sHPhrAFZqx6cqcKE4pl2BJJ4K6hfwvqNgAnXfKX/HU6X3Zrhnu0k7tLNZtTBRv1hkwTDBY1NzFU6doDYjJbWdQkQhWwuU7/LvhTh3SDoco4ECL4i5dwURbc8NdDZz2IwKicE8d0KIqWetLE3+lL4hvUuGSeRfVWNLfj/gpOw4smBJBkKQHCzlHGwvAj4woB1gq5NGGLSXtORBPnUQPV5/MPVkDMxbpwG7w4x0xL6Ltxka0A/4NBvV09UVk4DoSn/jl2+JQS9q9KYawisAD4CfhsZ4TH3htylsdEHARIQBusqCKyUpymycgbbkkXEXjT3z7/oKQFTFVuZD2FMJHZIDsO5x2d4aAr2jR+GLwZhtAb028/0yJ9J8dE87jQyKObcjtTXT8dH+fDuKF4/eiPwzH44wTf/yUi6wrpRIOZ9lM1EtXAifFI+CJn9+iX/t2xMQwOMth/UZbASi8btAwR9FHWSpJr75g9Oqbin3VDg+SpwlP6k6TB4ex/7JvmcJx8jydy6XPk8eFTKhyfwCgX71MSvaBHgAAAABJRU5ErkJggg==);
|
||||
}
|
||||
|
||||
.phpdebugbar a.phpdebugbar-restore-btn {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAA/1BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeHh4AAAD///8EBAT7+/sLCwv29vYVFRUvLy/t7e3m5ubCwsKxsbE/Pz+mpqZMTEwcHBzy8vLp6emfn5+AgIA2Njbi4uLf39+rq6tzc3NWVlYhISHa2trW1tbS0tLMzMy7u7uZmZmUlJSMjIxvb29kZGRHR0c7Ozt5eXkqKiq1tbWQkJBqampbW1tSUlLHx8eHh4ckJCRDQ0M3wD42AAAAI3RSTlMA/PibTbQ0x76TVAlw4LhZLOuEYCAN9Hjx0a2ppGZEGYw97djhXHwAAATZSURBVFjDlVcHW+MwDO1eFCjj2McNOzvdpXTTXVbL/P+/5SQ7QSSX5Di1X1onfi/Sk+Q4sTDbKqWK+YuznZ2zi3wxVdqK/Zf92M1nT9gnO8rmd398GX6Z3xaoOFoiAQcx3E5efgmeSuN8F6Xg1x3G06l/wjNpMR1B0uif4EhnIuFb+0diIoFXk3IVfokisR+h52GO4JKgyjmfaMhAFNlSaPR7DpwI+lzn/E4QKIqmKIJirxCMP4izBPPZPXhgXwMBYgULw0nfg/BF5scDbslb7QeJ08yqqTEmGYoB95d4H8ETL8+n9wBqrLu6ao3bBsMwAnxISf/9BHcqxNB8Y7cWl3Zz7TAUfPrvAT6AoNEFFXvsjutL01yOuMrtBxnFXsmT/1wQHmdWAFNnI3uI48Yj0FUcHbKf62GfUfr8eeQt7Uk3mQZpZNoVRPEui5vtEz5zFEpgWnyqVBZMc6oaGNriH2hGVZ0OxEvInPeMaZWJBA7vmPbCr5jjws5HBnAUxvDMH40aCIf4G5BjRQSs8E8HFFYf8bGxgDvD55bzGhwWkoBcuIyHR/AMdaCagxXDhtL6tSqoWpd4BMnlIR+Or+rYTK/a3EAGcc6e4AWHISnWv20iCCojsHoVlQdjrMexFF2C7UMg2A2WEGWbQhXN6l3eXC6XGp4b9qxbuEB2EBGBwtocrK90cVG5mbRXm6vmx/0phq1sIAGKDgLOBiN1MrO5a9aDl+D0W6x0Ar9BCTRuIIANa90Y7LrLVRXzwVtDInCqMRWcf2bUOEAsa4wJqFowQALL9EiAtVRk8QC4OW+1pOM9jIaVASwYagyNXDj+W0NcfuZNzjtXOiL0Zzg30Llj+ptfxQs4+vBPNiL5PawFCBkgXpUaVtqGl+A8dgZHL34BcBUQrwPptToW+o37Ku+UH9eYByJIx3YkAeFnMFuGO7S5gEp7YhXxa5OOAM39RXDPXb0qmpROsswZe+twXdU55oUIZAiEv3bD1UFwIYKkmGqytPCDCwKFQCKK0yL7qtSAPX54UAbtsLuBHkb9zyLmPQSNjsSgmQwKUOIfEY8F8t4B34DvndJY9BA8tNBJq1Nev9axmaStFcQLhgYoCTo0salkIaW8OUDdWjMTR2sHPhrAFZqx6cqcKE4pl2BJJ4K6hfwvqNgAnXfKX/HU6X3Zrhnu0k7tLNZtTBRv1hkwTDBY1NzFU6doDYjJbWdQkQhWwuU7/LvhTh3SDoco4ECL4i5dwURbc8NdDZz2IwKicE8d0KIqWetLE3+lL4hvUuGSeRfVWNLfj/gpOw4smBJBkKQHCzlHGwvAj4woB1gq5NGGLSXtORBPnUQPV5/MPVkDMxbpwG7w4x0xL6Ltxka0A/4NBvV09UVk4DoSn/jl2+JQS9q9KYawisAD4CfhsZ4TH3htylsdEHARIQBusqCKyUpymycgbbkkXEXjT3z7/oKQFTFVuZD2FMJHZIDsO5x2d4aAr2jR+GLwZhtAb028/0yJ9J8dE87jQyKObcjtTXT8dH+fDuKF4/eiPwzH44wTf/yUi6wrpRIOZ9lM1EtXAifFI+CJn9+iX/t2xMQwOMth/UZbASi8btAwR9FHWSpJr75g9Oqbin3VDg+SpwlP6k6TB4ex/7JvmcJx8jydy6XPk8eFTKhyfwCgX71MSvaBHgAAAABJRU5ErkJggg==);
|
||||
width: 13px;
|
||||
}
|
||||
|
||||
|
||||
4
system/assets/jquery/jquery-3.x.min.js
vendored
4
system/assets/jquery/jquery-3.x.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -39,14 +39,16 @@ form:
|
||||
.command:
|
||||
type: text
|
||||
label: PLUGIN_ADMIN.COMMAND
|
||||
placeholder: 'cd ~;ls -lah;'
|
||||
placeholder: 'ls'
|
||||
validate:
|
||||
required: true
|
||||
.args:
|
||||
type: text
|
||||
label: PLUGIN_ADMIN.EXTRA_ARGUMENTS
|
||||
placeholder: '-lah'
|
||||
.at:
|
||||
type: cron
|
||||
type: text
|
||||
wrapper_classes: cron-selector
|
||||
label: PLUGIN_ADMIN.SCHEDULER_RUNAT
|
||||
help: PLUGIN_ADMIN.SCHEDULER_RUNAT_HELP
|
||||
placeholder: '* * * * *'
|
||||
|
||||
@@ -177,39 +177,47 @@ form:
|
||||
label: PLUGIN_ADMIN.APPEND_URL_EXT
|
||||
help: PLUGIN_ADMIN.APPEND_URL_EXT_HELP
|
||||
|
||||
pages.redirect_default_route:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.REDIRECT_DEFAULT_ROUTE
|
||||
help: PLUGIN_ADMIN.REDIRECT_DEFAULT_ROUTE_HELP
|
||||
highlight: 0
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
pages.redirect_default_code:
|
||||
type: select
|
||||
size: medium
|
||||
classes: fancy
|
||||
label: PLUGIN_ADMIN.REDIRECT_DEFAULT_CODE
|
||||
help: PLUGIN_ADMIN.REDIRECT_DEFAULT_CODE_HELP
|
||||
default: 302
|
||||
options:
|
||||
301: 301 - Permanent
|
||||
302: 302 - Found
|
||||
303: 303 - Other
|
||||
304: 304 - Not Modified
|
||||
301: PLUGIN_ADMIN.REDIRECT_OPTION_301
|
||||
302: PLUGIN_ADMIN.REDIRECT_OPTION_302
|
||||
303: PLUGIN_ADMIN.REDIRECT_OPTION_303
|
||||
|
||||
pages.redirect_default_route:
|
||||
type: select
|
||||
size: medium
|
||||
classes: fancy
|
||||
label: PLUGIN_ADMIN.REDIRECT_DEFAULT_ROUTE
|
||||
help: PLUGIN_ADMIN.REDIRECT_DEFAULT_ROUTE_HELP
|
||||
default: 0
|
||||
options:
|
||||
0: PLUGIN_ADMIN.REDIRECT_OPTION_NO_REDIRECT
|
||||
1: PLUGIN_ADMIN.REDIRECT_OPTION_DEFAULT_REDIRECT
|
||||
301: PLUGIN_ADMIN.REDIRECT_OPTION_301
|
||||
302: PLUGIN_ADMIN.REDIRECT_OPTION_302
|
||||
validate:
|
||||
type: int
|
||||
|
||||
pages.redirect_trailing_slash:
|
||||
type: toggle
|
||||
type: select
|
||||
size: medium
|
||||
classes: fancy
|
||||
label: PLUGIN_ADMIN.REDIRECT_TRAILING_SLASH
|
||||
help: PLUGIN_ADMIN.REDIRECT_TRAILING_SLASH_HELP
|
||||
highlight: 1
|
||||
default: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
0: PLUGIN_ADMIN.REDIRECT_OPTION_NO_REDIRECT
|
||||
1: PLUGIN_ADMIN.REDIRECT_OPTION_DEFAULT_REDIRECT
|
||||
301: PLUGIN_ADMIN.REDIRECT_OPTION_301
|
||||
302: PLUGIN_ADMIN.REDIRECT_OPTION_302
|
||||
validate:
|
||||
type: bool
|
||||
type: int
|
||||
|
||||
pages.ignore_hidden:
|
||||
type: toggle
|
||||
@@ -241,13 +249,15 @@ form:
|
||||
type: commalist
|
||||
|
||||
pages.hide_empty_folders:
|
||||
type: selectize
|
||||
size: large
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.HIDE_EMPTY_FOLDERS
|
||||
help: PLUGIN_ADMIN.HIDE_EMPTY_FOLDERS_HELP
|
||||
classes: fancy
|
||||
highlight: 0
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: commalist
|
||||
type: bool
|
||||
|
||||
pages.url_taxonomy_filters:
|
||||
type: toggle
|
||||
@@ -438,6 +448,17 @@ form:
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
languages.debug:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.LANGUAGE_DEBUG
|
||||
help: PLUGIN_ADMIN.LANGUAGE_DEBUG_HELP
|
||||
highlight: 0
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
http_headers:
|
||||
type: tab
|
||||
title: PLUGIN_ADMIN.HTTP_HEADERS
|
||||
@@ -544,6 +565,15 @@ form:
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
pages.markdown.valid_link_attributes:
|
||||
type: selectize
|
||||
size: large
|
||||
label: PLUGIN_ADMIN.VALID_LINK_ATTRIBUTES
|
||||
help: PLUGIN_ADMIN.VALID_LINK_ATTRIBUTES_HELP
|
||||
placeholder: "rel, target, id, class, classes"
|
||||
classes: fancy
|
||||
validate:
|
||||
type: commalist
|
||||
|
||||
caching:
|
||||
type: tab
|
||||
@@ -589,7 +619,6 @@ form:
|
||||
file: File
|
||||
apc: APC
|
||||
apcu: APCu
|
||||
xcache: Xcache
|
||||
memcache: Memcache
|
||||
memcached: Memcached
|
||||
wincache: WinCache
|
||||
@@ -627,7 +656,7 @@ form:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.CLEAR_IMAGES_BY_DEFAULT
|
||||
help: PLUGIN_ADMIN.CLEAR_IMAGES_BY_DEFAULT_HELP
|
||||
highlight: 1
|
||||
highlight: 0
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
@@ -730,6 +759,74 @@ form:
|
||||
size: small
|
||||
label: PLUGIN_ADMIN.REDIS_PASSWORD
|
||||
|
||||
cache.redis.database:
|
||||
type: text
|
||||
size: medium
|
||||
label: PLUGIN_ADMIN.REDIS_DATABASE
|
||||
help: PLUGIN_ADMIN.REDIS_DATABASE_HELP
|
||||
placeholder: "0"
|
||||
validate:
|
||||
type: number
|
||||
min: 0
|
||||
|
||||
flex_caching:
|
||||
type: section
|
||||
title: PLUGIN_ADMIN.FLEX_CACHING
|
||||
|
||||
flex.cache.index.enabled:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.FLEX_INDEX_CACHE_ENABLED
|
||||
highlight: 1
|
||||
default: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.ENABLED
|
||||
0: PLUGIN_ADMIN.DISABLED
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
flex.cache.index.lifetime:
|
||||
type: text
|
||||
label: PLUGIN_ADMIN.FLEX_INDEX_CACHE_LIFETIME
|
||||
default: 60
|
||||
validate:
|
||||
type: int
|
||||
|
||||
flex.cache.object.enabled:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.FLEX_OBJECT_CACHE_ENABLED
|
||||
highlight: 1
|
||||
default: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.ENABLED
|
||||
0: PLUGIN_ADMIN.DISABLED
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
flex.cache.object.lifetime:
|
||||
type: text
|
||||
label: PLUGIN_ADMIN.FLEX_OBJECT_CACHE_LIFETIME
|
||||
default: 600
|
||||
validate:
|
||||
type: int
|
||||
|
||||
flex.cache.render.enabled:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.FLEX_RENDER_CACHE_ENABLED
|
||||
highlight: 1
|
||||
default: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.ENABLED
|
||||
0: PLUGIN_ADMIN.DISABLED
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
flex.cache.render.lifetime:
|
||||
type: text
|
||||
label: PLUGIN_ADMIN.FLEX_RENDER_CACHE_LIFETIME
|
||||
default: 600
|
||||
validate:
|
||||
type: int
|
||||
|
||||
twig:
|
||||
type: tab
|
||||
title: PLUGIN_ADMIN.TWIG_TEMPLATING
|
||||
@@ -777,7 +874,8 @@ form:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.AUTOESCAPE_VARIABLES
|
||||
help: PLUGIN_ADMIN.AUTOESCAPE_VARIABLES_HELP
|
||||
highlight: 0
|
||||
highlight: 1
|
||||
default: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
@@ -800,9 +898,45 @@ form:
|
||||
title: PLUGIN_ADMIN.ASSETS
|
||||
|
||||
fields:
|
||||
assets_section:
|
||||
general_config_section:
|
||||
type: section
|
||||
title: PLUGIN_ADMIN.ASSETS
|
||||
title: PLUGIN_ADMIN.GENERAL_CONFIG
|
||||
underline: true
|
||||
|
||||
assets.enable_asset_timestamp:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.ENABLED_TIMESTAMPS_ON_ASSETS
|
||||
help: PLUGIN_ADMIN.ENABLED_TIMESTAMPS_ON_ASSETS_HELP
|
||||
highlight: 0
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
assets.enable_asset_sri:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.ENABLED_SRI_ON_ASSETS
|
||||
help: PLUGIN_ADMIN.ENABLED_SRI_ON_ASSETS_HELP
|
||||
highlight: 0
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
assets.collections:
|
||||
type: multilevel
|
||||
label: PLUGIN_ADMIN.COLLECTIONS
|
||||
placeholder_key: collection_name
|
||||
placeholder_value: collection_path
|
||||
validate:
|
||||
type: array
|
||||
|
||||
|
||||
css_assets_section:
|
||||
type: section
|
||||
title: PLUGIN_ADMIN.CSS_ASSETS
|
||||
underline: true
|
||||
|
||||
assets.css_pipeline:
|
||||
@@ -871,6 +1005,11 @@ form:
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
js_assets_section:
|
||||
type: section
|
||||
title: PLUGIN_ADMIN.JS_ASSETS
|
||||
underline: true
|
||||
|
||||
assets.js_pipeline:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.JAVASCRIPT_PIPELINE
|
||||
@@ -915,10 +1054,15 @@ form:
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
assets.enable_asset_timestamp:
|
||||
js_module_assets_section:
|
||||
type: section
|
||||
title: PLUGIN_ADMIN.JS_MODULE_ASSETS
|
||||
underline: true
|
||||
|
||||
assets.js_module_pipeline:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.ENABLED_TIMESTAMPS_ON_ASSETS
|
||||
help: PLUGIN_ADMIN.ENABLED_TIMESTAMPS_ON_ASSETS_HELP
|
||||
label: PLUGIN_ADMIN.JAVASCRIPT_MODULE_PIPELINE
|
||||
help: PLUGIN_ADMIN.JAVASCRIPT_MODULE_PIPELINE_HELP
|
||||
highlight: 0
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
@@ -926,13 +1070,29 @@ form:
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
assets.collections:
|
||||
type: multilevel
|
||||
label: PLUGIN_ADMIN.COLLECTIONS
|
||||
placeholder_key: collection_name
|
||||
placeholder_value: collection_path
|
||||
assets.js_module_pipeline_include_externals:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.JAVASCRIPT_MODULE_PIPELINE_INCLUDE_EXTERNALS
|
||||
help: PLUGIN_ADMIN.JAVASCRIPT_MODULE_PIPELINE_INCLUDE_EXTERNALS_HELP
|
||||
highlight: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: array
|
||||
type: bool
|
||||
|
||||
assets.js_module_pipeline_before_excludes:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.JAVASCRIPT_MODULE_PIPELINE_BEFORE_EXCLUDES
|
||||
help: PLUGIN_ADMIN.JAVASCRIPT_MODULE_PIPELINE_BEFORE_EXCLUDES_HELP
|
||||
highlight: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
|
||||
|
||||
errors:
|
||||
type: tab
|
||||
@@ -1006,6 +1166,13 @@ form:
|
||||
local6: local6
|
||||
local7: local7
|
||||
|
||||
log.syslog.tag:
|
||||
type: text
|
||||
size: small
|
||||
label: PLUGIN_ADMIN.SYSLOG_TAG
|
||||
help: PLUGIN_ADMIN.SYSLOG_TAG_HELP
|
||||
placeholder: "grav"
|
||||
|
||||
debugger:
|
||||
type: tab
|
||||
title: PLUGIN_ADMIN.DEBUGGER
|
||||
@@ -1114,13 +1281,24 @@ form:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.IMAGES_AUTO_FIX_ORIENTATION
|
||||
help: PLUGIN_ADMIN.IMAGES_AUTO_FIX_ORIENTATION_HELP
|
||||
highlight: 0
|
||||
highlight: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
images.defaults.loading:
|
||||
type: select
|
||||
size: small
|
||||
label: PLUGIN_ADMIN.IMAGES_LOADING
|
||||
help: PLUGIN_ADMIN.IMAGES_LOADING_HELP
|
||||
highlight: auto
|
||||
options:
|
||||
auto: Auto
|
||||
lazy: Lazy
|
||||
eager: Eager
|
||||
|
||||
images.seofriendly:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.IMAGES_SEOFRIENDLY
|
||||
@@ -1154,7 +1332,6 @@ form:
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
|
||||
media.allowed_fallback_types:
|
||||
type: selectize
|
||||
size: large
|
||||
@@ -1173,6 +1350,45 @@ form:
|
||||
validate:
|
||||
type: commalist
|
||||
|
||||
section_images_cls:
|
||||
type: section
|
||||
title: PLUGIN_ADMIN.IMAGES_CLS_TITLE
|
||||
underline: true
|
||||
|
||||
images.cls.auto_sizes:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.IMAGES_CLS_AUTO_SIZES
|
||||
help: PLUGIN_ADMIN.IMAGES_CLS_AUTO_SIZES_HELP
|
||||
highlight: 0
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
images.cls.aspect_ratio:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.IMAGES_CLS_ASPECT_RATIO
|
||||
help: PLUGIN_ADMIN.IMAGES_CLS_ASPECT_RATIO_HELP
|
||||
highlight: 0
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
images.cls.retina_scale:
|
||||
type: select
|
||||
label: PLUGIN_ADMIN.IMAGES_CLS_RETINA_SCALE
|
||||
help: PLUGIN_ADMIN.IMAGES_CLS_RETINA_SCALE_HELP
|
||||
size: small
|
||||
highlight: 1
|
||||
options:
|
||||
1: 1X
|
||||
2: 2X
|
||||
3: 3X
|
||||
4: 4X
|
||||
|
||||
session:
|
||||
type: tab
|
||||
title: PLUGIN_ADMIN.SESSION
|
||||
@@ -1246,6 +1462,18 @@ form:
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
session.secure_https:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.SESSION_SECURE_HTTPS
|
||||
help: PLUGIN_ADMIN.SESSION_SECURE_HTTPS_HELP
|
||||
highlight: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
default: true
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
session.httponly:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.SESSION_HTTPONLY
|
||||
@@ -1258,12 +1486,24 @@ form:
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
session.domain:
|
||||
type: text
|
||||
size: small
|
||||
label: PLUGIN_ADMIN.SESSION_DOMAIN
|
||||
help: PLUGIN_ADMIN.SESSION_DOMAIN_HELP
|
||||
|
||||
session.path:
|
||||
type: text
|
||||
size: small
|
||||
label: PLUGIN_ADMIN.SESSION_PATH
|
||||
help: PLUGIN_ADMIN.SESSION_PATH_HELP
|
||||
|
||||
session.samesite:
|
||||
type: text
|
||||
size: small
|
||||
label: PLUGIN_ADMIN.SESSION_SAMESITE
|
||||
help: PLUGIN_ADMIN.SESSION_SAMESITE_HELP
|
||||
|
||||
session.split:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.SESSION_SPLIT
|
||||
@@ -1286,6 +1526,10 @@ form:
|
||||
title: PLUGIN_ADMIN.ADVANCED
|
||||
underline: true
|
||||
|
||||
gpm_section:
|
||||
type: section
|
||||
title: PLUGIN_ADMIN.GPM_SECTION
|
||||
|
||||
gpm.releases:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.GPM_RELEASES
|
||||
@@ -1295,23 +1539,6 @@ form:
|
||||
stable: PLUGIN_ADMIN.STABLE
|
||||
testing: PLUGIN_ADMIN.TESTING
|
||||
|
||||
gpm.proxy_url:
|
||||
type: text
|
||||
size: medium
|
||||
placeholder: "e.g. 127.0.0.1:3128"
|
||||
label: PLUGIN_ADMIN.PROXY_URL
|
||||
help: PLUGIN_ADMIN.PROXY_URL_HELP
|
||||
|
||||
gpm.method:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.GPM_METHOD
|
||||
highlight: auto
|
||||
help: PLUGIN_ADMIN.GPM_METHOD_HELP
|
||||
options:
|
||||
auto: PLUGIN_ADMIN.AUTO
|
||||
fopen: PLUGIN_ADMIN.FOPEN
|
||||
curl: PLUGIN_ADMIN.CURL
|
||||
|
||||
gpm.official_gpm_only:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.GPM_OFFICIAL_ONLY
|
||||
@@ -1324,17 +1551,80 @@ form:
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
gpm.verify_peer:
|
||||
http_section:
|
||||
type: section
|
||||
title: PLUGIN_ADMIN.HTTP_SECTION
|
||||
|
||||
http.method:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.GPM_VERIFY_PEER
|
||||
label: PLUGIN_ADMIN.GPM_METHOD
|
||||
highlight: auto
|
||||
help: PLUGIN_ADMIN.GPM_METHOD_HELP
|
||||
options:
|
||||
auto: PLUGIN_ADMIN.AUTO
|
||||
fopen: PLUGIN_ADMIN.FOPEN
|
||||
curl: PLUGIN_ADMIN.CURL
|
||||
|
||||
http.enable_proxy:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.SSL_ENABLE_PROXY
|
||||
highlight: 1
|
||||
help: PLUGIN_ADMIN.GPM_VERIFY_PEER_HELP
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
default: false
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
http.proxy_url:
|
||||
type: text
|
||||
size: medium
|
||||
placeholder: "e.g. 127.0.0.1:3128"
|
||||
label: PLUGIN_ADMIN.PROXY_URL
|
||||
help: PLUGIN_ADMIN.PROXY_URL_HELP
|
||||
|
||||
http.proxy_cert_path:
|
||||
type: text
|
||||
size: medium
|
||||
placeholder: "e.g. /Users/bob/certs/"
|
||||
label: PLUGIN_ADMIN.PROXY_CERT
|
||||
help: PLUGIN_ADMIN.PROXY_CERT_HELP
|
||||
|
||||
http.verify_peer:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.SSL_VERIFY_PEER
|
||||
highlight: 1
|
||||
help: PLUGIN_ADMIN.SSL_VERIFY_PEER_HELP
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
http.verify_host:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.SSL_VERIFY_HOST
|
||||
highlight: 1
|
||||
help: PLUGIN_ADMIN.SSL_VERIFY_HOST_HELP
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
http.concurrent_connections:
|
||||
type: number
|
||||
size: x-small
|
||||
label: PLUGIN_ADMIN.HTTP_CONNECTIONS
|
||||
help: PLUGIN_ADMIN.HTTP_CONNECTIONS_HELP
|
||||
validate:
|
||||
min: 1
|
||||
max: 20
|
||||
|
||||
misc_section:
|
||||
type: section
|
||||
title: PLUGIN_ADMIN.MISC_SECTION
|
||||
|
||||
reverse_proxy_setup:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.REVERSE_PROXY
|
||||
@@ -1432,17 +1722,56 @@ form:
|
||||
label: PLUGIN_ADMIN.CUSTOM_BASE_URL
|
||||
help: PLUGIN_ADMIN.CUSTOM_BASE_URL_HELP
|
||||
|
||||
accounts.type:
|
||||
type: hidden
|
||||
http_x_forwarded.protocol:
|
||||
type: toggle
|
||||
label: HTTP_X_FORWARDED_PROTO Enabled
|
||||
highlight: 1
|
||||
default: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
http_x_forwarded.host:
|
||||
type: toggle
|
||||
label: HTTP_X_FORWARDED_HOST Enabled
|
||||
highlight: 0
|
||||
default: 0
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
http_x_forwarded.port:
|
||||
type: toggle
|
||||
label: HTTP_X_FORWARDED_PORT Enabled
|
||||
highlight: 1
|
||||
default: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
http_x_forwarded.ip:
|
||||
type: toggle
|
||||
label: HTTP_X_FORWARDED IP Enabled
|
||||
highlight: 1
|
||||
default: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
accounts.storage:
|
||||
type: hidden
|
||||
|
||||
strict_mode.blueprint_compat:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.STRICT_BLUEPRINT_COMPAT
|
||||
highlight: 1
|
||||
default: 1
|
||||
highlight: 0
|
||||
default: 0
|
||||
help: PLUGIN_ADMIN.STRICT_BLUEPRINT_COMPAT_HELP
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
@@ -1453,8 +1782,8 @@ form:
|
||||
strict_mode.yaml_compat:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.STRICT_YAML_COMPAT
|
||||
highlight: 1
|
||||
default: 1
|
||||
highlight: 0
|
||||
default: 0
|
||||
help: PLUGIN_ADMIN.STRICT_YAML_COMPAT_HELP
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
@@ -1465,8 +1794,8 @@ form:
|
||||
strict_mode.twig_compat:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.STRICT_TWIG_COMPAT
|
||||
highlight: 1
|
||||
default: 1
|
||||
highlight: 0
|
||||
default: 0
|
||||
help: PLUGIN_ADMIN.STRICT_TWIG_COMPAT_HELP
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
@@ -1474,32 +1803,15 @@ form:
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
experimental:
|
||||
|
||||
accounts:
|
||||
type: tab
|
||||
title: PLUGIN_ADMIN.EXPERIMENTAL
|
||||
title: PLUGIN_ADMIN.ACCOUNTS
|
||||
|
||||
fields:
|
||||
experimental_section:
|
||||
type: section
|
||||
title: PLUGIN_ADMIN.EXPERIMENTAL
|
||||
underline: true
|
||||
|
||||
flex_pages:
|
||||
type: section
|
||||
title: Flex Pages
|
||||
|
||||
pages.type:
|
||||
type: select
|
||||
label: PLUGIN_ADMIN.PAGES_TYPE
|
||||
highlight: stable
|
||||
help: PLUGIN_ADMIN.PAGES_TYPE_HELP
|
||||
options:
|
||||
regular: PLUGIN_ADMIN.REGULAR
|
||||
flex: PLUGIN_ADMIN.FLEX
|
||||
|
||||
flex_accounts:
|
||||
type: section
|
||||
title: Flex Accounts
|
||||
title: User Accounts
|
||||
|
||||
accounts.type:
|
||||
type: select
|
||||
@@ -1519,60 +1831,40 @@ form:
|
||||
file: PLUGIN_ADMIN.FILE
|
||||
folder: PLUGIN_ADMIN.FOLDER
|
||||
|
||||
flex_caching:
|
||||
type: section
|
||||
title: PLUGIN_ADMIN.FLEX_CACHING
|
||||
|
||||
flex.cache.index.enabled:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.FLEX_INDEX_CACHE_ENABLED
|
||||
highlight: 1
|
||||
default: 1
|
||||
accounts.avatar:
|
||||
type: select
|
||||
label: PLUGIN_ADMIN.AVATAR
|
||||
default: gravatar
|
||||
help: PLUGIN_ADMIN.AVATAR_HELP
|
||||
options:
|
||||
1: PLUGIN_ADMIN.ENABLED
|
||||
0: PLUGIN_ADMIN.DISABLED
|
||||
validate:
|
||||
type: bool
|
||||
multiavatar: Multiavatar [local]
|
||||
gravatar: Gravatar [external]
|
||||
|
||||
flex.cache.index.lifetime:
|
||||
type: text
|
||||
label: PLUGIN_ADMIN.FLEX_INDEX_CACHE_LIFETIME
|
||||
default: 60
|
||||
validate:
|
||||
type: int
|
||||
# experimental:
|
||||
# type: tab
|
||||
# title: PLUGIN_ADMIN.EXPERIMENTAL
|
||||
#
|
||||
# fields:
|
||||
# experimental_section:
|
||||
# type: section
|
||||
# title: PLUGIN_ADMIN.EXPERIMENTAL
|
||||
# underline: true
|
||||
#
|
||||
# flex_pages:
|
||||
# type: section
|
||||
# title: Flex Pages
|
||||
#
|
||||
# pages.type:
|
||||
# type: select
|
||||
# label: PLUGIN_ADMIN.PAGES_TYPE
|
||||
# highlight: regular
|
||||
# help: PLUGIN_ADMIN.PAGES_TYPE_HELP
|
||||
# options:
|
||||
# regular: PLUGIN_ADMIN.REGULAR
|
||||
# flex: PLUGIN_ADMIN.FLEX
|
||||
#
|
||||
# pages.type:
|
||||
# type: hidden
|
||||
|
||||
flex.cache.object.enabled:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.FLEX_OBJECT_CACHE_ENABLED
|
||||
highlight: 1
|
||||
default: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.ENABLED
|
||||
0: PLUGIN_ADMIN.DISABLED
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
flex.cache.object.lifetime:
|
||||
type: text
|
||||
label: PLUGIN_ADMIN.FLEX_OBJECT_CACHE_LIFETIME
|
||||
default: 600
|
||||
validate:
|
||||
type: int
|
||||
|
||||
flex.cache.render.enabled:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.FLEX_RENDER_CACHE_ENABLED
|
||||
highlight: 1
|
||||
default: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.ENABLED
|
||||
0: PLUGIN_ADMIN.DISABLED
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
flex.cache.render.lifetime:
|
||||
type: text
|
||||
label: PLUGIN_ADMIN.FLEX_RENDER_CACHE_LIFETIME
|
||||
default: 600
|
||||
validate:
|
||||
type: int
|
||||
|
||||
@@ -2,7 +2,7 @@ title: Flex User Accounts
|
||||
description: Manage your User Accounts in Flex.
|
||||
type: flex-objects
|
||||
|
||||
# Deprecated in Grav 1.7.0-rc.4: file was renamed.
|
||||
# Deprecated in Grav 1.7.0-rc.4: file was renamed to user-accounts.yaml
|
||||
extends@:
|
||||
type: user-accounts
|
||||
context: blueprints://flex
|
||||
|
||||
17
system/blueprints/flex/configure/compat.yaml
Normal file
17
system/blueprints/flex/configure/compat.yaml
Normal file
@@ -0,0 +1,17 @@
|
||||
form:
|
||||
compatibility:
|
||||
type: tab
|
||||
title: Compatibility
|
||||
fields:
|
||||
object.compat.events:
|
||||
type: toggle
|
||||
toggleable: true
|
||||
label: Admin event compatibility
|
||||
help: Enables onAdminSave and onAdminAfterSave events for plugins
|
||||
highlight: 1
|
||||
default: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.ENABLED
|
||||
0: PLUGIN_ADMIN.DISABLED
|
||||
validate:
|
||||
type: bool
|
||||
@@ -103,6 +103,9 @@ config:
|
||||
label: PLUGIN_ADMIN.ADD
|
||||
|
||||
edit:
|
||||
title:
|
||||
template: "{% if object.root %}Root <small>( <root> )</small>{% else %}{{ (form.value('header.title') ?? form.value('folder'))|e }} <small>( {{ (object.getRoute().toString(false) ?: '/')|e }} )</small>{% endif %}"
|
||||
|
||||
# TODO: not used yet
|
||||
buttons:
|
||||
back:
|
||||
@@ -173,7 +176,7 @@ config:
|
||||
indexed: true
|
||||
# Set default ordering of the pages
|
||||
ordering:
|
||||
key: ASC
|
||||
storage_key: ASC
|
||||
search:
|
||||
# Search options
|
||||
options:
|
||||
@@ -181,9 +184,16 @@ config:
|
||||
# Fields to be searched
|
||||
fields:
|
||||
- key
|
||||
- slug
|
||||
- menu
|
||||
- title
|
||||
- name
|
||||
|
||||
blueprints:
|
||||
configure:
|
||||
fields:
|
||||
import@:
|
||||
type: configure/compat
|
||||
context: blueprints://flex
|
||||
|
||||
# Regular form definition
|
||||
form:
|
||||
|
||||
@@ -56,6 +56,8 @@ config:
|
||||
username:
|
||||
link: edit
|
||||
search: true
|
||||
field:
|
||||
label: PLUGIN_ADMIN.USERNAME
|
||||
email:
|
||||
search: true
|
||||
fullname:
|
||||
@@ -112,12 +114,34 @@ config:
|
||||
folder: 'account://'
|
||||
pattern: '{FOLDER}/{KEY}{EXT}'
|
||||
indexed: true
|
||||
key: username
|
||||
case_sensitive: false
|
||||
search:
|
||||
options:
|
||||
contains: 1
|
||||
fields:
|
||||
- key
|
||||
- email
|
||||
- username
|
||||
- fullname
|
||||
|
||||
relationships:
|
||||
media:
|
||||
type: media
|
||||
cardinality: to-many
|
||||
avatar:
|
||||
type: media
|
||||
cardinality: to-one
|
||||
# roles:
|
||||
# type: user-groups
|
||||
# cardinality: to-many
|
||||
|
||||
blueprints:
|
||||
configure:
|
||||
fields:
|
||||
import@:
|
||||
type: configure/compat
|
||||
context: blueprints://flex
|
||||
|
||||
# Regular form definition
|
||||
form:
|
||||
|
||||
@@ -18,6 +18,7 @@ config:
|
||||
configure:
|
||||
path: '/accounts/configure'
|
||||
redirects:
|
||||
'/groups': '/accounts/groups'
|
||||
'/accounts': '/accounts/groups'
|
||||
|
||||
# Permissions
|
||||
@@ -112,4 +113,12 @@ config:
|
||||
fields:
|
||||
- key
|
||||
- groupname
|
||||
- readableName
|
||||
- description
|
||||
|
||||
blueprints:
|
||||
configure:
|
||||
fields:
|
||||
import@:
|
||||
type: configure/compat
|
||||
context: blueprints://flex
|
||||
|
||||
@@ -121,7 +121,7 @@ form:
|
||||
underline: true
|
||||
|
||||
folder:
|
||||
type: text
|
||||
type: folder-slug
|
||||
label: PLUGIN_ADMIN.FOLDER_NAME
|
||||
validate:
|
||||
rule: slug
|
||||
@@ -320,6 +320,18 @@ form:
|
||||
|
||||
fields:
|
||||
|
||||
header.redirect_default_route:
|
||||
type: toggle
|
||||
toggleable: true
|
||||
label: PLUGIN_ADMIN.REDIRECT_DEFAULT_ROUTE
|
||||
help: PLUGIN_ADMIN.REDIRECT_DEFAULT_ROUTE_HELP
|
||||
config-highlight@: system.pages.redirect_default_route
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
header.routes.default:
|
||||
type: text
|
||||
toggleable: true
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
title: PLUGIN_ADMIN:EXTERNAL
|
||||
title: PLUGIN_ADMIN.EXTERNAL
|
||||
extends@:
|
||||
type: default
|
||||
context: blueprints://pages
|
||||
type: default
|
||||
context: blueprints://pages
|
||||
|
||||
form:
|
||||
validation: loose
|
||||
@@ -29,16 +29,16 @@ form:
|
||||
unset@: true
|
||||
|
||||
header.external_url:
|
||||
type: text
|
||||
label: PLUGIN_ADMIN.EXTERNAL_URL
|
||||
placeholder: https://getgrav.org
|
||||
validate:
|
||||
required: true
|
||||
type: text
|
||||
label: PLUGIN_ADMIN.EXTERNAL_URL
|
||||
placeholder: https://getgrav.org
|
||||
validate:
|
||||
required: true
|
||||
|
||||
options:
|
||||
fields:
|
||||
|
||||
publishing:
|
||||
|
||||
fields:
|
||||
|
||||
header.date:
|
||||
|
||||
@@ -7,7 +7,7 @@ form:
|
||||
|
||||
fields:
|
||||
|
||||
header.visibility_requires_access:
|
||||
header.login.visibility_requires_access:
|
||||
type: toggle
|
||||
toggleable: true
|
||||
label: PLUGIN_ADMIN.PAGE_VISIBILITY_REQUIRES_ACCESS
|
||||
@@ -51,17 +51,13 @@ form:
|
||||
type: bool
|
||||
|
||||
header.permissions.authors:
|
||||
type: list
|
||||
type: array
|
||||
toggleable: true
|
||||
value_only: true
|
||||
placeholder_value: PLUGIN_ADMIN.USERNAME
|
||||
label: PLUGIN_ADMIN.PAGE_AUTHORS
|
||||
help: PLUGIN_ADMIN.PAGE_AUTHORS_HELP
|
||||
|
||||
fields:
|
||||
value:
|
||||
type: text
|
||||
placeholder: PLUGIN_ADMIN.USERNAME
|
||||
style: vertical
|
||||
|
||||
header.permissions.groups:
|
||||
ignore@: true
|
||||
type: acl_picker
|
||||
|
||||
@@ -11,10 +11,21 @@ form:
|
||||
avatar:
|
||||
type: file
|
||||
size: large
|
||||
destination: 'user://accounts/avatars'
|
||||
destination: 'account://avatars'
|
||||
multiple: false
|
||||
random_name: true
|
||||
|
||||
multiavatar_only:
|
||||
type: conditional
|
||||
condition: config.system.accounts.avatar == 'multiavatar'
|
||||
fields:
|
||||
avatar_hash:
|
||||
type: text
|
||||
label: ''
|
||||
placeholder: 'e.g. dceaadcfda491f4e45'
|
||||
description: PLUGIN_ADMIN.AVATAR_HASH
|
||||
size: large
|
||||
|
||||
content:
|
||||
type: section
|
||||
title: PLUGIN_ADMIN.ACCOUNT
|
||||
@@ -67,6 +78,15 @@ form:
|
||||
default: 'en'
|
||||
help: PLUGIN_ADMIN.LANGUAGE_HELP
|
||||
|
||||
content_editor:
|
||||
type: select
|
||||
label: PLUGIN_ADMIN.CONTENT_EDITOR
|
||||
size: medium
|
||||
classes: fancy
|
||||
data-options@: 'Grav\Plugin\Admin\Admin::contentEditor'
|
||||
default: 'default'
|
||||
help: PLUGIN_ADMIN.CONTENT_EDITOR_HELP
|
||||
|
||||
twofa_check:
|
||||
type: conditional
|
||||
condition: config.plugins.admin.twofa_enabled
|
||||
@@ -98,6 +118,14 @@ form:
|
||||
label: PLUGIN_ADMIN.2FA_SECRET
|
||||
sublabel: PLUGIN_ADMIN.2FA_SECRET_HELP
|
||||
|
||||
yubikey_id:
|
||||
type: text
|
||||
label: PLUGIN_ADMIN.YUBIKEY_ID
|
||||
description: PLUGIN_ADMIN.YUBIKEY_HELP
|
||||
size: small
|
||||
maxlength: 12
|
||||
|
||||
|
||||
|
||||
security:
|
||||
security@: admin.super
|
||||
@@ -112,7 +140,7 @@ form:
|
||||
multiple: true
|
||||
size: large
|
||||
label: PLUGIN_ADMIN.GROUPS
|
||||
data-options@: '\Grav\Common\User\Group::groupNames'
|
||||
data-options@: 'Grav\Common\Flex\Types\UserGroups\UserGroupObject::groupNames'
|
||||
classes: fancy
|
||||
help: PLUGIN_ADMIN.GROUPS_HELP
|
||||
validate:
|
||||
|
||||
@@ -13,6 +13,6 @@ form:
|
||||
label: PLUGIN_ADMIN.USERNAME
|
||||
help: PLUGIN_ADMIN.USERNAME_HELP
|
||||
unset-disabled@: true
|
||||
unset-readonly@: true
|
||||
unset-readonly@: true
|
||||
validate:
|
||||
required: true
|
||||
|
||||
@@ -1,48 +1,55 @@
|
||||
title: Group
|
||||
rules:
|
||||
slug:
|
||||
pattern: '[a-zA-Zа-яA-Я0-9_\-]+'
|
||||
min: 1
|
||||
max: 200
|
||||
|
||||
form:
|
||||
validation: loose
|
||||
validation: loose
|
||||
|
||||
fields:
|
||||
groupname:
|
||||
type: text
|
||||
size: large
|
||||
label: PLUGIN_ADMIN.GROUP_NAME
|
||||
flex-disabled@: exists
|
||||
flex-readonly@: exists
|
||||
validate:
|
||||
required: true
|
||||
fields:
|
||||
groupname:
|
||||
type: text
|
||||
size: large
|
||||
label: PLUGIN_ADMIN.GROUP_NAME
|
||||
flex-disabled@: exists
|
||||
flex-readonly@: exists
|
||||
validate:
|
||||
required: true
|
||||
rule: slug
|
||||
|
||||
readableName:
|
||||
type: text
|
||||
size: large
|
||||
label: PLUGIN_ADMIN.DISPLAY_NAME
|
||||
readableName:
|
||||
type: text
|
||||
size: large
|
||||
label: PLUGIN_ADMIN.DISPLAY_NAME
|
||||
|
||||
description:
|
||||
type: text
|
||||
size: large
|
||||
label: PLUGIN_ADMIN.DESCRIPTION
|
||||
description:
|
||||
type: text
|
||||
size: large
|
||||
label: PLUGIN_ADMIN.DESCRIPTION
|
||||
|
||||
icon:
|
||||
type: text
|
||||
size: small
|
||||
label: PLUGIN_ADMIN.ICON
|
||||
icon:
|
||||
type: text
|
||||
size: small
|
||||
label: PLUGIN_ADMIN.ICON
|
||||
|
||||
enabled:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.ENABLED
|
||||
highlight: 1
|
||||
default: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
enabled:
|
||||
type: toggle
|
||||
label: PLUGIN_ADMIN.ENABLED
|
||||
highlight: 1
|
||||
default: 1
|
||||
options:
|
||||
1: PLUGIN_ADMIN.YES
|
||||
0: PLUGIN_ADMIN.NO
|
||||
validate:
|
||||
type: bool
|
||||
|
||||
access:
|
||||
type: permissions
|
||||
check_authorize: false
|
||||
label: PLUGIN_ADMIN.PERMISSIONS
|
||||
ignore_empty: true
|
||||
validate:
|
||||
type: array
|
||||
value_type: bool
|
||||
access:
|
||||
type: permissions
|
||||
check_authorize: false
|
||||
label: PLUGIN_ADMIN.PERMISSIONS
|
||||
ignore_empty: true
|
||||
validate:
|
||||
type: array
|
||||
value_type: bool
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
title: PLUGIN_ADMIN_PRO.ADD_GROUP
|
||||
|
||||
rules:
|
||||
slug:
|
||||
pattern: '[a-zA-Zа-яA-Я0-9_\-]+'
|
||||
min: 1
|
||||
max: 200
|
||||
|
||||
form:
|
||||
validation: loose
|
||||
fields:
|
||||
@@ -14,3 +20,4 @@ form:
|
||||
help: PLUGIN_ADMIN_PRO.GROUP_NAME_HELP
|
||||
validate:
|
||||
required: true
|
||||
rule: slug
|
||||
|
||||
@@ -24,6 +24,14 @@ types:
|
||||
type: image
|
||||
thumb: media/thumb-png.png
|
||||
mime: image/png
|
||||
webp:
|
||||
type: image
|
||||
thumb: media/thumb-webp.png
|
||||
mime: image/webp
|
||||
avif:
|
||||
type: image
|
||||
thumb: media/thumb.png
|
||||
mime: image/avif
|
||||
gif:
|
||||
type: animated
|
||||
thumb: media/thumb-gif.png
|
||||
@@ -87,7 +95,7 @@ types:
|
||||
aif:
|
||||
type: audio
|
||||
thumb: media/thumb-aif.png
|
||||
mime: audio/aif
|
||||
mime: audio/aiff
|
||||
txt:
|
||||
type: file
|
||||
thumb: media/thumb-txt.png
|
||||
@@ -103,7 +111,7 @@ types:
|
||||
docx:
|
||||
type: file
|
||||
thumb: media/thumb-docx.png
|
||||
mime: application/msword
|
||||
mime: application/vnd.openxmlformats-officedocument.wordprocessingml.document
|
||||
xls:
|
||||
type: file
|
||||
thumb: media/thumb-xls.png
|
||||
@@ -111,7 +119,7 @@ types:
|
||||
xlsx:
|
||||
type: file
|
||||
thumb: media/thumb-xlsx.png
|
||||
mime: application/vnd.ms-excel
|
||||
mime: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
||||
ppt:
|
||||
type: file
|
||||
thumb: media/thumb-ppt.png
|
||||
@@ -119,7 +127,7 @@ types:
|
||||
pptx:
|
||||
type: file
|
||||
thumb: media/thumb-pptx.png
|
||||
mime: application/vnd.ms-powerpoint
|
||||
mime: application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||
pps:
|
||||
type: file
|
||||
thumb: media/thumb-pps.png
|
||||
@@ -191,7 +199,7 @@ types:
|
||||
gz:
|
||||
type: file
|
||||
thumb: media/thumb-gz.png
|
||||
mime: application/gzip
|
||||
mime: application/x-gzip
|
||||
tar:
|
||||
type: file
|
||||
thumb: media/thumb-tar.png
|
||||
@@ -203,7 +211,7 @@ types:
|
||||
js:
|
||||
type: file
|
||||
thumb: media/thumb-js.png
|
||||
mime: application/javascript
|
||||
mime: text/javascript
|
||||
json:
|
||||
type: file
|
||||
thumb: media/thumb-json.png
|
||||
|
||||
1986
system/config/mime.yaml
Normal file
1986
system/config/mime.yaml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,16 +0,0 @@
|
||||
schemes:
|
||||
image:
|
||||
type: Stream
|
||||
paths:
|
||||
- user://images
|
||||
- system://images
|
||||
|
||||
page:
|
||||
type: ReadOnlyStream
|
||||
paths:
|
||||
- user://pages
|
||||
|
||||
account:
|
||||
type: ReadOnlyStream
|
||||
paths:
|
||||
- user://accounts
|
||||
@@ -10,18 +10,25 @@ custom_base_url: '' # Set the base_url manually, e.
|
||||
username_regex: '^[a-z0-9_-]{3,16}$' # Only lowercase chars, digits, dashes, underscores. 3 - 16 chars
|
||||
pwd_regex: '(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}' # At least one number, one uppercase and lowercase letter, and be at least 8+ chars
|
||||
intl_enabled: true # Special logic for PHP International Extension (mod_intl)
|
||||
http_x_forwarded: # Configuration options for the various HTTP_X_FORWARD headers
|
||||
protocol: true
|
||||
host: false
|
||||
port: true
|
||||
ip: true
|
||||
|
||||
languages:
|
||||
supported: [] # List of languages supported. eg: [en, fr, de]
|
||||
default_lang: # Default is the first supported language. Must be one of the supported languages
|
||||
include_default_lang: true # Include the default lang prefix in all URLs
|
||||
include_default_lang_file_extension: true # If true, include language code for the default language in file extension: default.en.md
|
||||
pages_fallback_only: false # Only fallback to find page content through supported languages
|
||||
translations: true # If false, translation keys are used instead of translated strings
|
||||
translations_fallback: true # Fallback through supported translations if active lang doesn't exist
|
||||
session_store_active: false # Store active language in session
|
||||
http_accept_language: false # Attempt to set the language based on http_accept_language header in the browser
|
||||
override_locale: false # Override the default or system locale with language specific one
|
||||
content_fallback: {} # Custom language fallbacks. eg: {fr: ['fr', 'en']}
|
||||
pages_fallback_only: false # DEPRECATED: Use `content_fallback` instead
|
||||
debug: false # Debug language detection
|
||||
|
||||
home:
|
||||
alias: '/home' # Default path for home, ie /
|
||||
@@ -29,6 +36,7 @@ home:
|
||||
|
||||
pages:
|
||||
type: regular # EXPERIMENTAL: Page type: regular or flex
|
||||
dirs: ['page://'] # Advanced functionality, allows for multiple page paths
|
||||
theme: quark # Default theme (defaults to "quark" theme)
|
||||
order:
|
||||
by: default # Order pages by "default", "alpha" or "date"
|
||||
@@ -56,16 +64,22 @@ pages:
|
||||
special_chars: # List of special characters to automatically convert to entities
|
||||
'>': 'gt'
|
||||
'<': 'lt'
|
||||
valid_link_attributes: # Valid attributes to pass through via markdown links
|
||||
- rel
|
||||
- target
|
||||
- id
|
||||
- class
|
||||
- classes
|
||||
types: [html,htm,xml,txt,json,rss,atom] # list of valid page types
|
||||
append_url_extension: '' # Append page's extension in Page urls (e.g. '.html' results in /path/page.html)
|
||||
expires: 604800 # Page expires time in seconds (604800 seconds = 7 days)
|
||||
cache_control: # Can be blank for no setting, or a valid `cache-control` text value
|
||||
last_modified: false # Set the last modified date header based on file modification timestamp
|
||||
etag: false # Set the etag header tag
|
||||
etag: true # Set the etag header tag
|
||||
vary_accept_encoding: false # Add `Vary: Accept-Encoding` header
|
||||
redirect_default_route: false # Automatically redirect to a page's default route
|
||||
redirect_default_code: 302 # Default code to use for redirects
|
||||
redirect_trailing_slash: true # Handle automatically or 302 redirect a trailing / URL
|
||||
redirect_default_code: 302 # Default code to use for redirects: 301|302|303
|
||||
redirect_trailing_slash: 1 # Always redirect trailing slash with redirect code 0|1|301|302 (0: no redirect, 1: use default code)
|
||||
redirect_default_route: 0 # Always redirect to page's default route using code 0|1|301|302, also removes .htm and .html extensions
|
||||
ignore_files: [.DS_Store] # Files to ignore in Pages
|
||||
ignore_folders: [.git, .idea] # Folders to ignore in Pages
|
||||
ignore_hidden: true # Ignore all Hidden files and folders
|
||||
@@ -84,21 +98,25 @@ cache:
|
||||
purge_at: '0 4 * * *' # How often to purge old file cache (using new scheduler)
|
||||
clear_at: '0 3 * * *' # How often to clear cache (using new scheduler)
|
||||
clear_job_type: 'standard' # Type to clear when processing the scheduled clear job `standard`|`all`
|
||||
clear_images_by_default: true # By default grav will include processed images in cache clear, this can be disabled
|
||||
clear_images_by_default: false # By default grav does not include processed images in cache clear, this can be enabled
|
||||
cli_compatibility: false # Ensures only non-volatile drivers are used (file, redis, memcache, etc.)
|
||||
lifetime: 604800 # Lifetime of cached data in seconds (0 = infinite)
|
||||
gzip: false # GZip compress the page output
|
||||
allow_webserver_gzip: false # If true, `content-encoding: identity` but connection isn't closed before `onShutDown()` event
|
||||
redis:
|
||||
socket: false # Path to redis unix socket (e.g. /var/run/redis/redis.sock), false = use server and port to connect
|
||||
password: # Optional password
|
||||
database: # Optional database ID
|
||||
|
||||
twig:
|
||||
cache: true # Set to true to enable Twig caching
|
||||
debug: true # Enable Twig debug
|
||||
auto_reload: true # Refresh cache on changes
|
||||
autoescape: false # Autoescape Twig vars (DEPRECATED, always enabled in strict mode)
|
||||
autoescape: true # Autoescape Twig vars (DEPRECATED, always enabled in strict mode)
|
||||
undefined_functions: true # Allow undefined functions
|
||||
undefined_filters: true # Allow undefined filters
|
||||
safe_functions: [] # List of PHP functions which are allowed to be used as Twig functions
|
||||
safe_filters: [] # List of PHP functions which are allowed to be used as Twig filters
|
||||
umask_fix: false # By default Twig creates cached files as 755, fix switches this to 775
|
||||
|
||||
assets: # Configuration for Assets Manager (JS, CSS)
|
||||
@@ -111,10 +129,14 @@ assets: # Configuration for Assets Mana
|
||||
js_pipeline: false # The JS pipeline is the unification of multiple JS resources into one file
|
||||
js_pipeline_include_externals: true # Include external URLs in the pipeline by default
|
||||
js_pipeline_before_excludes: true # Render the pipeline before any excluded files
|
||||
js_module_pipeline: false # The JS Module pipeline is the unification of multiple JS Module resources into one file
|
||||
js_module_pipeline_include_externals: true # Include external URLs in the pipeline by default
|
||||
js_module_pipeline_before_excludes: true # Render the pipeline before any excluded files
|
||||
js_minify: true # Minify the JS during pipelining
|
||||
enable_asset_timestamp: false # Enable asset timestamps
|
||||
enable_asset_sri: false # Enable asset SRI
|
||||
collections:
|
||||
jquery: system://assets/jquery/jquery-2.x.min.js
|
||||
jquery: system://assets/jquery/jquery-3.x.min.js
|
||||
|
||||
errors:
|
||||
display: 0 # Display either (1) Full backtrace | (0) Simple Error | (-1) System Error
|
||||
@@ -124,6 +146,7 @@ log:
|
||||
handler: file # Log handler. Currently supported: file | syslog
|
||||
syslog:
|
||||
facility: local6 # Syslog facilities output
|
||||
tag: grav # Syslog tag. Default: "grav".
|
||||
|
||||
debugger:
|
||||
enabled: false # Enable Grav debugger and following settings
|
||||
@@ -137,8 +160,20 @@ images:
|
||||
cache_all: false # Cache all image by default
|
||||
cache_perms: '0755' # MUST BE IN QUOTES!! Default cache folder perms. Usually '0755' or '0775'
|
||||
debug: false # Show an overlay over images indicating the pixel depth of the image when working with retina for example
|
||||
auto_fix_orientation: false # Automatically fix the image orientation based on the Exif data
|
||||
auto_fix_orientation: true # Automatically fix the image orientation based on the Exif data
|
||||
seofriendly: false # SEO-friendly processed image names
|
||||
cls: # Cumulative Layout Shift: See https://web.dev/optimize-cls/
|
||||
auto_sizes: false # Automatically add height/width to image
|
||||
aspect_ratio: false # Reserve space with aspect ratio style
|
||||
retina_scale: 1 # scale to adjust auto-sizes for better handling of HiDPI resolutions
|
||||
defaults:
|
||||
loading: auto # Let browser pick [auto|lazy|eager]
|
||||
watermark:
|
||||
image: 'system://images/watermark.png' # Path to a watermark image
|
||||
position_y: 'center' # top|center|bottom
|
||||
position_x: 'center' # left|center|right
|
||||
scale: 33 # percentage of watermark scale
|
||||
watermark_all: false # automatically watermark all images
|
||||
|
||||
media:
|
||||
enable_media_timestamp: false # Enable media timestamps
|
||||
@@ -153,20 +188,30 @@ session:
|
||||
name: grav-site # Name prefix of the session cookie. Use alphanumeric, dashes or underscores only. Do not use dots in the session name
|
||||
uniqueness: path # Should sessions be `path` based or `security.salt` based
|
||||
secure: false # Set session secure. If true, indicates that communication for this cookie must be over an encrypted transmission. Enable this only on sites that run exclusively on HTTPS
|
||||
secure_https: true # Set session secure on HTTPS but not on HTTP. Has no effect if you have `session.secure: true`. Set to false if your site jumps between HTTP and HTTPS.
|
||||
httponly: true # Set session HTTP only. If true, indicates that cookies should be used only over HTTP, and JavaScript modification is not allowed.
|
||||
samesite: Lax # Set session SameSite. Possible values are Lax, Strict and None. See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||
split: true # Sessions should be independent between site and plugins (such as admin)
|
||||
path:
|
||||
domain: # Domain used by sessions.
|
||||
path: # Path used by sessions.
|
||||
|
||||
gpm:
|
||||
releases: testing # Set to either 'stable' or 'testing'
|
||||
proxy_url: # Configure a manual proxy URL for GPM (eg 127.0.0.1:3128)
|
||||
method: 'auto' # Either 'curl', 'fopen' or 'auto'. 'auto' will try fopen first and if not available cURL
|
||||
verify_peer: true # Sometimes on some systems (Windows most commonly) GPM is unable to connect because the SSL certificate cannot be verified. Disabling this setting might help.
|
||||
releases: stable # Set to either 'stable' or 'testing'
|
||||
official_gpm_only: true # By default GPM direct-install will only allow URLs via the official GPM proxy to ensure security
|
||||
|
||||
http:
|
||||
method: auto # Either 'curl', 'fopen' or 'auto'. 'auto' will try fopen first and if not available cURL
|
||||
enable_proxy: true # Enable proxy server configuration
|
||||
proxy_url: # Configure a manual proxy URL for GPM (eg 127.0.0.1:3128)
|
||||
proxy_cert_path: # Local path to proxy certificate folder containing pem files
|
||||
concurrent_connections: 5 # Concurrent HTTP connections when multiplexing
|
||||
verify_peer: true # Enable/Disable SSL verification of peer certificates
|
||||
verify_host: true # Enable/Disable SSL verification of host certificates
|
||||
|
||||
accounts:
|
||||
type: regular # EXPERIMENTAL: Account type: regular or flex
|
||||
storage: file # EXPERIMENTAL: Flex storage type: file or folder
|
||||
avatar: gravatar # Avatar generator [multiavatar|gravatar]
|
||||
|
||||
flex:
|
||||
cache:
|
||||
@@ -181,6 +226,6 @@ flex:
|
||||
lifetime: 600 # Lifetime of cached HTML in seconds (0 = infinite)
|
||||
|
||||
strict_mode:
|
||||
yaml_compat: true # Grav 1.5+: Enables YAML backwards compatibility
|
||||
twig_compat: true # Grav 1.5+: Enables deprecated Twig autoescape setting (autoescape: false)
|
||||
blueprint_compat: true # Grav 1.7+: Enables backward compatible strict support for blueprints
|
||||
yaml_compat: false # Set to true to enable YAML backwards compatibility
|
||||
twig_compat: false # Set to true to enable deprecated Twig settings (autoescape: false)
|
||||
blueprint_compat: false # Set to true to enable backward compatible strict support for blueprints
|
||||
|
||||
@@ -1,42 +1,90 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Grav\Core
|
||||
*
|
||||
* @copyright Copyright (C) 2015 - 2020 Trilby Media, LLC. All rights reserved.
|
||||
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
|
||||
* @license MIT License; see LICENSE file for details.
|
||||
*/
|
||||
|
||||
// Some standard defines
|
||||
define('GRAV', true);
|
||||
define('GRAV_VERSION', '1.7.0-rc.8');
|
||||
define('GRAV_TESTING', true);
|
||||
define('DS', '/');
|
||||
define('GRAV_VERSION', '1.7.42.1');
|
||||
define('GRAV_SCHEMA', '1.7.0_2020-11-20_1');
|
||||
define('GRAV_TESTING', false);
|
||||
|
||||
// PHP minimum requirement
|
||||
if (!defined('GRAV_PHP_MIN')) {
|
||||
define('GRAV_PHP_MIN', '7.1.3');
|
||||
define('GRAV_PHP_MIN', '7.3.6');
|
||||
}
|
||||
|
||||
// Directories and Paths
|
||||
if (!defined('GRAV_ROOT')) {
|
||||
define('GRAV_ROOT', str_replace(DIRECTORY_SEPARATOR, DS, getcwd()));
|
||||
// Directory separator
|
||||
if (!defined('DS')) {
|
||||
define('DS', '/');
|
||||
}
|
||||
define('ROOT_DIR', GRAV_ROOT . '/');
|
||||
define('USER_PATH', 'user/');
|
||||
define('USER_DIR', ROOT_DIR . USER_PATH);
|
||||
define('CACHE_DIR', ROOT_DIR . 'cache/');
|
||||
|
||||
// Absolute path to Grav root. This is where Grav is installed into.
|
||||
if (!defined('GRAV_ROOT')) {
|
||||
$path = rtrim(str_replace(DIRECTORY_SEPARATOR, DS, getenv('GRAV_ROOT') ?: getcwd()), DS);
|
||||
define('GRAV_ROOT', $path);
|
||||
}
|
||||
// Absolute path to Grav webroot. This is the path where your site is located in.
|
||||
if (!defined('GRAV_WEBROOT')) {
|
||||
$path = rtrim(getenv('GRAV_WEBROOT') ?: GRAV_ROOT, DS);
|
||||
define('GRAV_WEBROOT', $path);
|
||||
}
|
||||
// Relative path to user folder. This path needs to be located under GRAV_WEBROOT.
|
||||
if (!defined('GRAV_USER_PATH')) {
|
||||
$path = rtrim(getenv('GRAV_USER_PATH') ?: 'user', DS);
|
||||
define('GRAV_USER_PATH', $path);
|
||||
}
|
||||
// Absolute or relative path to system folder. Defaults to GRAV_ROOT/system
|
||||
// If system folder is outside of webroot, see https://github.com/getgrav/grav/issues/3297#issuecomment-810294972
|
||||
if (!defined('GRAV_SYSTEM_PATH')) {
|
||||
$path = rtrim(getenv('GRAV_SYSTEM_PATH') ?: 'system', DS);
|
||||
define('GRAV_SYSTEM_PATH', $path);
|
||||
}
|
||||
// Absolute or relative path to cache folder. Defaults to GRAV_ROOT/cache
|
||||
if (!defined('GRAV_CACHE_PATH')) {
|
||||
$path = rtrim(getenv('GRAV_CACHE_PATH') ?: 'cache', DS);
|
||||
define('GRAV_CACHE_PATH', $path);
|
||||
}
|
||||
// Absolute or relative path to logs folder. Defaults to GRAV_ROOT/logs
|
||||
if (!defined('GRAV_LOG_PATH')) {
|
||||
$path = rtrim(getenv('GRAV_LOG_PATH') ?: 'logs', DS);
|
||||
define('GRAV_LOG_PATH', $path);
|
||||
}
|
||||
// Absolute or relative path to tmp folder. Defaults to GRAV_ROOT/tmp
|
||||
if (!defined('GRAV_TMP_PATH')) {
|
||||
$path = rtrim(getenv('GRAV_TMP_PATH') ?: 'tmp', DS);
|
||||
define('GRAV_TMP_PATH', $path);
|
||||
}
|
||||
// Absolute or relative path to backup folder. Defaults to GRAV_ROOT/backup
|
||||
if (!defined('GRAV_BACKUP_PATH')) {
|
||||
$path = rtrim(getenv('GRAV_BACKUP_PATH') ?: 'backup', DS);
|
||||
define('GRAV_BACKUP_PATH', $path);
|
||||
}
|
||||
unset($path);
|
||||
|
||||
// INTERNAL: Do not use!
|
||||
define('USER_DIR', GRAV_WEBROOT . '/' . GRAV_USER_PATH . '/');
|
||||
define('CACHE_DIR', (!preg_match('`^(/|[a-z]:[\\\/])`ui', GRAV_CACHE_PATH) ? GRAV_ROOT . '/' : '') . GRAV_CACHE_PATH . '/');
|
||||
|
||||
// DEPRECATED: Do not use!
|
||||
define('ASSETS_DIR', ROOT_DIR . 'assets/');
|
||||
define('IMAGES_DIR', ROOT_DIR . 'images/');
|
||||
define('ACCOUNTS_DIR', USER_DIR .'accounts/');
|
||||
define('PAGES_DIR', USER_DIR .'pages/');
|
||||
define('DATA_DIR', USER_DIR .'data/');
|
||||
define('SYSTEM_DIR', ROOT_DIR .'system/');
|
||||
define('LIB_DIR', SYSTEM_DIR .'src/');
|
||||
define('PLUGINS_DIR', USER_DIR .'plugins/');
|
||||
define('THEMES_DIR', USER_DIR .'themes/');
|
||||
define('VENDOR_DIR', ROOT_DIR .'vendor/');
|
||||
define('LOG_DIR', ROOT_DIR .'logs/');
|
||||
define('CACHE_PATH', GRAV_CACHE_PATH . DS);
|
||||
define('USER_PATH', GRAV_USER_PATH . DS);
|
||||
define('ROOT_DIR', GRAV_ROOT . DS);
|
||||
define('ASSETS_DIR', GRAV_WEBROOT . '/assets/');
|
||||
define('IMAGES_DIR', GRAV_WEBROOT . '/images/');
|
||||
define('ACCOUNTS_DIR', USER_DIR . 'accounts/');
|
||||
define('PAGES_DIR', USER_DIR . 'pages/');
|
||||
define('DATA_DIR', USER_DIR . 'data/');
|
||||
define('PLUGINS_DIR', USER_DIR . 'plugins/');
|
||||
define('THEMES_DIR', USER_DIR . 'themes/');
|
||||
define('SYSTEM_DIR', (!preg_match('`^(/|[a-z]:[\\\/])`ui', GRAV_SYSTEM_PATH) ? GRAV_ROOT . '/' : '') . GRAV_SYSTEM_PATH . '/');
|
||||
define('LIB_DIR', SYSTEM_DIR . 'src/');
|
||||
define('VENDOR_DIR', GRAV_ROOT . '/vendor/');
|
||||
define('LOG_DIR', (!preg_match('`^(/|[a-z]:[\\\/])`ui', GRAV_LOG_PATH) ? GRAV_ROOT . '/' : '') . GRAV_LOG_PATH . '/');
|
||||
// END DEPRECATED
|
||||
|
||||
// Some extensions
|
||||
@@ -51,3 +99,6 @@ define('RAW_CONTENT', 1);
|
||||
define('TWIG_CONTENT', 2);
|
||||
define('TWIG_CONTENT_LIST', 3);
|
||||
define('TWIG_TEMPLATES', 4);
|
||||
|
||||
// Filters
|
||||
define('GRAV_SANITIZE_STRING', 5001);
|
||||
|
||||
BIN
system/images/watermark.png
Normal file
BIN
system/images/watermark.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 94 KiB |
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @package Grav\Core
|
||||
*
|
||||
* @copyright Copyright (C) 2015 - 2020 Trilby Media, LLC. All rights reserved.
|
||||
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
|
||||
* @license MIT License; see LICENSE file for details.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,6 +1,17 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\nالعنوان: %1$s\n---\n# خطأ: مادة أمامية غير صحيحة\n\nمسار: '%2$s'\n\n**%3$s**\n\n, , ,\n\n%4$s\n, , ,"
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'معدّات'
|
||||
- 'معلومات'
|
||||
- 'أرز'
|
||||
- 'مال'
|
||||
- 'نوع'
|
||||
- 'سلسلة'
|
||||
- 'سمك'
|
||||
- 'خروف'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'أشخاص'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: لم يتم تقديم التاريخ
|
||||
BAD_DATE: تاريخ خاطئ
|
||||
@@ -37,9 +48,10 @@ GRAV:
|
||||
YR_PLURAL: سنوات
|
||||
DEC_PLURAL: عقود
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>فشل التحقق من صحة:</b>
|
||||
INVALID_INPUT: إدخال غير صحيح في
|
||||
VALIDATION_FAIL: '<b>فشل التحقق من صحة:</b>'
|
||||
INVALID_INPUT: 'إدخال غير صحيح في'
|
||||
MISSING_REQUIRED_FIELD: 'حقل مطلوب مفقود:'
|
||||
XSS_ISSUES: "مشاكل XSS محتملة تم اكتشافها في حقل '%s' '"
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'كانون الثاني'
|
||||
- 'شباط'
|
||||
@@ -61,3 +73,21 @@ GRAV:
|
||||
- 'الجمعة'
|
||||
- 'السبت'
|
||||
- 'الأحد'
|
||||
YES: "نعم"
|
||||
NO: "لا"
|
||||
CRON:
|
||||
EVERY: كل
|
||||
EVERY_HOUR: كل ساعة
|
||||
EVERY_MINUTE: كل دقيقة
|
||||
EVERY_DAY_OF_WEEK: كل يوم في الأسبوع
|
||||
EVERY_DAY_OF_MONTH: كل يوم في الشهر
|
||||
EVERY_MONTH: ' كل شهر'
|
||||
TEXT_PERIOD: كل <b />
|
||||
TEXT_MINS: ' في <b /> دقيقة(دقائق) بعد الساعة'
|
||||
TEXT_TIME: ' في <b />:<b />'
|
||||
TEXT_DOW: ' في <b />'
|
||||
TEXT_MONTH: ' من <b />'
|
||||
TEXT_DOM: ' في <b />'
|
||||
ERROR1: الوسم %s غير مدعوم!
|
||||
ERROR2: عدد عناصر غير صالح.
|
||||
ERROR4: تعبير غير معروف
|
||||
|
||||
@@ -36,8 +36,8 @@ GRAV:
|
||||
YR_PLURAL: г
|
||||
DEC_PLURAL: дстлт
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Неуспешна проверка:</b>
|
||||
INVALID_INPUT: Невалидно въвеждане в
|
||||
VALIDATION_FAIL: '<b>Неуспешна проверка:</b>'
|
||||
INVALID_INPUT: 'Невалидно въвеждане в'
|
||||
MISSING_REQUIRED_FIELD: 'Липсва задължително поле:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'януари'
|
||||
|
||||
@@ -1,11 +1,21 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# S'ha produït un error: Frontmatter invàlid\n\nRuta: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'equipment'
|
||||
- 'informació'
|
||||
- 'rice'
|
||||
- 'money'
|
||||
- 'species'
|
||||
- 'series'
|
||||
- 'fish'
|
||||
- 'sheep'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: No s'ha proporcionat data
|
||||
BAD_DATE: Data invàlida
|
||||
AGO: abans
|
||||
FROM_NOW: des d'ara
|
||||
JUST_NOW: Ara mateix
|
||||
SECOND: segon
|
||||
MINUTE: minut
|
||||
HOUR: hora
|
||||
@@ -36,9 +46,10 @@ GRAV:
|
||||
YR_PLURAL: anys
|
||||
DEC_PLURAL: dèc.
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Ha fallat la validació:</b>
|
||||
INVALID_INPUT: Entrada no vàlida a
|
||||
VALIDATION_FAIL: '<b>Ha fallat la validació:</b>'
|
||||
INVALID_INPUT: 'Entrada no vàlida a'
|
||||
MISSING_REQUIRED_FIELD: 'Falta camp obligatori:'
|
||||
XSS_ISSUES: "Detectats potencials problemes XSS al camp '%s'"
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Gener'
|
||||
- 'Febrer'
|
||||
@@ -60,3 +71,17 @@ GRAV:
|
||||
- 'Divendres'
|
||||
- 'Dissabte'
|
||||
- 'Diumenge'
|
||||
YES: "Sí"
|
||||
NO: "No"
|
||||
CRON:
|
||||
EVERY: cada
|
||||
EVERY_HOUR: cada hora
|
||||
EVERY_MINUTE: cada minut
|
||||
EVERY_DAY_OF_WEEK: cada dia de la setmana
|
||||
EVERY_DAY_OF_MONTH: cada dia del mes
|
||||
EVERY_MONTH: cada mes
|
||||
TEXT_PERIOD: Cada <b />
|
||||
ERROR1: L'etiqueta %s no està suportada!
|
||||
ERROR2: Nombre d'elements incorrecte
|
||||
ERROR3: El jquery_element s'ha d'establir a la configuració de jqCron
|
||||
ERROR4: Expressió no reconeguda
|
||||
|
||||
@@ -101,9 +101,10 @@ GRAV:
|
||||
YR_PLURAL: r
|
||||
DEC_PLURAL: dek
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Ověření se nezdařilo:</b>
|
||||
INVALID_INPUT: Neplatný vstup v
|
||||
VALIDATION_FAIL: '<b>Ověření se nezdařilo:</b>'
|
||||
INVALID_INPUT: 'Neplatný vstup v'
|
||||
MISSING_REQUIRED_FIELD: 'Chybí požadované pole:'
|
||||
XSS_ISSUES: "Byly zjištěny možné problémy XSS v poli '%s'"
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'leden'
|
||||
- 'únor'
|
||||
@@ -125,6 +126,8 @@ GRAV:
|
||||
- 'pátek'
|
||||
- 'sobota'
|
||||
- 'neděle'
|
||||
YES: "Ano"
|
||||
NO: "Ne"
|
||||
CRON:
|
||||
EVERY: každý
|
||||
EVERY_HOUR: každou hodinu
|
||||
|
||||
@@ -1,11 +1,27 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\nTitel: %1$s\n---\n\n# Fejl: Ugyldigt frontmatter\n\nSti: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'udstyr'
|
||||
- 'information'
|
||||
- 'ris'
|
||||
- 'penge'
|
||||
- 'arter'
|
||||
- 'Serier'
|
||||
- 'fisk'
|
||||
- 'får'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'personer'
|
||||
'man': 'mænd'
|
||||
'child': 'børn'
|
||||
'sex': 'køn'
|
||||
'move': 'flyt'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: Ingen dato angivet
|
||||
BAD_DATE: Ugyldig dato
|
||||
AGO: siden
|
||||
FROM_NOW: fra nu
|
||||
JUST_NOW: lige nu
|
||||
SECOND: sekund
|
||||
MINUTE: minut
|
||||
HOUR: time
|
||||
@@ -15,6 +31,7 @@ GRAV:
|
||||
YEAR: år
|
||||
DECADE: årti
|
||||
SEC: sek
|
||||
MIN: min.
|
||||
HR: t
|
||||
WK: u
|
||||
MO: md
|
||||
@@ -36,8 +53,8 @@ GRAV:
|
||||
YR_PLURAL: år
|
||||
DEC_PLURAL: årtier
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Validering mislykkedes:</b>
|
||||
INVALID_INPUT: Ugyldigt input i
|
||||
VALIDATION_FAIL: '<b>Validering mislykkedes:</b>'
|
||||
INVALID_INPUT: 'Ugyldigt input i'
|
||||
MISSING_REQUIRED_FIELD: 'Mangler obligatorisk felt:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'januar'
|
||||
@@ -60,3 +77,14 @@ GRAV:
|
||||
- 'fredag'
|
||||
- 'lørdag'
|
||||
- 'søndag'
|
||||
CRON:
|
||||
EVERY: hver
|
||||
EVERY_HOUR: hver time
|
||||
EVERY_MINUTE: hvert minut
|
||||
EVERY_DAY_OF_WEEK: alle ugens dage
|
||||
EVERY_DAY_OF_MONTH: alle dage i måneden
|
||||
EVERY_MONTH: hver måned
|
||||
TEXT_PERIOD: Hver <b />
|
||||
TEXT_MINS: ' ved <b /> minut(ter) over timen'
|
||||
ERROR1: Tagget %s understøttes ikke!
|
||||
ERROR2: Ugyldigt antal elementer
|
||||
|
||||
@@ -101,9 +101,10 @@ GRAV:
|
||||
YR_PLURAL: Jahre
|
||||
DEC_PLURAL: Jahrzehnten
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Überprüfung fehlgeschlagen:</b>
|
||||
INVALID_INPUT: Ungültige Eingabe in
|
||||
VALIDATION_FAIL: '<b>Überprüfung fehlgeschlagen:</b>'
|
||||
INVALID_INPUT: 'Ungültige Eingabe in'
|
||||
MISSING_REQUIRED_FIELD: 'Erforderliches Feld fehlt:'
|
||||
XSS_ISSUES: "Potenzielle XSS-Probleme im Feld '%s' erkannt"
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Januar'
|
||||
- 'Februar'
|
||||
@@ -125,6 +126,8 @@ GRAV:
|
||||
- 'Freitag'
|
||||
- 'Samstag'
|
||||
- 'Sonntag'
|
||||
YES: "Ja"
|
||||
NO: "Nein"
|
||||
CRON:
|
||||
EVERY: jede
|
||||
EVERY_HOUR: jede Stunde
|
||||
|
||||
@@ -1,11 +1,75 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\nΤίτλος: %1$s\n---\n\n# Σφάλμα: Μη έγκυρη διαδρομή Frontmatter\n\nΔιαδρομή: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
INFLECTOR_PLURALS:
|
||||
'/(quiz)$/i': '\1zes'
|
||||
'/^(ox)$/i': '\1en'
|
||||
'/([m|l])ouse$/i': '\1ice'
|
||||
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||
'/(x|ch|ss|sh)$/i': '\1es'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||
'/(hive)$/i': '\1s'
|
||||
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||
'/sis$/i': 'ses'
|
||||
'/([ti])um$/i': '\1a'
|
||||
'/(buffal|tomat)o$/i': '\1oes'
|
||||
'/(bu)s$/i': '\1ses'
|
||||
'/(alias|status)/i': '\1es'
|
||||
'/(octop|vir)us$/i': '\1i'
|
||||
'/(ax|test)is$/i': '\1es'
|
||||
'/s$/i': 's'
|
||||
'/$/': 's'
|
||||
INFLECTOR_SINGULAR:
|
||||
'/(quiz)zes$/i': '\1'
|
||||
'/(matr)ices$/i': '\1ix'
|
||||
'/(vert|ind)ices$/i': '\1ex'
|
||||
'/^(ox)en/i': '\1'
|
||||
'/(alias|status)es$/i': '\1'
|
||||
'/([octop|vir])i$/i': '\1us'
|
||||
'/(cris|ax|test)es$/i': '\1is'
|
||||
'/(shoe)s$/i': '\1'
|
||||
'/(o)es$/i': '\1'
|
||||
'/(bus)es$/i': '\1'
|
||||
'/([m|l])ice$/i': '\1ouse'
|
||||
'/(x|ch|ss|sh)es$/i': '\1'
|
||||
'/(m)ovies$/i': '\1ovie'
|
||||
'/(s)eries$/i': '\1eries'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||
'/([lr])ves$/i': '\1f'
|
||||
'/(tive)s$/i': '\1'
|
||||
'/(hive)s$/i': '\1'
|
||||
'/([^f])ves$/i': '\1fe'
|
||||
'/(^analy)ses$/i': '\1sis'
|
||||
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||
'/([ti])a$/i': '\1um'
|
||||
'/(n)ews$/i': '\1ews'
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'εξοπλισμός'
|
||||
- 'πληροφοριες'
|
||||
- 'rice'
|
||||
- 'χρήματα'
|
||||
- 'είδη'
|
||||
- 'σειρές'
|
||||
- 'ψάρι'
|
||||
- 'πρόβατο'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'άνθρωποι'
|
||||
'man': 'άνδρες'
|
||||
'child': 'παιδιά'
|
||||
'sex': 'φύλο'
|
||||
'move': 'κινήσεις'
|
||||
INFLECTOR_ORDINALS:
|
||||
'default': 'th'
|
||||
'first': 'st'
|
||||
'second': 'nd'
|
||||
'third': 'rd'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: Δεν δόθηκε καμία ημερομηνία
|
||||
BAD_DATE: Εσφαλμένη ημερομηνία
|
||||
AGO: πρίν
|
||||
FROM_NOW: από τώρα
|
||||
JUST_NOW: μόλις τώρα
|
||||
SECOND: δευτερόλεπτο
|
||||
MINUTE: λεπτό
|
||||
HOUR: ώρα
|
||||
@@ -37,8 +101,8 @@ GRAV:
|
||||
YR_PLURAL: έτη
|
||||
DEC_PLURAL: δεκαετίες
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Η επικύρωση απέτυχε:</b>
|
||||
INVALID_INPUT: Μη έγκυρα δεδομένα σε
|
||||
VALIDATION_FAIL: '<b>Η επικύρωση απέτυχε:</b>'
|
||||
INVALID_INPUT: 'Μη έγκυρα δεδομένα σε'
|
||||
MISSING_REQUIRED_FIELD: 'Λείπει το απαιτούμενο πεδίο:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Ιανουάριος'
|
||||
@@ -61,3 +125,20 @@ GRAV:
|
||||
- 'Παρασκευή'
|
||||
- 'Σάββατο'
|
||||
- 'Κυριακή'
|
||||
CRON:
|
||||
EVERY: κάθε
|
||||
EVERY_HOUR: κάθε ώρα
|
||||
EVERY_MINUTE: κάθε λεπτό
|
||||
EVERY_DAY_OF_WEEK: κάθε μέρα της εβδομάδος
|
||||
EVERY_DAY_OF_MONTH: κάθε μέρα του μήνα
|
||||
EVERY_MONTH: κάθε μήνα
|
||||
TEXT_PERIOD: Κάθε <b />
|
||||
TEXT_MINS: ' κατά <b /> λεπτό(ά) μετά την ώρα'
|
||||
TEXT_TIME: ' στο <b />:<b />'
|
||||
TEXT_DOW: ' στις <b />'
|
||||
TEXT_MONTH: ' από <b />'
|
||||
TEXT_DOM: ' στις <b />'
|
||||
ERROR1: Η ετικέτα %s δεν υποστηρίζεται!
|
||||
ERROR2: Μη έγκυρος αριθμός στοιχείων
|
||||
ERROR3: Το jquery_element θα έπρεπε να οριστεί στις ρυθμίσεις του jqCron
|
||||
ERROR4: Μη αναγνωρισμένη έκφραση
|
||||
|
||||
@@ -94,9 +94,10 @@ GRAV:
|
||||
YR_PLURAL: yrs
|
||||
DEC_PLURAL: decs
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Validation failed:</b>
|
||||
INVALID_INPUT: Invalid input in
|
||||
MISSING_REQUIRED_FIELD: Missing required field:
|
||||
VALIDATION_FAIL: '<b>Validation failed:</b>'
|
||||
INVALID_INPUT: 'Invalid input in'
|
||||
MISSING_REQUIRED_FIELD: 'Missing required field:'
|
||||
XSS_ISSUES: "Potential XSS issues detected in '%s' field"
|
||||
MONTHS_OF_THE_YEAR: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
|
||||
DAYS_OF_THE_WEEK: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
|
||||
YES: "Yes"
|
||||
|
||||
@@ -1,19 +1,25 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\ntítulo: %1$s\n---\n\n# Error: Frontmatter no válido\n\nRuta: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
FRONTMATTER_ERROR_PAGE: "---\ntítulo: %1$s\n---\n\n# Error: Prefacio no válido\n\nRuta: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
INFLECTOR_PLURALS:
|
||||
'/(quiz)$/i': '\1ios'
|
||||
'/s$/i': 's'
|
||||
'/$/': 's'
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'equipo'
|
||||
- 'equipamiento'
|
||||
- 'información'
|
||||
- 'rice'
|
||||
- 'arroz'
|
||||
- 'dinero'
|
||||
- 'species'
|
||||
- 'especies'
|
||||
- 'series'
|
||||
- 'pescado'
|
||||
- 'oveja'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'personas'
|
||||
'man': 'hombres'
|
||||
'child': 'niños'
|
||||
'sex': 'sexos'
|
||||
'move': 'movido'
|
||||
INFLECTOR_ORDINALS:
|
||||
'first': 'ro'
|
||||
'second': 'do'
|
||||
@@ -33,10 +39,12 @@ GRAV:
|
||||
YEAR: año
|
||||
DECADE: década
|
||||
SEC: seg
|
||||
MIN: min
|
||||
HR: h
|
||||
WK: sem
|
||||
MO: mes
|
||||
YR: año
|
||||
DEC: déc
|
||||
SECOND_PLURAL: segundos
|
||||
MINUTE_PLURAL: minutos
|
||||
HOUR_PLURAL: horas
|
||||
@@ -46,6 +54,7 @@ GRAV:
|
||||
YEAR_PLURAL: años
|
||||
DECADE_PLURAL: décadas
|
||||
SEC_PLURAL: segs
|
||||
MIN_PLURAL: mins
|
||||
HR_PLURAL: hs
|
||||
WK_PLURAL: sem
|
||||
MO_PLURAL: mes
|
||||
@@ -55,6 +64,7 @@ GRAV:
|
||||
VALIDATION_FAIL: '<b>Falló la validación: </b>'
|
||||
INVALID_INPUT: 'Dato inválido en: '
|
||||
MISSING_REQUIRED_FIELD: 'Falta el campo requerido: '
|
||||
XSS_ISSUES: "Se detectaron potenciales problemas XSS en el campo '%s'"
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Enero'
|
||||
- 'Febrero'
|
||||
@@ -76,6 +86,8 @@ GRAV:
|
||||
- 'Viernes'
|
||||
- 'Sábado'
|
||||
- 'Domingo'
|
||||
YES: "Sí"
|
||||
NO: "No"
|
||||
CRON:
|
||||
EVERY: cada
|
||||
EVERY_HOUR: cada hora
|
||||
@@ -84,12 +96,12 @@ GRAV:
|
||||
EVERY_DAY_OF_MONTH: cada día del mes
|
||||
EVERY_MONTH: cada mes
|
||||
TEXT_PERIOD: Cada <b />
|
||||
TEXT_MINS: ' a <b /> minuto(s) despues de la hora'
|
||||
TEXT_MINS: ' a <b /> minuto(s) después de la hora'
|
||||
TEXT_TIME: ' a <b />:<b />'
|
||||
TEXT_DOW: ' en <b />'
|
||||
TEXT_MONTH: ' de<b />'
|
||||
TEXT_DOM: ' en<b />'
|
||||
ERROR1: La etiqueta %s no está soportada!
|
||||
ERROR2: El número de elementos es erroneo
|
||||
ERROR1: '¡La etiqueta %s no está soportada!'
|
||||
ERROR2: El número de elementos es erróneo
|
||||
ERROR3: El jquery_element debería establecerse en la configuración del jqCron
|
||||
ERROR4: Expresión no reconocida
|
||||
|
||||
@@ -1,11 +1,22 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\npealkiri: %1$s\n---\n\n# Viga: vigane Frontmatter'i\n\nasukoht: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
INFLECTOR_PLURALS:
|
||||
'/(octop|vir)us$/i': '\1i'
|
||||
INFLECTOR_SINGULAR:
|
||||
'/^(ox)en/i': '\1'
|
||||
'/(alias|status)es$/i': '\1'
|
||||
'/(shoe)s$/i': '\1'
|
||||
'/(o)es$/i': '\1'
|
||||
'/(bus)es$/i': '\1'
|
||||
'/(x|ch|ss|sh)es$/i': '\1'
|
||||
'/(tive)s$/i': '\1'
|
||||
'/(hive)s$/i': '\1'
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'equipment'
|
||||
- 'informatsioon'
|
||||
- 'rice'
|
||||
- 'money'
|
||||
- 'riis'
|
||||
- 'raha'
|
||||
- 'species'
|
||||
- 'series'
|
||||
- 'kala'
|
||||
@@ -34,6 +45,7 @@ GRAV:
|
||||
YEAR: aasta
|
||||
DECADE: 10 aastat
|
||||
SEC: sek
|
||||
MIN: min
|
||||
HR: t
|
||||
WK: näd
|
||||
MO: k.
|
||||
@@ -55,7 +67,7 @@ GRAV:
|
||||
YR_PLURAL: aastat
|
||||
DEC_PLURAL: dek.
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Kinnitamine nurjus:</b>
|
||||
VALIDATION_FAIL: '<b>Kinnitamine nurjus:</b>'
|
||||
INVALID_INPUT: 'Vigane sisend:'
|
||||
MISSING_REQUIRED_FIELD: 'Nõutud väli puudub:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
@@ -81,5 +93,12 @@ GRAV:
|
||||
- 'pühapäev'
|
||||
CRON:
|
||||
EVERY: iga
|
||||
EVERY_HOUR: iga tund
|
||||
EVERY_MINUTE: iga minut
|
||||
EVERY_DAY_OF_WEEK: iga nädala päev
|
||||
EVERY_MONTH: iga kuu
|
||||
TEXT_PERIOD: Iga <b />
|
||||
ERROR1: Silt %s pole toetatud!
|
||||
ERROR2: Vale elementide arv
|
||||
ERROR3: jqCron seadetes peaks olema määratud jquery_element
|
||||
ERROR4: Tundmatu väljend
|
||||
|
||||
@@ -36,8 +36,8 @@ GRAV:
|
||||
YR_PLURAL: urt
|
||||
DEC_PLURAL: ham
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Balidazioak huts egin du</b>
|
||||
INVALID_INPUT: Baliogabeko sarrera
|
||||
VALIDATION_FAIL: '<b>Balidazioak huts egin du</b>'
|
||||
INVALID_INPUT: 'Baliogabeko sarrera'
|
||||
MISSING_REQUIRED_FIELD: 'Derrigorrezko eremua bete gabe:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Urtarrila'
|
||||
|
||||
@@ -36,8 +36,8 @@ GRAV:
|
||||
YR_PLURAL: سال
|
||||
DEC_PLURAL: دهه
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>سنجش اعتبار ناموفق بود</b>
|
||||
INVALID_INPUT: ورودی نامعتبر در
|
||||
VALIDATION_FAIL: '<b>سنجش اعتبار ناموفق بود</b>'
|
||||
INVALID_INPUT: 'ورودی نامعتبر در'
|
||||
MISSING_REQUIRED_FIELD: 'قسمت ضروری جا افتاده:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'ژانویه'
|
||||
|
||||
@@ -100,8 +100,8 @@ GRAV:
|
||||
YR_PLURAL: v
|
||||
DEC_PLURAL: vuosikymmentä
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Vahvistus epäonnistui:</b>
|
||||
INVALID_INPUT: Syöte ei kelpaa
|
||||
VALIDATION_FAIL: '<b>Vahvistus epäonnistui:</b>'
|
||||
INVALID_INPUT: 'Syöte ei kelpaa'
|
||||
MISSING_REQUIRED_FIELD: 'Puuttuva pakollinen kenttä:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Tammikuu'
|
||||
|
||||
@@ -16,6 +16,7 @@ GRAV:
|
||||
'/(buffal|tomat)o$/i': '\1es'
|
||||
'/(bu)s$/i': 'Bus'
|
||||
'/(alias|status)/i': 'alias|status'
|
||||
'/(octop|vir)us$/i': 'virus'
|
||||
'/(ax|test)is$/i': '\1s'
|
||||
'/s$/i': 's'
|
||||
'/$/': 's'
|
||||
@@ -23,6 +24,7 @@ GRAV:
|
||||
'/(quiz)zes$/i': '\1'
|
||||
'/(alias|status)es$/i': '\1'
|
||||
'/([octop|vir])i$/i': '\1us'
|
||||
'/(n)ews$/i': '\1ouvelles'
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'équipement'
|
||||
- 'information'
|
||||
@@ -57,10 +59,10 @@ GRAV:
|
||||
MONTH: mois
|
||||
YEAR: année
|
||||
DECADE: décennie
|
||||
SEC: s
|
||||
MIN: m
|
||||
HR: h
|
||||
WK: sem
|
||||
SEC: sec.
|
||||
MIN: min.
|
||||
HR: hr.
|
||||
WK: sem.
|
||||
MO: m
|
||||
YR: an
|
||||
DEC: déc
|
||||
@@ -80,30 +82,33 @@ GRAV:
|
||||
YR_PLURAL: a
|
||||
DEC_PLURAL: décs
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>La validation a échoué :</b>
|
||||
INVALID_INPUT: Saisie non valide
|
||||
VALIDATION_FAIL: '<b>La validation a échoué :</b>'
|
||||
INVALID_INPUT: 'Saisie non valide'
|
||||
MISSING_REQUIRED_FIELD: 'Champ obligatoire manquant :'
|
||||
XSS_ISSUES: "Erreurs XSS probablement détectées dans le champ '%s'"
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Janvier'
|
||||
- 'Février'
|
||||
- 'Mars'
|
||||
- 'Avril'
|
||||
- 'Mai'
|
||||
- 'Juin'
|
||||
- 'Juillet'
|
||||
- 'Août'
|
||||
- 'Septembre'
|
||||
- 'Octobre'
|
||||
- 'Novembre'
|
||||
- 'Décembre'
|
||||
- 'janvier'
|
||||
- 'février'
|
||||
- 'mars'
|
||||
- 'avril'
|
||||
- 'mai'
|
||||
- 'juin'
|
||||
- 'juillet'
|
||||
- 'août'
|
||||
- 'septembre'
|
||||
- 'octobre'
|
||||
- 'novembre'
|
||||
- 'décembre'
|
||||
DAYS_OF_THE_WEEK:
|
||||
- 'Lundi'
|
||||
- 'Mardi'
|
||||
- 'Mercredi'
|
||||
- 'Jeudi'
|
||||
- 'Vendredi'
|
||||
- 'Samedi'
|
||||
- 'Dimanche'
|
||||
- 'lundi'
|
||||
- 'mardi'
|
||||
- 'mercredi'
|
||||
- 'jeudi'
|
||||
- 'vendredi'
|
||||
- 'samedi'
|
||||
- 'dimanche'
|
||||
YES: "Oui"
|
||||
NO: "Non"
|
||||
CRON:
|
||||
EVERY: chaque
|
||||
EVERY_HOUR: toutes les heures
|
||||
@@ -117,7 +122,7 @@ GRAV:
|
||||
TEXT_DOW: ' sur <b/>'
|
||||
TEXT_MONTH: ' de <b />'
|
||||
TEXT_DOM: ' sur <b/>'
|
||||
ERROR1: La balise %s n'est pas supportée!
|
||||
ERROR1: La balise %s n'est pas prise en charge !
|
||||
ERROR2: Nombre invalide d'éléments
|
||||
ERROR3: L'élément jquery_element doit être défini dans les paramètres jqCron
|
||||
ERROR4: Expression non reconnue
|
||||
|
||||
147
system/languages/gl.yaml
Normal file
147
system/languages/gl.yaml
Normal file
@@ -0,0 +1,147 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\ntítulo: %1$s\n---\n\n# Erro: Limiar incorrecto\n\nRuta: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
INFLECTOR_PLURALS:
|
||||
'/(quiz)$/i': '\1zes'
|
||||
'/^(ox)$/i': '\1en'
|
||||
'/([m|l])ouse$/i': '\1ice'
|
||||
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||
'/(x|ch|ss|sh)$/i': '\1es'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||
'/(hive)$/i': '\1s'
|
||||
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||
'/sis$/i': 'ses'
|
||||
'/([ti])um$/i': '\1a'
|
||||
'/(buffal|tomat)o$/i': '\1oes'
|
||||
'/(bu)s$/i': '\1ses'
|
||||
'/(alias|status)/i': '\1'
|
||||
'/(octop|vir)us$/i': '\1'
|
||||
'/(ax|test)is$/i': '\1es'
|
||||
'/s$/i': 's'
|
||||
'/$/': 's'
|
||||
INFLECTOR_SINGULAR:
|
||||
'/(quiz)zes$/i': '\1ces'
|
||||
'/(matr)ices$/i': '\1ix'
|
||||
'/(vert|ind)ices$/i': '\1ex'
|
||||
'/^(ox)en/i': '\1'
|
||||
'/(alias|status)es$/i': '\1'
|
||||
'/([octop|vir])i$/i': '\1'
|
||||
'/(cris|ax|test)es$/i': '\1es'
|
||||
'/(shoe)s$/i': '\1'
|
||||
'/(o)es$/i': '\1'
|
||||
'/(bus)es$/i': '\1'
|
||||
'/([m|l])ice$/i': '\1ouse'
|
||||
'/(x|ch|ss|sh)es$/i': '\1'
|
||||
'/(m)ovies$/i': '\1ovie'
|
||||
'/(s)eries$/i': '\1eries'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1'
|
||||
'/([lr])ves$/i': '\1f'
|
||||
'/(tive)s$/i': '\1'
|
||||
'/(hive)s$/i': '\1'
|
||||
'/([^f])ves$/i': '\1fe'
|
||||
'/(^analy)ses$/i': '\1se'
|
||||
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2se'
|
||||
'/([ti])a$/i': '\1um'
|
||||
'/(n)ews$/i': '\1ews'
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'equipo'
|
||||
- 'información'
|
||||
- 'arroz'
|
||||
- 'diñeiro'
|
||||
- 'especies'
|
||||
- 'series'
|
||||
- 'peixe'
|
||||
- 'ovella'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'xente'
|
||||
'man': 'home'
|
||||
'child': 'neno'
|
||||
'sex': 'sexos'
|
||||
'move': 'move'
|
||||
INFLECTOR_ORDINALS:
|
||||
'default': 'º'
|
||||
'first': 'º'
|
||||
'second': 'º'
|
||||
'third': 'º'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: Non fornece unha data
|
||||
BAD_DATE: Data errada
|
||||
AGO: hai
|
||||
FROM_NOW: dende agora
|
||||
JUST_NOW: xusto agora
|
||||
SECOND: segundo
|
||||
MINUTE: minuto
|
||||
HOUR: hora
|
||||
DAY: día
|
||||
WEEK: semana
|
||||
MONTH: mes
|
||||
YEAR: ano
|
||||
DECADE: década
|
||||
SEC: seg
|
||||
MIN: min
|
||||
HR: hr
|
||||
WK: Sem
|
||||
MO: m
|
||||
YR: a
|
||||
DEC: dec
|
||||
SECOND_PLURAL: segundos
|
||||
MINUTE_PLURAL: minutos
|
||||
HOUR_PLURAL: horas
|
||||
DAY_PLURAL: días
|
||||
WEEK_PLURAL: semanas
|
||||
MONTH_PLURAL: meses
|
||||
YEAR_PLURAL: anos
|
||||
DECADE_PLURAL: décadas
|
||||
SEC_PLURAL: segs
|
||||
MIN_PLURAL: mins
|
||||
HR_PLURAL: hrs
|
||||
WK_PLURAL: sem
|
||||
MO_PLURAL: mes
|
||||
YR_PLURAL: a
|
||||
DEC_PLURAL: deca
|
||||
FORM:
|
||||
VALIDATION_FAIL: '<b>Fallou a validación:</b>'
|
||||
INVALID_INPUT: 'Entrada incorrecta en'
|
||||
MISSING_REQUIRED_FIELD: 'Falta un campo requirido:'
|
||||
XSS_ISSUES: "Detectáronse posibles problemas XSS no campo '% s'"
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'xaneiro'
|
||||
- 'febreiro'
|
||||
- 'marzo'
|
||||
- 'abril'
|
||||
- 'maio'
|
||||
- 'xuño'
|
||||
- 'xullo'
|
||||
- 'agosto'
|
||||
- 'setembro'
|
||||
- 'outubro'
|
||||
- 'novembro'
|
||||
- 'decembro'
|
||||
DAYS_OF_THE_WEEK:
|
||||
- 'luns'
|
||||
- 'martes'
|
||||
- 'mércores'
|
||||
- 'xoves'
|
||||
- 'venres'
|
||||
- 'sábado'
|
||||
- 'domingo'
|
||||
YES: "Si"
|
||||
NO: "Non"
|
||||
CRON:
|
||||
EVERY: cada
|
||||
EVERY_HOUR: Cada hora
|
||||
EVERY_MINUTE: Cada minuto
|
||||
EVERY_DAY_OF_WEEK: cada día da semana
|
||||
EVERY_DAY_OF_MONTH: cada día do mes
|
||||
EVERY_MONTH: cada mes
|
||||
TEXT_PERIOD: Cada <b />
|
||||
TEXT_MINS: ' dentro de <b /> minuto(s) despois da hora'
|
||||
TEXT_TIME: ' dentro <b />:<b />'
|
||||
TEXT_DOW: ' o <b />'
|
||||
TEXT_MONTH: ' de <b />'
|
||||
TEXT_DOM: ' o <b />'
|
||||
ERROR1: A etiqueta %s non é compatíbel!
|
||||
ERROR2: Mal número de elementos
|
||||
ERROR3: O jquery_element debería estar determinado na configuración de jqCron
|
||||
ERROR4: Expresión non recoñecida
|
||||
@@ -37,8 +37,8 @@ GRAV:
|
||||
YR_PLURAL: שני'
|
||||
DEC_PLURAL: עש'
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>האימות נכשל:</b>
|
||||
INVALID_INPUT: קלט לא חוקי
|
||||
VALIDATION_FAIL: '<b>האימות נכשל:</b>'
|
||||
INVALID_INPUT: 'קלט לא חוקי'
|
||||
MISSING_REQUIRED_FIELD: 'שדות חובה חסרים:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'ינואר'
|
||||
|
||||
@@ -50,8 +50,8 @@ GRAV:
|
||||
YR_PLURAL: g
|
||||
DEC_PLURAL: des
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Validacija nije uspjela:</b>
|
||||
INVALID_INPUT: Pogrešan unos u
|
||||
VALIDATION_FAIL: '<b>Validacija nije uspjela:</b>'
|
||||
INVALID_INPUT: 'Pogrešan unos u'
|
||||
MISSING_REQUIRED_FIELD: 'Nedostaje obavezno polje:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Siječanj'
|
||||
|
||||
@@ -58,7 +58,7 @@ GRAV:
|
||||
YR_PLURAL: év
|
||||
DEC_PLURAL: évt
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Érvényesítés nem sikerült:</b>
|
||||
VALIDATION_FAIL: '<b>Érvényesítés nem sikerült:</b>'
|
||||
INVALID_INPUT: 'A megadott érték érvénytelen:'
|
||||
MISSING_REQUIRED_FIELD: 'Ez a kötelező mező nincs kitöltve:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
|
||||
@@ -1,26 +1,74 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Error: Frontmatter tidak valid\n\nLokasi: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
INFLECTOR_PLURALS:
|
||||
'/(quiz)$/i': '\1zes'
|
||||
'/^(ox)$/i': '\1en'
|
||||
'/([m|l])ouse$/i': '\1ice'
|
||||
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||
'/(x|ch|ss|sh)$/i': '\1es'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||
'/(hive)$/i': '\1s'
|
||||
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||
'/sis$/i': 'ses'
|
||||
'/([ti])um$/i': '\1a'
|
||||
'/(buffal|tomat)o$/i': '\1oes'
|
||||
'/(bu)s$/i': '\1ses'
|
||||
'/(alias|status)/i': '\1es'
|
||||
'/(octop|vir)us$/i': '\1i'
|
||||
'/(ax|test)is$/i': '\1es'
|
||||
'/s$/i': 's'
|
||||
'/$/': 's'
|
||||
INFLECTOR_SINGULAR:
|
||||
'/(quiz)zes$/i': '\1'
|
||||
'/(matr)ices$/i': '\1ix'
|
||||
'/(vert|ind)ices$/i': '\1ex'
|
||||
'/^(ox)en/i': '\1'
|
||||
'/(alias|status)es$/i': '\1'
|
||||
'/([octop|vir])i$/i': '\1us'
|
||||
'/(cris|ax|test)es$/i': '\1is'
|
||||
'/(shoe)s$/i': '\1'
|
||||
'/(o)es$/i': '\1'
|
||||
'/(bus)es$/i': '\1'
|
||||
'/([m|l])ice$/i': '\1ouse'
|
||||
'/(x|ch|ss|sh)es$/i': '\1'
|
||||
'/(m)ovies$/i': '\1ovie'
|
||||
'/(s)eries$/i': '\1eries'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||
'/([lr])ves$/i': '\1f'
|
||||
'/(tive)s$/i': '\1'
|
||||
'/(hive)s$/i': '\1'
|
||||
'/([^f])ves$/i': '\1fe'
|
||||
'/(^analy)ses$/i': '\1sis'
|
||||
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||
'/([ti])a$/i': '\1um'
|
||||
'/(n)ews$/i': '\1ews'
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'peralatan'
|
||||
- 'informasi'
|
||||
- 'nasi'
|
||||
- 'uang'
|
||||
- 'spesies'
|
||||
- 'rangkaian'
|
||||
- 'ikan'
|
||||
- 'domba'
|
||||
- 'Peralatan'
|
||||
- 'Informasi '
|
||||
- 'Nasi'
|
||||
- 'Uang'
|
||||
- 'Jenis'
|
||||
- 'Seri'
|
||||
- 'Ikan'
|
||||
- 'Domba'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'orang-orang'
|
||||
'man': 'laki-laki'
|
||||
'child': 'anak-anak'
|
||||
'sex': 'jenis kelamin'
|
||||
'person': 'Orang-orang'
|
||||
'man': 'Pria'
|
||||
'child': 'Balita'
|
||||
'sex': 'Jenis Kelamin'
|
||||
'move': 'pindahkan'
|
||||
INFLECTOR_ORDINALS:
|
||||
'default': 'ke'
|
||||
'first': 'pertama'
|
||||
'second': 'nd'
|
||||
'third': 'rd'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: Tanggal tidak tersedia
|
||||
NO_DATE_PROVIDED: Tidak ada tanggal yang disediakan
|
||||
BAD_DATE: Format tanggal salah
|
||||
AGO: yang lalu
|
||||
FROM_NOW: dari saat ini
|
||||
FROM_NOW: dari sekarang
|
||||
JUST_NOW: baru saja
|
||||
SECOND: detik
|
||||
MINUTE: menit
|
||||
@@ -30,12 +78,12 @@ GRAV:
|
||||
MONTH: bulan
|
||||
YEAR: tahun
|
||||
DECADE: dekade
|
||||
SEC: dtk
|
||||
MIN: mnt
|
||||
HR: j
|
||||
WK: mng
|
||||
MO: bln
|
||||
YR: thn
|
||||
SEC: detik
|
||||
MIN: menit
|
||||
HR: ' jam'
|
||||
WK: minggu
|
||||
MO: bulan
|
||||
YR: tahun
|
||||
DEC: desimal
|
||||
SECOND_PLURAL: detik
|
||||
MINUTE_PLURAL: menit
|
||||
@@ -45,17 +93,18 @@ GRAV:
|
||||
MONTH_PLURAL: bulan
|
||||
YEAR_PLURAL: tahun
|
||||
DECADE_PLURAL: dekade
|
||||
SEC_PLURAL: dtk
|
||||
MIN_PLURAL: mnt
|
||||
HR_PLURAL: j
|
||||
WK_PLURAL: mgg
|
||||
MO_PLURAL: bln
|
||||
YR_PLURAL: thn
|
||||
SEC_PLURAL: detik
|
||||
MIN_PLURAL: menit
|
||||
HR_PLURAL: jam
|
||||
WK_PLURAL: minggu
|
||||
MO_PLURAL: bulan
|
||||
YR_PLURAL: tahun
|
||||
DEC_PLURAL: dekade
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Validasi gagal:</b>
|
||||
INVALID_INPUT: Input tidak valid di
|
||||
VALIDATION_FAIL: '<b>Validasi gagal:</b>'
|
||||
INVALID_INPUT: 'Input tidak valid di'
|
||||
MISSING_REQUIRED_FIELD: 'Data yang diperlukan belum terisi:'
|
||||
XSS_ISSUES: "Isu berpotensial XSS terdeteksi dalam baris %s"
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Januari'
|
||||
- 'Februari'
|
||||
@@ -74,22 +123,25 @@ GRAV:
|
||||
- 'Selasa'
|
||||
- 'Rabu'
|
||||
- 'Kamis'
|
||||
- 'Jumat'
|
||||
- 'Jum''at'
|
||||
- 'Sabtu'
|
||||
- 'Minggu'
|
||||
YES: "Ya"
|
||||
NO: "Tidak"
|
||||
CRON:
|
||||
EVERY: Setiap
|
||||
EVERY_HOUR: Setiap jam
|
||||
EVERY_MINUTE: Setiap menit
|
||||
EVERY_DAY_OF_WEEK: Setiap hari selama seminggu
|
||||
EVERY_DAY_OF_MONTH: pada tanggal setiap bulannya
|
||||
EVERY_DAY_OF_MONTH: Setiap hari dalam sebulan
|
||||
EVERY_MONTH: setiap bulan
|
||||
TEXT_PERIOD: Setiap <b />
|
||||
TEXT_MINS: 'dalam <b /> menit setelah jam yang lalu'
|
||||
TEXT_TIME: ' pada <b />:<b />'
|
||||
TEXT_DOW: ' pada <b />'
|
||||
TEXT_MONTH: ' pada <b />'
|
||||
TEXT_DOM: ' pada <b />'
|
||||
ERROR1: Tag %s tidak didukung!
|
||||
ERROR2: Jumlah elemen tidak valid
|
||||
ERROR3: jquery_element harus ditetapkan ke pengaturan jqCron
|
||||
ERROR4: Ekspresi tidak dikenali
|
||||
ERROR2: Jumlah elemen yang buruk
|
||||
ERROR3: jquery_element harus diatur ke dalam pengaturan jqCron
|
||||
ERROR4: Ekspresi tidak dikenal
|
||||
|
||||
@@ -46,8 +46,8 @@ GRAV:
|
||||
YR_PLURAL: árum
|
||||
DEC_PLURAL: árat
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Sannvottun mistókst:</b>
|
||||
INVALID_INPUT: Ógilt inntak í
|
||||
VALIDATION_FAIL: '<b>Sannvottun mistókst:</b>'
|
||||
INVALID_INPUT: 'Ógilt inntak í'
|
||||
MISSING_REQUIRED_FIELD: 'Vantar nauðsynlegan reit:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'janúar'
|
||||
|
||||
@@ -1,6 +1,49 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---Titolo: %1$s---# Errore: Frontmatter non valido: '%2$s' * *%3$s * * ' '%4$s ' '"
|
||||
INFLECTOR_PLURALS:
|
||||
'/(quiz)$/i': '\1'
|
||||
'/^(ox)$/i': '\1en'
|
||||
'/([m|l])ouse$/i': '\1ice'
|
||||
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||
'/(x|ch|ss|sh)$/i': '\1es'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||
'/(hive)$/i': '\1s'
|
||||
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||
'/sis$/i': 'ses'
|
||||
'/([ti])um$/i': '\1a'
|
||||
'/(buffal|tomat)o$/i': '\1oes'
|
||||
'/(bu)s$/i': '\1ses'
|
||||
'/(alias|status)/i': '\1es'
|
||||
'/(octop|vir)us$/i': '\1i'
|
||||
'/(ax|test)is$/i': '\1es'
|
||||
'/s$/i': 's'
|
||||
'/$/': 's'
|
||||
INFLECTOR_SINGULAR:
|
||||
'/(quiz)zes$/i': '\1'
|
||||
'/(matr)ices$/i': '\1ix'
|
||||
'/(vert|ind)ices$/i': '\1ex'
|
||||
'/^(ox)en/i': '\1'
|
||||
'/(alias|status)es$/i': '\1'
|
||||
'/([octop|vir])i$/i': '\1us'
|
||||
'/(cris|ax|test)es$/i': '\1is'
|
||||
'/(shoe)s$/i': '\1'
|
||||
'/(o)es$/i': '\1'
|
||||
'/(bus)es$/i': '\1'
|
||||
'/([m|l])ice$/i': '\1ouse'
|
||||
'/(x|ch|ss|sh)es$/i': '\1'
|
||||
'/(m)ovies$/i': '\1ovie'
|
||||
'/(s)eries$/i': '\1eries'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||
'/([lr])ves$/i': '\1f'
|
||||
'/(tive)s$/i': '\1'
|
||||
'/(hive)s$/i': '\1'
|
||||
'/([^f])ves$/i': '\1fe'
|
||||
'/(^analy)ses$/i': '\1sis'
|
||||
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||
'/([ti])a$/i': '\1um'
|
||||
'/(n)ews$/i': '\1ews'
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'dotazione'
|
||||
- 'informazione'
|
||||
@@ -58,9 +101,10 @@ GRAV:
|
||||
YR_PLURAL: anni
|
||||
DEC_PLURAL: decenni
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Validazione fallita:</b>
|
||||
INVALID_INPUT: Input non valido in
|
||||
VALIDATION_FAIL: '<b>Validazione fallita:</b>'
|
||||
INVALID_INPUT: 'Input non valido in'
|
||||
MISSING_REQUIRED_FIELD: 'Campo richiesto mancante:'
|
||||
XSS_ISSUES: "Rilevati potenziali problemi di XSS nel campo '%s'"
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Gennaio'
|
||||
- 'Febbraio'
|
||||
@@ -82,6 +126,8 @@ GRAV:
|
||||
- 'Venerdì'
|
||||
- 'Sabato'
|
||||
- 'Domenica'
|
||||
YES: "Sì"
|
||||
NO: "No"
|
||||
CRON:
|
||||
EVERY: ogni
|
||||
EVERY_HOUR: ogni ora
|
||||
|
||||
@@ -1,11 +1,22 @@
|
||||
---
|
||||
GRAV:
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'equipment'
|
||||
- '情報'
|
||||
- 'rice'
|
||||
- 'お金'
|
||||
- 'species'
|
||||
- 'series'
|
||||
- '魚'
|
||||
- 'ヒツジ'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'みんな'
|
||||
'man': '人'
|
||||
'child': '子供'
|
||||
'sex': '性別'
|
||||
'move': '移動'
|
||||
INFLECTOR_ORDINALS:
|
||||
'first': '番目'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: 日付が設定されていません
|
||||
BAD_DATE: 不正な日付
|
||||
@@ -40,8 +51,8 @@ GRAV:
|
||||
YR_PLURAL: 年
|
||||
DEC_PLURAL: 10年
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>バリデーション失敗 :</b>
|
||||
INVALID_INPUT: 不正な入力:
|
||||
VALIDATION_FAIL: '<b>バリデーション失敗 :</b>'
|
||||
INVALID_INPUT: '不正な入力:'
|
||||
MISSING_REQUIRED_FIELD: '必須項目が入力されていません:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- '1月'
|
||||
@@ -64,3 +75,7 @@ GRAV:
|
||||
- '金'
|
||||
- '土'
|
||||
- '日'
|
||||
CRON:
|
||||
EVERY: 毎
|
||||
EVERY_MONTH: 毎月
|
||||
ERROR1: 共有タイプ %s はサポートされていません
|
||||
|
||||
@@ -37,8 +37,8 @@ GRAV:
|
||||
YR_PLURAL: 년
|
||||
DEC_PLURAL: 년간
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>유효성 검사 실패:</b>
|
||||
INVALID_INPUT: 잘못된 입력
|
||||
VALIDATION_FAIL: '<b>유효성 검사 실패:</b>'
|
||||
INVALID_INPUT: '잘못된 입력'
|
||||
MISSING_REQUIRED_FIELD: '누락 된 필수 필드:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- '일월'
|
||||
|
||||
@@ -52,8 +52,8 @@ GRAV:
|
||||
YR_PLURAL: m.
|
||||
DEC_PLURAL: dešimtmečiai
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Patvirtinimas nepavyko:</b>
|
||||
INVALID_INPUT: Neteisingai įvesta į
|
||||
VALIDATION_FAIL: '<b>Patvirtinimas nepavyko:</b>'
|
||||
INVALID_INPUT: 'Neteisingai įvesta į'
|
||||
MISSING_REQUIRED_FIELD: 'Būtina užpildyti laukelį:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Sausis'
|
||||
|
||||
147
system/languages/mn.yaml
Normal file
147
system/languages/mn.yaml
Normal file
@@ -0,0 +1,147 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\nГарчиг: %1$s\n---\n\n# Алдаа: Буруу Формат\n\nЗам: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
INFLECTOR_PLURALS:
|
||||
'/(quiz)$/i': '\1зүүд'
|
||||
'/^(ox)$/i': '\1ууд'
|
||||
'/([m|l])ouse$/i': '\1ууд'
|
||||
'/(matr|vert|ind)ix|ex$/i': '\1иксүүд'
|
||||
'/(x|ch|ss|sh)$/i': '\1үүд'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1үүд'
|
||||
'/([^aeiouy]|qu)y$/i': '\1үүд'
|
||||
'/(hive)$/i': '\1үүд'
|
||||
'/(?:([^f])fe|([lr])f)$/i': '\1\2үүд'
|
||||
'/sis$/i': 'үүд'
|
||||
'/([ti])um$/i': '\1үүд'
|
||||
'/(buffal|tomat)o$/i': '\1үүд'
|
||||
'/(bu)s$/i': '\1үүд'
|
||||
'/(alias|status)/i': '\1үүд'
|
||||
'/(octop|vir)us$/i': '\1үүд'
|
||||
'/(ax|test)is$/i': '\1үүд'
|
||||
'/s$/i': 'үүд'
|
||||
'/$/': 'үүд'
|
||||
INFLECTOR_SINGULAR:
|
||||
'/(quiz)zes$/i': '\1'
|
||||
'/(matr)ices$/i': '\1икс'
|
||||
'/(vert|ind)ices$/i': '\1икс'
|
||||
'/^(ox)en/i': '\1'
|
||||
'/(alias|status)es$/i': '\1'
|
||||
'/([octop|vir])i$/i': '\1'
|
||||
'/(cris|ax|test)es$/i': '\1'
|
||||
'/(shoe)s$/i': '\1'
|
||||
'/(o)es$/i': '\1'
|
||||
'/(bus)es$/i': '\1'
|
||||
'/([m|l])ice$/i': '\1'
|
||||
'/(x|ch|ss|sh)es$/i': '\1'
|
||||
'/(m)ovies$/i': '\1'
|
||||
'/(s)eries$/i': '\1'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1үүд'
|
||||
'/([lr])ves$/i': '\1'
|
||||
'/(tive)s$/i': '\1'
|
||||
'/(hive)s$/i': '\1'
|
||||
'/([^f])ves$/i': '\1'
|
||||
'/(^analy)ses$/i': '\1'
|
||||
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2үүд'
|
||||
'/([ti])a$/i': '\1'
|
||||
'/(n)ews$/i': '\1'
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'тоног төхөөрөмж'
|
||||
- 'Мэдээлэл'
|
||||
- 'будаа'
|
||||
- 'мөнгө'
|
||||
- 'төрөл зүйл'
|
||||
- 'цуврал'
|
||||
- 'загас'
|
||||
- 'хонь'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'хүмүүс'
|
||||
'man': 'эрчүүд'
|
||||
'child': 'хүүхэд'
|
||||
'sex': 'хүйс'
|
||||
'move': 'хөдөлгөөн'
|
||||
INFLECTOR_ORDINALS:
|
||||
'default': 'th'
|
||||
'first': 'st'
|
||||
'second': 'nd'
|
||||
'third': 'rd'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: Огноо алга
|
||||
BAD_DATE: Буруу огноо
|
||||
AGO: өмнө
|
||||
FROM_NOW: одооноос
|
||||
JUST_NOW: дөнгөж сая
|
||||
SECOND: секунд
|
||||
MINUTE: минут
|
||||
HOUR: цаг
|
||||
DAY: өдөр
|
||||
WEEK: долоо хоног
|
||||
MONTH: сар
|
||||
YEAR: он
|
||||
DECADE: арван жил
|
||||
SEC: сек
|
||||
MIN: мин
|
||||
HR: цаг
|
||||
WK: д.х.
|
||||
MO: сар
|
||||
YR: он
|
||||
DEC: арван жил
|
||||
SECOND_PLURAL: секунд
|
||||
MINUTE_PLURAL: минут
|
||||
HOUR_PLURAL: цаг
|
||||
DAY_PLURAL: өдрүүд
|
||||
WEEK_PLURAL: долоо хоногууд
|
||||
MONTH_PLURAL: сарууд
|
||||
YEAR_PLURAL: онууд
|
||||
DECADE_PLURAL: арван жилүүд
|
||||
SEC_PLURAL: сек.-үүд
|
||||
MIN_PLURAL: мин.-ууд
|
||||
HR_PLURAL: цагууд
|
||||
WK_PLURAL: д.х.-ууд
|
||||
MO_PLURAL: сарууд
|
||||
YR_PLURAL: жилүүд
|
||||
DEC_PLURAL: арван жилүүд
|
||||
FORM:
|
||||
VALIDATION_FAIL: '<b>Баталгаажуулалт амжилтгүй боллоо:</b>'
|
||||
INVALID_INPUT: 'Буруу өгөгдөл дараахид'
|
||||
MISSING_REQUIRED_FIELD: 'Шаардлагатай талбар дутуу байна:'
|
||||
XSS_ISSUES: "'%s' талбарт XSS -ийн болзошгүй асуудлууд илэрсэн"
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- '1-р сар'
|
||||
- '2-р сар'
|
||||
- '3-р сар'
|
||||
- '4-р сар'
|
||||
- '5 сар'
|
||||
- '6 сар'
|
||||
- '7 сар'
|
||||
- '8 сар'
|
||||
- '9 сар'
|
||||
- '10 сар'
|
||||
- '11 сар'
|
||||
- '12 сар'
|
||||
DAYS_OF_THE_WEEK:
|
||||
- 'Даваа гараг'
|
||||
- 'Мягмар гараг'
|
||||
- 'Лхагва гараг'
|
||||
- 'Пүрэв гараг'
|
||||
- 'Баасан гараг'
|
||||
- 'Бямба гараг'
|
||||
- 'Ням гараг'
|
||||
YES: "Тийм"
|
||||
NO: "Үгүй"
|
||||
CRON:
|
||||
EVERY: бүрийн
|
||||
EVERY_HOUR: цаг бүрийн
|
||||
EVERY_MINUTE: минут бүрийн
|
||||
EVERY_DAY_OF_WEEK: долоо хоногийн өдөр болгонд
|
||||
EVERY_DAY_OF_MONTH: сарын өдөр болгонд
|
||||
EVERY_MONTH: сар болгон
|
||||
TEXT_PERIOD: Бүрийн <b />
|
||||
TEXT_MINS: ' <b /> энэ сүүлийн цагийн минутад'
|
||||
TEXT_TIME: ' <b />:<b /> -д'
|
||||
TEXT_DOW: ' <b /> -д'
|
||||
TEXT_MONTH: ' <b /> -ын'
|
||||
TEXT_DOM: ' <b /> -т'
|
||||
ERROR1: '%s -н утга нь дэмжигддэггүй!'
|
||||
ERROR2: Элементүүдийн тоо хэмжээ буруу
|
||||
ERROR3: jquery_element нь jqCron тохиргоонд хийгдсэн байх ёстой
|
||||
ERROR4: Танигдаагүй илэрхийлэл
|
||||
@@ -101,8 +101,8 @@ GRAV:
|
||||
YR_PLURAL: jaren
|
||||
DEC_PLURAL: decennia
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Validatie mislukt:</b>
|
||||
INVALID_INPUT: Ongeldige invoer in
|
||||
VALIDATION_FAIL: '<b>Validatie mislukt:</b>'
|
||||
INVALID_INPUT: 'Ongeldige invoer in'
|
||||
MISSING_REQUIRED_FIELD: 'Ontbrekend verplicht veld:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Januari'
|
||||
|
||||
@@ -21,6 +21,7 @@ GRAV:
|
||||
BAD_DATE: Ugyldig dato
|
||||
AGO: siden
|
||||
FROM_NOW: fra nå
|
||||
JUST_NOW: akkurat nå
|
||||
SECOND: sekund
|
||||
MINUTE: minutt
|
||||
HOUR: time
|
||||
@@ -51,8 +52,8 @@ GRAV:
|
||||
YR_PLURAL: år
|
||||
DEC_PLURAL: årtier
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Godkjenning mislyktes:</b>
|
||||
INVALID_INPUT: Ugyldig innhold i
|
||||
VALIDATION_FAIL: '<b>Godkjenning mislyktes:</b>'
|
||||
INVALID_INPUT: 'Ugyldig innhold i'
|
||||
MISSING_REQUIRED_FIELD: 'Mangler påkrevd felt:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'januar'
|
||||
@@ -75,3 +76,7 @@ GRAV:
|
||||
- 'fredag'
|
||||
- 'lørdag'
|
||||
- 'søndag'
|
||||
CRON:
|
||||
EVERY: hver
|
||||
EVERY_HOUR: hver time
|
||||
EVERY_MINUTE: hvert minutt
|
||||
|
||||
@@ -1,11 +1,32 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Error: Nieprawidłowy Frontmatter\n\nPath: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
INFLECTOR_SINGULAR:
|
||||
'/(alias|status)es$/i': '\1'
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'wyposażenie'
|
||||
- 'informacja'
|
||||
- 'rice'
|
||||
- 'pieniądze'
|
||||
- 'species'
|
||||
- 'series'
|
||||
- 'ryba'
|
||||
- 'owca'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'człowiek'
|
||||
'man': 'mężczyźni'
|
||||
'child': 'dzieci'
|
||||
'sex': 'płci'
|
||||
INFLECTOR_ORDINALS:
|
||||
'first': 'pierwszy'
|
||||
'second': 'drugi'
|
||||
'third': 'trzeci'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: Nie podano daty
|
||||
BAD_DATE: Zła data
|
||||
AGO: temu
|
||||
FROM_NOW: od teraz
|
||||
JUST_NOW: właśnie teraz
|
||||
SECOND: sekunda
|
||||
MINUTE: minuta
|
||||
HOUR: godzina
|
||||
@@ -15,6 +36,7 @@ GRAV:
|
||||
YEAR: rok
|
||||
DECADE: dekada
|
||||
SEC: sek
|
||||
MIN: minuta
|
||||
HR: godz
|
||||
WK: tydz
|
||||
MO: m-c
|
||||
@@ -36,9 +58,10 @@ GRAV:
|
||||
YR_PLURAL: lat
|
||||
DEC_PLURAL: dekad
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Weryfikacja nie powiodła się:</b>
|
||||
INVALID_INPUT: Nieprawidłowe dane wejściowe
|
||||
VALIDATION_FAIL: '<b>Weryfikacja nie powiodła się:</b>'
|
||||
INVALID_INPUT: 'Nieprawidłowe dane wejściowe'
|
||||
MISSING_REQUIRED_FIELD: 'Opuszczono wymagane pole:'
|
||||
XSS_ISSUES: "Potencjalne problemy XSS wykryte w polu '%s'"
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Styczeń'
|
||||
- 'Luty'
|
||||
@@ -60,3 +83,18 @@ GRAV:
|
||||
- 'Piątek'
|
||||
- 'Sobota'
|
||||
- 'Niedziela'
|
||||
YES: "Tak"
|
||||
NO: "Nie"
|
||||
CRON:
|
||||
EVERY: każdy
|
||||
EVERY_HOUR: każdą godzinę
|
||||
EVERY_MINUTE: każdą minutę
|
||||
EVERY_DAY_OF_WEEK: każdego dnia tygodnia
|
||||
EVERY_DAY_OF_MONTH: każdego dnia miesiące
|
||||
EVERY_MONTH: każdego miesiąca
|
||||
TEXT_PERIOD: Każdego <b />
|
||||
TEXT_MINS: 'o <b /> minut po godzinie'
|
||||
TEXT_TIME: 'o <b />:<b />'
|
||||
ERROR1: Znacznik %s nie jest wspierany!
|
||||
ERROR2: Nieprawidłowa liczba elementów
|
||||
ERROR4: Wyrażenie nierozpoznane
|
||||
|
||||
@@ -1,8 +1,75 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\ntitle: %1$s\n---\n\n# Erro: Frontmatter Inválido\n\nLocalização: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
INFLECTOR_PLURALS:
|
||||
'/(quiz)$/i': '\1zes'
|
||||
'/^(ox)$/i': '\1en'
|
||||
'/([m|l])ouse$/i': '\1ice'
|
||||
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||
'/(x|ch|ss|sh)$/i': '\1es'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||
'/(hive)$/i': '\1s'
|
||||
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||
'/sis$/i': 'ses'
|
||||
'/([ti])um$/i': '\1a'
|
||||
'/(buffal|tomat)o$/i': '\1oes'
|
||||
'/(bu)s$/i': '\1ses'
|
||||
'/(alias|status)/i': '\1es'
|
||||
'/(octop|vir)us$/i': '\1i'
|
||||
'/(ax|test)is$/i': '\1es'
|
||||
'/s$/i': 's'
|
||||
'/$/': 's'
|
||||
INFLECTOR_SINGULAR:
|
||||
'/(quiz)zes$/i': '\1'
|
||||
'/(matr)ices$/i': '\1ix'
|
||||
'/(vert|ind)ices$/i': '\1ex'
|
||||
'/^(ox)en/i': '\1'
|
||||
'/(alias|status)es$/i': '\1'
|
||||
'/([octop|vir])i$/i': '\1us'
|
||||
'/(cris|ax|test)es$/i': '\1is'
|
||||
'/(shoe)s$/i': '\1'
|
||||
'/(o)es$/i': '\1'
|
||||
'/(bus)es$/i': '\1'
|
||||
'/([m|l])ice$/i': '\1ouse'
|
||||
'/(x|ch|ss|sh)es$/i': '\1'
|
||||
'/(m)ovies$/i': '\1ovie'
|
||||
'/(s)eries$/i': '\1eries'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||
'/([lr])ves$/i': '\1f'
|
||||
'/(tive)s$/i': '\1'
|
||||
'/(hive)s$/i': '\1'
|
||||
'/([^f])ves$/i': '\1fe'
|
||||
'/(^analy)ses$/i': '\1sis'
|
||||
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||
'/([ti])a$/i': '\1um'
|
||||
'/(n)ews$/i': '\1ews'
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'equipamento'
|
||||
- 'informação'
|
||||
- 'arroz'
|
||||
- 'dinheiro'
|
||||
- 'espécie'
|
||||
- 'série'
|
||||
- 'peixe'
|
||||
- 'ovelha'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'pessoas'
|
||||
'man': 'homens'
|
||||
'child': 'crianças'
|
||||
'sex': 'sexos'
|
||||
'move': 'movimentos'
|
||||
INFLECTOR_ORDINALS:
|
||||
'default': 'º'
|
||||
'first': 'º'
|
||||
'second': 'º'
|
||||
'third': 'º'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: Nenhuma data fornecida
|
||||
BAD_DATE: Data inválida
|
||||
AGO: atrás
|
||||
FROM_NOW: a partir de agora
|
||||
JUST_NOW: mesmo agora
|
||||
SECOND: segundo
|
||||
MINUTE: minuto
|
||||
HOUR: hora
|
||||
@@ -11,17 +78,33 @@ GRAV:
|
||||
MONTH: mês
|
||||
YEAR: ano
|
||||
DECADE: década
|
||||
SEC: segundos
|
||||
MIN: minutos
|
||||
SEC: seg
|
||||
MIN: min
|
||||
HR: hora
|
||||
WK: semana
|
||||
MO: mês
|
||||
YR: ano
|
||||
DEC: década
|
||||
SECOND_PLURAL: segundos
|
||||
MINUTE_PLURAL: minutos
|
||||
HOUR_PLURAL: horas
|
||||
DAY_PLURAL: dias
|
||||
WEEK_PLURAL: semanas
|
||||
MONTH_PLURAL: meses
|
||||
YEAR_PLURAL: anos
|
||||
DECADE_PLURAL: decadas
|
||||
DECADE_PLURAL: décadas
|
||||
SEC_PLURAL: segs
|
||||
MIN_PLURAL: mins
|
||||
HR_PLURAL: hrs
|
||||
WK_PLURAL: sems
|
||||
MO_PLURAL: meses
|
||||
YR_PLURAL: anos
|
||||
DEC_PLURAL: décadas
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Falha na validação!</b>
|
||||
MISSING_REQUIRED_FIELD: 'Campo obrigatório requerido:'
|
||||
VALIDATION_FAIL: '<b>Falha na validação:</b>'
|
||||
INVALID_INPUT: 'Dados inseridos são inválidos em'
|
||||
MISSING_REQUIRED_FIELD: 'Campo obrigatório em falta:'
|
||||
XSS_ISSUES: "Potenciais problemas de XSS detectados no campo '%s'"
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Janeiro'
|
||||
- 'Fevereiro'
|
||||
@@ -35,12 +118,30 @@ GRAV:
|
||||
- 'Outubro'
|
||||
- 'Novembro'
|
||||
- 'Dezembro'
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'equipment'
|
||||
- 'information'
|
||||
- 'arroz'
|
||||
- 'money'
|
||||
- 'species'
|
||||
- 'series'
|
||||
- 'fish'
|
||||
- 'sheep'
|
||||
DAYS_OF_THE_WEEK:
|
||||
- 'Segunda-feira'
|
||||
- 'Terça-feira'
|
||||
- 'Quarta-feira'
|
||||
- 'Quinta-feira'
|
||||
- 'Sexta-feira'
|
||||
- 'Sábado'
|
||||
- 'Domingo'
|
||||
YES: "Sim"
|
||||
NO: "Não"
|
||||
CRON:
|
||||
EVERY: cada
|
||||
EVERY_HOUR: cada hora
|
||||
EVERY_MINUTE: cada minuto
|
||||
EVERY_DAY_OF_WEEK: todos os dias da semana
|
||||
EVERY_DAY_OF_MONTH: todos os dias do mês
|
||||
EVERY_MONTH: todos os meses
|
||||
TEXT_PERIOD: Cada <b />
|
||||
TEXT_MINS: ' em <b /> minuto(s) após a hora'
|
||||
TEXT_TIME: ' em <b />:<b />'
|
||||
TEXT_DOW: ' em <b />'
|
||||
TEXT_MONTH: ' de <b />'
|
||||
TEXT_DOM: ' em <b />'
|
||||
ERROR1: A tag %s não é suportada!
|
||||
ERROR2: Número de elementos inválido
|
||||
ERROR3: O jquery_element deve ser definido nas configurações do jqCron
|
||||
ERROR4: Expressão não reconhecida
|
||||
|
||||
@@ -53,8 +53,8 @@ GRAV:
|
||||
YR_PLURAL: ani
|
||||
DEC_PLURAL: decenii
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Validare nereușită</b>
|
||||
INVALID_INPUT: Date incorecte în
|
||||
VALIDATION_FAIL: '<b>Validare nereușită</b>'
|
||||
INVALID_INPUT: 'Date incorecte în'
|
||||
MISSING_REQUIRED_FIELD: 'Câmp obligatoriu lipsă:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Ianuarie'
|
||||
|
||||
@@ -13,7 +13,7 @@ GRAV:
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'люди'
|
||||
'man': 'человек'
|
||||
'child': 'ребенок'
|
||||
'child': 'дети'
|
||||
'sex': 'пол'
|
||||
'move': 'движется'
|
||||
INFLECTOR_ORDINALS:
|
||||
@@ -58,9 +58,10 @@ GRAV:
|
||||
YR_PLURAL: г
|
||||
DEC_PLURAL: дстлт
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Проверка не удалась:</b>
|
||||
INVALID_INPUT: Неверный ввод в
|
||||
VALIDATION_FAIL: '<b>Проверка не удалась:</b>'
|
||||
INVALID_INPUT: 'Неверный ввод в'
|
||||
MISSING_REQUIRED_FIELD: 'Отсутствует необходимое поле:'
|
||||
XSS_ISSUES: "Обнаружены потенциальные XSS проблемы в поле '%s'"
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'январь'
|
||||
- 'февраль'
|
||||
@@ -68,12 +69,12 @@ GRAV:
|
||||
- 'апрель'
|
||||
- 'май'
|
||||
- 'июнь'
|
||||
- 'Июль'
|
||||
- 'Август'
|
||||
- 'Сентябрь'
|
||||
- 'Октябрь'
|
||||
- 'Ноябрь'
|
||||
- 'Декабрь'
|
||||
- 'июль'
|
||||
- 'август'
|
||||
- 'сентябрь'
|
||||
- 'октябрь'
|
||||
- 'ноябрь'
|
||||
- 'декабрь'
|
||||
DAYS_OF_THE_WEEK:
|
||||
- 'понедельник'
|
||||
- 'вторник'
|
||||
@@ -82,6 +83,8 @@ GRAV:
|
||||
- 'пятница'
|
||||
- 'суббота'
|
||||
- 'воскресенье'
|
||||
YES: "Да"
|
||||
NO: "Нет"
|
||||
CRON:
|
||||
EVERY: раз в
|
||||
EVERY_HOUR: раз в час
|
||||
|
||||
9
system/languages/si.yaml
Normal file
9
system/languages/si.yaml
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
GRAV:
|
||||
INFLECTOR_SINGULAR:
|
||||
'/(quiz)zes$/i': '\1'
|
||||
'/^(ox)en/i': '\1'
|
||||
'/(alias|status)es$/i': '\1'
|
||||
'/(o)es$/i': '\1'
|
||||
'/(bus)es$/i': '\1'
|
||||
'/(x|ch|ss|sh)es$/i': '\1'
|
||||
@@ -101,8 +101,8 @@ GRAV:
|
||||
YR_PLURAL: rokov
|
||||
DEC_PLURAL: dekád
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Overenie zlyhalo:</b>
|
||||
INVALID_INPUT: Neplatný vstup v
|
||||
VALIDATION_FAIL: '<b>Overenie zlyhalo:</b>'
|
||||
INVALID_INPUT: 'Neplatný vstup v'
|
||||
MISSING_REQUIRED_FIELD: 'Chýba vyžadované pole:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Január'
|
||||
|
||||
@@ -36,8 +36,8 @@ GRAV:
|
||||
YR_PLURAL: l
|
||||
DEC_PLURAL: des
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Preverjanje veljavnosti ni uspelo:</b>
|
||||
INVALID_INPUT: Neveljaven vnos v
|
||||
VALIDATION_FAIL: '<b>Preverjanje veljavnosti ni uspelo:</b>'
|
||||
INVALID_INPUT: 'Neveljaven vnos v'
|
||||
MISSING_REQUIRED_FIELD: 'Manjka obvezno polje:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Januar'
|
||||
|
||||
144
system/languages/sr.yaml
Normal file
144
system/languages/sr.yaml
Normal file
@@ -0,0 +1,144 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\nнаслов: %1$s\n---\n\n# Грешка: неисправан Frontmatter\n\nПутања: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
INFLECTOR_PLURALS:
|
||||
'/(quiz)$/i': '\1zes'
|
||||
'/^(ox)$/i': '\1en'
|
||||
'/([m|l])ouse$/i': '\1ice'
|
||||
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||
'/(x|ch|ss|sh)$/i': '\1es'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||
'/(hive)$/i': '\1s'
|
||||
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||
'/sis$/i': 'ses'
|
||||
'/([ti])um$/i': '\1a'
|
||||
'/(buffal|tomat)o$/i': '\1oes'
|
||||
'/(bu)s$/i': '\1ses'
|
||||
'/(alias|status)/i': '\1es'
|
||||
'/(octop|vir)us$/i': '\1i'
|
||||
'/(ax|test)is$/i': '\1es'
|
||||
'/s$/i': 's'
|
||||
'/$/': 's'
|
||||
INFLECTOR_SINGULAR:
|
||||
'/(quiz)zes$/i': '\1'
|
||||
'/(matr)ices$/i': '\1ix'
|
||||
'/(vert|ind)ices$/i': '\1ex'
|
||||
'/^(ox)en/i': '\1'
|
||||
'/(alias|status)es$/i': '\1'
|
||||
'/([octop|vir])i$/i': '\1us'
|
||||
'/(cris|ax|test)es$/i': '\1is'
|
||||
'/(shoe)s$/i': '\1'
|
||||
'/(o)es$/i': '\1'
|
||||
'/(bus)es$/i': '\1'
|
||||
'/([m|l])ice$/i': '\1ouse'
|
||||
'/(x|ch|ss|sh)es$/i': '\1'
|
||||
'/(m)ovies$/i': '\1ovie'
|
||||
'/(s)eries$/i': '\1eries'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||
'/([lr])ves$/i': '\1f'
|
||||
'/(tive)s$/i': '\1'
|
||||
'/(hive)s$/i': '\1'
|
||||
'/([^f])ves$/i': '\1fe'
|
||||
'/(^analy)ses$/i': '\1sis'
|
||||
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||
'/([ti])a$/i': '\1um'
|
||||
'/(n)ews$/i': '\1ews'
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'опрема'
|
||||
- 'информација'
|
||||
- 'пиринач'
|
||||
- 'новац'
|
||||
- 'врсте'
|
||||
- 'серије'
|
||||
- 'риба'
|
||||
- 'овца'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'особе'
|
||||
'man': 'људи'
|
||||
'child': 'деца'
|
||||
'sex': 'полови'
|
||||
'move': 'помери'
|
||||
INFLECTOR_ORDINALS:
|
||||
'default': 'ти'
|
||||
'first': 'први'
|
||||
'second': 'други'
|
||||
'third': 'трећи'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: Нема датума
|
||||
BAD_DATE: Погрешан датум
|
||||
AGO: од пре
|
||||
FROM_NOW: од сада
|
||||
JUST_NOW: управо сада
|
||||
SECOND: секунда
|
||||
MINUTE: минута
|
||||
HOUR: сат
|
||||
DAY: дан
|
||||
WEEK: недеља
|
||||
MONTH: месец
|
||||
YEAR: година
|
||||
DECADE: декада
|
||||
SEC: сек
|
||||
MIN: мин
|
||||
HR: сат
|
||||
WK: нед
|
||||
MO: мес
|
||||
YR: год
|
||||
DEC: дек
|
||||
SECOND_PLURAL: секунди
|
||||
MINUTE_PLURAL: минута
|
||||
HOUR_PLURAL: сати
|
||||
DAY_PLURAL: дана
|
||||
WEEK_PLURAL: недеља
|
||||
MONTH_PLURAL: месеци
|
||||
YEAR_PLURAL: године(а)
|
||||
DECADE_PLURAL: декаде(а)
|
||||
SEC_PLURAL: сек
|
||||
MIN_PLURAL: мин
|
||||
HR_PLURAL: сати
|
||||
WK_PLURAL: недеља
|
||||
MO_PLURAL: месеци
|
||||
YR_PLURAL: година
|
||||
DEC_PLURAL: декада
|
||||
FORM:
|
||||
VALIDATION_FAIL: '<b>Провера неуспела:</b>'
|
||||
INVALID_INPUT: 'Неисправан унос у'
|
||||
MISSING_REQUIRED_FIELD: 'Недостаје обавезн поље:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Јануар'
|
||||
- 'Фебруар'
|
||||
- 'Март'
|
||||
- 'Април'
|
||||
- 'Мај'
|
||||
- 'Јуни'
|
||||
- 'Јули'
|
||||
- 'Август'
|
||||
- 'Септембар'
|
||||
- 'Октобар'
|
||||
- 'Новембар'
|
||||
- 'Децембар'
|
||||
DAYS_OF_THE_WEEK:
|
||||
- 'Понедељак'
|
||||
- 'Уторак'
|
||||
- 'Среда'
|
||||
- 'Четвртак'
|
||||
- 'Петак'
|
||||
- 'Субота'
|
||||
- 'Недеља'
|
||||
CRON:
|
||||
EVERY: сваки
|
||||
EVERY_HOUR: сваки сат
|
||||
EVERY_MINUTE: сваки минут
|
||||
EVERY_DAY_OF_WEEK: сваки дан у недељи
|
||||
EVERY_DAY_OF_MONTH: сваки дан у месецу
|
||||
EVERY_MONTH: сваки месец
|
||||
TEXT_PERIOD: Сваки <b />
|
||||
TEXT_MINS: ' у <b /> минути(а) прошлог сата'
|
||||
TEXT_TIME: ' у <b />:<b />'
|
||||
TEXT_DOW: ' на <b />'
|
||||
TEXT_MONTH: ' од <b />'
|
||||
TEXT_DOM: ' на <b />'
|
||||
ERROR1: Таг %s није подржан!
|
||||
ERROR2: Погрешан број елемената
|
||||
ERROR3: јquery_element би требао да буде постављен у jqCron подешавању
|
||||
ERROR4: Непрепознат израз
|
||||
@@ -12,11 +12,21 @@ GRAV:
|
||||
- 'får'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'personer'
|
||||
'man': 'män'
|
||||
'child': 'barn'
|
||||
'sex': 'kön'
|
||||
'move': 'flytta'
|
||||
INFLECTOR_ORDINALS:
|
||||
'default': ':e'
|
||||
'first': ':a'
|
||||
'second': ':a'
|
||||
'third': ':e'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: Inget datum har angivits
|
||||
BAD_DATE: Ogiltigt datum
|
||||
AGO: sedan
|
||||
FROM_NOW: fr.o.m nu
|
||||
JUST_NOW: just nu
|
||||
SECOND: sekund
|
||||
MINUTE: minut
|
||||
HOUR: timme
|
||||
@@ -26,10 +36,12 @@ GRAV:
|
||||
YEAR: år
|
||||
DECADE: årtionde
|
||||
SEC: sek
|
||||
MIN: min
|
||||
HR: t
|
||||
WK: v
|
||||
MO: m
|
||||
YR: år
|
||||
DEC: dec
|
||||
SECOND_PLURAL: sekunder
|
||||
MINUTE_PLURAL: minuter
|
||||
HOUR_PLURAL: timmar
|
||||
@@ -46,8 +58,8 @@ GRAV:
|
||||
YR_PLURAL: år
|
||||
DEC_PLURAL: dec
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Kontrollen misslyckades:</b>
|
||||
INVALID_INPUT: Ogiltig indata i
|
||||
VALIDATION_FAIL: '<b>Kontrollen misslyckades:</b>'
|
||||
INVALID_INPUT: 'Ogiltig indata i'
|
||||
MISSING_REQUIRED_FIELD: 'Obligatoriskt fält måste fyllas i:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Januari'
|
||||
@@ -70,3 +82,19 @@ GRAV:
|
||||
- 'Fredag'
|
||||
- 'Lördag'
|
||||
- 'Söndag'
|
||||
CRON:
|
||||
EVERY: varje
|
||||
EVERY_HOUR: varje timme
|
||||
EVERY_MINUTE: varje minut
|
||||
EVERY_DAY_OF_WEEK: varje veckodag
|
||||
EVERY_DAY_OF_MONTH: alla månadens dagar
|
||||
EVERY_MONTH: varje månad
|
||||
TEXT_PERIOD: Varje <b />
|
||||
TEXT_MINS: ' timmens <b />:e minut'
|
||||
TEXT_TIME: ' kl <b />:<b />'
|
||||
TEXT_DOW: ' <b />'
|
||||
TEXT_MONTH: ' <b />'
|
||||
TEXT_DOM: ' <b />'
|
||||
ERROR1: Taggen %s stöds inte!
|
||||
ERROR2: Ogiltigt antal element
|
||||
ERROR4: Uttrycket känns inte igen
|
||||
|
||||
@@ -31,7 +31,7 @@ GRAV:
|
||||
YR_PLURAL: ปี
|
||||
FORM:
|
||||
VALIDATION_FAIL: '<b>ตรวจสอบล้มเหลว: </b>'
|
||||
INVALID_INPUT: ป้อนข้อมูลไม่ถูกต้องใน
|
||||
INVALID_INPUT: 'ป้อนข้อมูลไม่ถูกต้องใน'
|
||||
MISSING_REQUIRED_FIELD: 'ขาดข้อมูลที่จำเป็น:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'มกราคม'
|
||||
|
||||
@@ -1,11 +1,32 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\nBaşlık: %1$s\n---\n\n# Hata: Geçersiz Önbölüm\n\nYol: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- 'ekipman'
|
||||
- 'bilgi'
|
||||
- 'pirinç'
|
||||
- 'para'
|
||||
- 'türler'
|
||||
- 'seriler'
|
||||
- 'balık'
|
||||
- 'koyun'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': 'kişi'
|
||||
'man': 'erkek'
|
||||
'child': 'çocuklar'
|
||||
'sex': 'cinsiyet'
|
||||
'move': 'taşınmış'
|
||||
INFLECTOR_ORDINALS:
|
||||
'default': '#F'
|
||||
'first': ' 1.'
|
||||
'second': ' 2.'
|
||||
'third': ' 3.'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: Sağlanan tarih yok
|
||||
BAD_DATE: Yanlış tarih
|
||||
AGO: önce
|
||||
FROM_NOW: şu andan itibaren
|
||||
JUST_NOW: şimdi
|
||||
SECOND: saniye
|
||||
MINUTE: dakika
|
||||
HOUR: saat
|
||||
@@ -37,8 +58,8 @@ GRAV:
|
||||
YR_PLURAL: yıl
|
||||
DEC_PLURAL: onyl
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Doğrulama başarısız:</b>
|
||||
INVALID_INPUT: Geçersiz bilgi girişi
|
||||
VALIDATION_FAIL: '<b>Doğrulama başarısız:</b>'
|
||||
INVALID_INPUT: 'Geçersiz bilgi girişi'
|
||||
MISSING_REQUIRED_FIELD: 'Gerekli alan eksik:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Ocak'
|
||||
@@ -61,3 +82,19 @@ GRAV:
|
||||
- 'Cuma'
|
||||
- 'Cumartesi'
|
||||
- 'Pazar'
|
||||
YES: "Evet"
|
||||
NO: "Hayır"
|
||||
CRON:
|
||||
EVERY: her
|
||||
EVERY_HOUR: saatte bir
|
||||
EVERY_MINUTE: dakikada bir
|
||||
EVERY_DAY_OF_WEEK: haftanın her günü
|
||||
EVERY_DAY_OF_MONTH: ayın her günü
|
||||
EVERY_MONTH: her ay
|
||||
TEXT_PERIOD: Her <b />
|
||||
TEXT_MINS: ' saatin <b /> dakikasında'
|
||||
TEXT_TIME: ' da'
|
||||
ERROR1: Etiket %s desteklenmiyor!
|
||||
ERROR2: Kötü eleman sayısı
|
||||
ERROR3: jquery_element jqCron ayarları içinde tanımlanmalı
|
||||
ERROR4: Tanınmayan ifade
|
||||
|
||||
@@ -37,8 +37,8 @@ GRAV:
|
||||
YR_PLURAL: рр.
|
||||
DEC_PLURAL: рр.
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Перевірка не вдалася:</b>
|
||||
INVALID_INPUT: Невірне введення в
|
||||
VALIDATION_FAIL: '<b>Перевірка не вдалася:</b>'
|
||||
INVALID_INPUT: 'Невірне введення в'
|
||||
MISSING_REQUIRED_FIELD: 'Відсутнє обов''язкове поле:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Січень'
|
||||
|
||||
@@ -37,8 +37,8 @@ GRAV:
|
||||
YR_PLURAL: năm
|
||||
DEC_PLURAL: thập kỷ
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>Xác nhận thất bại:</b>
|
||||
INVALID_INPUT: Dữ liệu nhập không hợp lệ cho
|
||||
VALIDATION_FAIL: '<b>Xác nhận thất bại:</b>'
|
||||
INVALID_INPUT: 'Dữ liệu nhập không hợp lệ cho'
|
||||
MISSING_REQUIRED_FIELD: 'Thiếu trường bắt buộc:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- 'Tháng 1'
|
||||
|
||||
144
system/languages/zh-cn.yaml
Normal file
144
system/languages/zh-cn.yaml
Normal file
@@ -0,0 +1,144 @@
|
||||
---
|
||||
GRAV:
|
||||
FRONTMATTER_ERROR_PAGE: "---\n标题: %1$s\n---\n\n# 错误:无效参数\n\n位置: `%2$s`\n\n**%3$s**\n\n```\n%4$s\n```"
|
||||
INFLECTOR_PLURALS:
|
||||
'/(quiz)$/i': '\1zes'
|
||||
'/^(ox)$/i': '\1en'
|
||||
'/([m|l])ouse$/i': '\1ice'
|
||||
'/(matr|vert|ind)ix|ex$/i': '\1ices'
|
||||
'/(x|ch|ss|sh)$/i': '\1es'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||
'/([^aeiouy]|qu)y$/i': '\1ies'
|
||||
'/(hive)$/i': '\1s'
|
||||
'/(?:([^f])fe|([lr])f)$/i': '\1\2ves'
|
||||
'/sis$/i': 'ses'
|
||||
'/([ti])um$/i': '\1a'
|
||||
'/(buffal|tomat)o$/i': '\1oes'
|
||||
'/(bu)s$/i': '\1ses'
|
||||
'/(alias|status)/i': '\1es'
|
||||
'/(octop|vir)us$/i': '\1i'
|
||||
'/(ax|test)is$/i': '\1es'
|
||||
'/s$/i': 's'
|
||||
'/$/': 's'
|
||||
INFLECTOR_SINGULAR:
|
||||
'/(quiz)zes$/i': '\1'
|
||||
'/(matr)ices$/i': '\1ix'
|
||||
'/(vert|ind)ices$/i': '\1ex'
|
||||
'/^(ox)en/i': '\1'
|
||||
'/(alias|status)es$/i': '\1'
|
||||
'/([octop|vir])i$/i': '\1us'
|
||||
'/(cris|ax|test)es$/i': '\1is'
|
||||
'/(shoe)s$/i': '\1'
|
||||
'/(o)es$/i': '\1'
|
||||
'/(bus)es$/i': '\1'
|
||||
'/([m|l])ice$/i': '\1ouse'
|
||||
'/(x|ch|ss|sh)es$/i': '\1'
|
||||
'/(m)ovies$/i': '\1ovie'
|
||||
'/(s)eries$/i': '\1eries'
|
||||
'/([^aeiouy]|qu)ies$/i': '\1y'
|
||||
'/([lr])ves$/i': '\1f'
|
||||
'/(tive)s$/i': '\1'
|
||||
'/(hive)s$/i': '\1'
|
||||
'/([^f])ves$/i': '\1fe'
|
||||
'/(^analy)ses$/i': '\1sis'
|
||||
'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i': '\1\2sis'
|
||||
'/([ti])a$/i': '\1um'
|
||||
'/(n)ews$/i': '\1ews'
|
||||
INFLECTOR_UNCOUNTABLE:
|
||||
- '装备'
|
||||
- '信息'
|
||||
- '大米'
|
||||
- '钱'
|
||||
- '物种'
|
||||
- '系列'
|
||||
- '鱼'
|
||||
- '羊'
|
||||
INFLECTOR_IRREGULAR:
|
||||
'person': '人员'
|
||||
'man': '男人'
|
||||
'child': '儿童'
|
||||
'sex': '性别'
|
||||
'move': '移动'
|
||||
INFLECTOR_ORDINALS:
|
||||
'default': 'th'
|
||||
'first': 'st'
|
||||
'second': 'md'
|
||||
'third': 'rd'
|
||||
NICETIME:
|
||||
NO_DATE_PROVIDED: 无日期信息
|
||||
BAD_DATE: 无效日期
|
||||
AGO: 前
|
||||
FROM_NOW: 距今
|
||||
JUST_NOW: 刚刚
|
||||
SECOND: 秒
|
||||
MINUTE: 分钟
|
||||
HOUR: 小时
|
||||
DAY: 天
|
||||
WEEK: 周
|
||||
MONTH: 月
|
||||
YEAR: 年
|
||||
DECADE: 十年
|
||||
SEC: 秒
|
||||
MIN: 分钟
|
||||
HR: 小时
|
||||
WK: 周
|
||||
MO: 月
|
||||
YR: 年
|
||||
DEC: 年代
|
||||
SECOND_PLURAL: 秒
|
||||
MINUTE_PLURAL: 分
|
||||
HOUR_PLURAL: 小时
|
||||
DAY_PLURAL: 天
|
||||
WEEK_PLURAL: 周
|
||||
MONTH_PLURAL: 月
|
||||
YEAR_PLURAL: 年
|
||||
DECADE_PLURAL: 十年
|
||||
SEC_PLURAL: 秒
|
||||
MIN_PLURAL: 分
|
||||
HR_PLURAL: 时
|
||||
WK_PLURAL: 周
|
||||
MO_PLURAL: 月
|
||||
YR_PLURAL: 年
|
||||
DEC_PLURAL: 年代
|
||||
FORM:
|
||||
VALIDATION_FAIL: '<b>验证失败:</b>'
|
||||
INVALID_INPUT: '无效输入'
|
||||
MISSING_REQUIRED_FIELD: '必填字段缺失:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- '1月'
|
||||
- '2月'
|
||||
- '3月'
|
||||
- '4月'
|
||||
- '5月'
|
||||
- '6月'
|
||||
- '7月'
|
||||
- '8月'
|
||||
- '9月'
|
||||
- '10月'
|
||||
- '11月'
|
||||
- '12月'
|
||||
DAYS_OF_THE_WEEK:
|
||||
- '星期一'
|
||||
- '星期二'
|
||||
- '星期三'
|
||||
- '星期四'
|
||||
- '星期五'
|
||||
- '星期六'
|
||||
- '星期日'
|
||||
CRON:
|
||||
EVERY: 每隔
|
||||
EVERY_HOUR: 每小时
|
||||
EVERY_MINUTE: 每分钟
|
||||
EVERY_DAY_OF_WEEK: 一周中的每一天
|
||||
EVERY_DAY_OF_MONTH: 月份中的每一天
|
||||
EVERY_MONTH: 每月
|
||||
TEXT_PERIOD: 所有 <b />
|
||||
TEXT_MINS: ' 在 <b /> 小时过后的分钟'
|
||||
TEXT_TIME: ' 在 <b />:<b />'
|
||||
TEXT_DOW: ' on <b />'
|
||||
TEXT_MONTH: ' of <b />'
|
||||
TEXT_DOM: ' on <b />'
|
||||
ERROR1: 不支持分享类型 %s
|
||||
ERROR2: 无效数字
|
||||
ERROR3: 请在 jqCron 设置中设定 jquery_element
|
||||
ERROR4: 无法识别表达式
|
||||
@@ -38,7 +38,9 @@ GRAV:
|
||||
YR_PLURAL: 年
|
||||
DEC_PLURAL: 十年
|
||||
FORM:
|
||||
MISSING_REQUIRED_FIELD: 遺漏必填欄位:
|
||||
VALIDATION_FAIL: '<b>確驗證失敗:</b>'
|
||||
INVALID_INPUT: '無效輸入:'
|
||||
MISSING_REQUIRED_FIELD: '遺漏必填欄位:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- '一月'
|
||||
- '二月'
|
||||
@@ -60,3 +62,16 @@ GRAV:
|
||||
- '星期五'
|
||||
- '星期六'
|
||||
- '星期日'
|
||||
CRON:
|
||||
EVERY: 每
|
||||
EVERY_HOUR: 每小時
|
||||
EVERY_MINUTE: 每分鐘
|
||||
EVERY_DAY_OF_WEEK: 每一天
|
||||
EVERY_DAY_OF_MONTH: 每一天
|
||||
EVERY_MONTH: 每個月
|
||||
TEXT_PERIOD: 每 <b />
|
||||
TEXT_MINS: ' 的 <b /> 分'
|
||||
TEXT_TIME: ' <b />:<b />'
|
||||
TEXT_DOW: ' 的 <b />'
|
||||
TEXT_MONTH: ' 的 <b />'
|
||||
TEXT_DOM: ' 的 <b />'
|
||||
|
||||
@@ -101,9 +101,9 @@ GRAV:
|
||||
YR_PLURAL: 年
|
||||
DEC_PLURAL: 年代
|
||||
FORM:
|
||||
VALIDATION_FAIL: <b>验证失败:</b>
|
||||
INVALID_INPUT: 无效输入
|
||||
MISSING_REQUIRED_FIELD: 必填字段缺失:
|
||||
VALIDATION_FAIL: '<b>验证失败:</b>'
|
||||
INVALID_INPUT: '无效输入'
|
||||
MISSING_REQUIRED_FIELD: '必填字段缺失:'
|
||||
MONTHS_OF_THE_YEAR:
|
||||
- '1月'
|
||||
- '2月'
|
||||
|
||||
@@ -2,4 +2,5 @@
|
||||
title: Not Found
|
||||
routable: false
|
||||
notfound: true
|
||||
expires: 0
|
||||
---
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/**
|
||||
* @package Grav\Core
|
||||
*
|
||||
* @copyright Copyright (C) 2015 - 2020 Trilby Media, LLC. All rights reserved.
|
||||
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
|
||||
* @license MIT License; see LICENSE file for details.
|
||||
*/
|
||||
|
||||
@@ -13,8 +13,25 @@ if (PHP_SAPI !== 'cli-server') {
|
||||
|
||||
$_SERVER['PHP_CLI_ROUTER'] = true;
|
||||
|
||||
if (is_file($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $_SERVER['SCRIPT_NAME'])) {
|
||||
return false;
|
||||
$root = $_SERVER['DOCUMENT_ROOT'];
|
||||
$path = $_SERVER['SCRIPT_NAME'];
|
||||
if ($path !== '/index.php' && is_file($root . $path)) {
|
||||
if (!(
|
||||
// Block all direct access to files and folders beginning with a dot
|
||||
strpos($path, '/.') !== false
|
||||
// Block all direct access for these folders
|
||||
|| preg_match('`^/(\.git|cache|bin|logs|backup|webserver-configs|tests)/`ui', $path)
|
||||
// Block access to specific file types for these system folders
|
||||
|| preg_match('`^/(system|vendor)/(.*)\.(txt|xml|md|html|json|yaml|yml|php|pl|py|cgi|twig|sh|bat)$`ui', $path)
|
||||
// Block access to specific file types for these user folders
|
||||
|| preg_match('`^/(user)/(.*)\.(txt|md|json|yaml|yml|php|pl|py|cgi|twig|sh|bat)$`ui', $path)
|
||||
// Block all direct access to .md files
|
||||
|| preg_match('`\.md$`ui', $path)
|
||||
// Block access to specific files in the root folder
|
||||
|| preg_match('`^/(LICENSE\.txt|composer\.lock|composer\.json|\.htaccess)$`ui', $path)
|
||||
)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$grav_index = 'index.php';
|
||||
|
||||
165
system/src/DOMLettersIterator.php
Normal file
165
system/src/DOMLettersIterator.php
Normal file
@@ -0,0 +1,165 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Iterates individual characters (Unicode codepoints) of DOM text and CDATA nodes
|
||||
* while keeping track of their position in the document.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* $doc = new DOMDocument();
|
||||
* $doc->load('example.xml');
|
||||
* foreach(new DOMLettersIterator($doc) as $letter) echo $letter;
|
||||
*
|
||||
* NB: If you only need characters without their position
|
||||
* in the document, use DOMNode->textContent instead.
|
||||
*
|
||||
* @author porneL http://pornel.net
|
||||
* @license Public Domain
|
||||
* @url https://github.com/antoligy/dom-string-iterators
|
||||
*
|
||||
* @implements Iterator<int,string>
|
||||
*/
|
||||
final class DOMLettersIterator implements Iterator
|
||||
{
|
||||
/** @var DOMElement */
|
||||
private $start;
|
||||
/** @var DOMElement|null */
|
||||
private $current;
|
||||
/** @var int */
|
||||
private $offset = -1;
|
||||
/** @var int|null */
|
||||
private $key;
|
||||
/** @var array<int,string>|null */
|
||||
private $letters;
|
||||
|
||||
/**
|
||||
* expects DOMElement or DOMDocument (see DOMDocument::load and DOMDocument::loadHTML)
|
||||
*
|
||||
* @param DOMNode $el
|
||||
*/
|
||||
public function __construct(DOMNode $el)
|
||||
{
|
||||
if ($el instanceof DOMDocument) {
|
||||
$el = $el->documentElement;
|
||||
}
|
||||
|
||||
if (!$el instanceof DOMElement) {
|
||||
throw new InvalidArgumentException('Invalid arguments, expected DOMElement or DOMDocument');
|
||||
}
|
||||
|
||||
$this->start = $el;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns position in text as DOMText node and character offset.
|
||||
* (it's NOT a byte offset, you must use mb_substr() or similar to use this offset properly).
|
||||
* node may be NULL if iterator has finished.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function currentTextPosition(): array
|
||||
{
|
||||
return [$this->current, $this->offset];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns DOMElement that is currently being iterated or NULL if iterator has finished.
|
||||
*
|
||||
* @return DOMElement|null
|
||||
*/
|
||||
public function currentElement(): ?DOMElement
|
||||
{
|
||||
return $this->current ? $this->current->parentNode : null;
|
||||
}
|
||||
|
||||
// Implementation of Iterator interface
|
||||
|
||||
/**
|
||||
* @return int|null
|
||||
*/
|
||||
public function key(): ?int
|
||||
{
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function next(): void
|
||||
{
|
||||
if (null === $this->current) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($this->current->nodeType === XML_TEXT_NODE || $this->current->nodeType === XML_CDATA_SECTION_NODE) {
|
||||
if ($this->offset === -1) {
|
||||
preg_match_all('/./us', $this->current->textContent, $m);
|
||||
$this->letters = $m[0];
|
||||
}
|
||||
|
||||
$this->offset++;
|
||||
$this->key++;
|
||||
if ($this->letters && $this->offset < count($this->letters)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->offset = -1;
|
||||
}
|
||||
|
||||
while ($this->current->nodeType === XML_ELEMENT_NODE && $this->current->firstChild) {
|
||||
$this->current = $this->current->firstChild;
|
||||
if ($this->current->nodeType === XML_TEXT_NODE || $this->current->nodeType === XML_CDATA_SECTION_NODE) {
|
||||
$this->next();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
while (!$this->current->nextSibling && $this->current->parentNode) {
|
||||
$this->current = $this->current->parentNode;
|
||||
if ($this->current === $this->start) {
|
||||
$this->current = null;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$this->current = $this->current->nextSibling;
|
||||
|
||||
$this->next();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the current element
|
||||
* @link https://php.net/manual/en/iterator.current.php
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function current(): ?string
|
||||
{
|
||||
return $this->letters ? $this->letters[$this->offset] : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if current position is valid
|
||||
* @link https://php.net/manual/en/iterator.valid.php
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function valid(): bool
|
||||
{
|
||||
return (bool)$this->current;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function rewind(): void
|
||||
{
|
||||
$this->current = $this->start;
|
||||
$this->offset = -1;
|
||||
$this->key = 0;
|
||||
$this->letters = [];
|
||||
|
||||
$this->next();
|
||||
}
|
||||
}
|
||||
|
||||
158
system/src/DOMWordsIterator.php
Normal file
158
system/src/DOMWordsIterator.php
Normal file
@@ -0,0 +1,158 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Iterates individual words of DOM text and CDATA nodes
|
||||
* while keeping track of their position in the document.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* $doc = new DOMDocument();
|
||||
* $doc->load('example.xml');
|
||||
* foreach(new DOMWordsIterator($doc) as $word) echo $word;
|
||||
*
|
||||
* @author pjgalbraith http://www.pjgalbraith.com
|
||||
* @author porneL http://pornel.net (based on DOMLettersIterator available at http://pornel.net/source/domlettersiterator.php)
|
||||
* @license Public Domain
|
||||
* @url https://github.com/antoligy/dom-string-iterators
|
||||
*
|
||||
* @implements Iterator<int,string>
|
||||
*/
|
||||
|
||||
final class DOMWordsIterator implements Iterator
|
||||
{
|
||||
/** @var DOMElement */
|
||||
private $start;
|
||||
/** @var DOMElement|null */
|
||||
private $current;
|
||||
/** @var int */
|
||||
private $offset = -1;
|
||||
/** @var int|null */
|
||||
private $key;
|
||||
/** @var array<int,array<int,int|string>>|null */
|
||||
private $words;
|
||||
|
||||
/**
|
||||
* expects DOMElement or DOMDocument (see DOMDocument::load and DOMDocument::loadHTML)
|
||||
*
|
||||
* @param DOMNode $el
|
||||
*/
|
||||
public function __construct(DOMNode $el)
|
||||
{
|
||||
if ($el instanceof DOMDocument) {
|
||||
$el = $el->documentElement;
|
||||
}
|
||||
|
||||
if (!$el instanceof DOMElement) {
|
||||
throw new InvalidArgumentException('Invalid arguments, expected DOMElement or DOMDocument');
|
||||
}
|
||||
|
||||
$this->start = $el;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns position in text as DOMText node and character offset.
|
||||
* (it's NOT a byte offset, you must use mb_substr() or similar to use this offset properly).
|
||||
* node may be NULL if iterator has finished.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function currentWordPosition(): array
|
||||
{
|
||||
return [$this->current, $this->offset, $this->words];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns DOMElement that is currently being iterated or NULL if iterator has finished.
|
||||
*
|
||||
* @return DOMElement|null
|
||||
*/
|
||||
public function currentElement(): ?DOMElement
|
||||
{
|
||||
return $this->current ? $this->current->parentNode : null;
|
||||
}
|
||||
|
||||
// Implementation of Iterator interface
|
||||
|
||||
/**
|
||||
* Return the key of the current element
|
||||
* @link https://php.net/manual/en/iterator.key.php
|
||||
* @return int|null
|
||||
*/
|
||||
public function key(): ?int
|
||||
{
|
||||
return $this->key;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function next(): void
|
||||
{
|
||||
if (null === $this->current) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($this->current->nodeType === XML_TEXT_NODE || $this->current->nodeType === XML_CDATA_SECTION_NODE) {
|
||||
if ($this->offset === -1) {
|
||||
$this->words = preg_split("/[\n\r\t ]+/", $this->current->textContent, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_OFFSET_CAPTURE) ?: [];
|
||||
}
|
||||
$this->offset++;
|
||||
|
||||
if ($this->words && $this->offset < count($this->words)) {
|
||||
$this->key++;
|
||||
return;
|
||||
}
|
||||
$this->offset = -1;
|
||||
}
|
||||
|
||||
while ($this->current->nodeType === XML_ELEMENT_NODE && $this->current->firstChild) {
|
||||
$this->current = $this->current->firstChild;
|
||||
if ($this->current->nodeType === XML_TEXT_NODE || $this->current->nodeType === XML_CDATA_SECTION_NODE) {
|
||||
$this->next();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
while (!$this->current->nextSibling && $this->current->parentNode) {
|
||||
$this->current = $this->current->parentNode;
|
||||
if ($this->current === $this->start) {
|
||||
$this->current = null;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
$this->current = $this->current->nextSibling;
|
||||
|
||||
$this->next();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the current element
|
||||
* @link https://php.net/manual/en/iterator.current.php
|
||||
* @return string|null
|
||||
*/
|
||||
public function current(): ?string
|
||||
{
|
||||
return $this->words ? (string)$this->words[$this->offset][0] : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if current position is valid
|
||||
* @link https://php.net/manual/en/iterator.valid.php
|
||||
* @return bool
|
||||
*/
|
||||
public function valid(): bool
|
||||
{
|
||||
return (bool)$this->current;
|
||||
}
|
||||
|
||||
public function rewind(): void
|
||||
{
|
||||
$this->current = $this->start;
|
||||
$this->offset = -1;
|
||||
$this->key = 0;
|
||||
$this->words = [];
|
||||
|
||||
$this->next();
|
||||
}
|
||||
}
|
||||
@@ -3,30 +3,48 @@
|
||||
/**
|
||||
* @package Grav\Common
|
||||
*
|
||||
* @copyright Copyright (C) 2015 - 2020 Trilby Media, LLC. All rights reserved.
|
||||
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
|
||||
* @license MIT License; see LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Grav\Common;
|
||||
|
||||
use Closure;
|
||||
use Grav\Common\Assets\Pipeline;
|
||||
use Grav\Common\Assets\Traits\LegacyAssetsTrait;
|
||||
use Grav\Common\Assets\Traits\TestingAssetsTrait;
|
||||
use Grav\Common\Config\Config;
|
||||
use Grav\Framework\Object\PropertyObject;
|
||||
use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator;
|
||||
use function array_slice;
|
||||
use function call_user_func_array;
|
||||
use function func_get_args;
|
||||
use function is_array;
|
||||
|
||||
/**
|
||||
* Class Assets
|
||||
* @package Grav\Common
|
||||
*/
|
||||
class Assets extends PropertyObject
|
||||
{
|
||||
use TestingAssetsTrait;
|
||||
use LegacyAssetsTrait;
|
||||
|
||||
const LINK = 'link';
|
||||
const CSS = 'css';
|
||||
const JS = 'js';
|
||||
const JS_MODULE = 'js_module';
|
||||
const LINK_COLLECTION = 'assets_link';
|
||||
const CSS_COLLECTION = 'assets_css';
|
||||
const JS_COLLECTION = 'assets_js';
|
||||
const CSS_TYPE = 'Css';
|
||||
const JS_TYPE = 'Js';
|
||||
const INLINE_CSS_TYPE = 'InlineCss';
|
||||
const INLINE_JS_TYPE = 'InlineJs';
|
||||
const JS_MODULE_COLLECTION = 'assets_js_module';
|
||||
const LINK_TYPE = Assets\Link::class;
|
||||
const CSS_TYPE = Assets\Css::class;
|
||||
const JS_TYPE = Assets\Js::class;
|
||||
const JS_MODULE_TYPE = Assets\JsModule::class;
|
||||
const INLINE_CSS_TYPE = Assets\InlineCss::class;
|
||||
const INLINE_JS_TYPE = Assets\InlineJs::class;
|
||||
const INLINE_JS_MODULE_TYPE = Assets\InlineJsModule::class;
|
||||
|
||||
/** @const Regex to match CSS and JavaScript files */
|
||||
const DEFAULT_REGEX = '/.\.(css|js)$/i';
|
||||
@@ -37,15 +55,24 @@ class Assets extends PropertyObject
|
||||
/** @const Regex to match JavaScript files */
|
||||
const JS_REGEX = '/.\.js$/i';
|
||||
|
||||
/** @const Regex to match JavaScriptModyle files */
|
||||
const JS_MODULE_REGEX = '/.\.mjs$/i';
|
||||
|
||||
/** @var string */
|
||||
protected $assets_dir;
|
||||
/** @var string */
|
||||
protected $assets_url;
|
||||
|
||||
/** @var array */
|
||||
protected $assets_link = [];
|
||||
/** @var array */
|
||||
protected $assets_css = [];
|
||||
/** @var array */
|
||||
protected $assets_js = [];
|
||||
/** @var array */
|
||||
protected $assets_js_module = [];
|
||||
|
||||
|
||||
|
||||
// Following variables come from the configuration:
|
||||
/** @var bool */
|
||||
@@ -60,10 +87,16 @@ class Assets extends PropertyObject
|
||||
protected $js_pipeline_include_externals;
|
||||
/** @var bool */
|
||||
protected $js_pipeline_before_excludes;
|
||||
/** @var bool */
|
||||
protected $js_module_pipeline;
|
||||
/** @var bool */
|
||||
protected $js_module_pipeline_include_externals;
|
||||
/** @var bool */
|
||||
protected $js_module_pipeline_before_excludes;
|
||||
/** @var array */
|
||||
protected $pipeline_options = [];
|
||||
|
||||
/** @var \Closure|string */
|
||||
/** @var Closure|string */
|
||||
protected $fetch_command;
|
||||
/** @var string */
|
||||
protected $autoload;
|
||||
@@ -73,9 +106,13 @@ class Assets extends PropertyObject
|
||||
protected $collections;
|
||||
/** @var string */
|
||||
protected $timestamp;
|
||||
/** @var array Keeping track for order counts (for sorting) */
|
||||
protected $order = [];
|
||||
|
||||
/**
|
||||
* Initialization called in the Grav lifecycle to initialize the Assets with appropriate configuration
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
@@ -87,7 +124,7 @@ class Assets extends PropertyObject
|
||||
|
||||
/** @var UniformResourceLocator $locator */
|
||||
$locator = $grav['locator'];
|
||||
$this->assets_dir = $locator->findResource('asset://') . DS;
|
||||
$this->assets_dir = $locator->findResource('asset://');
|
||||
$this->assets_url = $locator->findResource('asset://', false);
|
||||
|
||||
$this->config($asset_config);
|
||||
@@ -106,7 +143,6 @@ class Assets extends PropertyObject
|
||||
* assets and/or collections that will be automatically added on startup.
|
||||
*
|
||||
* @param array $config Configurable options.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function config(array $config)
|
||||
@@ -133,35 +169,51 @@ class Assets extends PropertyObject
|
||||
* It automatically detects the asset type (JavaScript, CSS or collection).
|
||||
* You may add more than one asset passing an array as argument.
|
||||
*
|
||||
* @param array|string $asset
|
||||
* @param string|string[] $asset
|
||||
* @return $this
|
||||
*/
|
||||
public function add($asset)
|
||||
{
|
||||
$args = \func_get_args();
|
||||
if (!$asset) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
$args = func_get_args();
|
||||
|
||||
// More than one asset
|
||||
if (\is_array($asset)) {
|
||||
foreach ($asset as $a) {
|
||||
array_shift($args);
|
||||
$args = array_merge([$a], $args);
|
||||
\call_user_func_array([$this, 'add'], $args);
|
||||
if (is_array($asset)) {
|
||||
foreach ($asset as $index => $location) {
|
||||
$params = array_slice($args, 1);
|
||||
if (is_array($location)) {
|
||||
$params = array_shift($params);
|
||||
if (is_numeric($params)) {
|
||||
$params = [ 'priority' => $params ];
|
||||
}
|
||||
$params = [array_replace_recursive([], $location, $params)];
|
||||
$location = $index;
|
||||
}
|
||||
|
||||
$params = array_merge([$location], $params);
|
||||
call_user_func_array([$this, 'add'], $params);
|
||||
}
|
||||
} elseif (isset($this->collections[$asset])) {
|
||||
array_shift($args);
|
||||
$args = array_merge([$this->collections[$asset]], $args);
|
||||
\call_user_func_array([$this, 'add'], $args);
|
||||
call_user_func_array([$this, 'add'], $args);
|
||||
} else {
|
||||
// Get extension
|
||||
$extension = pathinfo(parse_url($asset, PHP_URL_PATH), PATHINFO_EXTENSION);
|
||||
$path = parse_url($asset, PHP_URL_PATH);
|
||||
$extension = $path ? Utils::pathinfo($path, PATHINFO_EXTENSION) : '';
|
||||
|
||||
// JavaScript or CSS
|
||||
if (\strlen($extension) > 0) {
|
||||
if ($extension !== '') {
|
||||
$extension = strtolower($extension);
|
||||
if ($extension === 'css') {
|
||||
\call_user_func_array([$this, 'addCss'], $args);
|
||||
call_user_func_array([$this, 'addCss'], $args);
|
||||
} elseif ($extension === 'js') {
|
||||
\call_user_func_array([$this, 'addJs'], $args);
|
||||
call_user_func_array([$this, 'addJs'], $args);
|
||||
} elseif ($extension === 'mjs') {
|
||||
call_user_func_array([$this, 'addJsModule'], $args);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -169,16 +221,29 @@ class Assets extends PropertyObject
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $collection
|
||||
* @param string $type
|
||||
* @param string|string[] $asset
|
||||
* @param array $options
|
||||
* @return $this
|
||||
*/
|
||||
protected function addType($collection, $type, $asset, $options)
|
||||
{
|
||||
if (\is_array($asset)) {
|
||||
foreach ($asset as $a) {
|
||||
$this->addType($collection, $type, $a, $options);
|
||||
if (is_array($asset)) {
|
||||
foreach ($asset as $index => $location) {
|
||||
$assetOptions = $options;
|
||||
if (is_array($location)) {
|
||||
$assetOptions = array_replace_recursive([], $options, $location);
|
||||
$location = $index;
|
||||
}
|
||||
$this->addType($collection, $type, $location, $assetOptions);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
if (($type === $this::CSS_TYPE || $type === $this::JS_TYPE) && isset($this->collections[$asset])) {
|
||||
if ($this->isValidType($type) && isset($this->collections[$asset])) {
|
||||
$this->addType($collection, $type, $this->collections[$asset], $options);
|
||||
return $this;
|
||||
}
|
||||
@@ -186,7 +251,9 @@ class Assets extends PropertyObject
|
||||
// If pipeline disabled, set to position if provided, else after
|
||||
if (isset($options['pipeline'])) {
|
||||
if ($options['pipeline'] === false) {
|
||||
$exclude_type = ($type === $this::JS_TYPE || $type === $this::INLINE_JS_TYPE) ? $this::JS_TYPE : $this::CSS_TYPE;
|
||||
|
||||
$exclude_type = $this->getBaseType($type);
|
||||
|
||||
$excludes = strtolower($exclude_type . '_pipeline_before_excludes');
|
||||
if ($this->{$excludes}) {
|
||||
$default = 'after';
|
||||
@@ -201,14 +268,27 @@ class Assets extends PropertyObject
|
||||
}
|
||||
|
||||
// Add timestamp
|
||||
$options['timestamp'] = $this->timestamp;
|
||||
$timestamp_override = $options['timestamp'] ?? true;
|
||||
|
||||
if (filter_var($timestamp_override, FILTER_VALIDATE_BOOLEAN)) {
|
||||
$options['timestamp'] = $this->timestamp;
|
||||
} else {
|
||||
$options['timestamp'] = null;
|
||||
}
|
||||
|
||||
// Set order
|
||||
$options['order'] = \count($this->$collection);
|
||||
$group = $options['group'] ?? 'head';
|
||||
$position = $options['position'] ?? 'pipeline';
|
||||
|
||||
$orderKey = "{$type}|{$group}|{$position}";
|
||||
if (!isset($this->order[$orderKey])) {
|
||||
$this->order[$orderKey] = 0;
|
||||
}
|
||||
|
||||
$options['order'] = $this->order[$orderKey]++;
|
||||
|
||||
// Create asset of correct type
|
||||
$asset_class = "\\Grav\\Common\\Assets\\{$type}";
|
||||
$asset_object = new $asset_class();
|
||||
$asset_object = new $type();
|
||||
|
||||
// If exists
|
||||
if ($asset_object->init($asset, $options)) {
|
||||
@@ -218,6 +298,16 @@ class Assets extends PropertyObject
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a CSS asset or a collection of assets.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function addLink($asset)
|
||||
{
|
||||
return $this->addType($this::LINK_COLLECTION, $this::LINK_TYPE, $asset, $this->unifyLegacyArguments(func_get_args(), $this::LINK_TYPE));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a CSS asset or a collection of assets.
|
||||
*
|
||||
@@ -225,7 +315,7 @@ class Assets extends PropertyObject
|
||||
*/
|
||||
public function addCss($asset)
|
||||
{
|
||||
return $this->addType(Assets::CSS_COLLECTION, Assets::CSS_TYPE, $asset, $this->unifyLegacyArguments(\func_get_args(), Assets::CSS_TYPE));
|
||||
return $this->addType($this::CSS_COLLECTION, $this::CSS_TYPE, $asset, $this->unifyLegacyArguments(func_get_args(), $this::CSS_TYPE));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -235,7 +325,7 @@ class Assets extends PropertyObject
|
||||
*/
|
||||
public function addInlineCss($asset)
|
||||
{
|
||||
return $this->addType(Assets::CSS_COLLECTION, Assets::INLINE_CSS_TYPE, $asset, $this->unifyLegacyArguments(\func_get_args(), Assets::INLINE_CSS_TYPE));
|
||||
return $this->addType($this::CSS_COLLECTION, $this::INLINE_CSS_TYPE, $asset, $this->unifyLegacyArguments(func_get_args(), $this::INLINE_CSS_TYPE));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -245,7 +335,7 @@ class Assets extends PropertyObject
|
||||
*/
|
||||
public function addJs($asset)
|
||||
{
|
||||
return $this->addType(Assets::JS_COLLECTION, Assets::JS_TYPE, $asset, $this->unifyLegacyArguments(\func_get_args(), Assets::JS_TYPE));
|
||||
return $this->addType($this::JS_COLLECTION, $this::JS_TYPE, $asset, $this->unifyLegacyArguments(func_get_args(), $this::JS_TYPE));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -255,20 +345,38 @@ class Assets extends PropertyObject
|
||||
*/
|
||||
public function addInlineJs($asset)
|
||||
{
|
||||
return $this->addType(Assets::JS_COLLECTION, Assets::INLINE_JS_TYPE, $asset, $this->unifyLegacyArguments(\func_get_args(), Assets::INLINE_JS_TYPE));
|
||||
return $this->addType($this::JS_COLLECTION, $this::INLINE_JS_TYPE, $asset, $this->unifyLegacyArguments(func_get_args(), $this::INLINE_JS_TYPE));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a JS asset or a collection of assets.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function addJsModule($asset)
|
||||
{
|
||||
return $this->addType($this::JS_MODULE_COLLECTION, $this::JS_MODULE_TYPE, $asset, $this->unifyLegacyArguments(func_get_args(), $this::JS_MODULE_TYPE));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an Inline JS asset or a collection of assets.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function addInlineJsModule($asset)
|
||||
{
|
||||
return $this->addType($this::JS_MODULE_COLLECTION, $this::INLINE_JS_MODULE_TYPE, $asset, $this->unifyLegacyArguments(func_get_args(), $this::INLINE_JS_MODULE_TYPE));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add/replace collection.
|
||||
*
|
||||
* @param string $collectionName
|
||||
* @param array $assets
|
||||
* @param string $collectionName
|
||||
* @param array $assets
|
||||
* @param bool $overwrite
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function registerCollection($collectionName, Array $assets, $overwrite = false)
|
||||
public function registerCollection($collectionName, array $assets, $overwrite = false)
|
||||
{
|
||||
if ($overwrite || !isset($this->collections[$collectionName])) {
|
||||
$this->collections[$collectionName] = $assets;
|
||||
@@ -277,6 +385,13 @@ class Assets extends PropertyObject
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $assets
|
||||
* @param string $key
|
||||
* @param string $value
|
||||
* @param bool $sort
|
||||
* @return array|false
|
||||
*/
|
||||
protected function filterAssets($assets, $key, $value, $sort = false)
|
||||
{
|
||||
$results = array_filter($assets, function ($asset) use ($key, $value) {
|
||||
@@ -284,8 +399,8 @@ class Assets extends PropertyObject
|
||||
if ($key === 'position' && $value === 'pipeline') {
|
||||
$type = $asset->getType();
|
||||
|
||||
if ($asset->getRemote() && $this->{$type . '_pipeline_include_externals'} === false && $asset['position'] === 'pipeline') {
|
||||
if ($this->{$type . '_pipeline_before_excludes'}) {
|
||||
if ($asset->getRemote() && $this->{strtolower($type) . '_pipeline_include_externals'} === false && $asset['position'] === 'pipeline') {
|
||||
if ($this->{strtolower($type) . '_pipeline_before_excludes'}) {
|
||||
$asset->setPosition('after');
|
||||
} else {
|
||||
$asset->setPosition('before');
|
||||
@@ -308,14 +423,25 @@ class Assets extends PropertyObject
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $assets
|
||||
* @return array
|
||||
*/
|
||||
protected function sortAssets($assets)
|
||||
{
|
||||
uasort($assets, static function ($a, $b) {
|
||||
return $b['priority'] <=> $a['priority'] ?: $a['order'] <=> $b['order'];
|
||||
});
|
||||
|
||||
return $assets;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @param string $group
|
||||
* @param array $attributes
|
||||
* @return string
|
||||
*/
|
||||
public function render($type, $group = 'head', $attributes = [])
|
||||
{
|
||||
$before_output = '';
|
||||
@@ -332,7 +458,7 @@ class Assets extends PropertyObject
|
||||
$after_assets = $this->filterAssets($group_assets, 'position', 'after', true);
|
||||
|
||||
// Pipeline
|
||||
if ($this->{$pipeline_enabled}) {
|
||||
if ($this->{$pipeline_enabled} ?? false) {
|
||||
$options = array_merge($this->pipeline_options, ['timestamp' => $this->timestamp]);
|
||||
|
||||
$pipeline = new Pipeline($options);
|
||||
@@ -362,12 +488,31 @@ class Assets extends PropertyObject
|
||||
*
|
||||
* @param string $group name of the group
|
||||
* @param array $attributes
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function css($group = 'head', $attributes = [])
|
||||
public function css($group = 'head', $attributes = [], $include_link = true)
|
||||
{
|
||||
return $this->render('css', $group, $attributes);
|
||||
$output = '';
|
||||
|
||||
if ($include_link) {
|
||||
$output = $this->link($group, $attributes);
|
||||
}
|
||||
|
||||
$output .= $this->render(self::CSS, $group, $attributes);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the CSS link tags.
|
||||
*
|
||||
* @param string $group name of the group
|
||||
* @param array $attributes
|
||||
* @return string
|
||||
*/
|
||||
public function link($group = 'head', $attributes = [])
|
||||
{
|
||||
return $this->render(self::LINK, $group, $attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -375,11 +520,73 @@ class Assets extends PropertyObject
|
||||
*
|
||||
* @param string $group name of the group
|
||||
* @param array $attributes
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function js($group = 'head', $attributes = [])
|
||||
public function js($group = 'head', $attributes = [], $include_js_module = true)
|
||||
{
|
||||
return $this->render('js', $group, $attributes);
|
||||
$output = $this->render(self::JS, $group, $attributes);
|
||||
|
||||
if ($include_js_module) {
|
||||
$output .= $this->jsModule($group, $attributes);
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the Javascript Modules tags
|
||||
*
|
||||
* @param string $group
|
||||
* @param array $attributes
|
||||
* @return string
|
||||
*/
|
||||
public function jsModule($group = 'head', $attributes = [])
|
||||
{
|
||||
return $this->render(self::JS_MODULE, $group, $attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $group
|
||||
* @param array $attributes
|
||||
* @return string
|
||||
*/
|
||||
public function all($group = 'head', $attributes = [])
|
||||
{
|
||||
$output = $this->css($group, $attributes, false);
|
||||
$output .= $this->link($group, $attributes);
|
||||
$output .= $this->js($group, $attributes, false);
|
||||
$output .= $this->jsModule($group, $attributes);
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param class-string $type
|
||||
* @return bool
|
||||
*/
|
||||
protected function isValidType($type)
|
||||
{
|
||||
return in_array($type, [self::CSS_TYPE, self::JS_TYPE, self::JS_MODULE_TYPE]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param class-string $type
|
||||
* @return string
|
||||
*/
|
||||
protected function getBaseType($type)
|
||||
{
|
||||
switch ($type) {
|
||||
case $this::JS_TYPE:
|
||||
case $this::INLINE_JS_TYPE:
|
||||
$base_type = $this::JS;
|
||||
break;
|
||||
case $this::JS_MODULE_TYPE:
|
||||
case $this::INLINE_JS_MODULE_TYPE:
|
||||
$base_type = $this::JS_MODULE;
|
||||
break;
|
||||
default:
|
||||
$base_type = $this::CSS;
|
||||
}
|
||||
|
||||
return $base_type;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,27 +3,32 @@
|
||||
/**
|
||||
* @package Grav\Common\Assets
|
||||
*
|
||||
* @copyright Copyright (C) 2015 - 2020 Trilby Media, LLC. All rights reserved.
|
||||
* @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
|
||||
* @license MIT License; see LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Grav\Common\Assets;
|
||||
|
||||
use Grav\Common\Assets\Traits\AssetUtilsTrait;
|
||||
use Grav\Common\Config\Config;
|
||||
use Grav\Common\Grav;
|
||||
use Grav\Common\Uri;
|
||||
use Grav\Common\Utils;
|
||||
use Grav\Framework\Object\PropertyObject;
|
||||
use RocketTheme\Toolbox\File\File;
|
||||
use SplFileInfo;
|
||||
|
||||
/**
|
||||
* Class BaseAsset
|
||||
* @package Grav\Common\Assets
|
||||
*/
|
||||
abstract class BaseAsset extends PropertyObject
|
||||
{
|
||||
use AssetUtilsTrait;
|
||||
|
||||
protected const CSS_ASSET = true;
|
||||
protected const JS_ASSET = false;
|
||||
|
||||
/** @const Regex to match CSS import content */
|
||||
protected const CSS_IMPORT_REGEX = '{@import(.*?);}';
|
||||
protected const CSS_ASSET = 1;
|
||||
protected const JS_ASSET = 2;
|
||||
protected const JS_MODULE_ASSET = 3;
|
||||
|
||||
/** @var string|false */
|
||||
protected $asset;
|
||||
@@ -65,7 +70,7 @@ abstract class BaseAsset extends PropertyObject
|
||||
* @param array $elements
|
||||
* @param string|null $key
|
||||
*/
|
||||
public function __construct(array $elements = [], $key = null)
|
||||
public function __construct(array $elements = [], ?string $key = null)
|
||||
{
|
||||
$base_config = [
|
||||
'group' => 'head',
|
||||
@@ -88,6 +93,10 @@ abstract class BaseAsset extends PropertyObject
|
||||
*/
|
||||
public function init($asset, $options)
|
||||
{
|
||||
if (!$asset) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$config = Grav::instance()['config'];
|
||||
$uri = Grav::instance()['uri'];
|
||||
|
||||
@@ -122,7 +131,7 @@ abstract class BaseAsset extends PropertyObject
|
||||
if ($locator->isStream($asset)) {
|
||||
$path = $locator->findResource($asset, true);
|
||||
} else {
|
||||
$path = GRAV_ROOT . $asset;
|
||||
$path = GRAV_WEBROOT . $asset;
|
||||
}
|
||||
|
||||
// If local file is missing return
|
||||
@@ -130,7 +139,7 @@ abstract class BaseAsset extends PropertyObject
|
||||
return false;
|
||||
}
|
||||
|
||||
$file = new \SplFileInfo($path);
|
||||
$file = new SplFileInfo($path);
|
||||
|
||||
$asset = $this->buildLocalLink($file->getPathname());
|
||||
|
||||
@@ -170,6 +179,35 @@ abstract class BaseAsset extends PropertyObject
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Receive asset location and return the SRI integrity hash
|
||||
*
|
||||
* @param string $input
|
||||
* @return string
|
||||
*/
|
||||
public static function integrityHash($input)
|
||||
{
|
||||
$grav = Grav::instance();
|
||||
$uri = $grav['uri'];
|
||||
|
||||
$assetsConfig = $grav['config']->get('system.assets');
|
||||
|
||||
if (!self::isRemoteLink($input) && !empty($assetsConfig['enable_asset_sri']) && $assetsConfig['enable_asset_sri']) {
|
||||
$input = preg_replace('#^' . $uri->rootUrl() . '#', '', $input);
|
||||
$asset = File::instance(GRAV_WEBROOT . $input);
|
||||
|
||||
if ($asset->exists()) {
|
||||
$dataToHash = $asset->content();
|
||||
$hash = hash('sha256', $dataToHash, true);
|
||||
$hash_base64 = base64_encode($hash);
|
||||
|
||||
return ' integrity="sha256-' . $hash_base64 . '"';
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -181,7 +219,7 @@ abstract class BaseAsset extends PropertyObject
|
||||
*/
|
||||
// protected function getLastModificationTime($asset)
|
||||
// {
|
||||
// $file = GRAV_ROOT . $asset;
|
||||
// $file = GRAV_WEBROOT . $asset;
|
||||
// if (Grav::instance()['locator']->isStream($asset)) {
|
||||
// $file = $this->buildLocalLink($asset, true);
|
||||
// }
|
||||
@@ -200,7 +238,7 @@ abstract class BaseAsset extends PropertyObject
|
||||
protected function buildLocalLink($asset)
|
||||
{
|
||||
if ($asset) {
|
||||
return $this->base_url . ltrim(Utils::replaceFirstOccurrence(GRAV_ROOT, '', $asset), '/');
|
||||
return $this->base_url . ltrim(Utils::replaceFirstOccurrence(GRAV_WEBROOT, '', $asset), '/');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -211,6 +249,7 @@ abstract class BaseAsset extends PropertyObject
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
#[\ReturnTypeWillChange]
|
||||
public function jsonSerialize()
|
||||
{
|
||||
return ['type' => $this->getType(), 'elements' => $this->getElements()];
|
||||
@@ -222,9 +261,23 @@ abstract class BaseAsset extends PropertyObject
|
||||
* @param string $file
|
||||
* @param string $dir
|
||||
* @param bool $local
|
||||
* @return string
|
||||
*/
|
||||
protected function cssRewrite($file, $dir, $local)
|
||||
{
|
||||
return;
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds relative JS urls() and rewrites the URL with an absolute one
|
||||
*
|
||||
* @param string $file the css source file
|
||||
* @param string $dir local relative path to the css file
|
||||
* @param bool $local is this a local or remote asset
|
||||
* @return string
|
||||
*/
|
||||
protected function jsRewrite($file, $dir, $local)
|
||||
{
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user