Compare commits
711 Commits
main
...
ae1444dde8
| Author | SHA1 | Date | |
|---|---|---|---|
| ae1444dde8 | |||
| f2b229ba5d | |||
| f2e92651aa | |||
| f5288491f9 | |||
| 497deb045a | |||
| 5283b4a567 | |||
| 07769eee07 | |||
| a7e409e5da | |||
| 2a36528e8e | |||
| 1a37a59c62 | |||
| e06777c10d | |||
| ce96924705 | |||
| 6d1aa73f5e | |||
| c55d89224d | |||
| 2b81774667 | |||
| 14c82d623a | |||
| 0d2ffea904 | |||
| 54c0939bb7 | |||
| ddb5cd2524 | |||
| 8bd7186f97 | |||
| abde60aecc | |||
| b5a751e237 | |||
| 4b6c093a1c | |||
| e3bb5274ad | |||
| af0fb75d22 | |||
| fd44d8d091 | |||
| 3325eab953 | |||
| e5de979f94 | |||
| 71646f253f | |||
| b37583f3b2 | |||
| e876dd1ca8 | |||
| b58c88a425 | |||
| 4241670ace | |||
| 7342503e4a | |||
| 7d1cfa3323 | |||
| a4cc7a8e6f | |||
| 9b87639974 | |||
| eb4980d64b | |||
| 799115fd37 | |||
| b362bc290e | |||
| 8d8ccedbf2 | |||
| 0576d05dfb | |||
| 39458e4f11 | |||
| 70e995cbd5 | |||
| b0d6d90616 | |||
| d005f549bf | |||
| 3c16535444 | |||
| 9a8df23529 | |||
| 1d3a8477ee | |||
| fc49265cb9 | |||
| 8ffec45182 | |||
| 002f33c5e1 | |||
| fd4ee11d26 | |||
| ae6eec5848 | |||
| f0d8cb2065 | |||
| d47b3fdb07 | |||
| da8097e7c3 | |||
| 917150bbe6 | |||
| b16bd77355 | |||
| 7d1beee2da | |||
| 292fc01370 | |||
| 68a42deebb | |||
| f6ba2ea71b | |||
| ab4aad0fc6 | |||
| 5558a60696 | |||
| 2ee1171474 | |||
| 046da1742e | |||
| 65bc75b56e | |||
| 8ac6583758 | |||
| b03bdc2139 | |||
| 0055a25420 | |||
| 00d0861014 | |||
| de94d0e68e | |||
| b31aa7550b | |||
| b258482ca3 | |||
| 010160ce46 | |||
|
|
ddf23d2c29 | ||
|
|
5ffb5636b2 | ||
|
|
3d87ce1f6a | ||
|
|
cf25bcd20f | ||
|
|
20d1d07c21 | ||
|
|
afbebbe816 | ||
|
|
9864d7cf36 | ||
|
|
da70c86f5e | ||
|
|
9ecea45705 | ||
|
|
86864166f9 | ||
|
|
c8a7dcdf05 | ||
|
|
b134d39172 | ||
|
|
194ab5af52 | ||
|
|
3012d2875c | ||
|
|
be72015657 | ||
|
|
5948da928d | ||
|
|
2f2d67fb7f | ||
|
|
8cc24bab95 | ||
|
|
24bb08f02e | ||
|
|
9ec39fb246 | ||
|
|
677d658ecb | ||
|
|
77eda834d4 | ||
|
|
57cf6ab817 | ||
|
|
f6385cd4a3 | ||
|
|
1e9790c37d | ||
|
|
0656c7ba68 | ||
|
|
8d81e1ba3e | ||
|
|
a3b9e82240 | ||
|
|
464e977d5a | ||
|
|
47a48480bd | ||
|
|
6012bf1886 | ||
|
|
04b2404e47 | ||
|
|
8c91368c4f | ||
|
|
a9fa2433a5 | ||
|
|
7d3bbd2122 | ||
|
|
487716a1ac | ||
|
|
723506daba | ||
|
|
8d5a1ac4f4 | ||
|
|
3f808812dd | ||
|
|
37e3773d88 | ||
|
|
2ff215a3df | ||
|
|
0755a90847 | ||
|
|
e5f46df7bc | ||
|
|
41e232bcdd | ||
|
|
713594d768 | ||
|
|
0957f59fcd | ||
|
|
9362ba6c26 | ||
|
|
fbb87394f3 | ||
|
|
89e5ebcd55 | ||
|
|
e7a87f09c5 | ||
|
|
25ef858d58 | ||
|
|
256128b0cc | ||
|
|
a969be597c | ||
|
|
a482791397 | ||
|
|
bc60adb1b5 | ||
|
|
b26907ad79 | ||
|
|
586da211df | ||
|
|
b81a59e682 | ||
|
|
33d0146a4c | ||
|
|
c437137134 | ||
|
|
93d9838cbd | ||
|
|
feebb7c94a | ||
|
|
d0733bfc01 | ||
|
|
6cd48fdd31 | ||
|
|
2204d6691c | ||
|
|
3bfd6c6c9d | ||
|
|
c85142272e | ||
|
|
d203a49bab | ||
|
|
c6a21c4611 | ||
|
|
a31f120492 | ||
|
|
f1b9646655 | ||
|
|
d58fcc7976 | ||
|
|
56a121182d | ||
|
|
5693139abc | ||
|
|
081782f05e | ||
|
|
308cc20859 | ||
|
|
a86946e39f | ||
|
|
3932435866 | ||
|
|
947831ac1c | ||
|
|
4ff19c77ca | ||
|
|
0fe7047fa3 | ||
|
|
f0c5224112 | ||
|
|
c6ff21662b | ||
|
|
68898723a1 | ||
|
|
2e17f81c5d | ||
|
|
0365fb2515 | ||
|
|
c841a02361 | ||
|
|
8bbc14e781 | ||
|
|
e5b06d37d9 | ||
|
|
c72f14c68d | ||
|
|
ad93e8b8c7 | ||
|
|
e27af6282b | ||
|
|
a3807c7e94 | ||
|
|
4301b2827a | ||
|
|
f44d6b8c72 | ||
|
|
bf4c7759ba | ||
|
|
eccb8ba90e | ||
|
|
cca3ffaed1 | ||
|
|
6bb5325f66 | ||
|
|
f57d9aab30 | ||
|
|
6f46605b83 | ||
|
|
5b07f46c2c | ||
|
|
94a1787838 | ||
|
|
5cd2c43847 | ||
|
|
66a39822ee | ||
|
|
3c07fae355 | ||
|
|
aa2d27699b | ||
|
|
b94e545e82 | ||
|
|
dd114a4798 | ||
|
|
588297f063 | ||
|
|
8109f7d039 | ||
|
|
f53aee2c1f | ||
|
|
4495474c9f | ||
|
|
2208c11c62 | ||
|
|
00691cbeac | ||
|
|
285a273030 | ||
|
|
be5281cdd1 | ||
|
|
be730d90df | ||
|
|
806993d4f9 | ||
|
|
14f2f9ade4 | ||
|
|
c6e9191686 | ||
|
|
3c366a8f3d | ||
|
|
b123a6bf58 | ||
|
|
b022da215c | ||
|
|
1bbd32b6ad | ||
|
|
c0d3dd87f7 | ||
|
|
3159cadabb | ||
|
|
27a63ecacd | ||
|
|
505c310d1f | ||
|
|
a2c29f4949 | ||
|
|
cc94b1bc47 | ||
|
|
102778abcf | ||
|
|
fe34ad86d0 | ||
|
|
46e0a8407a | ||
|
|
41c7f2c508 | ||
|
|
d6e6e21339 | ||
|
|
d1e1c8ea90 | ||
|
|
d22e3935cb | ||
|
|
e99867daca | ||
|
|
eb41bd8c63 | ||
|
|
40dedd67a5 | ||
|
|
7129b9b4df | ||
|
|
07f28076ca | ||
|
|
51d60f9c43 | ||
|
|
d5f5fbef27 | ||
|
|
03386f06ab | ||
|
|
523c99c4ec | ||
|
|
3b4b261e3e | ||
|
|
e0f9f7cd1c | ||
|
|
6f2b46dbae | ||
|
|
9aa9c00f0b | ||
|
|
353a60711d | ||
|
|
d644887612 | ||
|
|
7eb78a0789 | ||
|
|
cd5285864d | ||
|
|
4c9308983f | ||
|
|
8e310aeed6 | ||
|
|
b63f8773a6 | ||
|
|
d23fcfb5a4 | ||
|
|
fce1ab7da6 | ||
|
|
0f0fd6995a | ||
|
|
fe2885dd9e | ||
|
|
f4474ecb00 | ||
|
|
8865b86bef | ||
|
|
8a62486cdf | ||
|
|
009298f1c0 | ||
|
|
c7d5324d89 | ||
|
|
2aef9a2b40 | ||
|
|
fd72d7a21e | ||
|
|
3d767ac76b | ||
|
|
026e1e58c4 | ||
|
|
20f92ebe64 | ||
|
|
6235f2fc53 | ||
|
|
b0adc8b781 | ||
|
|
05be790280 | ||
|
|
634e1f3182 | ||
|
|
c326d50595 | ||
|
|
3d7dc7a128 | ||
|
|
2e05b35205 | ||
|
|
1b79a949c4 | ||
|
|
b063fa030d | ||
|
|
74bad62814 | ||
|
|
8e37498eaa | ||
|
|
a2bd26a4af | ||
|
|
fb8de9a301 | ||
|
|
972f4cd55c | ||
|
|
7332184315 | ||
|
|
5544c50bc6 | ||
|
|
dec43c4d37 | ||
|
|
7bafa7c89a | ||
|
|
7f45932ce1 | ||
|
|
15e81e5a7a | ||
|
|
034d18ed6a | ||
|
|
3540877dd0 | ||
|
|
46babd52df | ||
|
|
76efb28b63 | ||
|
|
bc73bebdf7 | ||
|
|
fd674fa18b | ||
|
|
9838a8e4c1 | ||
|
|
cce6f19292 | ||
|
|
108a7fd671 | ||
|
|
d488b670c0 | ||
|
|
8192a15e50 | ||
|
|
16d99623a9 | ||
|
|
8b0df45311 | ||
|
|
830ceaf3f2 | ||
|
|
b04dc3fae6 | ||
|
|
b73f3a8fdd | ||
|
|
d6f53f5e3c | ||
|
|
03921768f3 | ||
|
|
112bec8628 | ||
|
|
828e5709e9 | ||
|
|
0ccb907838 | ||
|
|
90a1680639 | ||
|
|
bd97fb26a8 | ||
|
|
a2e21df741 | ||
|
|
82ad056fae | ||
|
|
7abdb7490c | ||
|
|
a6f1c8c49f | ||
|
|
9eb1b7af41 | ||
|
|
ef6913f286 | ||
|
|
614d47f0d9 | ||
|
|
9df7a7ccb4 | ||
|
|
9e6d73fdca | ||
|
|
6b5789c05c | ||
|
|
019506d69a | ||
|
|
2dc6fe908b | ||
|
|
8035e1d49d | ||
|
|
12eb244d03 | ||
|
|
2494f6d73b | ||
|
|
2d05b855ca | ||
|
|
93ea049113 | ||
|
|
d76b6c93c2 | ||
|
|
74709f31e0 | ||
|
|
500b3e4c8b | ||
|
|
eb85b33f69 | ||
|
|
ed89b07f4c | ||
|
|
ffd3f94701 | ||
|
|
8f109a9261 | ||
|
|
260672b786 | ||
|
|
8b4031a029 | ||
|
|
cf2dc5430a | ||
|
|
7a89349347 | ||
|
|
f04d35f717 | ||
|
|
67805292e2 | ||
|
|
f297df0942 | ||
|
|
fc93185a7a | ||
|
|
5a95a6200c | ||
|
|
c51960bada | ||
|
|
42f4344a91 | ||
|
|
7900dd3748 | ||
|
|
52add4944d | ||
|
|
c630a224d0 | ||
|
|
cd1e3af50f | ||
|
|
0bd1f42982 | ||
|
|
9fad6e758d | ||
|
|
5c7587f8d6 | ||
|
|
7080c225a6 | ||
|
|
b1d291e63f | ||
|
|
9857121ed0 | ||
|
|
85366aeb06 | ||
|
|
258d1f9675 | ||
|
|
60e4c24d97 | ||
|
|
f63033ef3a | ||
|
|
c036636022 | ||
|
|
c26b7691ee | ||
|
|
ea4da9c211 | ||
|
|
4281ffff90 | ||
|
|
90c9fe1da8 | ||
|
|
16f3330a4a | ||
|
|
fc53cf18b8 | ||
|
|
21491ce84f | ||
|
|
489fd5af6b | ||
|
|
1d3d60ba0a | ||
|
|
fee03bf186 | ||
|
|
7b427c42e0 | ||
|
|
7a66350da9 | ||
|
|
443e493161 | ||
|
|
0eeda78340 | ||
|
|
339e718806 | ||
|
|
6523ebccb7 | ||
|
|
ee889edf16 | ||
|
|
0cea0c3c86 | ||
|
|
f1adf08902 | ||
|
|
ed8a80c052 | ||
|
|
85db9c25ca | ||
|
|
a2f8e0242e | ||
|
|
0eae57f278 | ||
|
|
1274cbcafc | ||
|
|
27f565a63a | ||
|
|
a870896df9 | ||
|
|
358ae364d7 | ||
|
|
c74afa4789 | ||
|
|
09234d21f0 | ||
|
|
83ced2339c | ||
|
|
0bc00b0907 | ||
|
|
0af9543b6b | ||
|
|
bb8e4be381 | ||
|
|
fd94cff640 | ||
|
|
d1d9dc03bf | ||
|
|
4e1d4ccfaf | ||
|
|
2331f43a84 | ||
|
|
44c09a6212 | ||
|
|
7b5d7a9bce | ||
|
|
11bbb913bf | ||
|
|
f011851803 | ||
|
|
4cbbf5ba9c | ||
|
|
b7961a8b95 | ||
|
|
26ff3fa9ff | ||
|
|
60271ef7e6 | ||
|
|
0ae5f93e17 | ||
|
|
a8266b98ec | ||
|
|
c58deddd61 | ||
|
|
a18d02713b | ||
|
|
eb9bcf9d1a | ||
|
|
a19f9df351 | ||
|
|
0976ced31f | ||
|
|
759eb08030 | ||
|
|
9717df84de | ||
|
|
174c64f261 | ||
|
|
54b2711c01 | ||
|
|
6d2ecce590 | ||
|
|
6957fa7531 | ||
|
|
64c9dea8eb | ||
|
|
7383c9892d | ||
|
|
319d5ad1a0 | ||
|
|
771db437cd | ||
|
|
652b7ae24c | ||
|
|
69dfbfc65c | ||
|
|
e533e1bd15 | ||
|
|
2f50547c20 | ||
|
|
7c034f42c6 | ||
|
|
653832edb2 | ||
|
|
385452469a | ||
|
|
66014d7770 | ||
|
|
8cb0124750 | ||
|
|
824a2cc18c | ||
|
|
a03f55880a | ||
|
|
acb7bc59a2 | ||
|
|
982ab458bb | ||
|
|
e7de7b256a | ||
|
|
933f9ad8a5 | ||
|
|
6d66debe17 | ||
|
|
cb5a5b57fe | ||
|
|
926c71eb30 | ||
|
|
ff62e351aa | ||
|
|
e5a59753c7 | ||
|
|
0808d80063 | ||
|
|
3c985bf416 | ||
|
|
b4146f9af6 | ||
|
|
428f456a20 | ||
|
|
90abb3197f | ||
|
|
f19e1a52a6 | ||
|
|
b4e63a5922 | ||
|
|
f19b1dd360 | ||
|
|
749d9d4798 | ||
|
|
8d5df52eb7 | ||
|
|
6ca0aa6b74 | ||
|
|
19e59450ae | ||
|
|
af960211f6 | ||
|
|
ac7312ea15 | ||
|
|
9b1241997e | ||
|
|
78855e51c8 | ||
|
|
b13f4dd85d | ||
|
|
171b1a7aef | ||
|
|
e845481fc2 | ||
|
|
a3d3e54a9d | ||
|
|
23e374d773 | ||
|
|
a5836af8d3 | ||
|
|
6d4a52b46c | ||
|
|
648ad5de25 | ||
|
|
e1d55e5254 | ||
|
|
cfb446e78e | ||
|
|
be1b316a83 | ||
|
|
ddb46a868f | ||
|
|
d8dad85a0e | ||
|
|
23fd09baea | ||
|
|
7c247fa5d8 | ||
|
|
08716e6a78 | ||
|
|
a5398d2830 | ||
|
|
57c24f8ba7 | ||
|
|
38cae9f8e5 | ||
|
|
6269cee56a | ||
|
|
cc2d02d7de | ||
|
|
efbb13f282 | ||
|
|
96974bf20a | ||
|
|
3e2d9baac3 | ||
|
|
b3bdf487fb | ||
|
|
8f2779a99d | ||
|
|
098f2fcfe5 | ||
|
|
f64c975375 | ||
|
|
5518ea165a | ||
|
|
33005e59b4 | ||
|
|
af2089a7f5 | ||
|
|
a54a2a1221 | ||
|
|
21cef41ecd | ||
|
|
f70de3d052 | ||
|
|
36937b4cea | ||
|
|
1d4f5675c8 | ||
|
|
24ac51d510 | ||
|
|
5535ea6184 | ||
|
|
be73e2c2dd | ||
|
|
fc292199e5 | ||
|
|
c1fe8fb22a | ||
|
|
3ae83c7e57 | ||
|
|
eb93c64b6c | ||
|
|
41d8239271 | ||
|
|
604f3ccc92 | ||
|
|
7ef97a583a | ||
|
|
a4f3392da2 | ||
|
|
2c5479995d | ||
|
|
d2d5df8295 | ||
|
|
95cbfd155d | ||
|
|
dcde0c47e3 | ||
|
|
bd38502616 | ||
|
|
56680bb5e5 | ||
|
|
8255e0feaf | ||
|
|
f6e5b08569 | ||
|
|
b430525f14 | ||
|
|
9100cea66b | ||
|
|
9a8ca10365 | ||
|
|
e7b2d27569 | ||
|
|
03e7d0c430 | ||
|
|
f3e794a093 | ||
|
|
ba30b01456 | ||
|
|
fbf041b9d8 | ||
|
|
cee92a97fd | ||
|
|
19057f60be | ||
|
|
899ceac132 | ||
|
|
889e13f8c0 | ||
|
|
64cf06058d | ||
|
|
3b36eb5b41 | ||
|
|
0cb6bf2a89 | ||
|
|
c7faf46591 | ||
|
|
7a9ac5ccde | ||
|
|
788cec525c | ||
|
|
1e31a901b1 | ||
|
|
d60f1f675d | ||
|
|
f3a2e6ab6a | ||
|
|
96ad12a650 | ||
|
|
33832739fe | ||
|
|
c9252f4180 | ||
|
|
7f61dc8682 | ||
|
|
dfe4b878a3 | ||
|
|
f793a212d1 | ||
|
|
2ccaa47f06 | ||
|
|
fbd2f552b5 | ||
|
|
524d1e2f9d | ||
|
|
b06e4aebe6 | ||
|
|
517b7ff62f | ||
|
|
7773e7db41 | ||
|
|
eee07a84f4 | ||
|
|
93ee95dfac | ||
|
|
863bbb5b3a | ||
|
|
28acba4f09 | ||
|
|
e9bf0beaa2 | ||
|
|
435e9f26dc | ||
|
|
79fddf944f | ||
|
|
ede699368e | ||
|
|
37c7e0dd93 | ||
|
|
a33bbe5091 | ||
|
|
60e547aa19 | ||
|
|
f087320908 | ||
|
|
e72b490626 | ||
|
|
375b06a22b | ||
|
|
ed0b52bddc | ||
|
|
dc53b90a37 | ||
|
|
c9d2c8a223 | ||
|
|
c9bb05a93d | ||
|
|
b8c0ebc3ae | ||
|
|
b7aeb66655 | ||
|
|
798e1a2ef1 | ||
|
|
931ffd39c7 | ||
|
|
190e828cfd | ||
|
|
b16e619da6 | ||
|
|
81925de598 | ||
|
|
68f8d9791d | ||
|
|
fa1681dad9 | ||
|
|
8a023b4307 | ||
|
|
d7acd3a04f | ||
|
|
0d4b251130 | ||
|
|
907825ee88 | ||
|
|
3377d94f69 | ||
|
|
53d67e1755 | ||
|
|
b298b969cc | ||
|
|
c2abb7f8d4 | ||
|
|
351394fb2f | ||
|
|
7016fa48ed | ||
|
|
32ecc08e38 | ||
|
|
5c947b2aff | ||
|
|
75a68059f8 | ||
|
|
372415045f | ||
|
|
6280fc97db | ||
|
|
157c97b6ae | ||
|
|
165a38f4d4 | ||
|
|
21b578b593 | ||
|
|
7d13888557 | ||
|
|
c1bc6ef596 | ||
|
|
d13e8fd9be | ||
|
|
e898cf1f4d | ||
|
|
b41047f5a1 | ||
|
|
d93964b9c4 | ||
|
|
1ccc2eed76 | ||
|
|
e84108c44d | ||
|
|
a9312c0633 | ||
|
|
61f923413a | ||
|
|
6325f11cd6 | ||
|
|
2d9b9d16bf | ||
|
|
2af688c4f1 | ||
|
|
8f039f1944 | ||
|
|
fd2a94fa1b | ||
|
|
093b5a6500 | ||
|
|
4a9094b12d | ||
|
|
405aedfb13 | ||
|
|
2f51b51c95 | ||
|
|
248c569bff | ||
|
|
9040a3dc75 | ||
|
|
987a1d8bb2 | ||
|
|
9dd101f56c | ||
|
|
d1c8a2eee7 | ||
|
|
ab3763856e | ||
|
|
9a4b81c43a | ||
|
|
b1f645b825 | ||
|
|
b6f89bf652 | ||
|
|
29f4b2fc62 | ||
|
|
82618b7441 | ||
|
|
fa6e6f93a3 | ||
|
|
b08db80c7b | ||
|
|
8d001c7571 | ||
|
|
922ed72ad9 | ||
|
|
571c49f698 | ||
|
|
061d3ad700 | ||
|
|
8df602fb50 | ||
|
|
ef28dae253 | ||
|
|
9834098dd1 | ||
|
|
5103f511c6 | ||
|
|
77e7ce0c64 | ||
|
|
fb7dabe369 | ||
|
|
d44a6b0332 | ||
|
|
9d5de7db39 | ||
|
|
c60bf29dc2 | ||
|
|
8d8b158ad4 | ||
|
|
de1796e1b6 | ||
|
|
cdc49cbf86 | ||
|
|
8766826f17 | ||
|
|
9947b1d591 | ||
|
|
d3267f06d7 | ||
|
|
022c4aafcd | ||
|
|
ffad63566a | ||
|
|
be1b8887f4 | ||
|
|
c59b373c27 | ||
|
|
f2c47cf41b | ||
|
|
0c11974859 | ||
|
|
ea76b61cd5 | ||
|
|
8088207e75 | ||
|
|
8096f74a7a | ||
|
|
808e37a085 | ||
|
|
a4a19a5375 | ||
|
|
c5a1782c50 | ||
|
|
0c53b57ffd | ||
|
|
a62cb8be04 | ||
|
|
393215507d | ||
|
|
de27307b82 | ||
|
|
87560e7eed | ||
|
|
e5edc8dd5f | ||
|
|
6e3d873784 | ||
|
|
b3a0b7ff08 | ||
|
|
11e37a5184 | ||
|
|
4470c26ddd | ||
|
|
c46e073cf6 | ||
|
|
4981becae9 | ||
|
|
ffe2aa4cb3 | ||
|
|
f7b182df6d | ||
|
|
f6bfff16bd | ||
|
|
77a601df68 | ||
|
|
623217c524 | ||
|
|
62f86043e6 | ||
|
|
951274bb15 | ||
|
|
42db9f9c99 | ||
|
|
ca76f57316 | ||
|
|
789eec1a57 | ||
|
|
ea2d4070aa | ||
|
|
626c9e6535 | ||
|
|
80a00245ab | ||
|
|
bb840aa126 | ||
|
|
f6d8c9fd6e | ||
|
|
985fb5e830 | ||
|
|
6dbb3614b1 | ||
|
|
2cae6148d5 | ||
|
|
9073a29fd5 | ||
|
|
5c4c500716 | ||
|
|
52c08d1454 | ||
|
|
2b53c6997f | ||
|
|
412740e644 | ||
|
|
7deb83faf2 | ||
|
|
e6b15b6e3b | ||
|
|
db78e401e2 | ||
|
|
059a89e715 | ||
|
|
72bfc1ff57 | ||
|
|
7e9744b377 | ||
|
|
fe66ed52cd | ||
|
|
59cd31540d | ||
|
|
182a7d6595 | ||
|
|
8bcd754d59 | ||
|
|
4b37859008 | ||
|
|
3f9d31c19a | ||
|
|
b4421be269 | ||
|
|
7bfe868afb | ||
|
|
7ce252939c | ||
|
|
c2a7b5edd0 | ||
|
|
ea7186b15b | ||
|
|
219babfda5 | ||
|
|
d27ac38e93 | ||
|
|
681ad997a2 | ||
|
|
eb3164cb85 | ||
|
|
739fac8131 | ||
|
|
2c777ec5f8 | ||
|
|
dcbd5a7366 | ||
|
|
499f809c6e | ||
|
|
e00eaf7e8f | ||
|
|
6022309d33 | ||
|
|
e9417b86cd | ||
|
|
fb55b6464a | ||
|
|
6c472480d0 | ||
|
|
a031f8d17a | ||
|
|
33776e9317 | ||
|
|
79fb1ee5de | ||
|
|
d208fa4b4e | ||
|
|
66c69063e2 | ||
|
|
ce754b88df | ||
|
|
05c853ea88 | ||
|
|
505fa357a7 | ||
|
|
1813c82cc0 | ||
|
|
0283131d00 | ||
|
|
d956e54c85 |
@@ -1,17 +1,25 @@
|
||||
# editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
quote_type = single
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.php]
|
||||
indent_size = 4
|
||||
|
||||
[*.blade.php]
|
||||
indent_size = 2
|
||||
|
||||
[resources/views/**.php]
|
||||
indent_size = 2
|
||||
|
||||
[index.php]
|
||||
indent_size = 2
|
||||
|
||||
3
.gitattributes
vendored
3
.gitattributes
vendored
@@ -1,3 +1,2 @@
|
||||
/.github export-ignore
|
||||
/.gitattributes export-ignore
|
||||
/.travis.yml export-ignore
|
||||
/.github export-ignore
|
||||
|
||||
1
.github/CONTRIBUTING.md
vendored
1
.github/CONTRIBUTING.md
vendored
@@ -1 +0,0 @@
|
||||
Please read [Contributing to Roots Projects](https://github.com/roots/guidelines/blob/master/CONTRIBUTING.md)
|
||||
62
.github/ISSUE_TEMPLATE.md
vendored
62
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,62 +0,0 @@
|
||||
## Submit a feature request or bug report
|
||||
|
||||
- [ ] I've read the [guidelines for Contributing to Roots Projects](https://github.com/roots/guidelines/blob/master/CONTRIBUTING.md)
|
||||
- [ ] This is a feature request
|
||||
- [ ] This is a bug report
|
||||
- [ ] This request isn't a duplicate of an [existing issue](https://github.com/roots/sage/issues)
|
||||
- [ ] I've read the [docs](https://roots.io/sage/docs) and [NPM Debugging Guidelines post](https://discourse.roots.io/t/npm-debugging-guidelines-failed-npm-install-bower-install-or-gulp-build-read-this/3060) and followed them (if applicable)
|
||||
- [ ] This is not a personal support request that should be posted on the [Roots Discourse](https://discourse.roots.io/c/sage) forums
|
||||
|
||||
<!-- Replace any `X` with your information. -->
|
||||
|
||||
---
|
||||
|
||||
**What is the current behavior?**
|
||||
|
||||
X
|
||||
|
||||
|
||||
**What is the expected or desired behavior?**
|
||||
|
||||
X
|
||||
|
||||
---
|
||||
|
||||
## Bug report
|
||||
|
||||
<!-- (delete this section if not applicable) -->
|
||||
|
||||
**Please provide steps to reproduce, including full log output:**
|
||||
|
||||
X
|
||||
|
||||
**Please describe your local environment:**
|
||||
|
||||
WordPress version: X
|
||||
|
||||
OS: X
|
||||
|
||||
NPM/Node version: X
|
||||
|
||||
**Where did the bug happen? Development or remote servers?**
|
||||
|
||||
X
|
||||
|
||||
|
||||
**Is there a related [Discourse](https://discourse.roots.io/) thread or were any utilized (please link them)?**
|
||||
|
||||
X
|
||||
|
||||
---
|
||||
|
||||
## Feature Request
|
||||
|
||||
<!-- (delete this section if not applicable) -->
|
||||
|
||||
**Please provide use cases for changing the current behavior:**
|
||||
|
||||
X
|
||||
|
||||
**Other relevant information:**
|
||||
|
||||
X
|
||||
23
.github/labeler.yml
vendored
Normal file
23
.github/labeler.yml
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
build:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- vite.config.js
|
||||
dependencies:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- package-lock.json
|
||||
javascript:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- resources/js/**/*.js
|
||||
php:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- functions.php
|
||||
- app/**/*.php
|
||||
- resources/views/**/*.php
|
||||
views:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- index.php
|
||||
- resources/views/**/*.php
|
||||
23
.github/renovate.json
vendored
Normal file
23
.github/renovate.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"baseBranches": [
|
||||
"main"
|
||||
],
|
||||
"commitMessageAction": "⬆️ Bump",
|
||||
"commitMessageTopic": "{{depName}}",
|
||||
"extends": [
|
||||
"config:recommended",
|
||||
"schedule:weekly"
|
||||
],
|
||||
"rangeStrategy": "bump",
|
||||
"packageRules": [
|
||||
{
|
||||
"matchUpdateTypes": [
|
||||
"minor",
|
||||
"patch",
|
||||
"pin"
|
||||
],
|
||||
"enabled": true
|
||||
}
|
||||
],
|
||||
"timezone": "America/Detroit"
|
||||
}
|
||||
18
.github/workflows/discourse.yml
vendored
Normal file
18
.github/workflows/discourse.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
name: Post release topic on Discourse
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
post:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: roots/discourse-topic-github-release-action@main
|
||||
with:
|
||||
discourse-api-key: ${{ secrets.DISCOURSE_RELEASES_API_KEY }}
|
||||
discourse-base-url: ${{ secrets.DISCOURSE_BASE_URL }}
|
||||
discourse-author-username: ben
|
||||
discourse-category: 11
|
||||
discourse-tags:
|
||||
releases
|
||||
11
.github/workflows/labeler.yml
vendored
Normal file
11
.github/workflows/labeler.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
name: "Pull Request Labeler"
|
||||
on:
|
||||
- pull_request_target
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/labeler@v5
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
91
.github/workflows/main.yml
vendored
Normal file
91
.github/workflows/main.yml
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
name: Main
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
node:
|
||||
name: Node ${{ matrix.node }}
|
||||
runs-on: ubuntu-latest
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]')"
|
||||
strategy:
|
||||
matrix:
|
||||
node: ['20']
|
||||
|
||||
steps:
|
||||
- name: Checkout the project
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup the Node ${{ matrix.node }} environment on ${{ runner.os }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Install dependencies using npm
|
||||
run: npm install
|
||||
|
||||
- name: Build and compile assets
|
||||
run: |
|
||||
npm run build
|
||||
cat public/build/manifest.json
|
||||
|
||||
- name: Validate theme.json
|
||||
run: |
|
||||
THEME_JSON="public/build/assets/theme.json"
|
||||
|
||||
if [ ! -f "$THEME_JSON" ]; then
|
||||
echo "❌ theme.json not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
jq -e '
|
||||
(.settings.color.palette | length > 0) and
|
||||
(.settings.typography.fontFamilies | length > 0) and
|
||||
(.settings.typography.fontSizes | length > 0)
|
||||
' "$THEME_JSON" 2>&1 || {
|
||||
echo "❌ Invalid theme.json structure or missing required values"
|
||||
exit 1
|
||||
}
|
||||
|
||||
php:
|
||||
name: PHP ${{ matrix.php }}
|
||||
runs-on: ubuntu-latest
|
||||
if: "!contains(github.event.head_commit.message, '[ci skip]')"
|
||||
strategy:
|
||||
matrix:
|
||||
php: ['8.2']
|
||||
|
||||
steps:
|
||||
- name: Checkout the project
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup the PHP ${{ matrix.php }} environment on ${{ runner.os }}
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
coverage: xdebug
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Restore the Composer cache directory
|
||||
id: composercache
|
||||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ steps.composercache.outputs.dir }}
|
||||
key: ${{ runner.os }}-${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }}
|
||||
restore-keys: ${{ runner.os }}-${{ matrix.php }}-composer-
|
||||
|
||||
- name: Install Composer dependencies
|
||||
run: composer install --no-progress --prefer-dist --optimize-autoloader --no-suggest
|
||||
|
||||
- name: Run Pint
|
||||
run: vendor/bin/pint --test
|
||||
14
.gitignore
vendored
14
.gitignore
vendored
@@ -1,10 +1,6 @@
|
||||
# Include your project-specific ignores in this file
|
||||
# Read about how to use .gitignore: https://help.github.com/articles/ignoring-files
|
||||
.cache-loader
|
||||
dist
|
||||
bower_components
|
||||
node_modules
|
||||
/node_modules
|
||||
/vendor
|
||||
/public/*
|
||||
!/public/.gitkeep
|
||||
.env
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
vendor
|
||||
resources/assets/config-local.json
|
||||
|
||||
40
.travis.yml
40
.travis.yml
@@ -1,40 +0,0 @@
|
||||
language: php
|
||||
sudo: false
|
||||
dist: trusty
|
||||
php:
|
||||
- 7.1
|
||||
- 7.0
|
||||
- nightly
|
||||
|
||||
env:
|
||||
- TRAVIS_NODE_VERSION="6"
|
||||
- TRAVIS_NODE_VERSION="7"
|
||||
|
||||
matrix:
|
||||
fast_finish: true
|
||||
allow_failures:
|
||||
- php: nightly
|
||||
|
||||
cache:
|
||||
apt: true
|
||||
directories:
|
||||
- $HOME/.composer/cache
|
||||
- $HOME/.yarn-cache
|
||||
- vendor
|
||||
|
||||
before_install:
|
||||
- composer self-update
|
||||
- source ~/.nvm/nvm.sh && nvm install $TRAVIS_NODE_VERSION && nvm use $TRAVIS_NODE_VERSION
|
||||
- export PATH=$HOME/.yarn/bin:$PATH && travis_retry curl -o- -L https://yarnpkg.com/install.sh | bash
|
||||
|
||||
install:
|
||||
- node -v && yarn -V
|
||||
- travis_retry yarn
|
||||
- composer install -o --prefer-dist --no-interaction
|
||||
|
||||
script:
|
||||
- yarn run test
|
||||
- yarn run build
|
||||
- yarn run rmdist
|
||||
- yarn run "build:production"
|
||||
- composer test
|
||||
569
CHANGELOG.md
569
CHANGELOG.md
@@ -1,569 +0,0 @@
|
||||
### HEAD
|
||||
* Update dependencies, support `config-local.json`, implement autoload system for styles/scripts, use `roots/sage-installer`, use `roots/sage-lib` ([#1919](https://github.com/roots/sage/pull/1919))
|
||||
* Add soberwp/controller ([#1903](https://github.com/roots/sage/pull/1903))
|
||||
* Change syntax of template call to match other files in views ([#1908](https://github.com/roots/sage/pull/1908))
|
||||
* Add Tachyons as a CSS framework option ([#1867](https://github.com/roots/sage/pull/1867))
|
||||
* Remove post format reference in template call ([#1904](https://github.com/roots/sage/pull/1904))
|
||||
* Update inline documentation to reflect correct theme file locations ([#1890](https://github.com/roots/sage/pull/1890))
|
||||
* Optimize CSS Assets safe = true ([#1901](https://github.com/roots/sage/pull/1901))
|
||||
* Update Autoprefixer and standardize browserlist location ([#1899](https://github.com/roots/sage/pull/1899))
|
||||
* Do not redirect for WP-CLI ([#1891](https://github.com/roots/sage/pull/1891))
|
||||
* Illuminate: container make with parameters ([#1888](https://github.com/roots/sage/pull/1888))
|
||||
* Add Stylelint for linting stylesheets ([#1885](https://github.com/roots/sage/pull/1885))
|
||||
|
||||
### 9.0.0-beta.3: April 21st, 2017
|
||||
* Move required theme files to `sage/resources` ([#1877](https://github.com/roots/sage/pull/1877))
|
||||
* Move `src/` to `app/` ([#1868](https://github.com/roots/sage/pull/1868))
|
||||
* Move `templates/` to `resources/views/`, move `assets/` to `resources/assets/`, rename `base.blade.php` to `app.blade.php` ([#1864](https://github.com/roots/sage/pull/1864))
|
||||
* Add option to configure build settings ([#1822](https://github.com/roots/sage/pull/1822))
|
||||
* Add support for HTML injection ([#1817](https://github.com/roots/sage/pull/1817))
|
||||
* Add Tachyons as a CSS framework option ([#1867](https://github.com/roots/sage/pull/1867))
|
||||
|
||||
### 9.0.0-beta.2: January 19th, 2017
|
||||
* Fix Browersync ([#1815](https://github.com/roots/sage/pull/1815))
|
||||
* Add option to select CSS framework, add Foundation as an option ([#1813](https://github.com/roots/sage/pull/1813))
|
||||
* Add option to add Font Awesome ([#1812](https://github.com/roots/sage/pull/1812))
|
||||
* Add option to change theme file headers ([#1811](https://github.com/roots/sage/pull/1811))
|
||||
* Add option to remove Bootstrap ([#1810](https://github.com/roots/sage/pull/1810))
|
||||
* Remove Font Awesome ([#1809](https://github.com/roots/sage/pull/1809))
|
||||
* Remove grid defaults ([#1808](https://github.com/roots/sage/pull/1808))
|
||||
* Fix for `publicPath` ([#1806](https://github.com/roots/sage/pull/1806))
|
||||
* Update clean task name ([#1800](https://github.com/roots/sage/pull/1800))
|
||||
* Allow browser versions to be configured in `config.json` ([#1798](https://github.com/roots/sage/pull/1798))
|
||||
* Use stock ESLint ([#1796](https://github.com/roots/sage/pull/1796))
|
||||
|
||||
### 9.0.0-beta.1: January 10th, 2017
|
||||
* Update to Bootstrap 4 Alpha 6 ([#1792](https://github.com/roots/sage/pull/1792))
|
||||
* Add Blade ([#1765](https://github.com/roots/sage/pull/1765) and [#1777](https://github.com/roots/sage/pull/1777))
|
||||
* Remove sidebar defaults ([#1760](https://github.com/roots/sage/pull/1760))
|
||||
* Remove post formats ([#1759](https://github.com/roots/sage/pull/1759))
|
||||
|
||||
### 9.0.0-alpha.4: November 16th, 2016
|
||||
* Use new webpack api schema ([8ac5f15](https://github.com/roots/sage/commit/e6e60aa))
|
||||
* Update dependencies ([70ebba7](https://github.com/roots/sage/commit/70ebba7))
|
||||
* Variables organization ([8ac5f15](https://github.com/roots/sage/commit/8ac5f15))
|
||||
* Use `$.fn.ready()` (reverts [724d550](https://github.com/roots/sage/commit/724d550)) ([e7fccbe](https://github.com/roots/sage/commit/e7fccbe))
|
||||
* Theme activation updates 'stylesheet' option instead of 'template' ([fb19145](https://github.com/roots/sage/commit/fb19145))
|
||||
* Reorganize and refactor build routine ([8c9ba05](https://github.com/roots/sage/commit/8c9ba05))
|
||||
* Switch assets manifest plugin ([c1bb2b3](https://github.com/roots/sage/commit/c1bb2b3))
|
||||
* Add images to assets manifest ([c49793c](https://github.com/roots/sage/commit/c49793c))
|
||||
* Switch from babel to buble ([0d38ab8](https://github.com/roots/sage/commit/0d38ab8))
|
||||
* Update dependencies & webpack compatibility ([eae52fd](https://github.com/roots/sage/commit/eae52fd))
|
||||
* Use http by default (not https) to be consistent with Trellis ([e6f2f49](https://github.com/roots/sage/commit/e6f2f49))
|
||||
|
||||
### 9.0.0-alpha.3: September 11th, 2016
|
||||
* Fix webpack HMR ([#1713](https://github.com/roots/sage/issues/1713))
|
||||
* Remove minor edits from CHANGELOG.md ([3516629](https://github.com/roots/sage/commit/3516629))
|
||||
|
||||
### 9.0.0-alpha.2: September 4th, 2016
|
||||
* Refactor build routine ([#1703](https://github.com/roots/sage/pull/1703))
|
||||
* Update `_grid.scss` to use `@include make-col-ready()` mixin ([#1706](https://github.com/roots/sage/pull/1706))
|
||||
|
||||
### 9.0.0-alpha.1: August 30th, 2016
|
||||
* Move assets found in `node_modules/` to `dist/vendor`, simpler `assets/config.json` ([#1697](https://github.com/roots/sage/pull/1697))
|
||||
* Set dynamically absolute public path ([#1696](https://github.com/roots/sage/pull/1696))
|
||||
* Load Tether ([#1686](https://github.com/roots/sage/pull/1686))
|
||||
* Squash asset pipeline bugs ([4d58f88](https://github.com/roots/sage/commit/4d58f88))
|
||||
* Update dependencies, incl Bootstrap 4 alpha 3 ([447c24d](https://github.com/roots/sage/commit/447c24d))
|
||||
* Fix path to stylesheet in `add_editor_style` ([#1684](https://github.com/roots/sage/pull/1684))
|
||||
* Update required Node.js version ([72b2d89](https://github.com/roots/sage/commit/72b2d89))
|
||||
* Router doesn't require jQuery, use default params ([339cc8e](https://github.com/roots/sage/commit/339cc8e))
|
||||
* Fix display of theme name in Customizer ([3425386](https://github.com/roots/sage/commit/3425386))
|
||||
* Convert scripts to ES6 ([f34af48](https://github.com/roots/sage/commit/f34af48))
|
||||
* Refactor functions.php ([eae36be](https://github.com/roots/sage/commit/eae36be))
|
||||
* Rework template wrapper, bring back template_part() ([#1678](https://github.com/roots/sage/pull/1678))
|
||||
* Remove unused static variable in Wrapper ([9bfdd5a](https://github.com/roots/sage/commit/9bfdd5a))
|
||||
* Remove `path.extname()` check ([#1673](https://github.com/roots/sage/pull/1673))
|
||||
* Updated to align with the Bootstrap 4 docs ([#1667](https://github.com/roots/sage/pull/1667))
|
||||
* Add `npm prune` to Travis CI ([#1663](https://github.com/roots/sage/pull/1663))
|
||||
* Bootstrap NPM ^4.0.0-alpha.2 ([#1650](https://github.com/roots/sage/pull/1650))
|
||||
* Fix Bootstrap 4 styles ([#1642](https://github.com/roots/sage/pull/1642))
|
||||
* Fix autoloader load order issue when including Sage 9 via composer.json in Bedrock ([#1628](https://github.com/roots/sage/pull/1628))
|
||||
* `is_page_template()` requires the name of the subfolder ([#1626](https://github.com/roots/sage/pull/1626))
|
||||
* Webpack config improvements ([#1629](https://github.com/roots/sage/pull/1629))
|
||||
* Webpack implementation improvements ([#1627](https://github.com/roots/sage/pull/1627))
|
||||
* Webpack implementation ([#1625](https://github.com/roots/sage/pull/1625))
|
||||
* Fix BS4 grid after their grid updates ([5551dde](https://github.com/roots/sage/commit/5551dde))
|
||||
* Pass the correct template ([856a482](https://github.com/roots/sage/commit/856a482))
|
||||
* Optimize travis a bit ([b42c425](https://github.com/roots/sage/commit/b42c425))
|
||||
* Move single-post loop to single.php, closes #1582 ([6efa099](https://github.com/roots/sage/commit/6efa099))
|
||||
* All function braces need to be on new line ([b491f76](https://github.com/roots/sage/commit/b491f76))
|
||||
* Fix issue with WP loading wrong index.php ([9e2917e](https://github.com/roots/sage/commit/9e2917e))
|
||||
* Use 4 spaces for `src/*.php` ([fe659f4](https://github.com/roots/sage/commit/fe659f4))
|
||||
* Use phpcs.xml for all rules ([246955c](https://github.com/roots/sage/commit/246955c))
|
||||
* Conform to new rules ([6a4d3bd](https://github.com/roots/sage/commit/6a4d3bd))
|
||||
* Create new phpcs rules ([2d02544](https://github.com/roots/sage/commit/2d02544))
|
||||
* Remove Template class ([1df3fee](https://github.com/roots/sage/commit/1df3fee))
|
||||
* Remove closure from sidebar registration ([12d6ac3](https://github.com/roots/sage/commit/12d6ac3))
|
||||
* Remove sage.pot ([d4461fa](https://github.com/roots/sage/commit/d4461fa))
|
||||
* Remove template_part, template_sidebar, temp sidebar fix ([abeea0f](https://github.com/roots/sage/commit/abeea0f))
|
||||
* Update asset handles ([fa0e51f](https://github.com/roots/sage/commit/fa0e51f))
|
||||
* Remove comment-reply JS ([d217ba6](https://github.com/roots/sage/commit/d217ba6))
|
||||
* Update node in travis, remove unsupported php ([8712dc8](https://github.com/roots/sage/commit/8712dc8))
|
||||
* Update dependencies, switch to eslint ([e51e41e](https://github.com/roots/sage/commit/e51e41e))
|
||||
* Bootstrap 4 ([c9ef232](https://github.com/roots/sage/commit/c9ef232))
|
||||
* Fix: page title not displaying ([9283bbb](https://github.com/roots/sage/commit/9283bbb))
|
||||
* Rename interfaces, unset after unwrapping ([97906e9](https://github.com/roots/sage/commit/97906e9))
|
||||
* Restructure theme, use autoloader ([9eaffa3](https://github.com/roots/sage/commit/9eaffa3a2d4df462dd8020a10551334208bd32a3))
|
||||
|
||||
### 8.5.0: September 20th, 2016
|
||||
* Update installation instructions
|
||||
* Update dependencies
|
||||
* Update to Bootstrap 4.0.0-alpha.4 ([5eb01fd](https://github.com/roots/sage/commit/5eb01fd0319a7b6576e31579dc50e16b023abb74))
|
||||
|
||||
### 8.4.2: February 19th, 2016
|
||||
* Add Composer vendor directory to gitignore ([#1618](https://github.com/roots/sage/issues/1618))
|
||||
* Fix build test by removing trailing space ([#1617](https://github.com/roots/sage/issues/1617))
|
||||
* Replace deprecated gulp-minify-css with gulp-cssnano ([#1610](https://github.com/roots/sage/issues/1610))
|
||||
|
||||
### 8.4.1: January 27th, 2016
|
||||
* Add `composer.json` and update installation instructions ([#1583](https://github.com/roots/sage/issues/1583))
|
||||
|
||||
### 8.4.0: December 1st, 2015
|
||||
* Update to Bootstrap 3.3.6 ([#1578](https://github.com/roots/sage/pull/1578))
|
||||
* Remove unnecessary underscore ([#1577](https://github.com/roots/sage/pull/1577))
|
||||
* Drop support for older browsers ([#1571](https://github.com/roots/sage/pull/1571))
|
||||
* Add support for theme customizer ([#1573](https://github.com/roots/sage/pull/1573))
|
||||
* Remove extraneous no-js ([#1562](https://github.com/roots/sage/pull/1562))
|
||||
* Simplify/speed up editor style process ([#1560](https://github.com/roots/sage/pull/1560))
|
||||
|
||||
### 8.3.0: October 13th, 2015
|
||||
* Setup organization ([#1558](https://github.com/roots/sage/pull/1558))
|
||||
* Remove redundancy with WAI-ARIA in HTML ([#1557](https://github.com/roots/sage/pull/1557))
|
||||
* Rename config.php to setup.php ([#1556](https://github.com/roots/sage/pull/1556))
|
||||
* Move init.php to config.php ([#1555](https://github.com/roots/sage/pull/1555))
|
||||
* Use Sass to style search form, remove search template ([#1545](https://github.com/roots/sage/pull/1545))
|
||||
* Remove Modernizr ([#1541](https://github.com/roots/sage/pull/1541))
|
||||
* Remove references to WP_ENV ([#1554](https://github.com/roots/sage/pull/1554))
|
||||
* Use WP core's HTML5 gallery markup ([#1546](https://github.com/roots/sage/pull/1546))
|
||||
* Use slash in handle names for theme CSS and JS ([#1537](https://github.com/roots/sage/pull/1537))
|
||||
* Add compatibility with WooCommerce Multilingual plugin ([#1530](https://github.com/roots/sage/pull/1530))
|
||||
* Remove ConditionalTagCheck class ([#1494](https://github.com/roots/sage/pull/1494))
|
||||
* Add search templates ([#1459](https://github.com/roots/sage/issues/1459))
|
||||
* Allow `debugger` statements in development JavaScript ([#1487](https://github.com/roots/sage/issues/1487))
|
||||
|
||||
### 8.2.1: May 7th, 2015
|
||||
* Update BrowserSync ([#1457](https://github.com/roots/sage/issues/1457))
|
||||
* Bump dependencies ([#1448](https://github.com/roots/sage/issues/1448))
|
||||
* Allow revved files to resolve in development if they exist ([#1456](https://github.com/roots/sage/issues/1456))
|
||||
* Disable advanced minification features to fix incorrect file path in compiled CSS ([#1452](https://github.com/roots/sage/issues/1452))
|
||||
* Fix Glyphicon font path ([#1455](https://github.com/roots/sage/issues/1455))
|
||||
|
||||
### 8.2.0: April 29th, 2015
|
||||
* Use Sass Bootstrap by default ([#1437](https://github.com/roots/sage/issues/1437))
|
||||
* Remove nav walker and Bootstrap navbar ([#1427](https://github.com/roots/sage/issues/1427))
|
||||
* Remove Bootstrap gallery ([#1421](https://github.com/roots/sage/issues/1421))
|
||||
* Remove hardcoded feed link ([#1426](https://github.com/roots/sage/issues/1426))
|
||||
* Move jQuery CDN feature to Soil ([#1422](https://github.com/roots/sage/issues/1422))
|
||||
* Bump `gulp-load-plugins` to 0.10.0 ([#1419](https://github.com/roots/sage/issues/1419))
|
||||
* Switch from [yargs](https://github.com/bcoe/yargs) to [minimist](https://github.com/substack/minimist) ([#1418](https://github.com/roots/sage/issues/1418))
|
||||
* Remove `$content_width` ([#1417](https://github.com/roots/sage/issues/1417))
|
||||
* Lowercase `X-UA-Compatible` ([#1409](https://github.com/roots/sage/issues/1409))
|
||||
* Remove mention of Google Analytics from the config ([#1384](https://github.com/roots/sage/issues/1384))
|
||||
|
||||
### 8.1.1: March 31st, 2015
|
||||
* Remove pleeease dependency in favor of vanilla gulp-autoprefixer and gulp-minify-css ([#1402](https://github.com/roots/sage/issues/1402))
|
||||
* Fix `gulp --production` race condition ([#1398](https://github.com/roots/sage/issues/1398))
|
||||
* Update to Bootstrap 3.3.4 ([#1387](https://github.com/roots/sage/issues/1387))
|
||||
|
||||
### 8.1.0: March 13th, 2015
|
||||
* Move HTML5 Boilerplate's Google Analytics snippet to Soil ([#1382](https://github.com/roots/sage/issues/1382))
|
||||
* Run `gulp build` if `bower.json` is changed ([#1378](https://github.com/roots/sage/issues/1378))
|
||||
* Remove namespace from base.php ([#1372](https://github.com/roots/sage/issues/1372))
|
||||
* Allow build directory to be customized ([#1352](https://github.com/roots/sage/issues/1352), [#1366](https://github.com/roots/sage/issues/1366))
|
||||
* Update ConditionalTagCheck and usage docs ([#1365](https://github.com/roots/sage/issues/1365))
|
||||
* Change default gallery columns to 3 ([#1364](https://github.com/roots/sage/issues/1364))
|
||||
* Apply `script_loader_src` filter to jQuery fallback ([#1363](https://github.com/roots/sage/issues/1363))
|
||||
|
||||
### 8.0.1: February 26th, 2015
|
||||
* Update asset-builder version to fix Windows compatibility ([#1351](https://github.com/roots/sage/issues/1351))
|
||||
* Fix broken wiredep imports with main.scss.example ([Discussion](https://discourse.roots.io/t/issue-with-sage-sass-version/2962))
|
||||
|
||||
### 8.0.0: February 25th, 2015
|
||||
* Change theme name from Roots to Sage
|
||||
* Bump required PHP version to >=5.4
|
||||
* Add coding standards based on PSR-2
|
||||
* Add Travis CI
|
||||
* Add namespace
|
||||
* Use short array syntax
|
||||
* Use short echo syntax
|
||||
* Switch from Grunt to gulp, new front-end development workflow
|
||||
* Switch from Livereload to [BrowserSync](http://www.browsersync.io/)
|
||||
* Use wiredep for Sass and Less injection
|
||||
* Implement JSON file based asset pipeline with [asset-builder](https://github.com/austinpray/asset-builder)
|
||||
* Re-organize asset file structure
|
||||
* Re-organize stylesheet file structure
|
||||
* Add main.scss.example and instructions for using Sass
|
||||
* Use the primary theme stylesheet for the editor stylesheet
|
||||
* Remove theme activation, move to [wp-cli-theme-activation](https://github.com/roots/wp-cli-theme-activation)
|
||||
* Simplify 404 page
|
||||
* Convert Sidebar to ConditionalTagCheck
|
||||
* Update to jQuery 1.11.2
|
||||
* Use new core navigation template tag
|
||||
* Update sidebar to fix default template check
|
||||
* Update nav walker to correctly assign `active` classes for custom post types
|
||||
* Better support for CPT templates
|
||||
|
||||
### 7.0.3: December 18th, 2014
|
||||
* Use `get_the_archive_title`
|
||||
* Remove `wp_title`, add title-tag theme support
|
||||
* Remove `Roots_Nav_Walker` as default for all menus
|
||||
* Update to Bootstrap 3.3.1
|
||||
* Add some base comment styling
|
||||
* Make search term `required` in search form
|
||||
|
||||
### 7.0.2: October 24th, 2014
|
||||
* Simplify comments, use core comment form and list
|
||||
* Remove HTML5 shiv from Modernizr build
|
||||
* Move JavaScript to footer
|
||||
* Update hEntry schema to use `updated` instead of `published`
|
||||
* Move variables into `main.less`
|
||||
* Add `roots_body_class` function that checks for page slug in `body_class`
|
||||
* Move `wp_footer` from footer template into `base.php`
|
||||
|
||||
### 7.0.1: August 15th, 2014
|
||||
* Move `<main>` and `.sidebar` markup out of PHP and into LESS
|
||||
* Define `WP_ENV` if it is not already defined
|
||||
* Only load Google Analytics in production environment
|
||||
|
||||
### 7.0.0: July 3rd, 2014
|
||||
* Updated Grunt workflow
|
||||
* Use grunt-modernizr to make a lean Modernizr build
|
||||
* Use Bower for front-end package management
|
||||
* Update to Bootstrap 3.2.0
|
||||
* Update to Modernizr 2.8.2
|
||||
* Update to jQuery 1.11.1
|
||||
* Move clean up, relative URLs, and nice search to [Soil](https://github.com/roots/soil)
|
||||
* Update LESS organization
|
||||
* Move [community translations](https://github.com/roots/roots-translations) to separate repository
|
||||
|
||||
### 6.5.2: February 4th, 2014
|
||||
* Update to Bootstrap 3.1.0
|
||||
* Move DOM routing into an anonymous function to support jQuery noConflict
|
||||
* Update to jQuery 1.11.0
|
||||
* Add notice to theme activation, tidy activation table markup
|
||||
* Remove changing media folder from theme activation (use [Bedrock](https://github.com/roots/bedrock) for clean URLs out of the box)
|
||||
* Switch `div.main` to `main` element now that Modernizr uses the latest HTML5 Shiv
|
||||
* Update to Modernizr 2.7.0
|
||||
* Don't run JSHint on plugins (`assets/js/plugins/`)
|
||||
* Disable warnings about undefined variables (JSHint)
|
||||
* Merge in updates from HTML5 Boilerplate
|
||||
* Add JS source map (disabled by default)
|
||||
* Replace `grunt-recess` with `grunt-contrib-less`, add LESS source map support
|
||||
|
||||
### 6.5.1: November 5th, 2013
|
||||
* Move clean URLs to a [plugin](https://github.com/roots/roots-rewrites)
|
||||
* Update to Bootstrap 3.0.1
|
||||
|
||||
### 6.5.0: August 23rd, 2013
|
||||
* Reference new site, [http://roots.io/](http://roots.io/)
|
||||
* Remove bundled docs, reference [http://roots.io/docs/](http://roots.io/docs/)
|
||||
* Use Bootstrap variables for media queries
|
||||
* Update to Bootstrap 3.0.0
|
||||
* Update to jQuery 1.10.2
|
||||
* Change media directory from `/assets/` to `/media/`
|
||||
* Update to Google Universal Analytics
|
||||
* Show author display name for author archives
|
||||
* Add Serbian translation
|
||||
* Remove post tags from templates
|
||||
* Remove TinyMCE valid elements tweaks (no longer necessary)
|
||||
* Remove additional widget classes
|
||||
* Move `/assets/css/less/` to `/assets/less/`
|
||||
* Add wrapper templates filter
|
||||
* Fix relative external URLs issue
|
||||
|
||||
### 6.4.0: May 1st, 2013
|
||||
* Fix Theme Activation page issues
|
||||
* Fix issues with root relative URLs and rewrites on non-standard setups
|
||||
* Make sure rewrites are added to `.htaccess` immediately after activation
|
||||
* Move HTML5 Boilerplate's `.htaccess` to a [plugin](https://github.com/roots/wp-h5bp-htaccess)
|
||||
* Rename `page-custom.php` to `template-custom.php`
|
||||
* Don't warn about unwritable htaccess if that option is disabled
|
||||
* Add missing collapse class for top navbar
|
||||
* Add comment template
|
||||
* Update is_dropdown evaluation in nav walker
|
||||
* Re-organize archives template
|
||||
* Add missing comment ID
|
||||
* hNews consistency with entry-title class
|
||||
* Add `wp_title()` filter
|
||||
* Fix missing closing div in comments
|
||||
* Fix for navbar dropdowns
|
||||
* Add option for using jQuery on Google CDN
|
||||
* Correct logic in `roots_enable_root_relative_urls`
|
||||
* Add Greek translation, update Brazilian Portuguese translation
|
||||
* Update to Bootstrap 2.3.1
|
||||
* Simplify alerts
|
||||
* Remove disabled post nav links
|
||||
* Use Bootstrap media object for listing comments
|
||||
* Move Google Analytics to `lib/scripts.php`
|
||||
* Static top navbar instead of fixed
|
||||
|
||||
### 6.3.0: February 8th, 2013
|
||||
* Update to Bootstrap 2.3.0
|
||||
* Update to jQuery 1.9.1
|
||||
* Output author title with `get_the_author()`
|
||||
* Add EditorConfig
|
||||
* Update 404 template based on H5BP
|
||||
* Update H5BP's included .htaccess
|
||||
* Don't show comments on passworded posts
|
||||
* Add `do_action('get_header')` for WooSidebars compatibility
|
||||
* Simplify entry meta
|
||||
* Allow `get_search_form()` to be called more than once per request
|
||||
* Move plugins.js and main.js to footer
|
||||
* JavaScript clean up (everything is now enqueued)
|
||||
* Remove conditional feed
|
||||
* Introduce `add_theme_support('bootstrap-gallery')`
|
||||
* Rewrites organization (introduce `lib/rewrites.php`)
|
||||
* Fix `add_editor_style` path
|
||||
* Updated translations: French, Bulgarian, Turkish, Korean
|
||||
* Enable `add_theme_support` for Nice Search
|
||||
* Replace ID's with classes
|
||||
* Add support for dynamic sidebar templates
|
||||
* Fix PHP notice on search with no results
|
||||
* Update to jQuery 1.9.0
|
||||
|
||||
### 6.2.0: January 13th, 2013
|
||||
* Implement latest Nice Search
|
||||
* Update [gallery] shortcode
|
||||
* Add Simplified Chinese, Indonesian, Korean translations
|
||||
* Move template title to `lib/utils.php`
|
||||
* Update to Bootstrap 2.2.2
|
||||
* Update to jQuery 1.8.3
|
||||
* Use `entry-summary` class for excerpts per Readability's Article Publishing Guidelines
|
||||
* Cleanup/refactor `lib/activation.php`
|
||||
* Remove `lib/post-types.php` and `lib/metaboxes.php`
|
||||
* Make sure Primary Navigation menu always gets created and has the location set upon activation, update activation permalink method
|
||||
* Update to Bootstrap 2.2.1
|
||||
* Update conditional feed method
|
||||
* Update to Bootstrap 2.2.0
|
||||
* Return instead of echo class names in `roots_main_class` and `roots_sidebar_class`
|
||||
* Move nav customizations into `lib/nav.php`
|
||||
|
||||
### 6.1.0: October 2nd, 2012
|
||||
* Change roots_sidebar into a more explicit configuration array
|
||||
* Re-organize configuration/setup files
|
||||
* Update to jQuery 1.8.2
|
||||
* Refactor/simplify Roots vCard Widget
|
||||
* Move custom entry_meta code into template
|
||||
* Move Google Analytics code into footer template
|
||||
* Add CONTRIBUTING.md to assist with the new GitHub UI
|
||||
* Add nav walker support for CSS dividers and nav-header
|
||||
|
||||
### 6.0.0: September 16th, 2012
|
||||
* Simplify nav walker and support 3rd level dropdowns
|
||||
* Update to Bootstrap 2.1.1, jQuery 1.8.1, Modernizr 2.6.2
|
||||
* Add bundled docs
|
||||
* Update all templates to use [PHP Alternative Syntax](http://php.net/manual/en/control-structures.alternative-syntax.php)
|
||||
* Add MIT License
|
||||
* Implement scribu's [Theme Wrapper](http://scribu.net/wordpress/theme-wrappers.html) (see `base.php`)
|
||||
* Move `css/`, `img/`, and `js/` folders within a new `assets/` folder
|
||||
* Move templates, `comments.php`, and `searchform.php` to `templates/` folder
|
||||
* Rename `inc/` to `lib/`
|
||||
* Add placeholder `lib/post-types.php` and `lib/metaboxes.php` files
|
||||
* Rename `loop-` files to `content-`
|
||||
* Remove all hooks
|
||||
* Use `templates/page-header.php` for page titles
|
||||
* Use `head.php` for everything in `<head>`
|
||||
|
||||
### 5.2.0: August 18th, 2012
|
||||
* Update to jQuery 1.8.0 and Modernizr 2.6.1
|
||||
* Fix duplicate active class in `wp_nav_menu` items
|
||||
* Merge `Roots_Navbar_Nav_Walker` into `Roots_Nav_Walker`
|
||||
* Add and update code documentation
|
||||
* Use `wp_get_theme()` to get the theme name on activation
|
||||
* Use `<figure>` & `<figcaption>` for captions
|
||||
* Wrap embedded media as suggested by Readability
|
||||
* Remove unnecessary `remove_action`'s on `wp_head` as of WordPress 3.2.1
|
||||
* Add updates from HTML5 Boilerplate
|
||||
* Remove well class from sidebar
|
||||
* Flush permalinks on activation to avoid 404s with clean URLs
|
||||
* Show proper classes on additional `wp_nav_menu()`'s
|
||||
* Clean up `inc/cleanup.php`
|
||||
* Remove old admin notice for tagline
|
||||
* Remove default tagline admin notice, hide from feed
|
||||
* Fix for duplicated classes in widget markup
|
||||
* Show title on custom post type archive template
|
||||
* Fix for theme preview in WordPress 3.3.2
|
||||
* Introduce `inc/config.php` with options for clean URLs, H5BP's `.htaccess`, root relative URLs, and Bootstrap features
|
||||
* Allow custom CSS classes in menus, walker cleanup
|
||||
* Remove WordPress version numbers from stylesheets
|
||||
* Don't include HTML5 Boilerplate's `style.css` by default
|
||||
* Allow `inc/htaccess.php` to work with Litespeed
|
||||
* Update to Bootstrap 2.0.4
|
||||
* Update Bulgarian translation
|
||||
* Don't use clean URLs with default permalink structure
|
||||
* Add translations for Catalan, Polish, Hungarian, Norwegian, Russian
|
||||
|
||||
### 5.1.0: April 14th, 2012
|
||||
* Various bugfixes for scripts, stylesheets, root relative URLs, clean URLs, and htaccess issues
|
||||
* Add a conditional feed link
|
||||
* Temporarily remove Gravity Forms customizations
|
||||
* Update to Bootstrap 2.0.2
|
||||
* Update `roots.pot` for translations
|
||||
* Add/update languages: Vietnamese, Swedish, Bulgarian, Turkish, Norwegian, Brazilian Portugese
|
||||
* Change widgets to use `<section>` instead of `<article>`
|
||||
* Add comment-reply.js
|
||||
* Remove optimized robots.txt
|
||||
* HTML5 Boilerplate, Modernizr, and jQuery updates
|
||||
|
||||
### 5.0.0: February 5th, 2012
|
||||
* Remove all frameworks except Bootstrap
|
||||
* Update to Bootstrap 2.0
|
||||
* Remove `roots-options.php` and replaced with a more simple `roots-config.php`
|
||||
* Now using Bootstrap markup on forms, page titles, image galleries, alerts and errors, post and comment navigation
|
||||
* Remove Roots styles from `style.css` and introduced `app.css` for site-specific CSS
|
||||
* Remove almost all previous default Roots styling
|
||||
* Latest updates from HTML5 Boilerplate
|
||||
|
||||
### 4.1.0: February 1st, 2012
|
||||
* Update translations
|
||||
* HTML5 Boilerplate updates
|
||||
* Fix for Server 500 errors
|
||||
* Add `roots-scripts.php`, now using `wp_enqueue_script`
|
||||
* Re-organize `roots-actions.php`
|
||||
* Allow `<script>` tags in TinyMCE
|
||||
* Add full width class and search form to 404 template
|
||||
* Remove Blueprint CSS specific markup
|
||||
* Use Roots Nav Walker as default
|
||||
* Add author name and taxonomy name to archive template title
|
||||
* Add Full Width CSS class options
|
||||
|
||||
### 4.0.0: January 4th, 2012
|
||||
* Add theme activation options
|
||||
* HTML5 Boilerplate updates
|
||||
* Add CSS frameworks: Bootstrap, Foundation
|
||||
* Add translations: Dutch, Italian, Macedonian, German, Finnish, Danish, Spanish, and Turkish
|
||||
* Update jQuery
|
||||
* Remove included jQuery plugins
|
||||
* Clean up whitespace, switched to two spaces for tabs
|
||||
* Clean up `body_class()` some more with `roots_body_class()`
|
||||
* Post meta information is now displayed using a function (similar to Twenty Eleven)
|
||||
* Bugfixes for 1140 options
|
||||
* Add first and last classes to widgets
|
||||
* Fix bug with initial options save
|
||||
* Remove sitemap and listing subpages templates
|
||||
* Child themes can now unregister sidebars
|
||||
* Add fix for empty search query
|
||||
* Update README
|
||||
* Blocking access to readme.html and license.txt to hide WordPress version information
|
||||
|
||||
### 3.6.0: August 12th, 2011
|
||||
* HTML5 Boilerplate 2.0 updates
|
||||
* Cleaner output of enqueued styles and scripts
|
||||
* Adde option for root relative URLs
|
||||
* Small fixes to root relative URLs and clean assets
|
||||
* Update included jQuery plugins
|
||||
* Add French translation (thanks @johnraz)
|
||||
* Add Brazilian Portuguese translation (thanks @weslly)
|
||||
* Switch the logo to use `add_custom_image_header`
|
||||
* Add a function that strips unnecessary self-closing tags
|
||||
* Code cleanup and re-organization
|
||||
|
||||
### 3.5.0: July 30th, 2011
|
||||
* Complete rewrite of theme options based on Twenty Eleven
|
||||
* CSS frameworks: refactor code and add default classes for each framework
|
||||
* CSS frameworks: add support for Adapt.js and LESS
|
||||
* CSS frameworks: add option for None
|
||||
* Add support for WPML and theme translation
|
||||
* Add option for cleaner nav menu output
|
||||
* Add option for FOUT-B-Gone
|
||||
* Add authorship rel attribute to post author link
|
||||
* Activation bugfix for pages being added multiple times
|
||||
* Bugfixes to the root relative URL function
|
||||
* Child themes will now load their CSS automatically and properly
|
||||
* HTML5 Boilerplate updates (including Normalize.css, Modernizr 2.0, and Respond.js)
|
||||
* Introduce cleaner way of including HTML5 Boilerplate's `.htaccess`
|
||||
* Add hooks & actions
|
||||
* Rename `includes/` directory to `inc/`
|
||||
* Add a blank `inc/roots-custom.php` file
|
||||
|
||||
### 3.2.4: May 19th, 2011
|
||||
* Bugfixes
|
||||
* Match latest changes to HTML5 Boilerplate and Blueprint CSS
|
||||
* Update jQuery to 1.6.1
|
||||
|
||||
### 3.2.3: May 10th, 2011
|
||||
* Bugfixes
|
||||
* Add `language_attributes()` to `<html>`
|
||||
* Match latest changes to HTML5 Boilerplate and Blueprint CSS
|
||||
* Update jQuery to 1.6
|
||||
|
||||
### 3.2.2: April 24th, 2011
|
||||
* Bugfixes
|
||||
|
||||
### 3.2.1: April 20th, 2011
|
||||
* Add support for child themes
|
||||
|
||||
### 3.2.0: April 15th, 2011
|
||||
* Add support for the 1140px Grid
|
||||
* Update the conditional comment code to match latest changes to HTML5 Boilerplate
|
||||
|
||||
### 3.1.1: April 7th, 2011
|
||||
* Fix relative path function to work correctly when WordPress is installed in a subdirectory
|
||||
* Update jQuery to 1.5.2
|
||||
* Fix comments to show avatars correctly
|
||||
|
||||
### 3.1.0: April 1st, 2011
|
||||
* Add support for 960.gs thanks to John Liuti
|
||||
* Add more onto the `.htaccess` from HTML5 Boilerplate
|
||||
* Allow the theme directory and name to be renamable
|
||||
|
||||
### 3.0.0: March 28th, 2011
|
||||
* Change name from BB to Roots and release to the public
|
||||
* Update various areas to match the latest changes to HTML5 Boilerplate
|
||||
* Change the theme markup based on hCard/Readability Guidelines and work by Jonathan Neal
|
||||
* Create the navigation menus and automatically set their locations during theme activation
|
||||
* Set permalink structure to `/%year%/%postname%/`
|
||||
* Set uploads folder to `/assets/`
|
||||
* Rewrite static folders in `/wp-content/themes/roots/` (`css/`, `js/`, `img/`) to the root (`/css/`, `/js/`, `/img/`)
|
||||
* Rewrite `/wp-content/plugins/` to `/plugins/`
|
||||
* Add more root relative URLs on WordPress functions
|
||||
* Search results (`/?s=query`) rewrite to `/search/query/`
|
||||
* `l10n.js` is deregistered
|
||||
* Change [gallery] to output `<figure>` and `<figcaption>` and link to file by default
|
||||
* Add more `loop.php` templates
|
||||
* Made the HTML editor have a monospaced font
|
||||
* Add `front-page.php`
|
||||
* Update CSS for Gravity Forms 1.5
|
||||
* Add `searchform.php template`
|
||||
|
||||
### 2.4.0: January 25th, 2011
|
||||
* Add a notification when saving the theme settings
|
||||
* Add support for navigation menus
|
||||
* Create function that makes sure there is a Home page on theme activation
|
||||
* Update various areas to match the latest changes to HTML5 Boilerplate
|
||||
|
||||
### 2.3.0: December 8th, 2010
|
||||
* Logo is no longer an `<h1>`
|
||||
* Add ARIA roles again
|
||||
* Change `ul#nav` to `nav#nav-main`
|
||||
* Add vCard to footer
|
||||
* Made all URL's root relative
|
||||
* Add Twitter and Facebook widgets to footer
|
||||
* Add SEO optimized `robots.txt` from WordPress codex
|
||||
|
||||
### 2.2.0: September 20th, 2010
|
||||
* Add asynchronous Google Analytics
|
||||
* Update `.htaccess` with latest changes from HTML5 Boilerplate
|
||||
|
||||
### 2.1.0: August 19th, 2010
|
||||
* Remove optimizeLegibility from headings
|
||||
* Update jQuery to latest version
|
||||
* Implement HTML5 Boilerplate `.htaccess`
|
||||
|
||||
### 2.0.1: August 2nd, 2010
|
||||
* Add some presentational CSS classes
|
||||
* Add footer widget
|
||||
* Add more Gravity Forms default styling
|
||||
|
||||
### 2.0.0: July 19th, 2010
|
||||
* Add HTML5 Boilerplate changes
|
||||
* Implement `loop.php`
|
||||
* wp_head cleanup
|
||||
* Add `page-subpages.php` template
|
||||
|
||||
### 1.5.0: April 15th, 2010
|
||||
* Integrate Paul Irish's frontend-pro-template (the original HTML5 Boilerplate)
|
||||
|
||||
### 1.0.0: December 18th, 2009
|
||||
* Add Blueprint CSS to Starkers
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright (c) Ben Word and Scott Walkinshaw
|
||||
Copyright (c) Roots Software LLC
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
|
||||
137
README.md
137
README.md
@@ -1,124 +1,31 @@
|
||||
# [Sage](https://roots.io/sage/)
|
||||
[](https://packagist.org/packages/roots/sage)
|
||||
[](https://david-dm.org/roots/sage#info=devDependencies)
|
||||
[](https://travis-ci.org/roots/sage)
|
||||
<p align="center">
|
||||
<a href="https://roots.io/sage/"><img alt="Sage" src="https://cdn.roots.io/app/uploads/logo-sage.svg" height="100"></a>
|
||||
</p>
|
||||
|
||||
Sage is a WordPress starter theme with a modern development workflow.
|
||||
<p align="center">
|
||||
<a href="https://packagist.org/packages/roots/sage"><img alt="Packagist Installs" src="https://img.shields.io/packagist/dt/roots/sage?label=projects%20created&colorB=2b3072&colorA=525ddc&style=flat-square"></a>
|
||||
<a href="https://github.com/roots/sage/actions/workflows/main.yml"><img alt="Build Status" src="https://img.shields.io/github/actions/workflow/status/roots/sage/main.yml?branch=main&logo=github&label=CI&style=flat-square"></a>
|
||||
<a href="https://bsky.app/profile/roots.dev"><img alt="Follow roots.dev on Bluesky" src="https://img.shields.io/badge/follow-@roots.dev-0085ff?logo=bluesky&style=flat-square"></a>
|
||||
</p>
|
||||
|
||||
**Sage 9 is in active development and is currently in beta. The `master` branch tracks Sage 9 development. If you want a stable version, use the [latest Sage 8 release](https://github.com/roots/sage/releases/latest).**
|
||||
# Sage
|
||||
|
||||
## Features
|
||||
**Advanced hybrid WordPress starter theme with Laravel Blade and Tailwind CSS**
|
||||
|
||||
* Sass for stylesheets
|
||||
* ES6 for JavaScript
|
||||
* [Webpack](https://webpack.github.io/) for compiling assets, optimizing images, and concatenating and minifying files
|
||||
* [Browsersync](http://www.browsersync.io/) for synchronized browser testing
|
||||
* [Laravel Blade](https://laravel.com/docs/5.3/blade) as a templating engine
|
||||
* [Controller](https://github.com/soberwp/controller) for passing data to Blade templates
|
||||
* CSS framework options:
|
||||
* [Bootstrap 4](http://getbootstrap.com/)
|
||||
* [Foundation](http://foundation.zurb.com/)
|
||||
* [Tachyons](http://tachyons.io/)
|
||||
* None (blank slate)
|
||||
* Font Awesome (optional)
|
||||
- 🔧 Clean, efficient theme templating with Laravel Blade
|
||||
- ⚡️ Modern front-end development workflow powered by Vite
|
||||
- 🎨 Out of the box support for Tailwind CSS
|
||||
- 🚀 Harness the power of Laravel with [Acorn integration](https://github.com/roots/acorn)
|
||||
- 📦 Block editor support built-in
|
||||
|
||||
See a working example at [roots-example-project.com](https://roots-example-project.com/).
|
||||
Sage brings proper PHP templating and modern JavaScript tooling to WordPress themes. Write organized, component-based code using Laravel Blade, enjoy instant builds and CSS hot-reloading with Vite, and leverage Laravel's robust feature set through Acorn.
|
||||
|
||||
## Requirements
|
||||
[Read the docs to get started](https://roots.io/sage/docs/installation/)
|
||||
|
||||
Make sure all dependencies have been installed before moving on:
|
||||
## Sponsors
|
||||
|
||||
* [WordPress](https://wordpress.org/) >= 4.7
|
||||
* [PHP](http://php.net/manual/en/install.php) >= 7.0
|
||||
* [Composer](https://getcomposer.org/download/)
|
||||
* [Node.js](http://nodejs.org/) >= 6.9.x
|
||||
* [Yarn](https://yarnpkg.com/en/docs/install)
|
||||
Sage is an open source project and completely free to use. If you've benefited from our projects and would like to support our future endeavors, [please consider sponsoring us](https://github.com/sponsors/roots).
|
||||
|
||||
## Theme installation
|
||||
|
||||
Install Sage using Composer from your WordPress themes directory (replace `your-theme-name` below with the name of your theme):
|
||||
|
||||
```shell
|
||||
# @ app/themes/ or wp-content/themes/
|
||||
$ composer create-project roots/sage your-theme-name dev-master
|
||||
```
|
||||
|
||||
During theme installation you will have the options to:
|
||||
|
||||
* Update theme headers (theme name, description, author, etc.)
|
||||
* Select a CSS framework (Bootstrap, Foundation, Tachyons, none)
|
||||
* Add Font Awesome
|
||||
* Configure Browsersync (path to theme, local development URL)
|
||||
|
||||
## Theme structure
|
||||
|
||||
```shell
|
||||
themes/your-theme-name/ # → Root of your Sage based theme
|
||||
├── app/ # → Theme PHP
|
||||
│ ├── lib/Sage/ # → Blade implementation, asset manifest
|
||||
│ ├── admin.php # → Theme customizer setup
|
||||
│ ├── filters.php # → Theme filters
|
||||
│ ├── helpers.php # → Helper functions
|
||||
│ └── setup.php # → Theme setup
|
||||
├── composer.json # → Autoloading for `app/` files
|
||||
├── composer.lock # → Composer lock file (never edit)
|
||||
├── dist/ # → Built theme assets (never edit)
|
||||
├── node_modules/ # → Node.js packages (never edit)
|
||||
├── package.json # → Node.js dependencies and scripts
|
||||
├── resources/ # → Theme assets and templates
|
||||
│ ├── assets/ # → Front-end assets
|
||||
│ │ ├── config.json # → Settings for compiled assets
|
||||
│ │ ├── build/ # → Webpack and ESLint config
|
||||
│ │ ├── fonts/ # → Theme fonts
|
||||
│ │ ├── images/ # → Theme images
|
||||
│ │ ├── scripts/ # → Theme JS
|
||||
│ │ └── styles/ # → Theme stylesheets
|
||||
│ ├── controllers/ # → Controller files
|
||||
│ ├── functions.php # → Composer autoloader, theme includes
|
||||
│ ├── index.php # → Never manually edit
|
||||
│ ├── screenshot.png # → Theme screenshot for WP admin
|
||||
│ ├── style.css # → Theme meta information
|
||||
│ └── views/ # → Theme templates
|
||||
│ ├── layouts/ # → Base templates
|
||||
│ └── partials/ # → Partial templates
|
||||
└── vendor/ # → Composer packages (never edit)
|
||||
```
|
||||
|
||||
## Theme setup
|
||||
|
||||
Edit `app/setup.php` to enable or disable theme features, setup navigation menus, post thumbnail sizes, and sidebars.
|
||||
|
||||
## Theme development
|
||||
|
||||
* Run `yarn` from the theme directory to install dependencies
|
||||
* Update `resources/assets/config.json` settings:
|
||||
* `devUrl` should reflect your local development hostname
|
||||
* `publicPath` should reflect your WordPress folder structure (`/wp-content/themes/sage` for non-[Bedrock](https://roots.io/bedrock/) installs)
|
||||
|
||||
### Build commands
|
||||
|
||||
* `yarn run start` — Compile assets when file changes are made, start Browsersync session
|
||||
* `yarn run build` — Compile and optimize the files in your assets directory
|
||||
* `yarn run build:production` — Compile assets for production
|
||||
|
||||
## Documentation
|
||||
|
||||
Sage 8 documentation is available at [https://roots.io/sage/docs/](https://roots.io/sage/docs/).
|
||||
|
||||
Sage 9 documentation is currently in progress and can be viewed at [https://github.com/roots/docs/tree/sage-9/sage](https://github.com/roots/docs/tree/sage-9/sage).
|
||||
|
||||
Controller documentation is available at [https://github.com/soberwp/controller#usage](https://github.com/soberwp/controller#usage).
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are welcome from everyone. We have [contributing guidelines](https://github.com/roots/guidelines/blob/master/CONTRIBUTING.md) to help you get started.
|
||||
|
||||
## Community
|
||||
|
||||
Keep track of development and community news.
|
||||
|
||||
* Participate on the [Roots Discourse](https://discourse.roots.io/)
|
||||
* Follow [@rootswp on Twitter](https://twitter.com/rootswp)
|
||||
* Read and subscribe to the [Roots Blog](https://roots.io/blog/)
|
||||
* Subscribe to the [Roots Newsletter](https://roots.io/subscribe/)
|
||||
* Listen to the [Roots Radio podcast](https://roots.io/podcast/)
|
||||
<div align="center">
|
||||
<a href="https://carrot.com/"><img src="https://cdn.roots.io/app/uploads/carrot.svg" alt="Carrot" width="120" height="90"></a> <a href="https://wordpress.com/"><img src="https://cdn.roots.io/app/uploads/wordpress.svg" alt="WordPress.com" width="120" height="90"></a> <a href="https://worksitesafety.ca/careers/"><img src="https://cdn.roots.io/app/uploads/worksite-safety.svg" alt="Worksite Safety" width="120" height="90"></a> <a href="https://40q.agency/"><img src="https://cdn.roots.io/app/uploads/40q.svg" alt="40Q" width="120" height="90"></a> <a href="https://www.itineris.co.uk/"><img src="https://cdn.roots.io/app/uploads/itineris.svg" alt="Itineris" width="120" height="90"></a> <a href="https://bonsai.so/"><img src="https://cdn.roots.io/app/uploads/bonsai.svg" alt="Bonsai" width="120" height="90"></a>
|
||||
</div>
|
||||
|
||||
158
app/ACF/Dynamic.php
Normal file
158
app/ACF/Dynamic.php
Normal file
@@ -0,0 +1,158 @@
|
||||
<?php
|
||||
|
||||
namespace App\ACF;
|
||||
use ourcodeworld\NameThatColor\ColorInterpreter as NameThatColor;
|
||||
use App\Utilities;
|
||||
|
||||
class Dynamic
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_filter('acf/load_field/name=colour', [ $this, 'load_colours' ]);
|
||||
add_filter('acf/load_field/name=bg_colour', [ $this, 'load_colours' ]);
|
||||
add_filter('acf/load_field/name=tint', [ $this, 'load_tints' ]);
|
||||
add_filter('acf/load_field/name=bg_tint', [ $this, 'load_tints' ]);
|
||||
add_filter('acf/load_field/name=container_width', [ $this, 'container_width' ]);
|
||||
add_filter('acf/load_field/name=fontawesome_regular', [ $this, 'load_fontawesome_regular_icons' ]);
|
||||
add_filter('acf/load_field/name=fontawesome_solid', [ $this, 'load_fontawesome_solid_icons' ]);
|
||||
add_filter('acf/load_field/name=fontawesome_brands', [ $this, 'load_fontawesome_brand_icons' ]);
|
||||
add_action('acf/input/admin_footer', [ $this, 'colour_ui' ]);
|
||||
}
|
||||
|
||||
public function load_colours( $field )
|
||||
{
|
||||
$colour = new Utilities\Colour;
|
||||
$NameThatColour = new NameThatColor;
|
||||
|
||||
$colours = $colour->values();
|
||||
|
||||
$field['choices'] = [
|
||||
'0' => __('None', 'badegg'),
|
||||
];
|
||||
|
||||
foreach($colours as $slug => $hex):
|
||||
$field['choices'][$slug] = '<i class="fas fa-circle" style="color: '. $hex .'"></i> ' . @$NameThatColour->name($hex)['name'];
|
||||
endforeach;
|
||||
|
||||
return $field;
|
||||
|
||||
}
|
||||
|
||||
public function load_tints( $field )
|
||||
{
|
||||
$colour = new Utilities\Colour;
|
||||
$tints = $colour->tints();
|
||||
|
||||
$field['choices'] = [];
|
||||
|
||||
foreach($tints as $slug => $hex):
|
||||
if($slug):
|
||||
$field['choices'][$slug] = ucfirst($slug);
|
||||
|
||||
else:
|
||||
$field['choices'][0] = __('None', 'badegg');
|
||||
endif;
|
||||
endforeach;
|
||||
|
||||
return $field;
|
||||
}
|
||||
|
||||
public function container_width( $field )
|
||||
{
|
||||
$field['choices'] = [
|
||||
0 => 'Auto',
|
||||
'narrow' => __('Narrow', 'badegg'),
|
||||
'small' => __('Small', 'badegg'),
|
||||
'medium' => __('Medium', 'badegg'),
|
||||
'large' => __('Large', 'badegg'),
|
||||
'full' => __('Edge to edge', 'badegg'),
|
||||
];
|
||||
|
||||
return $field;
|
||||
}
|
||||
|
||||
public function load_fontawesome_regular_icons( $field )
|
||||
{
|
||||
$field['choices'] = [];
|
||||
$field['choices'] = $this->fontawesome_choices('regular');
|
||||
|
||||
return $field;
|
||||
}
|
||||
|
||||
public function load_fontawesome_solid_icons( $field )
|
||||
{
|
||||
$field['choices'] = [];
|
||||
$field['choices'] = $this->fontawesome_choices('solid');
|
||||
|
||||
return $field;
|
||||
}
|
||||
|
||||
public function load_fontawesome_brand_icons( $field )
|
||||
{
|
||||
$field['choices'] = [];
|
||||
$field['choices'] = $this->fontawesome_choices('brands');
|
||||
|
||||
return $field;
|
||||
}
|
||||
|
||||
public function fontawesome_choices($set = 'solid')
|
||||
{
|
||||
$path = get_stylesheet_directory() . '/resources/json/font-awesome-' . $set . '.json';
|
||||
|
||||
$json = @file_get_contents($path);
|
||||
|
||||
if(!$json) return false;
|
||||
$icons = json_decode($json, true);
|
||||
|
||||
$choices = [
|
||||
'0' => '<i class="fa-solid"></i> <span>Please select an icon</span>',
|
||||
];
|
||||
|
||||
foreach($icons as $slug => $props):
|
||||
if(in_array($slug, range(0,9))) continue;
|
||||
|
||||
$choices[$slug] = '<i class="fa-'.$set.' fa-'.$slug.'" style="color: #2271b1;"></i> <span>' . (ucwords(str_replace('-', ' ', $slug))) . '</span>';
|
||||
endforeach;
|
||||
|
||||
return $choices;
|
||||
}
|
||||
|
||||
public function colour_ui()
|
||||
{ ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
console.log("Script loaded from sage/app/ACF/Dynamic.php");
|
||||
|
||||
(function($) {
|
||||
|
||||
function my_custom_escaping_method( original_value){
|
||||
return original_value;
|
||||
}
|
||||
|
||||
acf.add_filter('select2_escape_markup', function( escaped_value, original_value, $select, settings, field, instance ){
|
||||
console.log(field.data('name'));
|
||||
|
||||
const whitelist = [
|
||||
'colour',
|
||||
'bg_colour',
|
||||
'angle_colour',
|
||||
'fontawesome_brands',
|
||||
];
|
||||
|
||||
// do something to the original_value to override the default escaping, then return it.
|
||||
// this value should still have some kind of escaping for security, but you may wish to allow specific HTML.
|
||||
if (whitelist.includes(field.data( 'name' ))) {
|
||||
return my_custom_escaping_method( original_value );
|
||||
}
|
||||
|
||||
// return
|
||||
return escaped_value;
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
|
||||
<?php }
|
||||
}
|
||||
|
||||
25
app/ACF/JSON.php
Normal file
25
app/ACF/JSON.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\ACF;
|
||||
|
||||
class JSON
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_filter('acf/settings/save_json', [$this, 'save']);
|
||||
add_filter('acf/settings/load_json', [$this, 'load']);
|
||||
}
|
||||
|
||||
public function save( $path )
|
||||
{
|
||||
$path = get_stylesheet_directory() . '/resources/acf';
|
||||
return $path;
|
||||
}
|
||||
|
||||
public function load( $paths )
|
||||
{
|
||||
unset($paths[0]);
|
||||
$paths[] = get_stylesheet_directory() . '/resources/acf';
|
||||
return $paths;
|
||||
}
|
||||
}
|
||||
23
app/ACF/Options.php
Normal file
23
app/ACF/Options.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\ACF;
|
||||
|
||||
class Options
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_filter('acf/init', [$this, 'company']);
|
||||
}
|
||||
|
||||
public function company()
|
||||
{
|
||||
acf_add_options_page([
|
||||
'page_title' => __('Global Settings'),
|
||||
'menu_title' => __('Global Settings'),
|
||||
'menu_slug' => 'theme-global-settings',
|
||||
'capability' => 'edit_others_posts',
|
||||
'redirect' => false,
|
||||
'icon_url' => 'dashicons-admin-site',
|
||||
]);
|
||||
}
|
||||
}
|
||||
67
app/Admin/Comments.php
Normal file
67
app/Admin/Comments.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
namespace App\Admin;
|
||||
|
||||
class Comments
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_action('admin_init', [$this, 'commentstatusdiv']); // Disable comment status div meta box
|
||||
add_action('wp_dashboard_setup', [$this, 'dashboard_activity']); // Remove the Activity widget
|
||||
add_action('wp_before_admin_bar_render', [$this, 'remove_menu_item']); // Remove from admin bar
|
||||
add_action('admin_menu', [$this, 'admin_menu']); // Remove from backend menu
|
||||
add_action('wp_dashboard_setup', [$this, 'dashboard_recent_comments']); // Remove Dashboard Meta Box
|
||||
add_filter('comments_rewrite_rules', '__return_empty_array'); // Remove comment rewrite rule
|
||||
add_action('after_theme_setup', [$this, 'theme_support']); // Remove comment theme support
|
||||
add_filter('rewrite_rules_array', [$this, 'rewrite']); // Clean up rewrite rule
|
||||
}
|
||||
|
||||
public function commentstatusdiv()
|
||||
{
|
||||
remove_meta_box( 'commentstatusdiv', 'post', 'normal' );
|
||||
remove_post_type_support( 'post', 'comments' );
|
||||
|
||||
remove_meta_box( 'commentstatusdiv', 'page', 'normal' );
|
||||
remove_post_type_support( 'page', 'comments' );
|
||||
}
|
||||
|
||||
public function dashboard_activity()
|
||||
{
|
||||
remove_meta_box( 'dashboard_activity', 'dashboard', 'normal' );
|
||||
}
|
||||
|
||||
public function remove_menu_item()
|
||||
{
|
||||
global $wp_admin_bar;
|
||||
$wp_admin_bar->remove_menu('comments');
|
||||
}
|
||||
|
||||
public function admin_menu()
|
||||
{
|
||||
remove_menu_page( 'edit-comments.php' );
|
||||
remove_submenu_page( 'options-general.php', 'options-discussion.php' );
|
||||
}
|
||||
|
||||
public function dashboard_recent_comments()
|
||||
{
|
||||
remove_meta_box( 'dashboard_recent_comments', 'dashboard', 'normal' );
|
||||
}
|
||||
|
||||
public function theme_support()
|
||||
{
|
||||
remove_theme_support('comments');
|
||||
}
|
||||
|
||||
public function rewrite($rules)
|
||||
{
|
||||
foreach ($rules as $rule => $rewrite) {
|
||||
if (preg_match('/.*(feed)/', $rule)) {
|
||||
unset($rules[$rule]);
|
||||
}
|
||||
if (preg_match('/.*(comment-page)/', $rule)) {
|
||||
unset($rules[$rule]);
|
||||
}
|
||||
}
|
||||
return $rules;
|
||||
}
|
||||
}
|
||||
27
app/Admin/DisablePost.php
Normal file
27
app/Admin/DisablePost.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Admin;
|
||||
|
||||
class DisablePost
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
// add_filter('register_post_type_args', [$this, 'args'], 0, 2);
|
||||
// add_filter('register_taxonomy_args', [$this, 'args'], 0, 2);
|
||||
}
|
||||
|
||||
public function args($args, $type)
|
||||
{
|
||||
$types = [
|
||||
'post',
|
||||
'post_tag',
|
||||
'category',
|
||||
];
|
||||
|
||||
if(in_array($type, $types)) {
|
||||
$args['public'] = false;
|
||||
}
|
||||
|
||||
return $args;
|
||||
}
|
||||
}
|
||||
22
app/Admin/Enqueue.php
Normal file
22
app/Admin/Enqueue.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Admin;
|
||||
|
||||
class Enqueue
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_action( 'admin_enqueue_scripts', [$this, 'fontawesome']);
|
||||
}
|
||||
|
||||
public function fontawesome()
|
||||
{
|
||||
wp_enqueue_style(
|
||||
'fontawesome',
|
||||
'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css',
|
||||
false,
|
||||
'6.5.2',
|
||||
'all'
|
||||
);
|
||||
}
|
||||
}
|
||||
24
app/Admin/Integrations.php
Normal file
24
app/Admin/Integrations.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Admin;
|
||||
|
||||
class Integrations
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_action( 'wp_head', [$this, 'FathomAnalytics']);
|
||||
}
|
||||
|
||||
public function FathomAnalytics()
|
||||
{
|
||||
$fathomID = get_field('badegg_integrations_fathom_id', 'option');
|
||||
|
||||
if($fathomID && WP_ENV == 'production'): ?>
|
||||
|
||||
<!-- Fathom - beautiful, simple website analytics -->
|
||||
<script src="https://cdn.usefathom.com/script.js" data-site="<?= $fathomID ?>" defer></script>
|
||||
<!-- / Fathom -->
|
||||
|
||||
<?php endif;
|
||||
}
|
||||
}
|
||||
35
app/Admin/Theme.php
Normal file
35
app/Admin/Theme.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\Admin;
|
||||
use ourcodeworld\NameThatColor\ColorInterpreter as NameThatColor;
|
||||
use App\Utilities;
|
||||
|
||||
class Theme
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_action( 'after_setup_theme', [$this, 'DynamicPalette'] );
|
||||
}
|
||||
|
||||
public function DynamicPalette()
|
||||
{
|
||||
$colour = new Utilities\Colour;
|
||||
$NameThatColour = new NameThatColor;
|
||||
|
||||
$palette = [];
|
||||
|
||||
$colours = $colour->values();
|
||||
|
||||
foreach($colours as $slug => $hex) {
|
||||
$palette[] = [
|
||||
'name' => esc_html__(@$NameThatColour->name($hex)['name'], 'badegg'),
|
||||
'slug' => $slug,
|
||||
'color' => $hex,
|
||||
];
|
||||
}
|
||||
|
||||
if(!empty($colours)) {
|
||||
add_theme_support('editor-color-palette', $palette);
|
||||
}
|
||||
}
|
||||
}
|
||||
57
app/PostTypes/Social.php
Normal file
57
app/PostTypes/Social.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace App\PostTypes;
|
||||
|
||||
class Social
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_action('init', [$this, 'register']);
|
||||
}
|
||||
|
||||
public function register()
|
||||
{
|
||||
$td = 'sage';
|
||||
$postType = 'social';
|
||||
|
||||
register_extended_post_type(
|
||||
$postType,
|
||||
[
|
||||
'menu_position' => 28,
|
||||
'supports' => [
|
||||
'title',
|
||||
'page-attributes',
|
||||
],
|
||||
'menu_icon' => 'dashicons-share',
|
||||
'rewrite' => false,
|
||||
'has_archive' => false,
|
||||
'publicly_queryable' => false,
|
||||
'exclude_from_search' => true,
|
||||
'capability_type' => 'page',
|
||||
'show_in_nav_menus' => false,
|
||||
'admin_cols' => [
|
||||
'social_link' => [
|
||||
'title' => __('Social Link', $td),
|
||||
'meta_key' => 'fontawesome_brands',
|
||||
'function' => function(){
|
||||
$icon = get_field('fontawesome_brands');
|
||||
$url = get_field('url');
|
||||
|
||||
if($icon): ?>
|
||||
|
||||
<a
|
||||
href="<?= $url ?: '#' ?>"
|
||||
class="fa-brands fa-<?= $icon ?>"
|
||||
rel="nofollow noindex"
|
||||
style="font-size: 2em;"
|
||||
></a>
|
||||
|
||||
<?php endif;
|
||||
|
||||
},
|
||||
],
|
||||
],
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
28
app/Providers/ThemeServiceProvider.php
Normal file
28
app/Providers/ThemeServiceProvider.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Roots\Acorn\Sage\SageServiceProvider;
|
||||
|
||||
class ThemeServiceProvider extends SageServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register any application services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
parent::register();
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
parent::boot();
|
||||
}
|
||||
}
|
||||
173
app/Utilities/Colour.php
Normal file
173
app/Utilities/Colour.php
Normal file
@@ -0,0 +1,173 @@
|
||||
<?php
|
||||
|
||||
namespace App\Utilities;
|
||||
|
||||
class Colour
|
||||
{
|
||||
public function name2hex($colour = null, $tint = null)
|
||||
{
|
||||
if(!$colour) return false;
|
||||
|
||||
if($colour == 'black'):
|
||||
$hex = '#000000';
|
||||
elseif($colour == 'grey'):
|
||||
$hex = '#808080';
|
||||
elseif($colour == 'white'):
|
||||
$hex = '#FFFFFF';
|
||||
else:
|
||||
// TODO: replace company_info settings page and lookup function
|
||||
$hex = $this->values()[(string)$colour];
|
||||
endif;
|
||||
|
||||
if($tint):
|
||||
$tints = $this->tints();
|
||||
$hex = $this->adjustBrightness($hex, $tints[$tint]);
|
||||
endif;
|
||||
|
||||
return $hex;
|
||||
}
|
||||
|
||||
public function values()
|
||||
{
|
||||
$values = [];
|
||||
|
||||
if(function_exists('get_field')):
|
||||
$colours = @get_field('badegg_colours', 'option');
|
||||
|
||||
if($colours):
|
||||
foreach($colours as $index => $props):
|
||||
$index = $index + 1;
|
||||
$hex = @$props['hex'];
|
||||
|
||||
if($hex) $values[$this->latinate($index)] = $hex;
|
||||
endforeach;
|
||||
endif;
|
||||
endif;
|
||||
|
||||
$values['white'] = '#FFFFFF';
|
||||
$values['grey'] = '#808080';
|
||||
$values['black'] = '#000000';
|
||||
|
||||
return $values;
|
||||
}
|
||||
|
||||
public function tints()
|
||||
{
|
||||
return [
|
||||
'lightest' => 40,
|
||||
'lighter' => 25,
|
||||
'light' => 10,
|
||||
'0' => 0,
|
||||
'dark' => -10,
|
||||
'darker' => -25,
|
||||
'darkest' => -40,
|
||||
];
|
||||
}
|
||||
|
||||
public function is_dark($colour = '#FFFFF', $tint = null, $override = null)
|
||||
{
|
||||
|
||||
if($override == 'light') return true;
|
||||
if($override == 'dark') return false;
|
||||
|
||||
// https://css-tricks.com/snippets/php/convert-hex-to-rgb/
|
||||
|
||||
if($tint) $colour = $this->adjustBrightness($colour, $this->tints()[$tint]);
|
||||
|
||||
if ( @$colour[0] == '#' ) {
|
||||
$colour = substr( $colour, 1 );
|
||||
}
|
||||
|
||||
if ( strlen( $colour ) == 6 ) {
|
||||
list( $r, $g, $b ) = [
|
||||
$colour[0] . $colour[1],
|
||||
$colour[2] . $colour[3],
|
||||
$colour[4] . $colour[5],
|
||||
];
|
||||
|
||||
} elseif ( strlen( $colour ) == 3 ) {
|
||||
list( $r, $g, $b ) = [
|
||||
$colour[0] . $colour[0],
|
||||
$colour[1] . $colour[1],
|
||||
$colour[2] . $colour[2],
|
||||
];
|
||||
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
$r = hexdec( $r );
|
||||
$g = hexdec( $g );
|
||||
$b = hexdec( $b );
|
||||
// return array( 'red' => $r, 'green' => $g, 'blue' => $b );
|
||||
|
||||
$hsp = sqrt(
|
||||
0.299 * ($r * $r) +
|
||||
0.587 * ($g * $g) +
|
||||
0.114 * ($b * $b)
|
||||
);
|
||||
|
||||
if($hsp > 200) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public function is_light($colour = '#000000', $tint = null)
|
||||
{
|
||||
if($this->is_dark($colour, $tint)) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public function adjustBrightness($hex, $steps)
|
||||
{
|
||||
// Steps should be between -255 and 255. Negative = darker, positive = lighter
|
||||
$steps = max(-255, min(255, $steps));
|
||||
|
||||
// Normalize into a six character long hex string
|
||||
$hex = str_replace('#', '', $hex);
|
||||
if (strlen($hex) == 3) {
|
||||
$hex = str_repeat(substr($hex,0,1), 2).str_repeat(substr($hex,1,1), 2).str_repeat(substr($hex,2,1), 2);
|
||||
}
|
||||
|
||||
// Split into three parts: R, G and B
|
||||
$color_parts = str_split($hex, 2);
|
||||
$return = '#';
|
||||
|
||||
foreach ($color_parts as $color) {
|
||||
$color = hexdec($color); // Convert to decimal
|
||||
$color = max(0,min(255,$color + $steps)); // Adjust color
|
||||
$return .= str_pad(dechex($color), 2, '0', STR_PAD_LEFT); // Make two char hex code
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
public function latinate($x = 0)
|
||||
{
|
||||
$latinate = [
|
||||
1 => 'primary',
|
||||
2 => 'secondary',
|
||||
3 => 'tertiary',
|
||||
4 => 'quaternary',
|
||||
5 => 'quinary',
|
||||
6 => 'senary',
|
||||
7 => 'septenary',
|
||||
8 => 'octonary',
|
||||
9 => 'nonary',
|
||||
10 => 'denary',
|
||||
11 => 'undenary',
|
||||
12 => 'duodenary',
|
||||
];
|
||||
|
||||
if(array_key_exists($x, $latinate)):
|
||||
return $latinate[$x];
|
||||
else:
|
||||
return 0;
|
||||
endif;
|
||||
}
|
||||
}
|
||||
144
app/Utilities/CssClasses.php
Normal file
144
app/Utilities/CssClasses.php
Normal file
@@ -0,0 +1,144 @@
|
||||
<?php
|
||||
|
||||
namespace App\Utilities;
|
||||
|
||||
class CssClasses {
|
||||
public function section($props = [], $name = 'unnamed', $knockout = false)
|
||||
{
|
||||
$defaults = [
|
||||
'padding_top' => null,
|
||||
'padding_bottom' => null,
|
||||
'bg_colour' => null,
|
||||
'bg_tint' => null,
|
||||
'contrast' => null,
|
||||
'bg_image' => null,
|
||||
];
|
||||
|
||||
$props = wp_parse_args($props, $defaults);
|
||||
|
||||
$Colour = new Colour;
|
||||
$hex = $Colour->name2hex($props['bg_colour'], $props['bg_tint']);
|
||||
|
||||
$classes = [
|
||||
'section',
|
||||
'section-' . str_replace('/', '-', $name),
|
||||
];
|
||||
|
||||
if($props['bg_colour'])
|
||||
$classes[] = 'bg-' . $this->colourTint([
|
||||
'colour' => $props['bg_colour'],
|
||||
'tint' => $props['bg_tint'],
|
||||
]);
|
||||
|
||||
if(($props['contrast'] && $knockout))
|
||||
$classes[] = 'knockout';
|
||||
|
||||
if(!$props['padding_top'])
|
||||
$classes[] = 'section-zero-top';
|
||||
|
||||
if(!$props['padding_bottom'])
|
||||
$classes[] = 'section-zero-bottom';
|
||||
|
||||
if($props['bg_image'])
|
||||
$classes[] = "has-bg-image";
|
||||
|
||||
return $classes;
|
||||
}
|
||||
|
||||
public function container($args = [], $bg_props = [])
|
||||
{
|
||||
$args = wp_parse_args($args, [
|
||||
'width' => null,
|
||||
'location' => null,
|
||||
'section' => false,
|
||||
'align' => null,
|
||||
'wysiwyg' => false,
|
||||
]);
|
||||
|
||||
$bg_props = wp_parse_args($bg_props, [
|
||||
'bg_colour' => null,
|
||||
'bg_tint' => null,
|
||||
'contrast' => null,
|
||||
]);
|
||||
|
||||
$Colour = new Colour;
|
||||
$hex = $Colour->name2hex($bg_props['bg_colour'], $bg_props['bg_tint']);
|
||||
|
||||
$classes = [
|
||||
'container',
|
||||
];
|
||||
|
||||
if($args['width'])
|
||||
$classes[] = 'container-' . $args['width'];
|
||||
|
||||
if($args['location'])
|
||||
$classes[] = $args['location'];
|
||||
|
||||
if($args['section'])
|
||||
$classes[] = 'section';
|
||||
|
||||
if(str_contains($args['location'], 'intro'))
|
||||
$classes[] = 'section-zero-top';
|
||||
|
||||
if(str_contains($args['location'], 'footer'))
|
||||
$classes[] = 'section-zero-bottom';
|
||||
|
||||
if($args['wysiwyg'])
|
||||
$classes[] = 'wysiwyg';
|
||||
|
||||
if($args['align'])
|
||||
$classes[] = 'align-' . $args['align'];
|
||||
|
||||
if(($bg_props['contrast']))
|
||||
$classes[] = 'knockout';
|
||||
|
||||
return $classes;
|
||||
}
|
||||
|
||||
public function button($args = [])
|
||||
{
|
||||
$default_args = [
|
||||
'colour' => null,
|
||||
'style' => null,
|
||||
];
|
||||
|
||||
$args = wp_parse_args($args, $default_args);
|
||||
|
||||
$classes = [
|
||||
'button',
|
||||
];
|
||||
|
||||
if($args['colour']) $classes[] = $args['colour'];
|
||||
if($args['style']) $classes[] = $args['style'];
|
||||
|
||||
return $classes;
|
||||
}
|
||||
|
||||
public function colourTint($props = [])
|
||||
{
|
||||
if(@$props['colour']):
|
||||
$colour = $props['colour'];
|
||||
|
||||
if($props['colour'] != 'black' && @$props['tint']):
|
||||
$colour .= '-' . $props['tint'];
|
||||
endif;
|
||||
else:
|
||||
$colour = 'white';
|
||||
endif;
|
||||
|
||||
return $colour;
|
||||
}
|
||||
|
||||
public function is_knockout_block($name = null)
|
||||
{
|
||||
$blacklist = [
|
||||
'badegg/acfdemo',
|
||||
];
|
||||
|
||||
if(in_array($name, $blacklist)):
|
||||
return false;
|
||||
else:
|
||||
return true;
|
||||
endif;
|
||||
}
|
||||
}
|
||||
124
app/Utilities/ImageSrcset.php
Normal file
124
app/Utilities/ImageSrcset.php
Normal file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
namespace App\Utilities;
|
||||
|
||||
class ImageSrcset
|
||||
{
|
||||
public function add($args = [])
|
||||
{
|
||||
$args = wp_parse_args($args, $this->default_args());
|
||||
$multipliers = $this->multipliers();
|
||||
|
||||
if(is_null($args['height'])) $args['height'] = $args['width'];
|
||||
|
||||
|
||||
if($args['sizes'] < 5) $multipliers = array_slice($multipliers, 0, $args['sizes']);
|
||||
|
||||
foreach ( $multipliers as $slug => $scale ):
|
||||
add_image_size (
|
||||
$args['name'] . '-' . $slug,
|
||||
round((int)$args['width'] * $scale),
|
||||
round((int)$args['height'] * $scale),
|
||||
$args['crop']
|
||||
);
|
||||
endforeach;
|
||||
}
|
||||
|
||||
public function default_args()
|
||||
{
|
||||
return [
|
||||
'name' => 'hero',
|
||||
'width' => 1920,
|
||||
'height' => null,
|
||||
'crop' => true,
|
||||
'sizes' => 5,
|
||||
];
|
||||
}
|
||||
|
||||
public function multipliers()
|
||||
{
|
||||
return [
|
||||
'xl' => 1,
|
||||
'lg' => 0.75,
|
||||
'md' => 0.52083333,
|
||||
'sm' => 0.33333333,
|
||||
'xs' => 0.20833333,
|
||||
];
|
||||
}
|
||||
|
||||
public function render($args = [])
|
||||
{
|
||||
global $_wp_additional_image_sizes;
|
||||
|
||||
$default_args = [
|
||||
'name' => 'hero',
|
||||
'image' => null,
|
||||
'lazy' => true,
|
||||
'sizes' => 5,
|
||||
'class' => null,
|
||||
];
|
||||
|
||||
$args = wp_parse_args($args, $default_args);
|
||||
$name = $args['name'];
|
||||
$image = ($args['image']) ? $args['image'] : get_post_thumbnail_id();
|
||||
|
||||
if(!$image) return false;
|
||||
|
||||
$properties = @$_wp_additional_image_sizes[$name . '-xl'];
|
||||
$width = @$properties['width'];
|
||||
$height = @$properties['height'];
|
||||
|
||||
$sizes = [
|
||||
'xl' => 1,
|
||||
'lg' => 0.75,
|
||||
'md' => 0.52083333,
|
||||
'sm' => 0.33333333,
|
||||
'xs' => 0.20833333,
|
||||
];
|
||||
|
||||
if($args['sizes'] < 5) $sizes = array_slice($sizes, 0, $args['sizes']);
|
||||
|
||||
$class = $name . '-image';
|
||||
if($args['class']) $class .= ' ' . $args['class'];
|
||||
|
||||
ob_start();
|
||||
|
||||
$full = wp_get_attachment_image_src($image, $name . '-xl');
|
||||
$lazy = wp_get_attachment_image_src($image, 'lazy');
|
||||
$alt = get_post_meta( $image, '_wp_attachment_image_alt', true );
|
||||
|
||||
$srcsets = [];
|
||||
foreach($sizes as $size => $multiplier) {
|
||||
$file = wp_get_attachment_image_src($image, $name . '-' . $size);
|
||||
$srcsets[] = $file[0] . ' ' . $file[1] . 'w';
|
||||
}
|
||||
|
||||
$atts = [
|
||||
'class' => $class,
|
||||
'src' => $full[0],
|
||||
'srcset' => implode(', ', $srcsets),
|
||||
'width' => $width,
|
||||
'height' => $height,
|
||||
'alt' => $alt,
|
||||
];
|
||||
|
||||
if($args['lazy']):
|
||||
$atts['class'] .= ' lazy';
|
||||
$atts['src'] = $lazy[0];
|
||||
$atts['srcset'] = null;
|
||||
$atts['data-src'] = $full[0];
|
||||
$atts['data-srcset'] = implode(', ', $srcsets);
|
||||
endif;
|
||||
|
||||
?>
|
||||
|
||||
<img
|
||||
<?php foreach($atts as $att => $value):
|
||||
if($value) echo $att . '="' . $value . '" ';
|
||||
endforeach; ?>
|
||||
/>
|
||||
|
||||
<?php
|
||||
return ob_get_clean();
|
||||
}
|
||||
}
|
||||
105
app/Utilities/RestAPI.php
Normal file
105
app/Utilities/RestAPI.php
Normal file
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
|
||||
namespace App\Utilities;
|
||||
use ourcodeworld\NameThatColor\ColorInterpreter as NameThatColor;
|
||||
|
||||
class RestAPI
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_filter( 'wp_prepare_attachment_for_js', [$this, 'image_sizes'], 10, 3 );
|
||||
add_action( 'rest_api_init', [$this, 'blocks']);
|
||||
}
|
||||
|
||||
public function image_sizes( $response, $attachment, $meta )
|
||||
{
|
||||
if ( empty( $response['sizes'] ) || empty( $meta['sizes'] ) ) {
|
||||
return $response;
|
||||
}
|
||||
|
||||
$custom_sizes = [ 'hero', 'lazy' ];
|
||||
|
||||
foreach ( $custom_sizes as $size ) {
|
||||
if ( ! empty( $meta['sizes'][ $size ] ) ) {
|
||||
$response['sizes'][ $size ] = [
|
||||
'url' => wp_get_attachment_image_url( $attachment->ID, $size ),
|
||||
'width' => $meta['sizes'][ $size ]['width'],
|
||||
'height' => $meta['sizes'][ $size ]['height'],
|
||||
'orientation' =>
|
||||
$meta['sizes'][ $size ]['height'] > $meta['sizes'][ $size ]['width']
|
||||
? 'portrait'
|
||||
: 'landscape',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function blocks( )
|
||||
{
|
||||
$restBase = 'badegg/v1';
|
||||
|
||||
register_rest_route($restBase, '/blocks/config', [
|
||||
'methods' => 'GET',
|
||||
'callback' => [ $this, 'config'],
|
||||
'permission_callback' => function(){
|
||||
return true;
|
||||
},
|
||||
]);
|
||||
}
|
||||
|
||||
public function config()
|
||||
{
|
||||
return rest_ensure_response([
|
||||
'container' => $this->containerWidths(),
|
||||
'colours' => $this->colours(),
|
||||
'tints' => $this->tints(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function containerWidths()
|
||||
{
|
||||
return [
|
||||
[ 'label' => __('Auto', 'badegg'), 'value' => 0 ],
|
||||
[ 'label' => __('Narrow', 'badegg'), 'value' => 'narrow' ],
|
||||
[ 'label' => __('Small', 'badegg'), 'value' => 'small' ],
|
||||
[ 'label' => __('Medium', 'badegg'), 'value' => 'medium' ],
|
||||
[ 'label' => __('Large', 'badegg'), 'value' => 'large' ],
|
||||
[ 'label' => __('Edge to edge', 'badegg'), 'value' => 'full' ],
|
||||
];
|
||||
}
|
||||
|
||||
public function colours()
|
||||
{
|
||||
$colour = new Colour;
|
||||
$NameThatColour = new NameThatColor;
|
||||
|
||||
$palette = [];
|
||||
|
||||
$colours = $colour->values();
|
||||
|
||||
foreach($colours as $slug => $hex) {
|
||||
$palette[] = [
|
||||
'name' => esc_html__(@$NameThatColour->name($hex)['name'], 'badegg'),
|
||||
'slug' => $slug,
|
||||
'color' => $hex,
|
||||
];
|
||||
}
|
||||
|
||||
return $palette;
|
||||
}
|
||||
|
||||
public function tints()
|
||||
{
|
||||
return [
|
||||
['label' => __('Lightest', 'badegg'), 'value' => 'lightest'],
|
||||
['label' => __('Lighter', 'badegg'), 'value' => 'lighter' ],
|
||||
['label' => __('Light', 'badegg'), 'value' => 'light' ],
|
||||
['label' => __('None', 'badegg'), 'value' => 0 ],
|
||||
['label' => __('Dark', 'badegg'), 'value' => 'dark' ],
|
||||
['label' => __('Darker', 'badegg'), 'value' => 'darker' ],
|
||||
['label' => __('Darkest', 'badegg'), 'value' => 'darkest' ],
|
||||
];
|
||||
}
|
||||
}
|
||||
39
app/Utilities/VideoSrcset.php
Normal file
39
app/Utilities/VideoSrcset.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Utilities;
|
||||
|
||||
class VideoSrcset
|
||||
{
|
||||
public function sizes($video_srcset = [])
|
||||
{
|
||||
if(empty($video_srcset)) return false;
|
||||
|
||||
$sizes = [];
|
||||
|
||||
foreach($video_srcset as $size => $video):
|
||||
if($video):
|
||||
$sizes[$size] = $video['width'];
|
||||
endif;
|
||||
endforeach;
|
||||
|
||||
if(!empty($sizes)):
|
||||
return json_encode($sizes);
|
||||
else:
|
||||
return false;
|
||||
endif;
|
||||
}
|
||||
|
||||
public function smallest($video_srcset = [])
|
||||
{
|
||||
if(empty($video_srcset)) return false;
|
||||
|
||||
$smallest = null;
|
||||
|
||||
foreach($video_srcset as $size => $video):
|
||||
if($smallest) continue;
|
||||
if($video) $smallest = $size;
|
||||
endforeach;
|
||||
|
||||
return $smallest;
|
||||
}
|
||||
}
|
||||
36
app/View/Composers/App.php
Normal file
36
app/View/Composers/App.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Composers;
|
||||
|
||||
use Roots\Acorn\View\Composer;
|
||||
use App\Utilities;
|
||||
|
||||
class App extends Composer
|
||||
{
|
||||
/**
|
||||
* List of views served by this composer.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $views = [
|
||||
'*',
|
||||
];
|
||||
|
||||
/**
|
||||
* Retrieve the site name.
|
||||
*/
|
||||
public function siteName(): string
|
||||
{
|
||||
return get_bloginfo('name', 'display');
|
||||
}
|
||||
|
||||
public function with()
|
||||
{
|
||||
return [
|
||||
'Colour' => new Utilities\Colour,
|
||||
'VideoSrcset' => new Utilities\VideoSrcset,
|
||||
'ImageSrcset' => new Utilities\ImageSrcset,
|
||||
'siteName' => $this->siteName(),
|
||||
];
|
||||
}
|
||||
}
|
||||
31
app/View/Composers/Blocks.php
Normal file
31
app/View/Composers/Blocks.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Composers;
|
||||
|
||||
use Roots\Acorn\View\Composer;
|
||||
use App\Utilities;
|
||||
|
||||
class Blocks extends Composer
|
||||
{
|
||||
/**
|
||||
* List of views served by this composer.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $views = [
|
||||
'layouts.block-acf',
|
||||
'partials.block-*',
|
||||
];
|
||||
|
||||
/**
|
||||
* Data to be passed to view before rendering.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function with()
|
||||
{
|
||||
return [
|
||||
'CssClasses' => new Utilities\CssClasses,
|
||||
];
|
||||
}
|
||||
}
|
||||
90
app/View/Composers/Comments.php
Normal file
90
app/View/Composers/Comments.php
Normal file
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Composers;
|
||||
|
||||
use Roots\Acorn\View\Composer;
|
||||
|
||||
class Comments extends Composer
|
||||
{
|
||||
/**
|
||||
* List of views served by this composer.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $views = [
|
||||
'partials.comments',
|
||||
];
|
||||
|
||||
/**
|
||||
* The comment title.
|
||||
*/
|
||||
public function title(): string
|
||||
{
|
||||
return sprintf(
|
||||
/* translators: %1$s is replaced with the number of comments and %2$s with the post title */
|
||||
_nx('%1$s response to “%2$s”', '%1$s responses to “%2$s”', get_comments_number(), 'comments title', 'sage'),
|
||||
get_comments_number() === 1 ? _x('One', 'comments title', 'sage') : number_format_i18n(get_comments_number()),
|
||||
get_the_title()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the comments.
|
||||
*/
|
||||
public function responses(): ?string
|
||||
{
|
||||
if (! have_comments()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return wp_list_comments([
|
||||
'style' => 'ol',
|
||||
'short_ping' => true,
|
||||
'echo' => false,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* The previous comments link.
|
||||
*/
|
||||
public function previous(): ?string
|
||||
{
|
||||
if (! get_previous_comments_link()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return get_previous_comments_link(
|
||||
__('← Older comments', 'sage')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* The next comments link.
|
||||
*/
|
||||
public function next(): ?string
|
||||
{
|
||||
if (! get_next_comments_link()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return get_next_comments_link(
|
||||
__('Newer comments →', 'sage')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the comments are paginated.
|
||||
*/
|
||||
public function paginated(): bool
|
||||
{
|
||||
return get_comment_pages_count() > 1 && get_option('page_comments');
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the comments are closed.
|
||||
*/
|
||||
public function closed(): bool
|
||||
{
|
||||
return ! comments_open() && get_comments_number() != '0' && post_type_supports(get_post_type(), 'comments');
|
||||
}
|
||||
}
|
||||
67
app/View/Composers/Post.php
Normal file
67
app/View/Composers/Post.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Composers;
|
||||
|
||||
use Roots\Acorn\View\Composer;
|
||||
|
||||
class Post extends Composer
|
||||
{
|
||||
/**
|
||||
* List of views served by this composer.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $views = [
|
||||
'partials.page-header',
|
||||
'partials.content',
|
||||
'partials.content-*',
|
||||
];
|
||||
|
||||
/**
|
||||
* Retrieve the post title.
|
||||
*/
|
||||
public function title(): string
|
||||
{
|
||||
if ($this->view->name() !== 'partials.page-header') {
|
||||
return get_the_title();
|
||||
}
|
||||
|
||||
if (is_home()) {
|
||||
if ($home = get_option('page_for_posts', true)) {
|
||||
return get_the_title($home);
|
||||
}
|
||||
|
||||
return __('Latest Posts', 'sage');
|
||||
}
|
||||
|
||||
if (is_archive()) {
|
||||
return get_the_archive_title();
|
||||
}
|
||||
|
||||
if (is_search()) {
|
||||
return sprintf(
|
||||
/* translators: %s is replaced with the search query */
|
||||
__('Search Results for %s', 'sage'),
|
||||
get_search_query()
|
||||
);
|
||||
}
|
||||
|
||||
if (is_404()) {
|
||||
return __('Not Found', 'sage');
|
||||
}
|
||||
|
||||
return get_the_title();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the pagination links.
|
||||
*/
|
||||
public function pagination(): string
|
||||
{
|
||||
return wp_link_pages([
|
||||
'echo' => 0,
|
||||
'before' => '<p>'.__('Pages:', 'sage'),
|
||||
'after' => '</p>',
|
||||
]);
|
||||
}
|
||||
}
|
||||
35
app/View/Composers/Socials.php
Normal file
35
app/View/Composers/Socials.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Composers;
|
||||
|
||||
use Roots\Acorn\View\Composer;
|
||||
|
||||
class Socials extends Composer
|
||||
{
|
||||
/**
|
||||
* List of views served by this composer.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $views = [
|
||||
'components.socials',
|
||||
];
|
||||
|
||||
/**
|
||||
* Data to be passed to view before rendering.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function with()
|
||||
{
|
||||
return [
|
||||
'socials' => get_posts([
|
||||
'post_type' => 'social',
|
||||
'order' => 'ASC',
|
||||
'orderby' => 'menu_order name',
|
||||
'posts_per_page' => -1,
|
||||
'fields' => 'ids',
|
||||
]),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
/**
|
||||
* Theme customizer
|
||||
*/
|
||||
add_action('customize_register', function (\WP_Customize_Manager $wp_customize) {
|
||||
// Add postMessage support
|
||||
$wp_customize->get_setting('blogname')->transport = 'postMessage';
|
||||
$wp_customize->selective_refresh->add_partial('blogname', [
|
||||
'selector' => '.brand',
|
||||
'render_callback' => function () {
|
||||
bloginfo('name');
|
||||
}
|
||||
]);
|
||||
});
|
||||
|
||||
/**
|
||||
* Customizer JS
|
||||
*/
|
||||
add_action('customize_preview_init', function () {
|
||||
wp_enqueue_script('sage/customizer.js', asset_path('scripts/customizer.js'), ['customize-preview'], null, true);
|
||||
});
|
||||
321
app/blocks.php
Normal file
321
app/blocks.php
Normal file
@@ -0,0 +1,321 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Theme Blocks.
|
||||
*/
|
||||
|
||||
namespace App\Blocks;
|
||||
|
||||
/**
|
||||
* Disable block styles in frontend
|
||||
*/
|
||||
add_filter( 'should_load_separate_core_block_assets', '__return_false', 99 );
|
||||
add_filter( 'wp_img_tag_add_auto_sizes', '__return_false' );
|
||||
add_action( 'init', __NAMESPACE__ . '\\remove_action_block_inline' );
|
||||
add_action( 'wp_enqueue_scripts', __NAMESPACE__ . '\\disable_frontend_inline_css', 20 );
|
||||
add_action( 'template_redirect', __NAMESPACE__ . '\\delete_block_support_inline_css' );
|
||||
|
||||
/**
|
||||
* block editor back end tweaks
|
||||
* - Disable all core blocks except what we need as inner blocks
|
||||
* - resources/js/editor.js handles hiding the inner blocks at the top level
|
||||
*/
|
||||
add_action( 'allowed_block_types_all', __NAMESPACE__ . '\\list_allowed', 100, 2 );
|
||||
add_action( 'admin_init', __NAMESPACE__ . '\\admin_block_cleanup' );
|
||||
add_filter( 'block_type_metadata', __NAMESPACE__ . '\\unset_core_supports' );
|
||||
|
||||
/**
|
||||
* Custom blocks
|
||||
*/
|
||||
add_filter( 'block_categories_all' , __NAMESPACE__ . '\\add_categories' );
|
||||
add_filter( 'badegg_block_types_allow', __NAMESPACE__ . '\\allowed_list' );
|
||||
add_action( 'init', __NAMESPACE__ . '\\auto_register' );
|
||||
|
||||
/**
|
||||
* Core Blocks
|
||||
*/
|
||||
add_filter( 'render_block_core/details', __NAMESPACE__ . '\\core_details_modified', 10, 2 );
|
||||
add_filter( 'render_block_core/image', __NAMESPACE__ . '\\core_image_modified', 10, 2 );
|
||||
|
||||
|
||||
function remove_action_block_inline()
|
||||
{
|
||||
remove_action( 'wp_enqueue_scripts', 'wp_enqueue_global_styles' );
|
||||
remove_action( 'wp_enqueue_scripts', 'wp_enqueue_block_support_styles');
|
||||
remove_action( 'wp_footer', 'wp_enqueue_global_styles', 1 );
|
||||
remove_action( 'wp_body_open', 'wp_global_styles_render_svg_filters' );
|
||||
}
|
||||
|
||||
function admin_block_cleanup()
|
||||
{
|
||||
remove_action( 'enqueue_block_editor_assets', 'wp_enqueue_editor_block_directory_assets' );
|
||||
}
|
||||
|
||||
function disable_frontend_inline_css()
|
||||
{
|
||||
wp_dequeue_style( 'wp-block-library' );
|
||||
wp_dequeue_style( 'wp-block-library-theme' );
|
||||
wp_dequeue_style( 'classic-theme-styles' );
|
||||
}
|
||||
|
||||
function delete_block_support_inline_css ()
|
||||
{
|
||||
ob_start( function ( $html ) {
|
||||
return preg_replace(
|
||||
'#<style id=[\'"]core-block-supports-inline-css[\'"][^>]*>.*?</style>#s',
|
||||
'',
|
||||
$html
|
||||
);
|
||||
} );
|
||||
}
|
||||
|
||||
function unset_core_supports($metadata){
|
||||
$name = $metadata['name'];
|
||||
|
||||
if (str_starts_with($name, 'core/') ) {
|
||||
unset($metadata['supports']['color']);
|
||||
unset($metadata['supports']['typography']);
|
||||
unset($metadata['supports']['border']);
|
||||
}
|
||||
|
||||
return $metadata;
|
||||
}
|
||||
|
||||
|
||||
function allowed_list($allowed){
|
||||
return array_merge($allowed, [
|
||||
// 'core/categories',
|
||||
]);
|
||||
}
|
||||
|
||||
function add_categories( $categories ) {
|
||||
|
||||
// Adding a new category.
|
||||
$categories = array_merge([
|
||||
[
|
||||
'slug' => 'badegg',
|
||||
'title' => __('Provided by Bad Egg Digital'),
|
||||
],
|
||||
], $categories);
|
||||
|
||||
return $categories;
|
||||
}
|
||||
|
||||
function auto_register() {
|
||||
$blocks = glob(get_theme_file_path('resources/views/blocks/*/block.json'));
|
||||
|
||||
foreach ($blocks as $block_json) {
|
||||
$json = json_decode(file_get_contents($block_json));
|
||||
$slug = basename(dirname($block_json));
|
||||
$blockPath = "resources/views/blocks/{$slug}";
|
||||
|
||||
$viewScript = "{$blockPath}/view.js";
|
||||
$script = "{$blockPath}/script.js";
|
||||
$editorCSS = "{$blockPath}/editor.scss";
|
||||
$style = "{$blockPath}/style.scss";
|
||||
|
||||
// editorStyle
|
||||
if (file_exists(get_theme_file_path($editorCSS))) {
|
||||
wp_register_style(
|
||||
"{$slug}-editor-style",
|
||||
\Vite::asset($editorCSS),
|
||||
[],
|
||||
null
|
||||
);
|
||||
}
|
||||
|
||||
// script
|
||||
if(file_exists(get_theme_file_path($script))) {
|
||||
wp_register_script(
|
||||
"{$slug}-script",
|
||||
\Vite::asset($script),
|
||||
[],
|
||||
null,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
// style
|
||||
if (file_exists(get_theme_file_path($style))) {
|
||||
wp_register_style(
|
||||
"{$slug}-style",
|
||||
\Vite::asset($style),
|
||||
[],
|
||||
null
|
||||
);
|
||||
}
|
||||
|
||||
// viewScript
|
||||
if(file_exists(get_theme_file_path($viewScript))) {
|
||||
wp_register_script(
|
||||
"{$slug}-view-script",
|
||||
\Vite::asset($viewScript),
|
||||
[],
|
||||
null,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
$props = [
|
||||
'editor_style' => "{$slug}-editor-style",
|
||||
'style' => "{$slug}-style",
|
||||
'script' => "{$slug}-script",
|
||||
'view_script' => "{$slug}-view-script",
|
||||
'attributes' => attributes(),
|
||||
];
|
||||
|
||||
if(!property_exists($json, 'acf') && \Roots\view()->exists("blocks.{$slug}.render")) {
|
||||
$props['render_callback'] = function ($attributes, $content, $block) {
|
||||
$slug = basename($block->name);
|
||||
|
||||
return \Roots\view("blocks.{$slug}.render", [
|
||||
'attributes' => $attributes,
|
||||
'content' => $content,
|
||||
'block' => $block,
|
||||
]);
|
||||
};
|
||||
}
|
||||
|
||||
register_block_type($block_json, $props);
|
||||
}
|
||||
}
|
||||
|
||||
function list_inner()
|
||||
{
|
||||
$file = file_get_contents(get_theme_file_path("resources/json/block-core-whitelist.json"));
|
||||
$json = json_decode($file);
|
||||
|
||||
return $json;
|
||||
}
|
||||
|
||||
function attributes()
|
||||
{
|
||||
$file = file_get_contents(get_theme_file_path("resources/json/block-attributes.json"));
|
||||
$json = json_decode($file, true);
|
||||
|
||||
return $json;
|
||||
}
|
||||
|
||||
function list_all()
|
||||
{
|
||||
$blocks = array_map(function($block) {
|
||||
$name = $block->name;
|
||||
|
||||
return $block->name;
|
||||
|
||||
}, \WP_Block_Type_Registry::get_instance()->get_all_registered());
|
||||
|
||||
return array_values($blocks);
|
||||
}
|
||||
|
||||
function list_custom()
|
||||
{
|
||||
return array_filter(list_all(), function($value){
|
||||
if (str_starts_with($value, 'acf/') || str_starts_with($value, 'badegg/')) return $value;
|
||||
});
|
||||
}
|
||||
|
||||
function list_allowed()
|
||||
{
|
||||
$add_allowed = [];
|
||||
|
||||
return array_merge(
|
||||
list_custom(),
|
||||
list_inner(),
|
||||
apply_filters('badegg_block_types_allow', $add_allowed),
|
||||
);
|
||||
}
|
||||
|
||||
function render_acf($block, $content = '', $is_preview = false, $post_id = 0, $wp_block = false, $context = false) {
|
||||
$slug = basename($block['name']);
|
||||
$block['slug'] = $slug;
|
||||
|
||||
$blade = \Roots\view(
|
||||
"blocks.{$slug}.render",
|
||||
[
|
||||
'block' => $block,
|
||||
'content' => $content,
|
||||
'is_preview' => $is_preview,
|
||||
'post_id' => $post_id,
|
||||
'wp_block' => $wp_block,
|
||||
'context' => $context,
|
||||
],
|
||||
);
|
||||
|
||||
if($blade) {
|
||||
echo $blade;
|
||||
} else {
|
||||
ob_start(); ?>
|
||||
|
||||
<section class="section bg-error knockout">
|
||||
<div class="container container-small align-centre wysiwyg">
|
||||
<h2>Missing Blade Template</h2>
|
||||
<p>(resources/views/blocks/<?= $slug ?>/render.blade.php)</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<?php echo ob_get_clean();
|
||||
}
|
||||
}
|
||||
|
||||
function core_details_modified($content, $block)
|
||||
{
|
||||
$content = str_replace('</summary>', '</summary><div class="wp-block-details__inner inner inner-zero-x wysiwyg">', $content);
|
||||
$content = str_replace('</details>', '</div></details>', $content);
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
function core_image_modified($content, $block)
|
||||
{
|
||||
$dom = new \DomDocument();
|
||||
$dom->strictErrorChecking = false;
|
||||
@$dom->loadHTML($content);
|
||||
|
||||
$images = @$dom->getElementsByTagName('img');
|
||||
$figures = @$dom->getElementsByTagName('figure');
|
||||
|
||||
if(!$figures) return $content;
|
||||
|
||||
// get image data
|
||||
$imageID = @$block['attrs']['id'];
|
||||
$lazy = wp_get_attachment_image_src($imageID, 'lazy');
|
||||
$large = wp_get_attachment_image_src($imageID, '2048x2048');
|
||||
|
||||
// create lightbox link node
|
||||
$link = $dom->createElement('a');
|
||||
$link->setAttribute('class', 'badegg-lightbox');
|
||||
$link->setAttribute('target', '_blank');
|
||||
$link->setAttribute('role', 'button');
|
||||
$link->setAttribute('tabindex', '0');
|
||||
$link->setAttribute('aria-label', __('expand image', 'badegg'));
|
||||
|
||||
foreach($images as $image) {
|
||||
// define new image attributes
|
||||
$src = $image->getAttribute('src');
|
||||
$srcset = $image->getAttribute('srcset');
|
||||
$class = $image->getAttribute('class');
|
||||
|
||||
// set image attributes
|
||||
$image->setAttribute('src', $lazy[0]);
|
||||
$image->setAttribute('srcset', '');
|
||||
$image->setAttribute('data-src', $src);
|
||||
$image->setAttribute('data-srcset', $srcset);
|
||||
$image->setAttribute('class', $class . ' lazy');
|
||||
|
||||
// clone lightbox link
|
||||
$linkClone = $link->cloneNode();
|
||||
|
||||
// set lightbox link attributes
|
||||
$linkClone->setAttribute('href', $large[0]);
|
||||
|
||||
// replace image with lightbox link
|
||||
$image->parentNode->replaceChild($linkClone, $image);
|
||||
|
||||
// append original image to lightbox link
|
||||
$linkClone->appendChild($image);
|
||||
}
|
||||
|
||||
return $dom->saveHTML($figures[0]);
|
||||
|
||||
}
|
||||
@@ -1,70 +1,16 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Theme filters.
|
||||
*/
|
||||
|
||||
namespace App;
|
||||
|
||||
/**
|
||||
* Add <body> classes
|
||||
*/
|
||||
add_filter('body_class', function (array $classes) {
|
||||
/** Add page slug if it doesn't exist */
|
||||
if (is_single() || is_page() && !is_front_page()) {
|
||||
if (!in_array(basename(get_permalink()), $classes)) {
|
||||
$classes[] = basename(get_permalink());
|
||||
}
|
||||
}
|
||||
|
||||
/** Add class if sidebar is active */
|
||||
if (display_sidebar()) {
|
||||
$classes[] = 'sidebar-primary';
|
||||
}
|
||||
|
||||
/** Clean up class names for custom templates */
|
||||
$classes = array_map(function ($class) {
|
||||
return preg_replace(['/-blade(-php)?$/', '/^page-template-views/'], '', $class);
|
||||
}, $classes);
|
||||
|
||||
return array_filter($classes);
|
||||
});
|
||||
|
||||
/**
|
||||
* Add "… Continued" to the excerpt
|
||||
* Add "… Continued" to the excerpt.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
add_filter('excerpt_more', function () {
|
||||
return ' … <a href="' . get_permalink() . '">' . __('Continued', 'sage') . '</a>';
|
||||
});
|
||||
|
||||
/**
|
||||
* Template Hierarchy should search for .blade.php files
|
||||
*/
|
||||
collect([
|
||||
'index', '404', 'archive', 'author', 'category', 'tag', 'taxonomy', 'date', 'home',
|
||||
'frontpage', 'page', 'paged', 'search', 'single', 'singular', 'attachment'
|
||||
])->map(function ($type) {
|
||||
add_filter("{$type}_template_hierarchy", __NAMESPACE__.'\\filter_templates');
|
||||
});
|
||||
|
||||
/**
|
||||
* Render page using Blade
|
||||
*/
|
||||
add_filter('template_include', function ($template) {
|
||||
$data = collect(get_body_class())->reduce(function ($data, $class) use ($template) {
|
||||
return apply_filters("sage/template/{$class}/data", $data, $template);
|
||||
}, []);
|
||||
if ($template) {
|
||||
echo template($template, $data);
|
||||
return get_stylesheet_directory().'/index.php';
|
||||
}
|
||||
return $template;
|
||||
}, PHP_INT_MAX);
|
||||
|
||||
/**
|
||||
* Tell WordPress how to find the compiled path of comments.blade.php
|
||||
*/
|
||||
add_filter('comments_template', function ($comments_template) {
|
||||
$comments_template = str_replace(
|
||||
[get_stylesheet_directory(), get_template_directory()],
|
||||
'',
|
||||
$comments_template
|
||||
);
|
||||
return template_path(locate_template(["views/{$comments_template}", $comments_template]) ?: $comments_template);
|
||||
return sprintf(' … <a href="%s">%s</a>', get_permalink(), __('Continued', 'sage'));
|
||||
});
|
||||
|
||||
160
app/helpers.php
160
app/helpers.php
@@ -1,160 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Roots\Sage\Container;
|
||||
|
||||
/**
|
||||
* Get the sage container.
|
||||
*
|
||||
* @param string $abstract
|
||||
* @param array $parameters
|
||||
* @param Container $container
|
||||
* @return Container|mixed
|
||||
*/
|
||||
function sage($abstract = null, $parameters = [], Container $container = null)
|
||||
{
|
||||
$container = $container ?: Container::getInstance();
|
||||
if (!$abstract) {
|
||||
return $container;
|
||||
}
|
||||
return $container->bound($abstract)
|
||||
? $container->makeWith($abstract, $parameters)
|
||||
: $container->makeWith("sage.{$abstract}", $parameters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get / set the specified configuration value.
|
||||
*
|
||||
* If an array is passed as the key, we will assume you want to set an array of values.
|
||||
*
|
||||
* @param array|string $key
|
||||
* @param mixed $default
|
||||
* @return mixed|\Roots\Sage\Config
|
||||
* @copyright Taylor Otwell
|
||||
* @link https://github.com/laravel/framework/blob/c0970285/src/Illuminate/Foundation/helpers.php#L254-L265
|
||||
*/
|
||||
function config($key = null, $default = null)
|
||||
{
|
||||
if (is_null($key)) {
|
||||
return sage('config');
|
||||
}
|
||||
if (is_array($key)) {
|
||||
return sage('config')->set($key);
|
||||
}
|
||||
return sage('config')->get($key, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $file
|
||||
* @param array $data
|
||||
* @return string
|
||||
*/
|
||||
function template($file, $data = [])
|
||||
{
|
||||
return sage('blade')->render($file, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve path to a compiled blade view
|
||||
* @param $file
|
||||
* @param array $data
|
||||
* @return string
|
||||
*/
|
||||
function template_path($file, $data = [])
|
||||
{
|
||||
return sage('blade')->compiledPath($file, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $asset
|
||||
* @return string
|
||||
*/
|
||||
function asset_path($asset)
|
||||
{
|
||||
return sage('assets')->getUri($asset);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|string[] $templates Possible template files
|
||||
* @return array
|
||||
*/
|
||||
function filter_templates($templates)
|
||||
{
|
||||
$paths = apply_filters('sage/filter_templates/paths', [
|
||||
'views',
|
||||
'resources/views'
|
||||
]);
|
||||
$paths_pattern = "#^(" . implode('|', $paths) . ")/#";
|
||||
|
||||
return collect($templates)
|
||||
->map(function ($template) use ($paths_pattern) {
|
||||
/** Remove .blade.php/.blade/.php from template names */
|
||||
$template = preg_replace('#\.(blade\.?)?(php)?$#', '', ltrim($template));
|
||||
|
||||
/** Remove partial $paths from the beginning of template names */
|
||||
if (strpos($template, '/')) {
|
||||
$template = preg_replace($paths_pattern, '', $template);
|
||||
}
|
||||
|
||||
return $template;
|
||||
})
|
||||
->flatMap(function ($template) use ($paths) {
|
||||
return collect($paths)
|
||||
->flatMap(function ($path) use ($template) {
|
||||
return [
|
||||
"{$path}/{$template}.blade.php",
|
||||
"{$path}/{$template}.php",
|
||||
"{$template}.blade.php",
|
||||
"{$template}.php",
|
||||
];
|
||||
});
|
||||
})
|
||||
->filter()
|
||||
->unique()
|
||||
->all();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|string[] $templates Relative path to possible template files
|
||||
* @return string Location of the template
|
||||
*/
|
||||
function locate_template($templates)
|
||||
{
|
||||
return \locate_template(filter_templates($templates));
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether to show the sidebar
|
||||
* @return bool
|
||||
*/
|
||||
function display_sidebar()
|
||||
{
|
||||
static $display;
|
||||
isset($display) || $display = apply_filters('sage/display_sidebar', false);
|
||||
return $display;
|
||||
}
|
||||
|
||||
/**
|
||||
* Page titles
|
||||
* @return string
|
||||
*/
|
||||
function title()
|
||||
{
|
||||
if (is_home()) {
|
||||
if ($home = get_option('page_for_posts', true)) {
|
||||
return get_the_title($home);
|
||||
}
|
||||
return __('Latest Posts', 'sage');
|
||||
}
|
||||
if (is_archive()) {
|
||||
return get_the_archive_title();
|
||||
}
|
||||
if (is_search()) {
|
||||
return sprintf(__('Search Results for %s', 'sage'), get_search_query());
|
||||
}
|
||||
if (is_404()) {
|
||||
return __('Not Found', 'sage');
|
||||
}
|
||||
return get_the_title();
|
||||
}
|
||||
208
app/setup.php
208
app/setup.php
@@ -1,128 +1,180 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Theme setup.
|
||||
*/
|
||||
|
||||
namespace App;
|
||||
|
||||
use Roots\Sage\Container;
|
||||
use Roots\Sage\Assets\JsonManifest;
|
||||
use Roots\Sage\Template\Blade;
|
||||
use Roots\Sage\Template\BladeProvider;
|
||||
use Illuminate\Support\Facades\Vite;
|
||||
|
||||
/**
|
||||
* Theme assets
|
||||
* Inject styles into the block editor.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
add_action('wp_enqueue_scripts', function () {
|
||||
wp_enqueue_style('sage/main.css', asset_path('styles/main.css'), false, null);
|
||||
wp_enqueue_script('sage/main.js', asset_path('scripts/main.js'), ['jquery'], null, true);
|
||||
}, 100);
|
||||
add_filter('block_editor_settings_all', function ($settings) {
|
||||
$style = Vite::asset('resources/css/editor.scss');
|
||||
|
||||
$settings['styles'][] = [
|
||||
'css' => "@import url('{$style}')",
|
||||
];
|
||||
|
||||
return $settings;
|
||||
});
|
||||
|
||||
/**
|
||||
* Theme setup
|
||||
* Inject scripts into the block editor.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
add_filter('admin_head', function () {
|
||||
if (! get_current_screen()?->is_block_editor()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$dependencies = json_decode(Vite::content('editor.deps.json'));
|
||||
|
||||
foreach ($dependencies as $dependency) {
|
||||
if (! wp_script_is($dependency)) {
|
||||
wp_enqueue_script($dependency);
|
||||
}
|
||||
}
|
||||
|
||||
echo Vite::withEntryPoints([
|
||||
'resources/js/editor.js',
|
||||
])->toHtml();
|
||||
});
|
||||
|
||||
/**
|
||||
* Use the generated theme.json file.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
add_filter('theme_file_path', function ($path, $file) {
|
||||
return $file === 'theme.json'
|
||||
? public_path('build/assets/theme.json')
|
||||
: $path;
|
||||
}, 10, 2);
|
||||
|
||||
/**
|
||||
* Register the initial theme setup.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
add_action('after_setup_theme', function () {
|
||||
/**
|
||||
* Enable features from Soil when plugin is activated
|
||||
* @link https://roots.io/plugins/soil/
|
||||
* Disable full-site editing support.
|
||||
*
|
||||
* @link https://wptavern.com/gutenberg-10-5-embeds-pdfs-adds-verse-block-color-options-and-introduces-new-patterns
|
||||
*/
|
||||
add_theme_support('soil-clean-up');
|
||||
add_theme_support('soil-jquery-cdn');
|
||||
add_theme_support('soil-nav-walker');
|
||||
add_theme_support('soil-nice-search');
|
||||
add_theme_support('soil-relative-urls');
|
||||
remove_theme_support('block-templates');
|
||||
|
||||
/**
|
||||
* Enable plugins to manage the document title
|
||||
* Register the navigation menus.
|
||||
*
|
||||
* @link https://developer.wordpress.org/reference/functions/register_nav_menus/
|
||||
*/
|
||||
register_nav_menus([
|
||||
'primary_navigation' => __('Primary Navigation', 'sage'),
|
||||
]);
|
||||
|
||||
/**
|
||||
* Disable the default block patterns.
|
||||
*
|
||||
* @link https://developer.wordpress.org/block-editor/developers/themes/theme-support/#disabling-the-default-block-patterns
|
||||
*/
|
||||
remove_theme_support('core-block-patterns');
|
||||
|
||||
/**
|
||||
* Enable plugins to manage the document title.
|
||||
*
|
||||
* @link https://developer.wordpress.org/reference/functions/add_theme_support/#title-tag
|
||||
*/
|
||||
add_theme_support('title-tag');
|
||||
|
||||
/**
|
||||
* Register navigation menus
|
||||
* @link https://developer.wordpress.org/reference/functions/register_nav_menus/
|
||||
*/
|
||||
register_nav_menus([
|
||||
'primary_navigation' => __('Primary Navigation', 'sage')
|
||||
]);
|
||||
|
||||
/**
|
||||
* Enable post thumbnails
|
||||
* Enable post thumbnail support.
|
||||
*
|
||||
* @link https://developer.wordpress.org/themes/functionality/featured-images-post-thumbnails/
|
||||
*/
|
||||
add_theme_support('post-thumbnails');
|
||||
|
||||
/**
|
||||
* Enable HTML5 markup support
|
||||
* Enable responsive embed support.
|
||||
*
|
||||
* @link https://developer.wordpress.org/block-editor/how-to-guides/themes/theme-support/#responsive-embedded-content
|
||||
*/
|
||||
add_theme_support('responsive-embeds');
|
||||
|
||||
/**
|
||||
* Enable HTML5 markup support.
|
||||
*
|
||||
* @link https://developer.wordpress.org/reference/functions/add_theme_support/#html5
|
||||
*/
|
||||
add_theme_support('html5', ['caption', 'comment-form', 'comment-list', 'gallery', 'search-form']);
|
||||
add_theme_support('html5', [
|
||||
'caption',
|
||||
'comment-form',
|
||||
'comment-list',
|
||||
'gallery',
|
||||
'search-form',
|
||||
'script',
|
||||
'style',
|
||||
]);
|
||||
|
||||
/**
|
||||
* Enable selective refresh for widgets in customizer
|
||||
* @link https://developer.wordpress.org/themes/advanced-topics/customizer-api/#theme-support-in-sidebars
|
||||
* Enable selective refresh for widgets in customizer.
|
||||
*
|
||||
* @link https://developer.wordpress.org/reference/functions/add_theme_support/#customize-selective-refresh-widgets
|
||||
*/
|
||||
add_theme_support('customize-selective-refresh-widgets');
|
||||
|
||||
/**
|
||||
* Use main stylesheet for visual editor
|
||||
* @see resources/assets/styles/layouts/_tinymce.scss
|
||||
*/
|
||||
add_editor_style(asset_path('styles/main.css'));
|
||||
}, 20);
|
||||
|
||||
/**
|
||||
* Register sidebars
|
||||
* Register the theme sidebars.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
add_action('widgets_init', function () {
|
||||
$config = [
|
||||
'before_widget' => '<section class="widget %1$s %2$s">',
|
||||
'after_widget' => '</section>',
|
||||
'before_title' => '<h3>',
|
||||
'after_title' => '</h3>'
|
||||
'after_widget' => '</section>',
|
||||
'before_title' => '<h3>',
|
||||
'after_title' => '</h3>',
|
||||
];
|
||||
|
||||
register_sidebar([
|
||||
'name' => __('Primary', 'sage'),
|
||||
'id' => 'sidebar-primary'
|
||||
'name' => __('Primary', 'sage'),
|
||||
'id' => 'sidebar-primary',
|
||||
] + $config);
|
||||
|
||||
register_sidebar([
|
||||
'name' => __('Footer', 'sage'),
|
||||
'id' => 'sidebar-footer'
|
||||
'name' => __('Footer', 'sage'),
|
||||
'id' => 'sidebar-footer',
|
||||
] + $config);
|
||||
});
|
||||
|
||||
/**
|
||||
* Updates the `$post` variable on each iteration of the loop.
|
||||
* Note: updated value is only available for subsequently loaded views, such as partials
|
||||
*/
|
||||
add_action('the_post', function ($post) {
|
||||
sage('blade')->share('post', $post);
|
||||
add_filter('admin_post_thumbnail_size', function(){
|
||||
return "medium";
|
||||
});
|
||||
|
||||
/**
|
||||
* Setup Sage options
|
||||
*/
|
||||
add_action('after_setup_theme', function () {
|
||||
/**
|
||||
* Add JsonManifest to Sage container
|
||||
*/
|
||||
sage()->singleton('sage.assets', function () {
|
||||
return new JsonManifest(config('assets.manifest'), config('assets.uri'));
|
||||
});
|
||||
add_action( 'init', __NAMESPACE__ . '\\cors', 15 );
|
||||
function cors() {
|
||||
|
||||
/**
|
||||
* Add Blade to Sage container
|
||||
*/
|
||||
sage()->singleton('sage.blade', function (Container $app) {
|
||||
$cachePath = config('view.compiled');
|
||||
if (!file_exists($cachePath)) {
|
||||
wp_mkdir_p($cachePath);
|
||||
}
|
||||
(new BladeProvider($app))->register();
|
||||
return new Blade($app['view']);
|
||||
});
|
||||
if(WP_ENV == 'development'):
|
||||
header( 'Access-Control-Allow-Origin: *' );
|
||||
endif;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create @asset() Blade directive
|
||||
*/
|
||||
sage('blade')->compiler()->directive('asset', function ($asset) {
|
||||
return "<?= " . __NAMESPACE__ . "\\asset_path({$asset}); ?>";
|
||||
});
|
||||
add_action('wp_head', function(){
|
||||
if(file_exists(get_theme_file_path('resources/images/favicon/site.webmanifest'))) {
|
||||
echo \Roots\view("partials.favicon")->render();
|
||||
}
|
||||
});
|
||||
|
||||
add_action('after_setup_theme', function(){
|
||||
$image_srcset = new Utilities\ImageSrcset;
|
||||
$image_srcset->add(['name' => 'hero', 'width' => 1920, 'height' => 1080]);
|
||||
add_image_size('lazy', 50, 50);
|
||||
add_image_size('hero', 1920, 1080, true);
|
||||
});
|
||||
|
||||
@@ -14,9 +14,21 @@
|
||||
"name": "Scott Walkinshaw",
|
||||
"email": "scott.walkinshaw@gmail.com",
|
||||
"homepage": "https://github.com/swalkinshaw"
|
||||
},
|
||||
{
|
||||
"name": "QWp6t",
|
||||
"email": "hi@qwp6t.me",
|
||||
"homepage": "https://github.com/qwp6t"
|
||||
},
|
||||
{
|
||||
"name": "Brandon Nifong",
|
||||
"email": "brandon@tendency.me",
|
||||
"homepage": "https://github.com/log1x"
|
||||
}
|
||||
],
|
||||
"keywords": ["wordpress"],
|
||||
"keywords": [
|
||||
"wordpress"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/roots/sage/issues",
|
||||
"forum": "https://discourse.roots.io/"
|
||||
@@ -27,20 +39,26 @@
|
||||
}
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7",
|
||||
"composer/installers": "~1.0",
|
||||
"illuminate/support": "~5.4",
|
||||
"roots/sage-lib": "~9.0.0-beta.3",
|
||||
"soberwp/controller": "dev-master"
|
||||
"php": ">=8.2",
|
||||
"roots/acorn": "^5.0",
|
||||
"ourcodeworld/name-that-color": "dev-master"
|
||||
},
|
||||
"require-dev": {
|
||||
"squizlabs/php_codesniffer": "^2.8.0",
|
||||
"roots/sage-installer": "~1.2"
|
||||
"laravel/pint": "^1.20"
|
||||
},
|
||||
"suggest": {
|
||||
"log1x/sage-directives": "A collection of useful Blade directives for WordPress and Sage (^1.0)."
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
"preferred-install": "dist",
|
||||
"sort-packages": true
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"prefer-stable": true,
|
||||
"scripts": {
|
||||
"test": ["phpcs"],
|
||||
"post-create-project-cmd": [
|
||||
"Roots\\Sage\\Installer\\ComposerScript::postCreateProject"
|
||||
"post-autoload-dump": [
|
||||
"Roots\\Acorn\\ComposerScripts::postAutoloadDump"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
7056
composer.lock
generated
7056
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,31 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Assets Manifest
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Your asset manifest is used by Sage to assist WordPress and your views
|
||||
| with rendering the correct URLs for your assets. This is especially
|
||||
| useful for statically referencing assets with dynamically changing names
|
||||
| as in the case of cache-busting.
|
||||
|
|
||||
*/
|
||||
|
||||
'manifest' => get_theme_file_path().'/dist/assets.json',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Assets Path URI
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The asset manifest contains relative paths to your assets. This URI will
|
||||
| be prepended when using Sage's asset management system. Change this if
|
||||
| you are using a CDN.
|
||||
|
|
||||
*/
|
||||
|
||||
'uri' => get_theme_file_uri().'/dist',
|
||||
];
|
||||
@@ -1,32 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Theme Directory
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This is the absolute path to your theme directory.
|
||||
|
|
||||
| Example:
|
||||
| /srv/www/example.com/current/web/app/themes/sage
|
||||
|
|
||||
*/
|
||||
|
||||
'dir' => get_theme_file_path(),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Theme Directory URI
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This is the web server URI to your theme directory.
|
||||
|
|
||||
| Example:
|
||||
| https://example.com/app/themes/sage
|
||||
|
|
||||
*/
|
||||
|
||||
'uri' => get_theme_file_uri(),
|
||||
];
|
||||
@@ -1,51 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| View Storage Paths
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Most template systems load templates from disk. Here you may specify
|
||||
| an array of paths that should be checked for your views.
|
||||
|
|
||||
*/
|
||||
|
||||
'paths' => [
|
||||
get_theme_file_path().'/resources/views',
|
||||
get_parent_theme_file_path().'/resources/views',
|
||||
],
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Compiled View Path
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option determines where all the compiled Blade templates will be
|
||||
| stored for your application. Typically, this is within the uploads
|
||||
| directory. However, as usual, you are free to change this value.
|
||||
|
|
||||
*/
|
||||
|
||||
'compiled' => wp_upload_dir()['basedir'].'/cache',
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| View Namespaces
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Blade has an underutilized feature that allows developers to add
|
||||
| supplemental view paths that may contain conflictingly named views.
|
||||
| These paths are prefixed with a namespace to get around the conflicts.
|
||||
| A use case might be including views from within a plugin folder.
|
||||
|
|
||||
*/
|
||||
|
||||
'namespaces' => [
|
||||
/* Given the below example, in your views use something like: @include('WC::some.view.or.partial.here') */
|
||||
// 'WC' => WP_PLUGIN_DIR.'/woocommerce/templates/',
|
||||
],
|
||||
];
|
||||
82
functions.php
Normal file
82
functions.php
Normal file
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
use Roots\Acorn\Application;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Register The Auto Loader
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Composer provides a convenient, automatically generated class loader for
|
||||
| our theme. We will simply require it into the script here so that we
|
||||
| don't have to worry about manually loading any of our classes later on.
|
||||
|
|
||||
*/
|
||||
|
||||
if (! file_exists($composer = __DIR__.'/vendor/autoload.php')) {
|
||||
wp_die(__('Error locating autoloader. Please run <code>composer install</code>.', 'sage'));
|
||||
}
|
||||
|
||||
require $composer;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Register The Bootloader
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The first thing we will do is schedule a new Acorn application container
|
||||
| to boot when WordPress is finished loading the theme. The application
|
||||
| serves as the "glue" for all the components of Laravel and is
|
||||
| the IoC container for the system binding all of the various parts.
|
||||
|
|
||||
*/
|
||||
|
||||
Application::configure()
|
||||
->withProviders([
|
||||
App\Providers\ThemeServiceProvider::class,
|
||||
])
|
||||
->boot();
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Autoload PSR-4 files
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
function autoload_psr4($name) {
|
||||
$path = __dir__ . '/app/' . $name . '/*.php';
|
||||
$namespace = 'App\\' . $name;
|
||||
|
||||
foreach(glob($path) as $filename) {
|
||||
$class = $namespace . '\\' . basename($filename, '.php');
|
||||
new $class();
|
||||
}
|
||||
}
|
||||
|
||||
autoload_psr4('PostTypes');
|
||||
autoload_psr4('ACF');
|
||||
autoload_psr4('Utilities');
|
||||
autoload_psr4('Admin');
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Register Sage Theme Files
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Out of the box, Sage ships with categorically named theme files
|
||||
| containing common functionality and setup to be bootstrapped with your
|
||||
| theme. Simply add (or remove) files from the array below to change what
|
||||
| is registered alongside Sage.
|
||||
|
|
||||
*/
|
||||
|
||||
collect(['setup', 'filters', 'blocks'])
|
||||
->each(function ($file) {
|
||||
if (! locate_template($file = "app/{$file}.php", true, true)) {
|
||||
wp_die(
|
||||
/* translators: %s is replaced with the relative file path */
|
||||
sprintf(__('Error locating <code>%s</code> for inclusion.', 'sage'), $file)
|
||||
);
|
||||
}
|
||||
});
|
||||
3
index.php
Normal file
3
index.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
|
||||
echo view(app('sage.view'), app('sage.data'))->render();
|
||||
11861
package-lock.json
generated
11861
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
141
package.json
141
package.json
@@ -1,132 +1,25 @@
|
||||
{
|
||||
"name": "sage",
|
||||
"version": "9.0.0-beta.3",
|
||||
"author": "Roots <team@roots.io>",
|
||||
"homepage": "https://roots.io/sage/",
|
||||
"private": true,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/roots/sage.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/roots/sage/issues"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT",
|
||||
"url": "http://opensource.org/licenses/MIT"
|
||||
}
|
||||
],
|
||||
"browserslist": [
|
||||
"last 2 versions",
|
||||
"android 4",
|
||||
"opera 12"
|
||||
],
|
||||
"eslintConfig": {
|
||||
"root": true,
|
||||
"extends": "eslint:recommended",
|
||||
"globals": {
|
||||
"wp": true
|
||||
},
|
||||
"env": {
|
||||
"node": true,
|
||||
"es6": true,
|
||||
"amd": true,
|
||||
"browser": true,
|
||||
"jquery": true
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaFeatures": {
|
||||
"globalReturn": true,
|
||||
"generators": false,
|
||||
"objectLiteralDuplicateProperties": false,
|
||||
"experimentalObjectRestSpread": true
|
||||
},
|
||||
"ecmaVersion": 2017,
|
||||
"sourceType": "module"
|
||||
},
|
||||
"plugins": [
|
||||
"import"
|
||||
],
|
||||
"settings": {
|
||||
"import/core-modules": [],
|
||||
"import/ignore": [
|
||||
"node_modules",
|
||||
"\\.(coffee|scss|css|less|hbs|svg|json)$"
|
||||
]
|
||||
},
|
||||
"rules": {
|
||||
"comma-dangle": [
|
||||
"error",
|
||||
{
|
||||
"arrays": "always-multiline",
|
||||
"objects": "always-multiline",
|
||||
"imports": "always-multiline",
|
||||
"exports": "always-multiline",
|
||||
"functions": "ignore"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"stylelint": {
|
||||
"extends": "stylelint-config-standard",
|
||||
"rules": {
|
||||
"no-empty-source": null
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"build": "webpack --progress --config resources/assets/build/webpack.config.js",
|
||||
"build:production": "webpack --progress -p --config resources/assets/build/webpack.config.js",
|
||||
"build:profile": "webpack --progress --profile --json --config resources/assets/build/webpack.config.js",
|
||||
"start": "webpack --hide-modules --watch --config resources/assets/build/webpack.config.js",
|
||||
"rmdist": "rimraf dist",
|
||||
"lint": "npm run -s lint:scripts && npm run -s lint:styles",
|
||||
"lint:scripts": "eslint resources/assets/scripts resources/assets/build",
|
||||
"lint:styles": "stylelint resources/assets/styles/**/*.{css,sass,scss,sss,less}",
|
||||
"test": "npm run -s lint"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6.9.4"
|
||||
"node": ">=20.0.0"
|
||||
},
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"translate": "npm run translate:pot && npm run translate:update",
|
||||
"translate:pot": "wp i18n make-pot . ./resources/lang/sage.pot --include=\"theme.json,patterns,app,resources\"",
|
||||
"translate:update": "for file in ./resources/lang/*.po; do wp i18n update-po ./resources/lang/sage.pot $file; done",
|
||||
"translate:compile": "npm run translate:mo && npm run translate:js",
|
||||
"translate:js": "wp i18n make-json ./resources/lang --pretty-print",
|
||||
"translate:mo": "wp i18n make-mo ./resources/lang ./resources/lang"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "~7.1",
|
||||
"browser-sync": "~2.18",
|
||||
"browsersync-webpack-plugin": "^0.6.0",
|
||||
"bs-html-injector": "~3.0",
|
||||
"buble-loader": "^0.4.1",
|
||||
"cache-loader": "~1.0",
|
||||
"clean-webpack-plugin": "^0.1.16",
|
||||
"copy-globs-webpack-plugin": "^0.2.0",
|
||||
"css-loader": "^0.28.4",
|
||||
"cssnano": "~4.0.0-rc.1",
|
||||
"eslint": "~4.2",
|
||||
"eslint-loader": "~1.9",
|
||||
"eslint-plugin-import": "~2.7",
|
||||
"extract-text-webpack-plugin": "~3.0",
|
||||
"file-loader": "^0.11.2",
|
||||
"imagemin-mozjpeg": "~6.0",
|
||||
"imagemin-webpack-plugin": "~1.5.0-beta.0",
|
||||
"import-glob": "~1.5",
|
||||
"node-sass": "~4.5",
|
||||
"postcss-loader": "~2.0",
|
||||
"postcss-safe-parser": "~3.0",
|
||||
"resolve-url-loader": "~2.1",
|
||||
"rimraf": "~2.6",
|
||||
"sass-loader": "~6.0",
|
||||
"style-loader": "^0.18.2",
|
||||
"stylelint": "~7.12",
|
||||
"stylelint-config-standard": "~16.0",
|
||||
"stylelint-webpack-plugin": "^0.8.0",
|
||||
"url-loader": "^0.5.9",
|
||||
"webpack": "~3.3",
|
||||
"webpack-assets-manifest": "^0.7.0",
|
||||
"webpack-dev-middleware": "~1.11",
|
||||
"webpack-hot-middleware": "~2.18",
|
||||
"webpack-merge": "~4.1",
|
||||
"yargs": "~8.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"bootstrap": "^4.0.0-alpha.6",
|
||||
"jquery": "1.12.4 - 3"
|
||||
"@roots/vite-plugin": "^1.0.2",
|
||||
"fast-glob": "^3.3.3",
|
||||
"laravel-vite-plugin": "^1.2.0",
|
||||
"sass": "^1.93.2",
|
||||
"vite": "^6.2.0"
|
||||
}
|
||||
}
|
||||
|
||||
71
phpcs.xml
71
phpcs.xml
@@ -1,71 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<ruleset name="Roots">
|
||||
<description>Roots Coding Standards</description>
|
||||
|
||||
<!-- Scan these files -->
|
||||
<file>resources/functions.php</file>
|
||||
<file>resources/index.php</file>
|
||||
<file>app</file>
|
||||
<file>resources/views</file>
|
||||
|
||||
<!-- Show colors in console -->
|
||||
<arg value="-colors"/>
|
||||
|
||||
<!-- Show sniff codes in all reports -->
|
||||
<arg value="s"/>
|
||||
|
||||
<!-- Use PSR-2 as a base -->
|
||||
<rule ref="PSR2"/>
|
||||
|
||||
<!-- Exclusions below are for resources/views/ folder -->
|
||||
|
||||
<!-- Allow php files without any PHP in them -->
|
||||
<rule ref="Internal.NoCodeFound">
|
||||
<exclude-pattern>resources/views</exclude-pattern>
|
||||
</rule>
|
||||
|
||||
<!-- Allow braces on same line for named functions -->
|
||||
<rule ref="Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine">
|
||||
<exclude-pattern>resources/views</exclude-pattern>
|
||||
</rule>
|
||||
|
||||
<!-- Allow closing braces to be on the same line -->
|
||||
<rule ref="Squiz.WhiteSpace.ScopeClosingBrace">
|
||||
<exclude-pattern>resources/views</exclude-pattern>
|
||||
</rule>
|
||||
|
||||
<!-- Disable newline after opening brace -->
|
||||
<rule ref="Squiz.ControlStructures.ControlSignature.NewlineAfterOpenBrace">
|
||||
<exclude-pattern>resources/views</exclude-pattern>
|
||||
</rule>
|
||||
|
||||
<!-- Allow multiple PHP statements in the same line -->
|
||||
<rule ref="Generic.Formatting.DisallowMultipleStatements.SameLine">
|
||||
<exclude-pattern>resources/views</exclude-pattern>
|
||||
</rule>
|
||||
|
||||
<!-- Disable PSR-2 indentation rules that are buggy with 2 spaces -->
|
||||
<rule ref="PSR2.ControlStructures.SwitchDeclaration.BreakIndent">
|
||||
<exclude-pattern>resources/views</exclude-pattern>
|
||||
</rule>
|
||||
|
||||
<!-- Don't require a blank line after the last `use` -->
|
||||
<rule ref="PSR2.Namespaces.UseDeclaration.SpaceAfterLastUse">
|
||||
<exclude-pattern>resources/views</exclude-pattern>
|
||||
</rule>
|
||||
|
||||
<!-- Allow long lines -->
|
||||
<rule ref="Generic.Files.LineLength.TooLong">
|
||||
<exclude-pattern>resources/views</exclude-pattern>
|
||||
</rule>
|
||||
|
||||
<!-- Ignore indentation rules -->
|
||||
<rule ref="Generic.WhiteSpace.ScopeIndent">
|
||||
<exclude-pattern>resources/views</exclude-pattern>
|
||||
</rule>
|
||||
|
||||
<!-- Allow PHP closing tags -->
|
||||
<rule ref="PSR2.Files.ClosingTag.NotAllowed">
|
||||
<exclude-pattern>resources/views</exclude-pattern>
|
||||
</rule>
|
||||
</ruleset>
|
||||
131
resources/acf/group_block_acfdemo.json
Normal file
131
resources/acf/group_block_acfdemo.json
Normal file
@@ -0,0 +1,131 @@
|
||||
{
|
||||
"key": "group_block_acfdemo",
|
||||
"title": "Block: ACF Demo",
|
||||
"fields": [
|
||||
{
|
||||
"key": "field_693d7783d862a",
|
||||
"label": "Content",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "accordion",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"open": 1,
|
||||
"multi_expand": 1,
|
||||
"endpoint": 0
|
||||
},
|
||||
{
|
||||
"key": "field_693d779cd862b",
|
||||
"label": "",
|
||||
"name": "content",
|
||||
"aria-label": "",
|
||||
"type": "wysiwyg",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"allow_in_bindings": 0,
|
||||
"tabs": "all",
|
||||
"toolbar": "full",
|
||||
"media_upload": 1,
|
||||
"delay": 0
|
||||
},
|
||||
{
|
||||
"key": "field_693d7764938f3",
|
||||
"label": "Introduction",
|
||||
"name": "block_intro",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_block_intro"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0
|
||||
},
|
||||
{
|
||||
"key": "field_6940187f74afb",
|
||||
"label": "Footer",
|
||||
"name": "block_footer",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_block_footer"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0
|
||||
},
|
||||
{
|
||||
"key": "field_693d776493992",
|
||||
"label": "Settings",
|
||||
"name": "block_settings",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_block_settings"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0
|
||||
}
|
||||
],
|
||||
"location": [
|
||||
[
|
||||
{
|
||||
"param": "block",
|
||||
"operator": "==",
|
||||
"value": "badegg\/acfdemo"
|
||||
}
|
||||
]
|
||||
],
|
||||
"menu_order": 0,
|
||||
"position": "normal",
|
||||
"style": "default",
|
||||
"label_placement": "top",
|
||||
"instruction_placement": "label",
|
||||
"hide_on_screen": "",
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"display_title": "",
|
||||
"modified": 1765814950
|
||||
}
|
||||
109
resources/acf/group_block_editor.json
Normal file
109
resources/acf/group_block_editor.json
Normal file
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"key": "group_block_editor",
|
||||
"title": "Block: Editor",
|
||||
"fields": [
|
||||
{
|
||||
"key": "field_67659ad8dc795",
|
||||
"label": "",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "message",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"message": "You can insert a variety of blocks inside of this one to build your page or post.",
|
||||
"new_lines": "wpautop",
|
||||
"esc_html": 0
|
||||
},
|
||||
{
|
||||
"key": "field_67659a9bdc792",
|
||||
"label": "Introduction",
|
||||
"name": "introduction",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_block_intro"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0
|
||||
},
|
||||
{
|
||||
"key": "field_67659bca78cfa",
|
||||
"label": "Footer",
|
||||
"name": "footer",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_block_footer"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0
|
||||
},
|
||||
{
|
||||
"key": "field_67659ab5dc793",
|
||||
"label": "Settings",
|
||||
"name": "settings",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_block_settings"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0
|
||||
}
|
||||
],
|
||||
"location": [
|
||||
[
|
||||
{
|
||||
"param": "block",
|
||||
"operator": "==",
|
||||
"value": "acf\/badegg-editor"
|
||||
}
|
||||
]
|
||||
],
|
||||
"menu_order": 0,
|
||||
"position": "normal",
|
||||
"style": "default",
|
||||
"label_placement": "top",
|
||||
"instruction_placement": "label",
|
||||
"hide_on_screen": "",
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"modified": 1763915024
|
||||
}
|
||||
137
resources/acf/group_clone_background_settings.json
Normal file
137
resources/acf/group_clone_background_settings.json
Normal file
@@ -0,0 +1,137 @@
|
||||
{
|
||||
"key": "group_clone_background_settings",
|
||||
"title": "Clone: Background Settings",
|
||||
"fields": [
|
||||
{
|
||||
"key": "field_67325dd23234e",
|
||||
"label": "Colour",
|
||||
"name": "bg_colour",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "50",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"0": "None",
|
||||
"primary": "<i class=\"fas fa-circle\" style=\"color: #dd3333\"><\/i> Punch",
|
||||
"secondary": "<i class=\"fas fa-circle\" style=\"color: #81d742\"><\/i> Atlantis",
|
||||
"tertiary": "<i class=\"fas fa-circle\" style=\"color: #8224e3\"><\/i> Purple Heart",
|
||||
"white": "<i class=\"fas fa-circle\" style=\"color: #FFFFFF\"><\/i> White",
|
||||
"grey": "<i class=\"fas fa-circle\" style=\"color: #808080\"><\/i> Gray",
|
||||
"black": "<i class=\"fas fa-circle\" style=\"color: #000000\"><\/i> Black"
|
||||
},
|
||||
"default_value": 0,
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 1,
|
||||
"ui": 1,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
},
|
||||
{
|
||||
"key": "field_67325e213234f",
|
||||
"label": "Tint",
|
||||
"name": "bg_tint",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": [
|
||||
[
|
||||
{
|
||||
"field": "field_67325dd23234e",
|
||||
"operator": "!=",
|
||||
"value": "0"
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"field": "field_67325dd23234e",
|
||||
"operator": "!=",
|
||||
"value": "black"
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"field": "field_67325dd23234e",
|
||||
"operator": "!=",
|
||||
"value": "white"
|
||||
}
|
||||
]
|
||||
],
|
||||
"wrapper": {
|
||||
"width": "50",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"lightest": "Lightest",
|
||||
"lighter": "Lighter",
|
||||
"light": "Light",
|
||||
"0": "None",
|
||||
"dark": "Dark",
|
||||
"darker": "Darker",
|
||||
"darkest": "Darkest"
|
||||
},
|
||||
"default_value": 0,
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 1,
|
||||
"ui": 1,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
},
|
||||
{
|
||||
"key": "field_67350f526abf1",
|
||||
"label": "",
|
||||
"name": "contrast",
|
||||
"aria-label": "",
|
||||
"type": "true_false",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"message": "Text Contrast",
|
||||
"default_value": 0,
|
||||
"allow_in_bindings": 0,
|
||||
"ui_on_text": "Light",
|
||||
"ui_off_text": "Dark",
|
||||
"ui": 1
|
||||
}
|
||||
],
|
||||
"location": [
|
||||
[
|
||||
{
|
||||
"param": "widget",
|
||||
"operator": "==",
|
||||
"value": "rss"
|
||||
}
|
||||
]
|
||||
],
|
||||
"menu_order": 0,
|
||||
"position": "normal",
|
||||
"style": "default",
|
||||
"label_placement": "top",
|
||||
"instruction_placement": "label",
|
||||
"hide_on_screen": "",
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"display_title": "",
|
||||
"modified": 1767548180
|
||||
}
|
||||
210
resources/acf/group_clone_block_footer.json
Normal file
210
resources/acf/group_clone_block_footer.json
Normal file
@@ -0,0 +1,210 @@
|
||||
{
|
||||
"key": "group_clone_block_footer",
|
||||
"title": "Clone: Block Footer",
|
||||
"fields": [
|
||||
{
|
||||
"key": "field_694016b164221",
|
||||
"label": "Footer",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "accordion",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"open": 0,
|
||||
"multi_expand": 0,
|
||||
"endpoint": 0
|
||||
},
|
||||
{
|
||||
"key": "field_694016b164272",
|
||||
"label": "",
|
||||
"name": "footer",
|
||||
"aria-label": "",
|
||||
"type": "group",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"layout": "block",
|
||||
"sub_fields": [
|
||||
{
|
||||
"key": "field_694016b165315",
|
||||
"label": "Blurb",
|
||||
"name": "blurb",
|
||||
"aria-label": "",
|
||||
"type": "textarea",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"rows": 3,
|
||||
"placeholder": "",
|
||||
"new_lines": ""
|
||||
},
|
||||
{
|
||||
"key": "field_69401a2f06555",
|
||||
"label": "Links",
|
||||
"name": "links",
|
||||
"aria-label": "",
|
||||
"type": "repeater",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"layout": "block",
|
||||
"pagination": 0,
|
||||
"min": 0,
|
||||
"max": 0,
|
||||
"collapsed": "",
|
||||
"button_label": "Add Row",
|
||||
"rows_per_page": 20,
|
||||
"sub_fields": [
|
||||
{
|
||||
"key": "field_69401a4006556",
|
||||
"label": "Link",
|
||||
"name": "link",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_button"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0,
|
||||
"parent_repeater": "field_69401a2f06555"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "field_694016b165337",
|
||||
"label": "Alignment",
|
||||
"name": "align",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"left": "Left",
|
||||
"centre": "Centre",
|
||||
"right": "Right"
|
||||
},
|
||||
"default_value": "centre",
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 0,
|
||||
"ui": 0,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
},
|
||||
{
|
||||
"key": "field_694016b16537f",
|
||||
"label": "Container width",
|
||||
"name": "container_width",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"0": "Auto",
|
||||
"narrow": "Narrow",
|
||||
"small": "Small",
|
||||
"medium": "Medium",
|
||||
"large": "Large",
|
||||
"full": "Edge to edge"
|
||||
},
|
||||
"default_value": "narrow",
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 0,
|
||||
"ui": 0,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "field_694016b1642c5",
|
||||
"label": "Footer (end)",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "accordion",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"open": 0,
|
||||
"multi_expand": 0,
|
||||
"endpoint": 1
|
||||
}
|
||||
],
|
||||
"location": [
|
||||
[
|
||||
{
|
||||
"param": "widget",
|
||||
"operator": "==",
|
||||
"value": "rss"
|
||||
}
|
||||
]
|
||||
],
|
||||
"menu_order": 0,
|
||||
"position": "normal",
|
||||
"style": "default",
|
||||
"label_placement": "top",
|
||||
"instruction_placement": "label",
|
||||
"hide_on_screen": "",
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"display_title": "",
|
||||
"modified": 1765809897
|
||||
}
|
||||
184
resources/acf/group_clone_block_intro.json
Normal file
184
resources/acf/group_clone_block_intro.json
Normal file
@@ -0,0 +1,184 @@
|
||||
{
|
||||
"key": "group_clone_block_intro",
|
||||
"title": "Clone: Block Intro",
|
||||
"fields": [
|
||||
{
|
||||
"key": "field_67659970db415",
|
||||
"label": "Introduction",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "accordion",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"open": 0,
|
||||
"multi_expand": 0,
|
||||
"endpoint": 0
|
||||
},
|
||||
{
|
||||
"key": "field_693f37ad7fa70",
|
||||
"label": "",
|
||||
"name": "intro",
|
||||
"aria-label": "",
|
||||
"type": "group",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"layout": "block",
|
||||
"sub_fields": [
|
||||
{
|
||||
"key": "field_676599964d3cc",
|
||||
"label": "Heading",
|
||||
"name": "heading",
|
||||
"aria-label": "",
|
||||
"type": "text",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "hfont",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"allow_in_bindings": 0,
|
||||
"placeholder": "",
|
||||
"prepend": "",
|
||||
"append": ""
|
||||
},
|
||||
{
|
||||
"key": "field_6765999d4d3cd",
|
||||
"label": "Blurb",
|
||||
"name": "blurb",
|
||||
"aria-label": "",
|
||||
"type": "textarea",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"rows": 3,
|
||||
"placeholder": "",
|
||||
"new_lines": ""
|
||||
},
|
||||
{
|
||||
"key": "field_69400cbafb964",
|
||||
"label": "Alignment",
|
||||
"name": "align",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"left": "Left",
|
||||
"centre": "Centre",
|
||||
"right": "Right"
|
||||
},
|
||||
"default_value": "centre",
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 0,
|
||||
"ui": 0,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
},
|
||||
{
|
||||
"key": "field_693f3a7fae85e",
|
||||
"label": "Container width",
|
||||
"name": "container_width",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"0": "Auto",
|
||||
"narrow": "Narrow",
|
||||
"small": "Small",
|
||||
"medium": "Medium",
|
||||
"large": "Large",
|
||||
"full": "Edge to edge"
|
||||
},
|
||||
"default_value": "narrow",
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 0,
|
||||
"ui": 0,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "field_6828dae1d1bb0",
|
||||
"label": "Intro (end)",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "accordion",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"open": 0,
|
||||
"multi_expand": 0,
|
||||
"endpoint": 1
|
||||
}
|
||||
],
|
||||
"location": [
|
||||
[
|
||||
{
|
||||
"param": "widget",
|
||||
"operator": "==",
|
||||
"value": "rss"
|
||||
}
|
||||
]
|
||||
],
|
||||
"menu_order": 0,
|
||||
"position": "normal",
|
||||
"style": "default",
|
||||
"label_placement": "top",
|
||||
"instruction_placement": "label",
|
||||
"hide_on_screen": "",
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"display_title": "",
|
||||
"modified": 1765809893
|
||||
}
|
||||
195
resources/acf/group_clone_block_settings.json
Normal file
195
resources/acf/group_clone_block_settings.json
Normal file
@@ -0,0 +1,195 @@
|
||||
{
|
||||
"key": "group_clone_block_settings",
|
||||
"title": "Clone: Block Settings",
|
||||
"fields": [
|
||||
{
|
||||
"key": "field_69403228d2637",
|
||||
"label": "Settings",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "accordion",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"open": 0,
|
||||
"multi_expand": 1,
|
||||
"endpoint": 0
|
||||
},
|
||||
{
|
||||
"key": "field_694031b513e66",
|
||||
"label": "",
|
||||
"name": "settings",
|
||||
"aria-label": "",
|
||||
"type": "group",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"layout": "block",
|
||||
"sub_fields": [
|
||||
{
|
||||
"key": "field_6800097e61765",
|
||||
"label": "Container Width",
|
||||
"name": "container_width",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"0": "Auto",
|
||||
"narrow": "Narrow",
|
||||
"small": "Small",
|
||||
"medium": "Medium",
|
||||
"large": "Large",
|
||||
"full": "Edge to edge"
|
||||
},
|
||||
"default_value": 0,
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 1,
|
||||
"ui": 0,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
},
|
||||
{
|
||||
"key": "field_67350eb62cdf9",
|
||||
"label": "",
|
||||
"name": "padding_top",
|
||||
"aria-label": "",
|
||||
"type": "true_false",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"message": "Top Padding",
|
||||
"default_value": 1,
|
||||
"allow_in_bindings": 0,
|
||||
"ui_on_text": "On",
|
||||
"ui_off_text": "Off",
|
||||
"ui": 1
|
||||
},
|
||||
{
|
||||
"key": "field_673510c1dc830",
|
||||
"label": "",
|
||||
"name": "padding_bottom",
|
||||
"aria-label": "",
|
||||
"type": "true_false",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"message": "Bottom Padding",
|
||||
"default_value": 1,
|
||||
"allow_in_bindings": 0,
|
||||
"ui_on_text": "On",
|
||||
"ui_off_text": "Off",
|
||||
"ui": 1
|
||||
},
|
||||
{
|
||||
"key": "field_695aa550e16d4",
|
||||
"label": "Background",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "message",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"message": "",
|
||||
"new_lines": "wpautop",
|
||||
"esc_html": 0
|
||||
},
|
||||
{
|
||||
"key": "field_67350aeb146ca",
|
||||
"label": "Background",
|
||||
"name": "background",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_background_settings"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "field_69403239d2638",
|
||||
"label": "Settings (end)",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "accordion",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"open": 0,
|
||||
"multi_expand": 0,
|
||||
"endpoint": 1
|
||||
}
|
||||
],
|
||||
"location": [
|
||||
[
|
||||
{
|
||||
"param": "widget",
|
||||
"operator": "==",
|
||||
"value": "rss"
|
||||
}
|
||||
]
|
||||
],
|
||||
"menu_order": 0,
|
||||
"position": "normal",
|
||||
"style": "default",
|
||||
"label_placement": "top",
|
||||
"instruction_placement": "label",
|
||||
"hide_on_screen": "",
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"display_title": "",
|
||||
"modified": 1767548583
|
||||
}
|
||||
151
resources/acf/group_clone_button.json
Normal file
151
resources/acf/group_clone_button.json
Normal file
@@ -0,0 +1,151 @@
|
||||
{
|
||||
"key": "group_clone_button",
|
||||
"title": "Clone: Button",
|
||||
"fields": [
|
||||
{
|
||||
"key": "field_672d3d7b2c273",
|
||||
"label": "Link",
|
||||
"name": "link",
|
||||
"aria-label": "",
|
||||
"type": "link",
|
||||
"instructions": "",
|
||||
"required": 1,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"return_format": "array",
|
||||
"allow_in_bindings": 1
|
||||
},
|
||||
{
|
||||
"key": "field_673529a2a37a1",
|
||||
"label": "Class",
|
||||
"name": "class",
|
||||
"aria-label": "",
|
||||
"type": "text",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": [
|
||||
[
|
||||
{
|
||||
"field": "field_672d3d7b2c273",
|
||||
"operator": "!=empty"
|
||||
}
|
||||
]
|
||||
],
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"allow_in_bindings": 1,
|
||||
"placeholder": "",
|
||||
"prepend": "",
|
||||
"append": ""
|
||||
},
|
||||
{
|
||||
"key": "field_672d3db22c274",
|
||||
"label": "Colour",
|
||||
"name": "colour",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": [
|
||||
[
|
||||
{
|
||||
"field": "field_672d3d7b2c273",
|
||||
"operator": "!=empty"
|
||||
}
|
||||
]
|
||||
],
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"primary": "<i class=\"fas fa-circle\" style=\"color: #002448\"><\/i> Prussian Blue",
|
||||
"secondary": "<i class=\"fas fa-circle\" style=\"color: #fc533e\"><\/i> Sunset Orange",
|
||||
"tertiary": "<i class=\"fas fa-circle\" style=\"color: #fdd400\"><\/i> Gold",
|
||||
"quaternary": "<i class=\"fas fa-circle\" style=\"color: #7d89d1\"><\/i> Moody Blue",
|
||||
"quinary": "<i class=\"fas fa-circle\" style=\"color: #ffdab4\"><\/i> Frangipani",
|
||||
"0": "<i class=\"fas fa-circle\" style=\"color: #FFFFFF\"><\/i> White",
|
||||
"black": "<i class=\"fas fa-circle\" style=\"color: #000000\"><\/i> Black",
|
||||
"quaternary-white": "<i class=\"fas fa-circle text-gradient text-gradient-quaternary-white\"><\/i> Moody Blue to White",
|
||||
"quinary-white": "<i class=\"fas fa-circle text-gradient text-gradient-quinary-white\"><\/i> Frangipani to White",
|
||||
"white-quaternary": "<i class=\"fas fa-circle text-gradient text-gradient-white-quaternary\"><\/i> White to Moody Blue",
|
||||
"white-quinary": "<i class=\"fas fa-circle text-gradient text-gradient-white-quinary\"><\/i> White to Frangipani"
|
||||
},
|
||||
"default_value": "primary",
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 1,
|
||||
"ui": 1,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
},
|
||||
{
|
||||
"key": "field_672d3dc52c275",
|
||||
"label": "Style",
|
||||
"name": "style",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": [
|
||||
[
|
||||
{
|
||||
"field": "field_672d3d7b2c273",
|
||||
"operator": "!=empty"
|
||||
}
|
||||
]
|
||||
],
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"0": "Solid",
|
||||
"outline": "Outline"
|
||||
},
|
||||
"default_value": 0,
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 1,
|
||||
"ui": 0,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
}
|
||||
],
|
||||
"location": [
|
||||
[
|
||||
{
|
||||
"param": "widget",
|
||||
"operator": "==",
|
||||
"value": "rss"
|
||||
}
|
||||
]
|
||||
],
|
||||
"menu_order": 0,
|
||||
"position": "normal",
|
||||
"style": "default",
|
||||
"label_placement": "top",
|
||||
"instruction_placement": "label",
|
||||
"hide_on_screen": "",
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"modified": 1748001311
|
||||
}
|
||||
417
resources/acf/group_options_global_settings.json
Normal file
417
resources/acf/group_options_global_settings.json
Normal file
@@ -0,0 +1,417 @@
|
||||
{
|
||||
"key": "group_options_global_settings",
|
||||
"title": "Options: Global Settings",
|
||||
"fields": [
|
||||
{
|
||||
"key": "field_67658e28aba4e",
|
||||
"label": "Colours",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "tab",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"placement": "top",
|
||||
"endpoint": 0
|
||||
},
|
||||
{
|
||||
"key": "field_67658e49aba4f",
|
||||
"label": "Brand Colours",
|
||||
"name": "badegg_colours",
|
||||
"aria-label": "",
|
||||
"type": "repeater",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"layout": "block",
|
||||
"pagination": 0,
|
||||
"min": 0,
|
||||
"max": 12,
|
||||
"collapsed": "field_67658e96aba50",
|
||||
"button_label": "Add Colour",
|
||||
"rows_per_page": 20,
|
||||
"sub_fields": [
|
||||
{
|
||||
"key": "field_67658e96aba50",
|
||||
"label": "",
|
||||
"name": "hex",
|
||||
"aria-label": "",
|
||||
"type": "color_picker",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"enable_opacity": 0,
|
||||
"return_format": "string",
|
||||
"parent_repeater": "field_67658e49aba4f"
|
||||
},
|
||||
{
|
||||
"key": "field_67658fba41889",
|
||||
"label": "Tints",
|
||||
"name": "tints",
|
||||
"aria-label": "",
|
||||
"type": "radio",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": [
|
||||
[
|
||||
{
|
||||
"field": "field_67658e49aba4f",
|
||||
"operator": "!=empty"
|
||||
},
|
||||
{
|
||||
"field": "field_67658e49aba4f",
|
||||
"operator": "==empty"
|
||||
}
|
||||
]
|
||||
],
|
||||
"wrapper": {
|
||||
"width": "15",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": [
|
||||
"Auto",
|
||||
"Manual"
|
||||
],
|
||||
"default_value": 0,
|
||||
"return_format": "value",
|
||||
"allow_null": 0,
|
||||
"other_choice": 0,
|
||||
"layout": "horizontal",
|
||||
"save_other_choice": 0,
|
||||
"parent_repeater": "field_67658e49aba4f"
|
||||
},
|
||||
{
|
||||
"key": "field_67658fe84188a",
|
||||
"label": "Tint Selection",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "message",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": [
|
||||
[
|
||||
{
|
||||
"field": "field_67658fba41889",
|
||||
"operator": "==",
|
||||
"value": "0"
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"field": "field_67658e49aba4f",
|
||||
"operator": "!=empty"
|
||||
},
|
||||
{
|
||||
"field": "field_67658e49aba4f",
|
||||
"operator": "==empty"
|
||||
}
|
||||
]
|
||||
],
|
||||
"wrapper": {
|
||||
"width": "70",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"message": "Colour tints are automatically set by mathematically adjusting the brightness.",
|
||||
"new_lines": "wpautop",
|
||||
"esc_html": 0,
|
||||
"parent_repeater": "field_67658e49aba4f"
|
||||
},
|
||||
{
|
||||
"key": "field_6765902f4188b",
|
||||
"label": "Tint Selection",
|
||||
"name": "tints",
|
||||
"aria-label": "",
|
||||
"type": "group",
|
||||
"instructions": "Colour tints are automatically set by mathematically adjusting the brightness. Specify manual overrides here:",
|
||||
"required": 0,
|
||||
"conditional_logic": [
|
||||
[
|
||||
{
|
||||
"field": "field_67658fba41889",
|
||||
"operator": "==",
|
||||
"value": "1"
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"field": "field_67658e49aba4f",
|
||||
"operator": "!=empty"
|
||||
},
|
||||
{
|
||||
"field": "field_67658e49aba4f",
|
||||
"operator": "==empty"
|
||||
}
|
||||
]
|
||||
],
|
||||
"wrapper": {
|
||||
"width": "70",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"layout": "block",
|
||||
"sub_fields": [
|
||||
{
|
||||
"key": "field_676590414188c",
|
||||
"label": "Lightest",
|
||||
"name": "lightest",
|
||||
"aria-label": "",
|
||||
"type": "color_picker",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "16.66",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"enable_opacity": 0,
|
||||
"return_format": "string"
|
||||
},
|
||||
{
|
||||
"key": "field_676590684188d",
|
||||
"label": "Lighter",
|
||||
"name": "lighter",
|
||||
"aria-label": "",
|
||||
"type": "color_picker",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "16.66",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"enable_opacity": 0,
|
||||
"return_format": "string"
|
||||
},
|
||||
{
|
||||
"key": "field_6765907f4188e",
|
||||
"label": "Light",
|
||||
"name": "light",
|
||||
"aria-label": "",
|
||||
"type": "color_picker",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "16.66",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"enable_opacity": 0,
|
||||
"return_format": "string"
|
||||
},
|
||||
{
|
||||
"key": "field_676590924188f",
|
||||
"label": "Dark",
|
||||
"name": "dark",
|
||||
"aria-label": "",
|
||||
"type": "color_picker",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "16.66",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"enable_opacity": 0,
|
||||
"return_format": "string"
|
||||
},
|
||||
{
|
||||
"key": "field_6765909941890",
|
||||
"label": "Darker",
|
||||
"name": "darker",
|
||||
"aria-label": "",
|
||||
"type": "color_picker",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "16.66",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"enable_opacity": 0,
|
||||
"return_format": "string"
|
||||
},
|
||||
{
|
||||
"key": "field_6765909f41891",
|
||||
"label": "Darkest",
|
||||
"name": "darkest",
|
||||
"aria-label": "",
|
||||
"type": "color_picker",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "16.66",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"enable_opacity": 0,
|
||||
"return_format": "string"
|
||||
}
|
||||
],
|
||||
"parent_repeater": "field_67658e49aba4f"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "field_67659ca28081d",
|
||||
"label": "Company",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "tab",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"placement": "top",
|
||||
"endpoint": 0
|
||||
},
|
||||
{
|
||||
"key": "field_67659cb08081e",
|
||||
"label": "Legal Name",
|
||||
"name": "badegg_company_legal",
|
||||
"aria-label": "",
|
||||
"type": "text",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"placeholder": "",
|
||||
"prepend": "",
|
||||
"append": ""
|
||||
},
|
||||
{
|
||||
"key": "field_67659cf08081f",
|
||||
"label": "Telephone",
|
||||
"name": "badegg_company_tel",
|
||||
"aria-label": "",
|
||||
"type": "text",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "50",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"placeholder": "",
|
||||
"prepend": "",
|
||||
"append": ""
|
||||
},
|
||||
{
|
||||
"key": "field_67659d0780820",
|
||||
"label": "Email",
|
||||
"name": "badegg_company_email",
|
||||
"aria-label": "",
|
||||
"type": "email",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "50",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"placeholder": "",
|
||||
"prepend": "",
|
||||
"append": ""
|
||||
},
|
||||
{
|
||||
"key": "field_676594565ead1",
|
||||
"label": "Integrations",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "tab",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"placement": "top",
|
||||
"endpoint": 0
|
||||
},
|
||||
{
|
||||
"key": "field_676594615ead2",
|
||||
"label": "Fathom Analytics ID",
|
||||
"name": "badegg_integrations_fathom_id",
|
||||
"aria-label": "",
|
||||
"type": "text",
|
||||
"instructions": "A Google Analytics alternative that’s simple & privacy-first. <a href=\"https:\/\/usefathom.com\" target=\"_blank\" rel=\"noopener nofollow noindex\">Visit website<\/a>",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"placeholder": "",
|
||||
"prepend": "",
|
||||
"append": ""
|
||||
}
|
||||
],
|
||||
"location": [
|
||||
[
|
||||
{
|
||||
"param": "options_page",
|
||||
"operator": "==",
|
||||
"value": "theme-global-settings"
|
||||
}
|
||||
]
|
||||
],
|
||||
"menu_order": 0,
|
||||
"position": "normal",
|
||||
"style": "seamless",
|
||||
"label_placement": "top",
|
||||
"instruction_placement": "label",
|
||||
"hide_on_screen": "",
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"modified": 1734712625
|
||||
}
|
||||
536
resources/acf/group_post_social.json
Normal file
536
resources/acf/group_post_social.json
Normal file
@@ -0,0 +1,536 @@
|
||||
{
|
||||
"key": "group_post_social",
|
||||
"title": "Social Channel Settings",
|
||||
"fields": [
|
||||
{
|
||||
"key": "field_664c658853f1b",
|
||||
"label": "Icon",
|
||||
"name": "fontawesome_brands",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "20",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"0": "<i class=\"fa-solid\"><\/i> <span>Please select an icon<\/span>",
|
||||
"monero": "<i class=\"fa-brands fa-monero\" style=\"color: #2271b1;\"><\/i> <span>Monero<\/span>",
|
||||
"hooli": "<i class=\"fa-brands fa-hooli\" style=\"color: #2271b1;\"><\/i> <span>Hooli<\/span>",
|
||||
"yelp": "<i class=\"fa-brands fa-yelp\" style=\"color: #2271b1;\"><\/i> <span>Yelp<\/span>",
|
||||
"cc-visa": "<i class=\"fa-brands fa-cc-visa\" style=\"color: #2271b1;\"><\/i> <span>Cc Visa<\/span>",
|
||||
"lastfm": "<i class=\"fa-brands fa-lastfm\" style=\"color: #2271b1;\"><\/i> <span>Lastfm<\/span>",
|
||||
"shopware": "<i class=\"fa-brands fa-shopware\" style=\"color: #2271b1;\"><\/i> <span>Shopware<\/span>",
|
||||
"creative-commons-nc": "<i class=\"fa-brands fa-creative-commons-nc\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons Nc<\/span>",
|
||||
"aws": "<i class=\"fa-brands fa-aws\" style=\"color: #2271b1;\"><\/i> <span>Aws<\/span>",
|
||||
"redhat": "<i class=\"fa-brands fa-redhat\" style=\"color: #2271b1;\"><\/i> <span>Redhat<\/span>",
|
||||
"yoast": "<i class=\"fa-brands fa-yoast\" style=\"color: #2271b1;\"><\/i> <span>Yoast<\/span>",
|
||||
"cloudflare": "<i class=\"fa-brands fa-cloudflare\" style=\"color: #2271b1;\"><\/i> <span>Cloudflare<\/span>",
|
||||
"ups": "<i class=\"fa-brands fa-ups\" style=\"color: #2271b1;\"><\/i> <span>Ups<\/span>",
|
||||
"wpexplorer": "<i class=\"fa-brands fa-wpexplorer\" style=\"color: #2271b1;\"><\/i> <span>Wpexplorer<\/span>",
|
||||
"dyalog": "<i class=\"fa-brands fa-dyalog\" style=\"color: #2271b1;\"><\/i> <span>Dyalog<\/span>",
|
||||
"bity": "<i class=\"fa-brands fa-bity\" style=\"color: #2271b1;\"><\/i> <span>Bity<\/span>",
|
||||
"stackpath": "<i class=\"fa-brands fa-stackpath\" style=\"color: #2271b1;\"><\/i> <span>Stackpath<\/span>",
|
||||
"buysellads": "<i class=\"fa-brands fa-buysellads\" style=\"color: #2271b1;\"><\/i> <span>Buysellads<\/span>",
|
||||
"first-order": "<i class=\"fa-brands fa-first-order\" style=\"color: #2271b1;\"><\/i> <span>First Order<\/span>",
|
||||
"modx": "<i class=\"fa-brands fa-modx\" style=\"color: #2271b1;\"><\/i> <span>Modx<\/span>",
|
||||
"guilded": "<i class=\"fa-brands fa-guilded\" style=\"color: #2271b1;\"><\/i> <span>Guilded<\/span>",
|
||||
"vnv": "<i class=\"fa-brands fa-vnv\" style=\"color: #2271b1;\"><\/i> <span>Vnv<\/span>",
|
||||
"square-js": "<i class=\"fa-brands fa-square-js\" style=\"color: #2271b1;\"><\/i> <span>Square Js<\/span>",
|
||||
"microsoft": "<i class=\"fa-brands fa-microsoft\" style=\"color: #2271b1;\"><\/i> <span>Microsoft<\/span>",
|
||||
"qq": "<i class=\"fa-brands fa-qq\" style=\"color: #2271b1;\"><\/i> <span>Qq<\/span>",
|
||||
"orcid": "<i class=\"fa-brands fa-orcid\" style=\"color: #2271b1;\"><\/i> <span>Orcid<\/span>",
|
||||
"java": "<i class=\"fa-brands fa-java\" style=\"color: #2271b1;\"><\/i> <span>Java<\/span>",
|
||||
"invision": "<i class=\"fa-brands fa-invision\" style=\"color: #2271b1;\"><\/i> <span>Invision<\/span>",
|
||||
"creative-commons-pd-alt": "<i class=\"fa-brands fa-creative-commons-pd-alt\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons Pd Alt<\/span>",
|
||||
"centercode": "<i class=\"fa-brands fa-centercode\" style=\"color: #2271b1;\"><\/i> <span>Centercode<\/span>",
|
||||
"glide-g": "<i class=\"fa-brands fa-glide-g\" style=\"color: #2271b1;\"><\/i> <span>Glide G<\/span>",
|
||||
"drupal": "<i class=\"fa-brands fa-drupal\" style=\"color: #2271b1;\"><\/i> <span>Drupal<\/span>",
|
||||
"hire-a-helper": "<i class=\"fa-brands fa-hire-a-helper\" style=\"color: #2271b1;\"><\/i> <span>Hire A Helper<\/span>",
|
||||
"creative-commons-by": "<i class=\"fa-brands fa-creative-commons-by\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons By<\/span>",
|
||||
"unity": "<i class=\"fa-brands fa-unity\" style=\"color: #2271b1;\"><\/i> <span>Unity<\/span>",
|
||||
"whmcs": "<i class=\"fa-brands fa-whmcs\" style=\"color: #2271b1;\"><\/i> <span>Whmcs<\/span>",
|
||||
"rocketchat": "<i class=\"fa-brands fa-rocketchat\" style=\"color: #2271b1;\"><\/i> <span>Rocketchat<\/span>",
|
||||
"vk": "<i class=\"fa-brands fa-vk\" style=\"color: #2271b1;\"><\/i> <span>Vk<\/span>",
|
||||
"untappd": "<i class=\"fa-brands fa-untappd\" style=\"color: #2271b1;\"><\/i> <span>Untappd<\/span>",
|
||||
"mailchimp": "<i class=\"fa-brands fa-mailchimp\" style=\"color: #2271b1;\"><\/i> <span>Mailchimp<\/span>",
|
||||
"css3-alt": "<i class=\"fa-brands fa-css3-alt\" style=\"color: #2271b1;\"><\/i> <span>Css3 Alt<\/span>",
|
||||
"square-reddit": "<i class=\"fa-brands fa-square-reddit\" style=\"color: #2271b1;\"><\/i> <span>Square Reddit<\/span>",
|
||||
"vimeo-v": "<i class=\"fa-brands fa-vimeo-v\" style=\"color: #2271b1;\"><\/i> <span>Vimeo V<\/span>",
|
||||
"contao": "<i class=\"fa-brands fa-contao\" style=\"color: #2271b1;\"><\/i> <span>Contao<\/span>",
|
||||
"square-font-awesome": "<i class=\"fa-brands fa-square-font-awesome\" style=\"color: #2271b1;\"><\/i> <span>Square Font Awesome<\/span>",
|
||||
"deskpro": "<i class=\"fa-brands fa-deskpro\" style=\"color: #2271b1;\"><\/i> <span>Deskpro<\/span>",
|
||||
"sistrix": "<i class=\"fa-brands fa-sistrix\" style=\"color: #2271b1;\"><\/i> <span>Sistrix<\/span>",
|
||||
"square-instagram": "<i class=\"fa-brands fa-square-instagram\" style=\"color: #2271b1;\"><\/i> <span>Square Instagram<\/span>",
|
||||
"battle-net": "<i class=\"fa-brands fa-battle-net\" style=\"color: #2271b1;\"><\/i> <span>Battle Net<\/span>",
|
||||
"the-red-yeti": "<i class=\"fa-brands fa-the-red-yeti\" style=\"color: #2271b1;\"><\/i> <span>The Red Yeti<\/span>",
|
||||
"square-hacker-news": "<i class=\"fa-brands fa-square-hacker-news\" style=\"color: #2271b1;\"><\/i> <span>Square Hacker News<\/span>",
|
||||
"edge": "<i class=\"fa-brands fa-edge\" style=\"color: #2271b1;\"><\/i> <span>Edge<\/span>",
|
||||
"napster": "<i class=\"fa-brands fa-napster\" style=\"color: #2271b1;\"><\/i> <span>Napster<\/span>",
|
||||
"square-snapchat": "<i class=\"fa-brands fa-square-snapchat\" style=\"color: #2271b1;\"><\/i> <span>Square Snapchat<\/span>",
|
||||
"google-plus-g": "<i class=\"fa-brands fa-google-plus-g\" style=\"color: #2271b1;\"><\/i> <span>Google Plus G<\/span>",
|
||||
"artstation": "<i class=\"fa-brands fa-artstation\" style=\"color: #2271b1;\"><\/i> <span>Artstation<\/span>",
|
||||
"markdown": "<i class=\"fa-brands fa-markdown\" style=\"color: #2271b1;\"><\/i> <span>Markdown<\/span>",
|
||||
"sourcetree": "<i class=\"fa-brands fa-sourcetree\" style=\"color: #2271b1;\"><\/i> <span>Sourcetree<\/span>",
|
||||
"google-plus": "<i class=\"fa-brands fa-google-plus\" style=\"color: #2271b1;\"><\/i> <span>Google Plus<\/span>",
|
||||
"diaspora": "<i class=\"fa-brands fa-diaspora\" style=\"color: #2271b1;\"><\/i> <span>Diaspora<\/span>",
|
||||
"foursquare": "<i class=\"fa-brands fa-foursquare\" style=\"color: #2271b1;\"><\/i> <span>Foursquare<\/span>",
|
||||
"stack-overflow": "<i class=\"fa-brands fa-stack-overflow\" style=\"color: #2271b1;\"><\/i> <span>Stack Overflow<\/span>",
|
||||
"github-alt": "<i class=\"fa-brands fa-github-alt\" style=\"color: #2271b1;\"><\/i> <span>Github Alt<\/span>",
|
||||
"phoenix-squadron": "<i class=\"fa-brands fa-phoenix-squadron\" style=\"color: #2271b1;\"><\/i> <span>Phoenix Squadron<\/span>",
|
||||
"pagelines": "<i class=\"fa-brands fa-pagelines\" style=\"color: #2271b1;\"><\/i> <span>Pagelines<\/span>",
|
||||
"algolia": "<i class=\"fa-brands fa-algolia\" style=\"color: #2271b1;\"><\/i> <span>Algolia<\/span>",
|
||||
"red-river": "<i class=\"fa-brands fa-red-river\" style=\"color: #2271b1;\"><\/i> <span>Red River<\/span>",
|
||||
"creative-commons-sa": "<i class=\"fa-brands fa-creative-commons-sa\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons Sa<\/span>",
|
||||
"safari": "<i class=\"fa-brands fa-safari\" style=\"color: #2271b1;\"><\/i> <span>Safari<\/span>",
|
||||
"google": "<i class=\"fa-brands fa-google\" style=\"color: #2271b1;\"><\/i> <span>Google<\/span>",
|
||||
"square-font-awesome-stroke": "<i class=\"fa-brands fa-square-font-awesome-stroke\" style=\"color: #2271b1;\"><\/i> <span>Square Font Awesome Stroke<\/span>",
|
||||
"atlassian": "<i class=\"fa-brands fa-atlassian\" style=\"color: #2271b1;\"><\/i> <span>Atlassian<\/span>",
|
||||
"linkedin-in": "<i class=\"fa-brands fa-linkedin-in\" style=\"color: #2271b1;\"><\/i> <span>Linkedin In<\/span>",
|
||||
"digital-ocean": "<i class=\"fa-brands fa-digital-ocean\" style=\"color: #2271b1;\"><\/i> <span>Digital Ocean<\/span>",
|
||||
"nimblr": "<i class=\"fa-brands fa-nimblr\" style=\"color: #2271b1;\"><\/i> <span>Nimblr<\/span>",
|
||||
"chromecast": "<i class=\"fa-brands fa-chromecast\" style=\"color: #2271b1;\"><\/i> <span>Chromecast<\/span>",
|
||||
"evernote": "<i class=\"fa-brands fa-evernote\" style=\"color: #2271b1;\"><\/i> <span>Evernote<\/span>",
|
||||
"hacker-news": "<i class=\"fa-brands fa-hacker-news\" style=\"color: #2271b1;\"><\/i> <span>Hacker News<\/span>",
|
||||
"creative-commons-sampling": "<i class=\"fa-brands fa-creative-commons-sampling\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons Sampling<\/span>",
|
||||
"adversal": "<i class=\"fa-brands fa-adversal\" style=\"color: #2271b1;\"><\/i> <span>Adversal<\/span>",
|
||||
"creative-commons": "<i class=\"fa-brands fa-creative-commons\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons<\/span>",
|
||||
"watchman-monitoring": "<i class=\"fa-brands fa-watchman-monitoring\" style=\"color: #2271b1;\"><\/i> <span>Watchman Monitoring<\/span>",
|
||||
"fonticons": "<i class=\"fa-brands fa-fonticons\" style=\"color: #2271b1;\"><\/i> <span>Fonticons<\/span>",
|
||||
"weixin": "<i class=\"fa-brands fa-weixin\" style=\"color: #2271b1;\"><\/i> <span>Weixin<\/span>",
|
||||
"shirtsinbulk": "<i class=\"fa-brands fa-shirtsinbulk\" style=\"color: #2271b1;\"><\/i> <span>Shirtsinbulk<\/span>",
|
||||
"codepen": "<i class=\"fa-brands fa-codepen\" style=\"color: #2271b1;\"><\/i> <span>Codepen<\/span>",
|
||||
"git-alt": "<i class=\"fa-brands fa-git-alt\" style=\"color: #2271b1;\"><\/i> <span>Git Alt<\/span>",
|
||||
"lyft": "<i class=\"fa-brands fa-lyft\" style=\"color: #2271b1;\"><\/i> <span>Lyft<\/span>",
|
||||
"rev": "<i class=\"fa-brands fa-rev\" style=\"color: #2271b1;\"><\/i> <span>Rev<\/span>",
|
||||
"windows": "<i class=\"fa-brands fa-windows\" style=\"color: #2271b1;\"><\/i> <span>Windows<\/span>",
|
||||
"wizards-of-the-coast": "<i class=\"fa-brands fa-wizards-of-the-coast\" style=\"color: #2271b1;\"><\/i> <span>Wizards Of The Coast<\/span>",
|
||||
"square-viadeo": "<i class=\"fa-brands fa-square-viadeo\" style=\"color: #2271b1;\"><\/i> <span>Square Viadeo<\/span>",
|
||||
"meetup": "<i class=\"fa-brands fa-meetup\" style=\"color: #2271b1;\"><\/i> <span>Meetup<\/span>",
|
||||
"centos": "<i class=\"fa-brands fa-centos\" style=\"color: #2271b1;\"><\/i> <span>Centos<\/span>",
|
||||
"adn": "<i class=\"fa-brands fa-adn\" style=\"color: #2271b1;\"><\/i> <span>Adn<\/span>",
|
||||
"cloudsmith": "<i class=\"fa-brands fa-cloudsmith\" style=\"color: #2271b1;\"><\/i> <span>Cloudsmith<\/span>",
|
||||
"pied-piper-alt": "<i class=\"fa-brands fa-pied-piper-alt\" style=\"color: #2271b1;\"><\/i> <span>Pied Piper Alt<\/span>",
|
||||
"square-dribbble": "<i class=\"fa-brands fa-square-dribbble\" style=\"color: #2271b1;\"><\/i> <span>Square Dribbble<\/span>",
|
||||
"codiepie": "<i class=\"fa-brands fa-codiepie\" style=\"color: #2271b1;\"><\/i> <span>Codiepie<\/span>",
|
||||
"node": "<i class=\"fa-brands fa-node\" style=\"color: #2271b1;\"><\/i> <span>Node<\/span>",
|
||||
"mix": "<i class=\"fa-brands fa-mix\" style=\"color: #2271b1;\"><\/i> <span>Mix<\/span>",
|
||||
"steam": "<i class=\"fa-brands fa-steam\" style=\"color: #2271b1;\"><\/i> <span>Steam<\/span>",
|
||||
"cc-apple-pay": "<i class=\"fa-brands fa-cc-apple-pay\" style=\"color: #2271b1;\"><\/i> <span>Cc Apple Pay<\/span>",
|
||||
"scribd": "<i class=\"fa-brands fa-scribd\" style=\"color: #2271b1;\"><\/i> <span>Scribd<\/span>",
|
||||
"openid": "<i class=\"fa-brands fa-openid\" style=\"color: #2271b1;\"><\/i> <span>Openid<\/span>",
|
||||
"instalod": "<i class=\"fa-brands fa-instalod\" style=\"color: #2271b1;\"><\/i> <span>Instalod<\/span>",
|
||||
"expeditedssl": "<i class=\"fa-brands fa-expeditedssl\" style=\"color: #2271b1;\"><\/i> <span>Expeditedssl<\/span>",
|
||||
"sellcast": "<i class=\"fa-brands fa-sellcast\" style=\"color: #2271b1;\"><\/i> <span>Sellcast<\/span>",
|
||||
"square-twitter": "<i class=\"fa-brands fa-square-twitter\" style=\"color: #2271b1;\"><\/i> <span>Square Twitter<\/span>",
|
||||
"r-project": "<i class=\"fa-brands fa-r-project\" style=\"color: #2271b1;\"><\/i> <span>R Project<\/span>",
|
||||
"delicious": "<i class=\"fa-brands fa-delicious\" style=\"color: #2271b1;\"><\/i> <span>Delicious<\/span>",
|
||||
"freebsd": "<i class=\"fa-brands fa-freebsd\" style=\"color: #2271b1;\"><\/i> <span>Freebsd<\/span>",
|
||||
"vuejs": "<i class=\"fa-brands fa-vuejs\" style=\"color: #2271b1;\"><\/i> <span>Vuejs<\/span>",
|
||||
"accusoft": "<i class=\"fa-brands fa-accusoft\" style=\"color: #2271b1;\"><\/i> <span>Accusoft<\/span>",
|
||||
"ioxhost": "<i class=\"fa-brands fa-ioxhost\" style=\"color: #2271b1;\"><\/i> <span>Ioxhost<\/span>",
|
||||
"fonticons-fi": "<i class=\"fa-brands fa-fonticons-fi\" style=\"color: #2271b1;\"><\/i> <span>Fonticons Fi<\/span>",
|
||||
"app-store": "<i class=\"fa-brands fa-app-store\" style=\"color: #2271b1;\"><\/i> <span>App Store<\/span>",
|
||||
"cc-mastercard": "<i class=\"fa-brands fa-cc-mastercard\" style=\"color: #2271b1;\"><\/i> <span>Cc Mastercard<\/span>",
|
||||
"itunes-note": "<i class=\"fa-brands fa-itunes-note\" style=\"color: #2271b1;\"><\/i> <span>Itunes Note<\/span>",
|
||||
"golang": "<i class=\"fa-brands fa-golang\" style=\"color: #2271b1;\"><\/i> <span>Golang<\/span>",
|
||||
"kickstarter": "<i class=\"fa-brands fa-kickstarter\" style=\"color: #2271b1;\"><\/i> <span>Kickstarter<\/span>",
|
||||
"grav": "<i class=\"fa-brands fa-grav\" style=\"color: #2271b1;\"><\/i> <span>Grav<\/span>",
|
||||
"weibo": "<i class=\"fa-brands fa-weibo\" style=\"color: #2271b1;\"><\/i> <span>Weibo<\/span>",
|
||||
"uncharted": "<i class=\"fa-brands fa-uncharted\" style=\"color: #2271b1;\"><\/i> <span>Uncharted<\/span>",
|
||||
"firstdraft": "<i class=\"fa-brands fa-firstdraft\" style=\"color: #2271b1;\"><\/i> <span>Firstdraft<\/span>",
|
||||
"square-youtube": "<i class=\"fa-brands fa-square-youtube\" style=\"color: #2271b1;\"><\/i> <span>Square Youtube<\/span>",
|
||||
"wikipedia-w": "<i class=\"fa-brands fa-wikipedia-w\" style=\"color: #2271b1;\"><\/i> <span>Wikipedia W<\/span>",
|
||||
"wpressr": "<i class=\"fa-brands fa-wpressr\" style=\"color: #2271b1;\"><\/i> <span>Wpressr<\/span>",
|
||||
"angellist": "<i class=\"fa-brands fa-angellist\" style=\"color: #2271b1;\"><\/i> <span>Angellist<\/span>",
|
||||
"galactic-republic": "<i class=\"fa-brands fa-galactic-republic\" style=\"color: #2271b1;\"><\/i> <span>Galactic Republic<\/span>",
|
||||
"nfc-directional": "<i class=\"fa-brands fa-nfc-directional\" style=\"color: #2271b1;\"><\/i> <span>Nfc Directional<\/span>",
|
||||
"skype": "<i class=\"fa-brands fa-skype\" style=\"color: #2271b1;\"><\/i> <span>Skype<\/span>",
|
||||
"joget": "<i class=\"fa-brands fa-joget\" style=\"color: #2271b1;\"><\/i> <span>Joget<\/span>",
|
||||
"fedora": "<i class=\"fa-brands fa-fedora\" style=\"color: #2271b1;\"><\/i> <span>Fedora<\/span>",
|
||||
"stripe-s": "<i class=\"fa-brands fa-stripe-s\" style=\"color: #2271b1;\"><\/i> <span>Stripe S<\/span>",
|
||||
"meta": "<i class=\"fa-brands fa-meta\" style=\"color: #2271b1;\"><\/i> <span>Meta<\/span>",
|
||||
"laravel": "<i class=\"fa-brands fa-laravel\" style=\"color: #2271b1;\"><\/i> <span>Laravel<\/span>",
|
||||
"hotjar": "<i class=\"fa-brands fa-hotjar\" style=\"color: #2271b1;\"><\/i> <span>Hotjar<\/span>",
|
||||
"bluetooth-b": "<i class=\"fa-brands fa-bluetooth-b\" style=\"color: #2271b1;\"><\/i> <span>Bluetooth B<\/span>",
|
||||
"sticker-mule": "<i class=\"fa-brands fa-sticker-mule\" style=\"color: #2271b1;\"><\/i> <span>Sticker Mule<\/span>",
|
||||
"creative-commons-zero": "<i class=\"fa-brands fa-creative-commons-zero\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons Zero<\/span>",
|
||||
"hips": "<i class=\"fa-brands fa-hips\" style=\"color: #2271b1;\"><\/i> <span>Hips<\/span>",
|
||||
"behance": "<i class=\"fa-brands fa-behance\" style=\"color: #2271b1;\"><\/i> <span>Behance<\/span>",
|
||||
"reddit": "<i class=\"fa-brands fa-reddit\" style=\"color: #2271b1;\"><\/i> <span>Reddit<\/span>",
|
||||
"discord": "<i class=\"fa-brands fa-discord\" style=\"color: #2271b1;\"><\/i> <span>Discord<\/span>",
|
||||
"chrome": "<i class=\"fa-brands fa-chrome\" style=\"color: #2271b1;\"><\/i> <span>Chrome<\/span>",
|
||||
"app-store-ios": "<i class=\"fa-brands fa-app-store-ios\" style=\"color: #2271b1;\"><\/i> <span>App Store Ios<\/span>",
|
||||
"cc-discover": "<i class=\"fa-brands fa-cc-discover\" style=\"color: #2271b1;\"><\/i> <span>Cc Discover<\/span>",
|
||||
"wpbeginner": "<i class=\"fa-brands fa-wpbeginner\" style=\"color: #2271b1;\"><\/i> <span>Wpbeginner<\/span>",
|
||||
"confluence": "<i class=\"fa-brands fa-confluence\" style=\"color: #2271b1;\"><\/i> <span>Confluence<\/span>",
|
||||
"mdb": "<i class=\"fa-brands fa-mdb\" style=\"color: #2271b1;\"><\/i> <span>Mdb<\/span>",
|
||||
"dochub": "<i class=\"fa-brands fa-dochub\" style=\"color: #2271b1;\"><\/i> <span>Dochub<\/span>",
|
||||
"accessible-icon": "<i class=\"fa-brands fa-accessible-icon\" style=\"color: #2271b1;\"><\/i> <span>Accessible Icon<\/span>",
|
||||
"ebay": "<i class=\"fa-brands fa-ebay\" style=\"color: #2271b1;\"><\/i> <span>Ebay<\/span>",
|
||||
"amazon": "<i class=\"fa-brands fa-amazon\" style=\"color: #2271b1;\"><\/i> <span>Amazon<\/span>",
|
||||
"unsplash": "<i class=\"fa-brands fa-unsplash\" style=\"color: #2271b1;\"><\/i> <span>Unsplash<\/span>",
|
||||
"yarn": "<i class=\"fa-brands fa-yarn\" style=\"color: #2271b1;\"><\/i> <span>Yarn<\/span>",
|
||||
"square-steam": "<i class=\"fa-brands fa-square-steam\" style=\"color: #2271b1;\"><\/i> <span>Square Steam<\/span>",
|
||||
"500px": "<i class=\"fa-brands fa-500px\" style=\"color: #2271b1;\"><\/i> <span>500px<\/span>",
|
||||
"square-vimeo": "<i class=\"fa-brands fa-square-vimeo\" style=\"color: #2271b1;\"><\/i> <span>Square Vimeo<\/span>",
|
||||
"asymmetrik": "<i class=\"fa-brands fa-asymmetrik\" style=\"color: #2271b1;\"><\/i> <span>Asymmetrik<\/span>",
|
||||
"font-awesome": "<i class=\"fa-brands fa-font-awesome\" style=\"color: #2271b1;\"><\/i> <span>Font Awesome<\/span>",
|
||||
"gratipay": "<i class=\"fa-brands fa-gratipay\" style=\"color: #2271b1;\"><\/i> <span>Gratipay<\/span>",
|
||||
"apple": "<i class=\"fa-brands fa-apple\" style=\"color: #2271b1;\"><\/i> <span>Apple<\/span>",
|
||||
"hive": "<i class=\"fa-brands fa-hive\" style=\"color: #2271b1;\"><\/i> <span>Hive<\/span>",
|
||||
"gitkraken": "<i class=\"fa-brands fa-gitkraken\" style=\"color: #2271b1;\"><\/i> <span>Gitkraken<\/span>",
|
||||
"keybase": "<i class=\"fa-brands fa-keybase\" style=\"color: #2271b1;\"><\/i> <span>Keybase<\/span>",
|
||||
"apple-pay": "<i class=\"fa-brands fa-apple-pay\" style=\"color: #2271b1;\"><\/i> <span>Apple Pay<\/span>",
|
||||
"padlet": "<i class=\"fa-brands fa-padlet\" style=\"color: #2271b1;\"><\/i> <span>Padlet<\/span>",
|
||||
"amazon-pay": "<i class=\"fa-brands fa-amazon-pay\" style=\"color: #2271b1;\"><\/i> <span>Amazon Pay<\/span>",
|
||||
"square-github": "<i class=\"fa-brands fa-square-github\" style=\"color: #2271b1;\"><\/i> <span>Square Github<\/span>",
|
||||
"stumbleupon": "<i class=\"fa-brands fa-stumbleupon\" style=\"color: #2271b1;\"><\/i> <span>Stumbleupon<\/span>",
|
||||
"fedex": "<i class=\"fa-brands fa-fedex\" style=\"color: #2271b1;\"><\/i> <span>Fedex<\/span>",
|
||||
"phoenix-framework": "<i class=\"fa-brands fa-phoenix-framework\" style=\"color: #2271b1;\"><\/i> <span>Phoenix Framework<\/span>",
|
||||
"shopify": "<i class=\"fa-brands fa-shopify\" style=\"color: #2271b1;\"><\/i> <span>Shopify<\/span>",
|
||||
"neos": "<i class=\"fa-brands fa-neos\" style=\"color: #2271b1;\"><\/i> <span>Neos<\/span>",
|
||||
"hackerrank": "<i class=\"fa-brands fa-hackerrank\" style=\"color: #2271b1;\"><\/i> <span>Hackerrank<\/span>",
|
||||
"researchgate": "<i class=\"fa-brands fa-researchgate\" style=\"color: #2271b1;\"><\/i> <span>Researchgate<\/span>",
|
||||
"swift": "<i class=\"fa-brands fa-swift\" style=\"color: #2271b1;\"><\/i> <span>Swift<\/span>",
|
||||
"angular": "<i class=\"fa-brands fa-angular\" style=\"color: #2271b1;\"><\/i> <span>Angular<\/span>",
|
||||
"speakap": "<i class=\"fa-brands fa-speakap\" style=\"color: #2271b1;\"><\/i> <span>Speakap<\/span>",
|
||||
"angrycreative": "<i class=\"fa-brands fa-angrycreative\" style=\"color: #2271b1;\"><\/i> <span>Angrycreative<\/span>",
|
||||
"y-combinator": "<i class=\"fa-brands fa-y-combinator\" style=\"color: #2271b1;\"><\/i> <span>Y Combinator<\/span>",
|
||||
"empire": "<i class=\"fa-brands fa-empire\" style=\"color: #2271b1;\"><\/i> <span>Empire<\/span>",
|
||||
"envira": "<i class=\"fa-brands fa-envira\" style=\"color: #2271b1;\"><\/i> <span>Envira<\/span>",
|
||||
"square-gitlab": "<i class=\"fa-brands fa-square-gitlab\" style=\"color: #2271b1;\"><\/i> <span>Square Gitlab<\/span>",
|
||||
"studiovinari": "<i class=\"fa-brands fa-studiovinari\" style=\"color: #2271b1;\"><\/i> <span>Studiovinari<\/span>",
|
||||
"pied-piper": "<i class=\"fa-brands fa-pied-piper\" style=\"color: #2271b1;\"><\/i> <span>Pied Piper<\/span>",
|
||||
"wordpress": "<i class=\"fa-brands fa-wordpress\" style=\"color: #2271b1;\"><\/i> <span>Wordpress<\/span>",
|
||||
"product-hunt": "<i class=\"fa-brands fa-product-hunt\" style=\"color: #2271b1;\"><\/i> <span>Product Hunt<\/span>",
|
||||
"firefox": "<i class=\"fa-brands fa-firefox\" style=\"color: #2271b1;\"><\/i> <span>Firefox<\/span>",
|
||||
"linode": "<i class=\"fa-brands fa-linode\" style=\"color: #2271b1;\"><\/i> <span>Linode<\/span>",
|
||||
"goodreads": "<i class=\"fa-brands fa-goodreads\" style=\"color: #2271b1;\"><\/i> <span>Goodreads<\/span>",
|
||||
"square-odnoklassniki": "<i class=\"fa-brands fa-square-odnoklassniki\" style=\"color: #2271b1;\"><\/i> <span>Square Odnoklassniki<\/span>",
|
||||
"jsfiddle": "<i class=\"fa-brands fa-jsfiddle\" style=\"color: #2271b1;\"><\/i> <span>Jsfiddle<\/span>",
|
||||
"sith": "<i class=\"fa-brands fa-sith\" style=\"color: #2271b1;\"><\/i> <span>Sith<\/span>",
|
||||
"themeisle": "<i class=\"fa-brands fa-themeisle\" style=\"color: #2271b1;\"><\/i> <span>Themeisle<\/span>",
|
||||
"page4": "<i class=\"fa-brands fa-page4\" style=\"color: #2271b1;\"><\/i> <span>Page4<\/span>",
|
||||
"hashnode": "<i class=\"fa-brands fa-hashnode\" style=\"color: #2271b1;\"><\/i> <span>Hashnode<\/span>",
|
||||
"react": "<i class=\"fa-brands fa-react\" style=\"color: #2271b1;\"><\/i> <span>React<\/span>",
|
||||
"cc-paypal": "<i class=\"fa-brands fa-cc-paypal\" style=\"color: #2271b1;\"><\/i> <span>Cc Paypal<\/span>",
|
||||
"squarespace": "<i class=\"fa-brands fa-squarespace\" style=\"color: #2271b1;\"><\/i> <span>Squarespace<\/span>",
|
||||
"cc-stripe": "<i class=\"fa-brands fa-cc-stripe\" style=\"color: #2271b1;\"><\/i> <span>Cc Stripe<\/span>",
|
||||
"creative-commons-share": "<i class=\"fa-brands fa-creative-commons-share\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons Share<\/span>",
|
||||
"bitcoin": "<i class=\"fa-brands fa-bitcoin\" style=\"color: #2271b1;\"><\/i> <span>Bitcoin<\/span>",
|
||||
"keycdn": "<i class=\"fa-brands fa-keycdn\" style=\"color: #2271b1;\"><\/i> <span>Keycdn<\/span>",
|
||||
"opera": "<i class=\"fa-brands fa-opera\" style=\"color: #2271b1;\"><\/i> <span>Opera<\/span>",
|
||||
"itch-io": "<i class=\"fa-brands fa-itch-io\" style=\"color: #2271b1;\"><\/i> <span>Itch Io<\/span>",
|
||||
"umbraco": "<i class=\"fa-brands fa-umbraco\" style=\"color: #2271b1;\"><\/i> <span>Umbraco<\/span>",
|
||||
"galactic-senate": "<i class=\"fa-brands fa-galactic-senate\" style=\"color: #2271b1;\"><\/i> <span>Galactic Senate<\/span>",
|
||||
"ubuntu": "<i class=\"fa-brands fa-ubuntu\" style=\"color: #2271b1;\"><\/i> <span>Ubuntu<\/span>",
|
||||
"draft2digital": "<i class=\"fa-brands fa-draft2digital\" style=\"color: #2271b1;\"><\/i> <span>Draft2digital<\/span>",
|
||||
"stripe": "<i class=\"fa-brands fa-stripe\" style=\"color: #2271b1;\"><\/i> <span>Stripe<\/span>",
|
||||
"houzz": "<i class=\"fa-brands fa-houzz\" style=\"color: #2271b1;\"><\/i> <span>Houzz<\/span>",
|
||||
"gg": "<i class=\"fa-brands fa-gg\" style=\"color: #2271b1;\"><\/i> <span>Gg<\/span>",
|
||||
"dhl": "<i class=\"fa-brands fa-dhl\" style=\"color: #2271b1;\"><\/i> <span>Dhl<\/span>",
|
||||
"square-pinterest": "<i class=\"fa-brands fa-square-pinterest\" style=\"color: #2271b1;\"><\/i> <span>Square Pinterest<\/span>",
|
||||
"xing": "<i class=\"fa-brands fa-xing\" style=\"color: #2271b1;\"><\/i> <span>Xing<\/span>",
|
||||
"blackberry": "<i class=\"fa-brands fa-blackberry\" style=\"color: #2271b1;\"><\/i> <span>Blackberry<\/span>",
|
||||
"creative-commons-pd": "<i class=\"fa-brands fa-creative-commons-pd\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons Pd<\/span>",
|
||||
"playstation": "<i class=\"fa-brands fa-playstation\" style=\"color: #2271b1;\"><\/i> <span>Playstation<\/span>",
|
||||
"quinscape": "<i class=\"fa-brands fa-quinscape\" style=\"color: #2271b1;\"><\/i> <span>Quinscape<\/span>",
|
||||
"less": "<i class=\"fa-brands fa-less\" style=\"color: #2271b1;\"><\/i> <span>Less<\/span>",
|
||||
"blogger-b": "<i class=\"fa-brands fa-blogger-b\" style=\"color: #2271b1;\"><\/i> <span>Blogger B<\/span>",
|
||||
"opencart": "<i class=\"fa-brands fa-opencart\" style=\"color: #2271b1;\"><\/i> <span>Opencart<\/span>",
|
||||
"vine": "<i class=\"fa-brands fa-vine\" style=\"color: #2271b1;\"><\/i> <span>Vine<\/span>",
|
||||
"paypal": "<i class=\"fa-brands fa-paypal\" style=\"color: #2271b1;\"><\/i> <span>Paypal<\/span>",
|
||||
"gitlab": "<i class=\"fa-brands fa-gitlab\" style=\"color: #2271b1;\"><\/i> <span>Gitlab<\/span>",
|
||||
"typo3": "<i class=\"fa-brands fa-typo3\" style=\"color: #2271b1;\"><\/i> <span>Typo3<\/span>",
|
||||
"reddit-alien": "<i class=\"fa-brands fa-reddit-alien\" style=\"color: #2271b1;\"><\/i> <span>Reddit Alien<\/span>",
|
||||
"yahoo": "<i class=\"fa-brands fa-yahoo\" style=\"color: #2271b1;\"><\/i> <span>Yahoo<\/span>",
|
||||
"dailymotion": "<i class=\"fa-brands fa-dailymotion\" style=\"color: #2271b1;\"><\/i> <span>Dailymotion<\/span>",
|
||||
"affiliatetheme": "<i class=\"fa-brands fa-affiliatetheme\" style=\"color: #2271b1;\"><\/i> <span>Affiliatetheme<\/span>",
|
||||
"pied-piper-pp": "<i class=\"fa-brands fa-pied-piper-pp\" style=\"color: #2271b1;\"><\/i> <span>Pied Piper Pp<\/span>",
|
||||
"bootstrap": "<i class=\"fa-brands fa-bootstrap\" style=\"color: #2271b1;\"><\/i> <span>Bootstrap<\/span>",
|
||||
"odnoklassniki": "<i class=\"fa-brands fa-odnoklassniki\" style=\"color: #2271b1;\"><\/i> <span>Odnoklassniki<\/span>",
|
||||
"nfc-symbol": "<i class=\"fa-brands fa-nfc-symbol\" style=\"color: #2271b1;\"><\/i> <span>Nfc Symbol<\/span>",
|
||||
"ethereum": "<i class=\"fa-brands fa-ethereum\" style=\"color: #2271b1;\"><\/i> <span>Ethereum<\/span>",
|
||||
"speaker-deck": "<i class=\"fa-brands fa-speaker-deck\" style=\"color: #2271b1;\"><\/i> <span>Speaker Deck<\/span>",
|
||||
"creative-commons-nc-eu": "<i class=\"fa-brands fa-creative-commons-nc-eu\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons Nc Eu<\/span>",
|
||||
"patreon": "<i class=\"fa-brands fa-patreon\" style=\"color: #2271b1;\"><\/i> <span>Patreon<\/span>",
|
||||
"avianex": "<i class=\"fa-brands fa-avianex\" style=\"color: #2271b1;\"><\/i> <span>Avianex<\/span>",
|
||||
"ello": "<i class=\"fa-brands fa-ello\" style=\"color: #2271b1;\"><\/i> <span>Ello<\/span>",
|
||||
"gofore": "<i class=\"fa-brands fa-gofore\" style=\"color: #2271b1;\"><\/i> <span>Gofore<\/span>",
|
||||
"bimobject": "<i class=\"fa-brands fa-bimobject\" style=\"color: #2271b1;\"><\/i> <span>Bimobject<\/span>",
|
||||
"facebook-f": "<i class=\"fa-brands fa-facebook-f\" style=\"color: #2271b1;\"><\/i> <span>Facebook F<\/span>",
|
||||
"square-google-plus": "<i class=\"fa-brands fa-square-google-plus\" style=\"color: #2271b1;\"><\/i> <span>Square Google Plus<\/span>",
|
||||
"mandalorian": "<i class=\"fa-brands fa-mandalorian\" style=\"color: #2271b1;\"><\/i> <span>Mandalorian<\/span>",
|
||||
"first-order-alt": "<i class=\"fa-brands fa-first-order-alt\" style=\"color: #2271b1;\"><\/i> <span>First Order Alt<\/span>",
|
||||
"osi": "<i class=\"fa-brands fa-osi\" style=\"color: #2271b1;\"><\/i> <span>Osi<\/span>",
|
||||
"google-wallet": "<i class=\"fa-brands fa-google-wallet\" style=\"color: #2271b1;\"><\/i> <span>Google Wallet<\/span>",
|
||||
"d-and-d-beyond": "<i class=\"fa-brands fa-d-and-d-beyond\" style=\"color: #2271b1;\"><\/i> <span>D And D Beyond<\/span>",
|
||||
"periscope": "<i class=\"fa-brands fa-periscope\" style=\"color: #2271b1;\"><\/i> <span>Periscope<\/span>",
|
||||
"fulcrum": "<i class=\"fa-brands fa-fulcrum\" style=\"color: #2271b1;\"><\/i> <span>Fulcrum<\/span>",
|
||||
"cloudscale": "<i class=\"fa-brands fa-cloudscale\" style=\"color: #2271b1;\"><\/i> <span>Cloudscale<\/span>",
|
||||
"forumbee": "<i class=\"fa-brands fa-forumbee\" style=\"color: #2271b1;\"><\/i> <span>Forumbee<\/span>",
|
||||
"mizuni": "<i class=\"fa-brands fa-mizuni\" style=\"color: #2271b1;\"><\/i> <span>Mizuni<\/span>",
|
||||
"schlix": "<i class=\"fa-brands fa-schlix\" style=\"color: #2271b1;\"><\/i> <span>Schlix<\/span>",
|
||||
"square-xing": "<i class=\"fa-brands fa-square-xing\" style=\"color: #2271b1;\"><\/i> <span>Square Xing<\/span>",
|
||||
"bandcamp": "<i class=\"fa-brands fa-bandcamp\" style=\"color: #2271b1;\"><\/i> <span>Bandcamp<\/span>",
|
||||
"wpforms": "<i class=\"fa-brands fa-wpforms\" style=\"color: #2271b1;\"><\/i> <span>Wpforms<\/span>",
|
||||
"cloudversify": "<i class=\"fa-brands fa-cloudversify\" style=\"color: #2271b1;\"><\/i> <span>Cloudversify<\/span>",
|
||||
"usps": "<i class=\"fa-brands fa-usps\" style=\"color: #2271b1;\"><\/i> <span>Usps<\/span>",
|
||||
"megaport": "<i class=\"fa-brands fa-megaport\" style=\"color: #2271b1;\"><\/i> <span>Megaport<\/span>",
|
||||
"magento": "<i class=\"fa-brands fa-magento\" style=\"color: #2271b1;\"><\/i> <span>Magento<\/span>",
|
||||
"spotify": "<i class=\"fa-brands fa-spotify\" style=\"color: #2271b1;\"><\/i> <span>Spotify<\/span>",
|
||||
"optin-monster": "<i class=\"fa-brands fa-optin-monster\" style=\"color: #2271b1;\"><\/i> <span>Optin Monster<\/span>",
|
||||
"fly": "<i class=\"fa-brands fa-fly\" style=\"color: #2271b1;\"><\/i> <span>Fly<\/span>",
|
||||
"aviato": "<i class=\"fa-brands fa-aviato\" style=\"color: #2271b1;\"><\/i> <span>Aviato<\/span>",
|
||||
"itunes": "<i class=\"fa-brands fa-itunes\" style=\"color: #2271b1;\"><\/i> <span>Itunes<\/span>",
|
||||
"cuttlefish": "<i class=\"fa-brands fa-cuttlefish\" style=\"color: #2271b1;\"><\/i> <span>Cuttlefish<\/span>",
|
||||
"blogger": "<i class=\"fa-brands fa-blogger\" style=\"color: #2271b1;\"><\/i> <span>Blogger<\/span>",
|
||||
"flickr": "<i class=\"fa-brands fa-flickr\" style=\"color: #2271b1;\"><\/i> <span>Flickr<\/span>",
|
||||
"viber": "<i class=\"fa-brands fa-viber\" style=\"color: #2271b1;\"><\/i> <span>Viber<\/span>",
|
||||
"soundcloud": "<i class=\"fa-brands fa-soundcloud\" style=\"color: #2271b1;\"><\/i> <span>Soundcloud<\/span>",
|
||||
"digg": "<i class=\"fa-brands fa-digg\" style=\"color: #2271b1;\"><\/i> <span>Digg<\/span>",
|
||||
"tencent-weibo": "<i class=\"fa-brands fa-tencent-weibo\" style=\"color: #2271b1;\"><\/i> <span>Tencent Weibo<\/span>",
|
||||
"symfony": "<i class=\"fa-brands fa-symfony\" style=\"color: #2271b1;\"><\/i> <span>Symfony<\/span>",
|
||||
"maxcdn": "<i class=\"fa-brands fa-maxcdn\" style=\"color: #2271b1;\"><\/i> <span>Maxcdn<\/span>",
|
||||
"etsy": "<i class=\"fa-brands fa-etsy\" style=\"color: #2271b1;\"><\/i> <span>Etsy<\/span>",
|
||||
"facebook-messenger": "<i class=\"fa-brands fa-facebook-messenger\" style=\"color: #2271b1;\"><\/i> <span>Facebook Messenger<\/span>",
|
||||
"audible": "<i class=\"fa-brands fa-audible\" style=\"color: #2271b1;\"><\/i> <span>Audible<\/span>",
|
||||
"think-peaks": "<i class=\"fa-brands fa-think-peaks\" style=\"color: #2271b1;\"><\/i> <span>Think Peaks<\/span>",
|
||||
"bilibili": "<i class=\"fa-brands fa-bilibili\" style=\"color: #2271b1;\"><\/i> <span>Bilibili<\/span>",
|
||||
"erlang": "<i class=\"fa-brands fa-erlang\" style=\"color: #2271b1;\"><\/i> <span>Erlang<\/span>",
|
||||
"cotton-bureau": "<i class=\"fa-brands fa-cotton-bureau\" style=\"color: #2271b1;\"><\/i> <span>Cotton Bureau<\/span>",
|
||||
"dashcube": "<i class=\"fa-brands fa-dashcube\" style=\"color: #2271b1;\"><\/i> <span>Dashcube<\/span>",
|
||||
"42-group": "<i class=\"fa-brands fa-42-group\" style=\"color: #2271b1;\"><\/i> <span>42 Group<\/span>",
|
||||
"stack-exchange": "<i class=\"fa-brands fa-stack-exchange\" style=\"color: #2271b1;\"><\/i> <span>Stack Exchange<\/span>",
|
||||
"elementor": "<i class=\"fa-brands fa-elementor\" style=\"color: #2271b1;\"><\/i> <span>Elementor<\/span>",
|
||||
"square-pied-piper": "<i class=\"fa-brands fa-square-pied-piper\" style=\"color: #2271b1;\"><\/i> <span>Square Pied Piper<\/span>",
|
||||
"creative-commons-nd": "<i class=\"fa-brands fa-creative-commons-nd\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons Nd<\/span>",
|
||||
"palfed": "<i class=\"fa-brands fa-palfed\" style=\"color: #2271b1;\"><\/i> <span>Palfed<\/span>",
|
||||
"superpowers": "<i class=\"fa-brands fa-superpowers\" style=\"color: #2271b1;\"><\/i> <span>Superpowers<\/span>",
|
||||
"resolving": "<i class=\"fa-brands fa-resolving\" style=\"color: #2271b1;\"><\/i> <span>Resolving<\/span>",
|
||||
"xbox": "<i class=\"fa-brands fa-xbox\" style=\"color: #2271b1;\"><\/i> <span>Xbox<\/span>",
|
||||
"searchengin": "<i class=\"fa-brands fa-searchengin\" style=\"color: #2271b1;\"><\/i> <span>Searchengin<\/span>",
|
||||
"tiktok": "<i class=\"fa-brands fa-tiktok\" style=\"color: #2271b1;\"><\/i> <span>Tiktok<\/span>",
|
||||
"square-facebook": "<i class=\"fa-brands fa-square-facebook\" style=\"color: #2271b1;\"><\/i> <span>Square Facebook<\/span>",
|
||||
"renren": "<i class=\"fa-brands fa-renren\" style=\"color: #2271b1;\"><\/i> <span>Renren<\/span>",
|
||||
"linux": "<i class=\"fa-brands fa-linux\" style=\"color: #2271b1;\"><\/i> <span>Linux<\/span>",
|
||||
"glide": "<i class=\"fa-brands fa-glide\" style=\"color: #2271b1;\"><\/i> <span>Glide<\/span>",
|
||||
"linkedin": "<i class=\"fa-brands fa-linkedin\" style=\"color: #2271b1;\"><\/i> <span>Linkedin<\/span>",
|
||||
"hubspot": "<i class=\"fa-brands fa-hubspot\" style=\"color: #2271b1;\"><\/i> <span>Hubspot<\/span>",
|
||||
"deploydog": "<i class=\"fa-brands fa-deploydog\" style=\"color: #2271b1;\"><\/i> <span>Deploydog<\/span>",
|
||||
"twitch": "<i class=\"fa-brands fa-twitch\" style=\"color: #2271b1;\"><\/i> <span>Twitch<\/span>",
|
||||
"ravelry": "<i class=\"fa-brands fa-ravelry\" style=\"color: #2271b1;\"><\/i> <span>Ravelry<\/span>",
|
||||
"mixer": "<i class=\"fa-brands fa-mixer\" style=\"color: #2271b1;\"><\/i> <span>Mixer<\/span>",
|
||||
"square-lastfm": "<i class=\"fa-brands fa-square-lastfm\" style=\"color: #2271b1;\"><\/i> <span>Square Lastfm<\/span>",
|
||||
"vimeo": "<i class=\"fa-brands fa-vimeo\" style=\"color: #2271b1;\"><\/i> <span>Vimeo<\/span>",
|
||||
"mendeley": "<i class=\"fa-brands fa-mendeley\" style=\"color: #2271b1;\"><\/i> <span>Mendeley<\/span>",
|
||||
"uniregistry": "<i class=\"fa-brands fa-uniregistry\" style=\"color: #2271b1;\"><\/i> <span>Uniregistry<\/span>",
|
||||
"figma": "<i class=\"fa-brands fa-figma\" style=\"color: #2271b1;\"><\/i> <span>Figma<\/span>",
|
||||
"creative-commons-remix": "<i class=\"fa-brands fa-creative-commons-remix\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons Remix<\/span>",
|
||||
"cc-amazon-pay": "<i class=\"fa-brands fa-cc-amazon-pay\" style=\"color: #2271b1;\"><\/i> <span>Cc Amazon Pay<\/span>",
|
||||
"dropbox": "<i class=\"fa-brands fa-dropbox\" style=\"color: #2271b1;\"><\/i> <span>Dropbox<\/span>",
|
||||
"instagram": "<i class=\"fa-brands fa-instagram\" style=\"color: #2271b1;\"><\/i> <span>Instagram<\/span>",
|
||||
"cmplid": "<i class=\"fa-brands fa-cmplid\" style=\"color: #2271b1;\"><\/i> <span>Cmplid<\/span>",
|
||||
"facebook": "<i class=\"fa-brands fa-facebook\" style=\"color: #2271b1;\"><\/i> <span>Facebook<\/span>",
|
||||
"gripfire": "<i class=\"fa-brands fa-gripfire\" style=\"color: #2271b1;\"><\/i> <span>Gripfire<\/span>",
|
||||
"jedi-order": "<i class=\"fa-brands fa-jedi-order\" style=\"color: #2271b1;\"><\/i> <span>Jedi Order<\/span>",
|
||||
"uikit": "<i class=\"fa-brands fa-uikit\" style=\"color: #2271b1;\"><\/i> <span>Uikit<\/span>",
|
||||
"fort-awesome-alt": "<i class=\"fa-brands fa-fort-awesome-alt\" style=\"color: #2271b1;\"><\/i> <span>Fort Awesome Alt<\/span>",
|
||||
"phabricator": "<i class=\"fa-brands fa-phabricator\" style=\"color: #2271b1;\"><\/i> <span>Phabricator<\/span>",
|
||||
"ussunnah": "<i class=\"fa-brands fa-ussunnah\" style=\"color: #2271b1;\"><\/i> <span>Ussunnah<\/span>",
|
||||
"earlybirds": "<i class=\"fa-brands fa-earlybirds\" style=\"color: #2271b1;\"><\/i> <span>Earlybirds<\/span>",
|
||||
"trade-federation": "<i class=\"fa-brands fa-trade-federation\" style=\"color: #2271b1;\"><\/i> <span>Trade Federation<\/span>",
|
||||
"autoprefixer": "<i class=\"fa-brands fa-autoprefixer\" style=\"color: #2271b1;\"><\/i> <span>Autoprefixer<\/span>",
|
||||
"whatsapp": "<i class=\"fa-brands fa-whatsapp\" style=\"color: #2271b1;\"><\/i> <span>Whatsapp<\/span>",
|
||||
"slideshare": "<i class=\"fa-brands fa-slideshare\" style=\"color: #2271b1;\"><\/i> <span>Slideshare<\/span>",
|
||||
"google-play": "<i class=\"fa-brands fa-google-play\" style=\"color: #2271b1;\"><\/i> <span>Google Play<\/span>",
|
||||
"viadeo": "<i class=\"fa-brands fa-viadeo\" style=\"color: #2271b1;\"><\/i> <span>Viadeo<\/span>",
|
||||
"line": "<i class=\"fa-brands fa-line\" style=\"color: #2271b1;\"><\/i> <span>Line<\/span>",
|
||||
"google-drive": "<i class=\"fa-brands fa-google-drive\" style=\"color: #2271b1;\"><\/i> <span>Google Drive<\/span>",
|
||||
"servicestack": "<i class=\"fa-brands fa-servicestack\" style=\"color: #2271b1;\"><\/i> <span>Servicestack<\/span>",
|
||||
"simplybuilt": "<i class=\"fa-brands fa-simplybuilt\" style=\"color: #2271b1;\"><\/i> <span>Simplybuilt<\/span>",
|
||||
"bitbucket": "<i class=\"fa-brands fa-bitbucket\" style=\"color: #2271b1;\"><\/i> <span>Bitbucket<\/span>",
|
||||
"imdb": "<i class=\"fa-brands fa-imdb\" style=\"color: #2271b1;\"><\/i> <span>Imdb<\/span>",
|
||||
"deezer": "<i class=\"fa-brands fa-deezer\" style=\"color: #2271b1;\"><\/i> <span>Deezer<\/span>",
|
||||
"raspberry-pi": "<i class=\"fa-brands fa-raspberry-pi\" style=\"color: #2271b1;\"><\/i> <span>Raspberry Pi<\/span>",
|
||||
"jira": "<i class=\"fa-brands fa-jira\" style=\"color: #2271b1;\"><\/i> <span>Jira<\/span>",
|
||||
"docker": "<i class=\"fa-brands fa-docker\" style=\"color: #2271b1;\"><\/i> <span>Docker<\/span>",
|
||||
"screenpal": "<i class=\"fa-brands fa-screenpal\" style=\"color: #2271b1;\"><\/i> <span>Screenpal<\/span>",
|
||||
"bluetooth": "<i class=\"fa-brands fa-bluetooth\" style=\"color: #2271b1;\"><\/i> <span>Bluetooth<\/span>",
|
||||
"gitter": "<i class=\"fa-brands fa-gitter\" style=\"color: #2271b1;\"><\/i> <span>Gitter<\/span>",
|
||||
"d-and-d": "<i class=\"fa-brands fa-d-and-d\" style=\"color: #2271b1;\"><\/i> <span>D And D<\/span>",
|
||||
"microblog": "<i class=\"fa-brands fa-microblog\" style=\"color: #2271b1;\"><\/i> <span>Microblog<\/span>",
|
||||
"cc-diners-club": "<i class=\"fa-brands fa-cc-diners-club\" style=\"color: #2271b1;\"><\/i> <span>Cc Diners Club<\/span>",
|
||||
"gg-circle": "<i class=\"fa-brands fa-gg-circle\" style=\"color: #2271b1;\"><\/i> <span>Gg Circle<\/span>",
|
||||
"pied-piper-hat": "<i class=\"fa-brands fa-pied-piper-hat\" style=\"color: #2271b1;\"><\/i> <span>Pied Piper Hat<\/span>",
|
||||
"kickstarter-k": "<i class=\"fa-brands fa-kickstarter-k\" style=\"color: #2271b1;\"><\/i> <span>Kickstarter K<\/span>",
|
||||
"yandex": "<i class=\"fa-brands fa-yandex\" style=\"color: #2271b1;\"><\/i> <span>Yandex<\/span>",
|
||||
"readme": "<i class=\"fa-brands fa-readme\" style=\"color: #2271b1;\"><\/i> <span>Readme<\/span>",
|
||||
"html5": "<i class=\"fa-brands fa-html5\" style=\"color: #2271b1;\"><\/i> <span>Html5<\/span>",
|
||||
"sellsy": "<i class=\"fa-brands fa-sellsy\" style=\"color: #2271b1;\"><\/i> <span>Sellsy<\/span>",
|
||||
"sass": "<i class=\"fa-brands fa-sass\" style=\"color: #2271b1;\"><\/i> <span>Sass<\/span>",
|
||||
"wirsindhandwerk": "<i class=\"fa-brands fa-wirsindhandwerk\" style=\"color: #2271b1;\"><\/i> <span>Wirsindhandwerk<\/span>",
|
||||
"buromobelexperte": "<i class=\"fa-brands fa-buromobelexperte\" style=\"color: #2271b1;\"><\/i> <span>Buromobelexperte<\/span>",
|
||||
"salesforce": "<i class=\"fa-brands fa-salesforce\" style=\"color: #2271b1;\"><\/i> <span>Salesforce<\/span>",
|
||||
"octopus-deploy": "<i class=\"fa-brands fa-octopus-deploy\" style=\"color: #2271b1;\"><\/i> <span>Octopus Deploy<\/span>",
|
||||
"medapps": "<i class=\"fa-brands fa-medapps\" style=\"color: #2271b1;\"><\/i> <span>Medapps<\/span>",
|
||||
"ns8": "<i class=\"fa-brands fa-ns8\" style=\"color: #2271b1;\"><\/i> <span>Ns8<\/span>",
|
||||
"pinterest-p": "<i class=\"fa-brands fa-pinterest-p\" style=\"color: #2271b1;\"><\/i> <span>Pinterest P<\/span>",
|
||||
"apper": "<i class=\"fa-brands fa-apper\" style=\"color: #2271b1;\"><\/i> <span>Apper<\/span>",
|
||||
"fort-awesome": "<i class=\"fa-brands fa-fort-awesome\" style=\"color: #2271b1;\"><\/i> <span>Fort Awesome<\/span>",
|
||||
"waze": "<i class=\"fa-brands fa-waze\" style=\"color: #2271b1;\"><\/i> <span>Waze<\/span>",
|
||||
"cc-jcb": "<i class=\"fa-brands fa-cc-jcb\" style=\"color: #2271b1;\"><\/i> <span>Cc Jcb<\/span>",
|
||||
"snapchat": "<i class=\"fa-brands fa-snapchat\" style=\"color: #2271b1;\"><\/i> <span>Snapchat<\/span>",
|
||||
"fantasy-flight-games": "<i class=\"fa-brands fa-fantasy-flight-games\" style=\"color: #2271b1;\"><\/i> <span>Fantasy Flight Games<\/span>",
|
||||
"rust": "<i class=\"fa-brands fa-rust\" style=\"color: #2271b1;\"><\/i> <span>Rust<\/span>",
|
||||
"wix": "<i class=\"fa-brands fa-wix\" style=\"color: #2271b1;\"><\/i> <span>Wix<\/span>",
|
||||
"square-behance": "<i class=\"fa-brands fa-square-behance\" style=\"color: #2271b1;\"><\/i> <span>Square Behance<\/span>",
|
||||
"supple": "<i class=\"fa-brands fa-supple\" style=\"color: #2271b1;\"><\/i> <span>Supple<\/span>",
|
||||
"rebel": "<i class=\"fa-brands fa-rebel\" style=\"color: #2271b1;\"><\/i> <span>Rebel<\/span>",
|
||||
"css3": "<i class=\"fa-brands fa-css3\" style=\"color: #2271b1;\"><\/i> <span>Css3<\/span>",
|
||||
"staylinked": "<i class=\"fa-brands fa-staylinked\" style=\"color: #2271b1;\"><\/i> <span>Staylinked<\/span>",
|
||||
"kaggle": "<i class=\"fa-brands fa-kaggle\" style=\"color: #2271b1;\"><\/i> <span>Kaggle<\/span>",
|
||||
"space-awesome": "<i class=\"fa-brands fa-space-awesome\" style=\"color: #2271b1;\"><\/i> <span>Space Awesome<\/span>",
|
||||
"deviantart": "<i class=\"fa-brands fa-deviantart\" style=\"color: #2271b1;\"><\/i> <span>Deviantart<\/span>",
|
||||
"cpanel": "<i class=\"fa-brands fa-cpanel\" style=\"color: #2271b1;\"><\/i> <span>Cpanel<\/span>",
|
||||
"goodreads-g": "<i class=\"fa-brands fa-goodreads-g\" style=\"color: #2271b1;\"><\/i> <span>Goodreads G<\/span>",
|
||||
"square-git": "<i class=\"fa-brands fa-square-git\" style=\"color: #2271b1;\"><\/i> <span>Square Git<\/span>",
|
||||
"square-tumblr": "<i class=\"fa-brands fa-square-tumblr\" style=\"color: #2271b1;\"><\/i> <span>Square Tumblr<\/span>",
|
||||
"trello": "<i class=\"fa-brands fa-trello\" style=\"color: #2271b1;\"><\/i> <span>Trello<\/span>",
|
||||
"creative-commons-nc-jp": "<i class=\"fa-brands fa-creative-commons-nc-jp\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons Nc Jp<\/span>",
|
||||
"get-pocket": "<i class=\"fa-brands fa-get-pocket\" style=\"color: #2271b1;\"><\/i> <span>Get Pocket<\/span>",
|
||||
"perbyte": "<i class=\"fa-brands fa-perbyte\" style=\"color: #2271b1;\"><\/i> <span>Perbyte<\/span>",
|
||||
"grunt": "<i class=\"fa-brands fa-grunt\" style=\"color: #2271b1;\"><\/i> <span>Grunt<\/span>",
|
||||
"weebly": "<i class=\"fa-brands fa-weebly\" style=\"color: #2271b1;\"><\/i> <span>Weebly<\/span>",
|
||||
"connectdevelop": "<i class=\"fa-brands fa-connectdevelop\" style=\"color: #2271b1;\"><\/i> <span>Connectdevelop<\/span>",
|
||||
"leanpub": "<i class=\"fa-brands fa-leanpub\" style=\"color: #2271b1;\"><\/i> <span>Leanpub<\/span>",
|
||||
"black-tie": "<i class=\"fa-brands fa-black-tie\" style=\"color: #2271b1;\"><\/i> <span>Black Tie<\/span>",
|
||||
"themeco": "<i class=\"fa-brands fa-themeco\" style=\"color: #2271b1;\"><\/i> <span>Themeco<\/span>",
|
||||
"python": "<i class=\"fa-brands fa-python\" style=\"color: #2271b1;\"><\/i> <span>Python<\/span>",
|
||||
"android": "<i class=\"fa-brands fa-android\" style=\"color: #2271b1;\"><\/i> <span>Android<\/span>",
|
||||
"bots": "<i class=\"fa-brands fa-bots\" style=\"color: #2271b1;\"><\/i> <span>Bots<\/span>",
|
||||
"free-code-camp": "<i class=\"fa-brands fa-free-code-camp\" style=\"color: #2271b1;\"><\/i> <span>Free Code Camp<\/span>",
|
||||
"hornbill": "<i class=\"fa-brands fa-hornbill\" style=\"color: #2271b1;\"><\/i> <span>Hornbill<\/span>",
|
||||
"js": "<i class=\"fa-brands fa-js\" style=\"color: #2271b1;\"><\/i> <span>Js<\/span>",
|
||||
"ideal": "<i class=\"fa-brands fa-ideal\" style=\"color: #2271b1;\"><\/i> <span>Ideal<\/span>",
|
||||
"git": "<i class=\"fa-brands fa-git\" style=\"color: #2271b1;\"><\/i> <span>Git<\/span>",
|
||||
"dev": "<i class=\"fa-brands fa-dev\" style=\"color: #2271b1;\"><\/i> <span>Dev<\/span>",
|
||||
"sketch": "<i class=\"fa-brands fa-sketch\" style=\"color: #2271b1;\"><\/i> <span>Sketch<\/span>",
|
||||
"yandex-international": "<i class=\"fa-brands fa-yandex-international\" style=\"color: #2271b1;\"><\/i> <span>Yandex International<\/span>",
|
||||
"cc-amex": "<i class=\"fa-brands fa-cc-amex\" style=\"color: #2271b1;\"><\/i> <span>Cc Amex<\/span>",
|
||||
"uber": "<i class=\"fa-brands fa-uber\" style=\"color: #2271b1;\"><\/i> <span>Uber<\/span>",
|
||||
"github": "<i class=\"fa-brands fa-github\" style=\"color: #2271b1;\"><\/i> <span>Github<\/span>",
|
||||
"php": "<i class=\"fa-brands fa-php\" style=\"color: #2271b1;\"><\/i> <span>Php<\/span>",
|
||||
"alipay": "<i class=\"fa-brands fa-alipay\" style=\"color: #2271b1;\"><\/i> <span>Alipay<\/span>",
|
||||
"youtube": "<i class=\"fa-brands fa-youtube\" style=\"color: #2271b1;\"><\/i> <span>Youtube<\/span>",
|
||||
"skyatlas": "<i class=\"fa-brands fa-skyatlas\" style=\"color: #2271b1;\"><\/i> <span>Skyatlas<\/span>",
|
||||
"firefox-browser": "<i class=\"fa-brands fa-firefox-browser\" style=\"color: #2271b1;\"><\/i> <span>Firefox Browser<\/span>",
|
||||
"replyd": "<i class=\"fa-brands fa-replyd\" style=\"color: #2271b1;\"><\/i> <span>Replyd<\/span>",
|
||||
"suse": "<i class=\"fa-brands fa-suse\" style=\"color: #2271b1;\"><\/i> <span>Suse<\/span>",
|
||||
"jenkins": "<i class=\"fa-brands fa-jenkins\" style=\"color: #2271b1;\"><\/i> <span>Jenkins<\/span>",
|
||||
"twitter": "<i class=\"fa-brands fa-twitter\" style=\"color: #2271b1;\"><\/i> <span>Twitter<\/span>",
|
||||
"rockrms": "<i class=\"fa-brands fa-rockrms\" style=\"color: #2271b1;\"><\/i> <span>Rockrms<\/span>",
|
||||
"pinterest": "<i class=\"fa-brands fa-pinterest\" style=\"color: #2271b1;\"><\/i> <span>Pinterest<\/span>",
|
||||
"buffer": "<i class=\"fa-brands fa-buffer\" style=\"color: #2271b1;\"><\/i> <span>Buffer<\/span>",
|
||||
"npm": "<i class=\"fa-brands fa-npm\" style=\"color: #2271b1;\"><\/i> <span>Npm<\/span>",
|
||||
"yammer": "<i class=\"fa-brands fa-yammer\" style=\"color: #2271b1;\"><\/i> <span>Yammer<\/span>",
|
||||
"btc": "<i class=\"fa-brands fa-btc\" style=\"color: #2271b1;\"><\/i> <span>Btc<\/span>",
|
||||
"dribbble": "<i class=\"fa-brands fa-dribbble\" style=\"color: #2271b1;\"><\/i> <span>Dribbble<\/span>",
|
||||
"stumbleupon-circle": "<i class=\"fa-brands fa-stumbleupon-circle\" style=\"color: #2271b1;\"><\/i> <span>Stumbleupon Circle<\/span>",
|
||||
"internet-explorer": "<i class=\"fa-brands fa-internet-explorer\" style=\"color: #2271b1;\"><\/i> <span>Internet Explorer<\/span>",
|
||||
"stubber": "<i class=\"fa-brands fa-stubber\" style=\"color: #2271b1;\"><\/i> <span>Stubber<\/span>",
|
||||
"telegram": "<i class=\"fa-brands fa-telegram\" style=\"color: #2271b1;\"><\/i> <span>Telegram<\/span>",
|
||||
"old-republic": "<i class=\"fa-brands fa-old-republic\" style=\"color: #2271b1;\"><\/i> <span>Old Republic<\/span>",
|
||||
"odysee": "<i class=\"fa-brands fa-odysee\" style=\"color: #2271b1;\"><\/i> <span>Odysee<\/span>",
|
||||
"square-whatsapp": "<i class=\"fa-brands fa-square-whatsapp\" style=\"color: #2271b1;\"><\/i> <span>Square Whatsapp<\/span>",
|
||||
"node-js": "<i class=\"fa-brands fa-node-js\" style=\"color: #2271b1;\"><\/i> <span>Node Js<\/span>",
|
||||
"edge-legacy": "<i class=\"fa-brands fa-edge-legacy\" style=\"color: #2271b1;\"><\/i> <span>Edge Legacy<\/span>",
|
||||
"slack": "<i class=\"fa-brands fa-slack\" style=\"color: #2271b1;\"><\/i> <span>Slack<\/span>",
|
||||
"medrt": "<i class=\"fa-brands fa-medrt\" style=\"color: #2271b1;\"><\/i> <span>Medrt<\/span>",
|
||||
"usb": "<i class=\"fa-brands fa-usb\" style=\"color: #2271b1;\"><\/i> <span>Usb<\/span>",
|
||||
"tumblr": "<i class=\"fa-brands fa-tumblr\" style=\"color: #2271b1;\"><\/i> <span>Tumblr<\/span>",
|
||||
"vaadin": "<i class=\"fa-brands fa-vaadin\" style=\"color: #2271b1;\"><\/i> <span>Vaadin<\/span>",
|
||||
"quora": "<i class=\"fa-brands fa-quora\" style=\"color: #2271b1;\"><\/i> <span>Quora<\/span>",
|
||||
"reacteurope": "<i class=\"fa-brands fa-reacteurope\" style=\"color: #2271b1;\"><\/i> <span>Reacteurope<\/span>",
|
||||
"medium": "<i class=\"fa-brands fa-medium\" style=\"color: #2271b1;\"><\/i> <span>Medium<\/span>",
|
||||
"amilia": "<i class=\"fa-brands fa-amilia\" style=\"color: #2271b1;\"><\/i> <span>Amilia<\/span>",
|
||||
"mixcloud": "<i class=\"fa-brands fa-mixcloud\" style=\"color: #2271b1;\"><\/i> <span>Mixcloud<\/span>",
|
||||
"flipboard": "<i class=\"fa-brands fa-flipboard\" style=\"color: #2271b1;\"><\/i> <span>Flipboard<\/span>",
|
||||
"viacoin": "<i class=\"fa-brands fa-viacoin\" style=\"color: #2271b1;\"><\/i> <span>Viacoin<\/span>",
|
||||
"critical-role": "<i class=\"fa-brands fa-critical-role\" style=\"color: #2271b1;\"><\/i> <span>Critical Role<\/span>",
|
||||
"sitrox": "<i class=\"fa-brands fa-sitrox\" style=\"color: #2271b1;\"><\/i> <span>Sitrox<\/span>",
|
||||
"discourse": "<i class=\"fa-brands fa-discourse\" style=\"color: #2271b1;\"><\/i> <span>Discourse<\/span>",
|
||||
"joomla": "<i class=\"fa-brands fa-joomla\" style=\"color: #2271b1;\"><\/i> <span>Joomla<\/span>",
|
||||
"mastodon": "<i class=\"fa-brands fa-mastodon\" style=\"color: #2271b1;\"><\/i> <span>Mastodon<\/span>",
|
||||
"airbnb": "<i class=\"fa-brands fa-airbnb\" style=\"color: #2271b1;\"><\/i> <span>Airbnb<\/span>",
|
||||
"wolf-pack-battalion": "<i class=\"fa-brands fa-wolf-pack-battalion\" style=\"color: #2271b1;\"><\/i> <span>Wolf Pack Battalion<\/span>",
|
||||
"buy-n-large": "<i class=\"fa-brands fa-buy-n-large\" style=\"color: #2271b1;\"><\/i> <span>Buy N Large<\/span>",
|
||||
"gulp": "<i class=\"fa-brands fa-gulp\" style=\"color: #2271b1;\"><\/i> <span>Gulp<\/span>",
|
||||
"creative-commons-sampling-plus": "<i class=\"fa-brands fa-creative-commons-sampling-plus\" style=\"color: #2271b1;\"><\/i> <span>Creative Commons Sampling Plus<\/span>",
|
||||
"strava": "<i class=\"fa-brands fa-strava\" style=\"color: #2271b1;\"><\/i> <span>Strava<\/span>",
|
||||
"ember": "<i class=\"fa-brands fa-ember\" style=\"color: #2271b1;\"><\/i> <span>Ember<\/span>",
|
||||
"canadian-maple-leaf": "<i class=\"fa-brands fa-canadian-maple-leaf\" style=\"color: #2271b1;\"><\/i> <span>Canadian Maple Leaf<\/span>",
|
||||
"teamspeak": "<i class=\"fa-brands fa-teamspeak\" style=\"color: #2271b1;\"><\/i> <span>Teamspeak<\/span>",
|
||||
"pushed": "<i class=\"fa-brands fa-pushed\" style=\"color: #2271b1;\"><\/i> <span>Pushed<\/span>",
|
||||
"wordpress-simple": "<i class=\"fa-brands fa-wordpress-simple\" style=\"color: #2271b1;\"><\/i> <span>Wordpress Simple<\/span>",
|
||||
"nutritionix": "<i class=\"fa-brands fa-nutritionix\" style=\"color: #2271b1;\"><\/i> <span>Nutritionix<\/span>",
|
||||
"wodu": "<i class=\"fa-brands fa-wodu\" style=\"color: #2271b1;\"><\/i> <span>Wodu<\/span>",
|
||||
"google-pay": "<i class=\"fa-brands fa-google-pay\" style=\"color: #2271b1;\"><\/i> <span>Google Pay<\/span>",
|
||||
"intercom": "<i class=\"fa-brands fa-intercom\" style=\"color: #2271b1;\"><\/i> <span>Intercom<\/span>",
|
||||
"zhihu": "<i class=\"fa-brands fa-zhihu\" style=\"color: #2271b1;\"><\/i> <span>Zhihu<\/span>",
|
||||
"korvue": "<i class=\"fa-brands fa-korvue\" style=\"color: #2271b1;\"><\/i> <span>Korvue<\/span>",
|
||||
"pix": "<i class=\"fa-brands fa-pix\" style=\"color: #2271b1;\"><\/i> <span>Pix<\/span>",
|
||||
"steam-symbol": "<i class=\"fa-brands fa-steam-symbol\" style=\"color: #2271b1;\"><\/i> <span>Steam Symbol<\/span>"
|
||||
},
|
||||
"default_value": false,
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"ui": 1,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
},
|
||||
{
|
||||
"key": "field_664c65c653f1c",
|
||||
"label": "URL",
|
||||
"name": "url",
|
||||
"aria-label": "",
|
||||
"type": "url",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "80",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"placeholder": ""
|
||||
}
|
||||
],
|
||||
"location": [
|
||||
[
|
||||
{
|
||||
"param": "post_type",
|
||||
"operator": "==",
|
||||
"value": "social"
|
||||
}
|
||||
]
|
||||
],
|
||||
"menu_order": 0,
|
||||
"position": "normal",
|
||||
"style": "default",
|
||||
"label_placement": "top",
|
||||
"instruction_placement": "label",
|
||||
"hide_on_screen": "",
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"modified": 1764224435
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"root": false,
|
||||
"rules": {
|
||||
"import/no-extraneous-dependencies": 0,
|
||||
"prefer-rest-params": 0,
|
||||
"comma-dangle": ["error", {
|
||||
"arrays": "always-multiline",
|
||||
"objects": "always-multiline",
|
||||
"imports": "always-multiline",
|
||||
"exports": "always-multiline",
|
||||
"functions": "ignore"
|
||||
}]
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
const path = require('path');
|
||||
const { argv } = require('yargs');
|
||||
const merge = require('webpack-merge');
|
||||
|
||||
const desire = require('./util/desire');
|
||||
|
||||
const userConfig = merge(desire(`${__dirname}/../config`), desire(`${__dirname}/../config-local`));
|
||||
|
||||
const isProduction = !!((argv.env && argv.env.production) || argv.p);
|
||||
const rootPath = (userConfig.paths && userConfig.paths.root)
|
||||
? userConfig.paths.root
|
||||
: process.cwd();
|
||||
|
||||
const config = merge({
|
||||
open: true,
|
||||
copy: 'images/**/*',
|
||||
proxyUrl: 'http://localhost:3000',
|
||||
cacheBusting: '[name]_[hash]',
|
||||
paths: {
|
||||
root: rootPath,
|
||||
assets: path.join(rootPath, 'resources/assets'),
|
||||
dist: path.join(rootPath, 'dist'),
|
||||
},
|
||||
enabled: {
|
||||
sourceMaps: !isProduction,
|
||||
optimize: isProduction,
|
||||
cacheBusting: isProduction,
|
||||
watcher: !!argv.watch,
|
||||
},
|
||||
watch: [],
|
||||
}, userConfig);
|
||||
|
||||
module.exports = merge(config, {
|
||||
env: Object.assign({ production: isProduction, development: !isProduction }, argv.env),
|
||||
publicPath: `${config.publicPath}/${path.basename(config.paths.dist)}/`,
|
||||
manifest: {},
|
||||
});
|
||||
|
||||
if (process.env.NODE_ENV === undefined) {
|
||||
process.env.NODE_ENV = isProduction ? 'production' : 'development';
|
||||
}
|
||||
|
||||
/**
|
||||
* If your publicPath differs between environments, but you know it at compile time,
|
||||
* then set SAGE_DIST_PATH as an environment variable before compiling.
|
||||
* Example:
|
||||
* SAGE_DIST_PATH=/wp-content/themes/sage/dist yarn build:production
|
||||
*/
|
||||
if (process.env.SAGE_DIST_PATH) {
|
||||
module.exports.publicPath = process.env.SAGE_DIST_PATH;
|
||||
}
|
||||
|
||||
/**
|
||||
* If you don't know your publicPath at compile time, then uncomment the lines
|
||||
* below and use WordPress's wp_localize_script() to set SAGE_DIST_PATH global.
|
||||
* Example:
|
||||
* wp_localize_script('sage/main.js', 'SAGE_DIST_PATH', get_theme_file_uri('dist/'))
|
||||
*/
|
||||
// Object.keys(module.exports.entry).forEach(id =>
|
||||
// module.exports.entry[id].unshift(path.join(__dirname, 'helpers/public-path.js')));
|
||||
@@ -1,7 +0,0 @@
|
||||
const hotMiddlewareScript = require('webpack-hot-middleware/client?noInfo=true&timeout=20000&reload=true');
|
||||
|
||||
hotMiddlewareScript.subscribe(event => {
|
||||
if (event.action === 'reload') {
|
||||
window.location.reload();
|
||||
}
|
||||
});
|
||||
@@ -1,7 +0,0 @@
|
||||
/* eslint-env browser */
|
||||
/* globals SAGE_DIST_PATH */
|
||||
|
||||
/** Dynamically set absolute public path from current protocol and host */
|
||||
if (SAGE_DIST_PATH) {
|
||||
__webpack_public_path__ = SAGE_DIST_PATH; // eslint-disable-line no-undef, camelcase
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
/* eslint-disable */
|
||||
|
||||
const cssnanoConfig = {
|
||||
preset: ['default', { discardComments: { removeAll: true } }]
|
||||
};
|
||||
|
||||
module.exports = ({ file, options }) => {
|
||||
return {
|
||||
parser: options.enabled.optimize ? 'postcss-safe-parser' : undefined,
|
||||
plugins: {
|
||||
cssnano: options.enabled.optimize ? cssnanoConfig : false,
|
||||
autoprefixer: true,
|
||||
},
|
||||
};
|
||||
};
|
||||
@@ -1,15 +0,0 @@
|
||||
/**
|
||||
* Loop through webpack entry
|
||||
* and add the hot middleware
|
||||
* @param {Object} entry webpack entry
|
||||
* @return {Object} entry with hot middleware
|
||||
*/
|
||||
module.exports = (entry) => {
|
||||
const results = {};
|
||||
|
||||
Object.keys(entry).forEach((name) => {
|
||||
results[name] = Array.isArray(entry[name]) ? entry[name].slice(0) : [entry[name]];
|
||||
results[name].unshift(`${__dirname}/../helpers/hmr-client.js`);
|
||||
});
|
||||
return results;
|
||||
};
|
||||
@@ -1,34 +0,0 @@
|
||||
const path = require('path');
|
||||
|
||||
module.exports = (key, value) => {
|
||||
if (typeof value === 'string') {
|
||||
return value;
|
||||
}
|
||||
const manifest = value;
|
||||
/**
|
||||
* Hack to prepend scripts/ or styles/ to manifest keys
|
||||
*
|
||||
* This might need to be reworked at some point.
|
||||
*
|
||||
* Before:
|
||||
* {
|
||||
* "main.js": "scripts/main_abcdef.js"
|
||||
* "main.css": "styles/main_abcdef.css"
|
||||
* }
|
||||
* After:
|
||||
* {
|
||||
* "scripts/main.js": "scripts/main_abcdef.js"
|
||||
* "styles/main.css": "styles/main_abcdef.css"
|
||||
* }
|
||||
*/
|
||||
Object.keys(manifest).forEach((src) => {
|
||||
const sourcePath = path.basename(path.dirname(src));
|
||||
const targetPath = path.basename(path.dirname(manifest[src]));
|
||||
if (sourcePath === targetPath) {
|
||||
return;
|
||||
}
|
||||
manifest[`${targetPath}/${src}`] = manifest[src];
|
||||
delete manifest[src];
|
||||
});
|
||||
return manifest;
|
||||
};
|
||||
@@ -1,14 +0,0 @@
|
||||
/**
|
||||
* @export
|
||||
* @param {string} dependency
|
||||
* @param {any} [fallback]
|
||||
* @return {any}
|
||||
*/
|
||||
module.exports = (dependency, fallback) => {
|
||||
try {
|
||||
require.resolve(dependency);
|
||||
} catch (err) {
|
||||
return fallback;
|
||||
}
|
||||
return require(dependency); // eslint-disable-line import/no-dynamic-require
|
||||
};
|
||||
@@ -1,211 +0,0 @@
|
||||
'use strict'; // eslint-disable-line
|
||||
|
||||
const webpack = require('webpack');
|
||||
const merge = require('webpack-merge');
|
||||
const CleanPlugin = require('clean-webpack-plugin');
|
||||
const ExtractTextPlugin = require('extract-text-webpack-plugin');
|
||||
const StyleLintPlugin = require('stylelint-webpack-plugin');
|
||||
const CopyGlobsPlugin = require('copy-globs-webpack-plugin');
|
||||
|
||||
const config = require('./config');
|
||||
|
||||
const assetsFilenames = (config.enabled.cacheBusting) ? config.cacheBusting : '[name]';
|
||||
|
||||
let webpackConfig = {
|
||||
context: config.paths.assets,
|
||||
entry: config.entry,
|
||||
devtool: (config.enabled.sourceMaps ? '#source-map' : undefined),
|
||||
output: {
|
||||
path: config.paths.dist,
|
||||
publicPath: config.publicPath,
|
||||
filename: `scripts/${assetsFilenames}.js`,
|
||||
},
|
||||
stats: {
|
||||
hash: false,
|
||||
version: false,
|
||||
timings: false,
|
||||
children: false,
|
||||
errors: false,
|
||||
errorDetails: false,
|
||||
warnings: false,
|
||||
chunks: false,
|
||||
modules: false,
|
||||
reasons: false,
|
||||
source: false,
|
||||
publicPath: false,
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
enforce: 'pre',
|
||||
test: /\.js$/,
|
||||
include: config.paths.assets,
|
||||
use: 'eslint',
|
||||
},
|
||||
{
|
||||
enforce: 'pre',
|
||||
test: /\.(js|s?[ca]ss)$/,
|
||||
include: config.paths.assets,
|
||||
loader: 'import-glob',
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
exclude: [/(node_modules|bower_components)(?)/],
|
||||
use: [
|
||||
{ loader: 'cache' },
|
||||
{ loader: 'buble', options: { objectAssign: 'Object.assign' } },
|
||||
],
|
||||
},
|
||||
{
|
||||
test: /\.css$/,
|
||||
include: config.paths.assets,
|
||||
use: ExtractTextPlugin.extract({
|
||||
fallback: 'style',
|
||||
use: [
|
||||
{ loader: 'cache' },
|
||||
{ loader: 'css', options: { sourceMap: config.enabled.sourceMaps } },
|
||||
{
|
||||
loader: 'postcss', options: {
|
||||
config: { path: __dirname, ctx: config },
|
||||
sourceMap: config.enabled.sourceMaps,
|
||||
},
|
||||
},
|
||||
],
|
||||
}),
|
||||
},
|
||||
{
|
||||
test: /\.scss$/,
|
||||
include: config.paths.assets,
|
||||
use: ExtractTextPlugin.extract({
|
||||
fallback: 'style',
|
||||
use: [
|
||||
{ loader: 'cache' },
|
||||
{ loader: 'css', options: { sourceMap: config.enabled.sourceMaps } },
|
||||
{
|
||||
loader: 'postcss', options: {
|
||||
config: { path: __dirname, ctx: config },
|
||||
sourceMap: config.enabled.sourceMaps,
|
||||
},
|
||||
},
|
||||
{ loader: 'resolve-url', options: { sourceMap: config.enabled.sourceMaps } },
|
||||
{ loader: 'sass', options: { sourceMap: config.enabled.sourceMaps } },
|
||||
],
|
||||
}),
|
||||
},
|
||||
{
|
||||
test: /\.(ttf|eot|woff2?|png|jpe?g|gif|svg|ico)$/,
|
||||
include: config.paths.assets,
|
||||
loader: 'url',
|
||||
options: {
|
||||
limit: 4096,
|
||||
name: `[path]${assetsFilenames}.[ext]`,
|
||||
},
|
||||
},
|
||||
{
|
||||
test: /\.(ttf|eot|woff2?|png|jpe?g|gif|svg|ico)$/,
|
||||
include: /node_modules|bower_components/,
|
||||
loader: 'url',
|
||||
options: {
|
||||
limit: 4096,
|
||||
outputPath: 'vendor/',
|
||||
name: `${config.cacheBusting}.[ext]`,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
resolve: {
|
||||
modules: [
|
||||
config.paths.assets,
|
||||
'node_modules',
|
||||
'bower_components',
|
||||
],
|
||||
enforceExtension: false,
|
||||
},
|
||||
resolveLoader: {
|
||||
moduleExtensions: ['-loader'],
|
||||
},
|
||||
externals: {
|
||||
jquery: 'jQuery',
|
||||
},
|
||||
plugins: [
|
||||
new CleanPlugin([config.paths.dist], {
|
||||
root: config.paths.root,
|
||||
verbose: false,
|
||||
}),
|
||||
/**
|
||||
* It would be nice to switch to copy-webpack-plugin, but
|
||||
* unfortunately it doesn't provide a reliable way of
|
||||
* tracking the before/after file names
|
||||
*/
|
||||
new CopyGlobsPlugin({
|
||||
pattern: config.copy,
|
||||
output: `[path]${assetsFilenames}.[ext]`,
|
||||
manifest: config.manifest,
|
||||
}),
|
||||
new ExtractTextPlugin({
|
||||
filename: `styles/${assetsFilenames}.css`,
|
||||
allChunks: true,
|
||||
disable: (config.enabled.watcher),
|
||||
}),
|
||||
new webpack.ProvidePlugin({
|
||||
$: 'jquery',
|
||||
jQuery: 'jquery',
|
||||
'window.jQuery': 'jquery',
|
||||
Tether: 'tether',
|
||||
'window.Tether': 'tether',
|
||||
}),
|
||||
new webpack.LoaderOptionsPlugin({
|
||||
minimize: config.enabled.optimize,
|
||||
debug: config.enabled.watcher,
|
||||
stats: { colors: true },
|
||||
}),
|
||||
new webpack.LoaderOptionsPlugin({
|
||||
test: /\.s?css$/,
|
||||
options: {
|
||||
output: { path: config.paths.dist },
|
||||
context: config.paths.assets,
|
||||
},
|
||||
}),
|
||||
new webpack.LoaderOptionsPlugin({
|
||||
test: /\.js$/,
|
||||
options: {
|
||||
eslint: { failOnWarning: false, failOnError: true },
|
||||
},
|
||||
}),
|
||||
new StyleLintPlugin({
|
||||
failOnError: !config.enabled.watcher,
|
||||
syntax: 'scss',
|
||||
}),
|
||||
],
|
||||
};
|
||||
|
||||
/* eslint-disable global-require */ /** Let's only load dependencies as needed */
|
||||
|
||||
if (config.enabled.optimize) {
|
||||
webpackConfig = merge(webpackConfig, require('./webpack.config.optimize'));
|
||||
}
|
||||
|
||||
if (config.env.production) {
|
||||
webpackConfig.plugins.push(new webpack.NoEmitOnErrorsPlugin());
|
||||
}
|
||||
|
||||
if (config.enabled.cacheBusting) {
|
||||
const WebpackAssetsManifest = require('webpack-assets-manifest');
|
||||
|
||||
webpackConfig.plugins.push(
|
||||
new WebpackAssetsManifest({
|
||||
output: 'assets.json',
|
||||
space: 2,
|
||||
writeToDisk: false,
|
||||
assets: config.manifest,
|
||||
replacer: require('./util/assetManifestsFormatter'),
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
if (config.enabled.watcher) {
|
||||
webpackConfig.entry = require('./util/addHotMiddleware')(webpackConfig.entry);
|
||||
webpackConfig = merge(webpackConfig, require('./webpack.config.watch'));
|
||||
}
|
||||
|
||||
module.exports = webpackConfig;
|
||||
@@ -1,19 +0,0 @@
|
||||
'use strict'; // eslint-disable-line
|
||||
|
||||
const { default: ImageminPlugin } = require('imagemin-webpack-plugin');
|
||||
const imageminMozjpeg = require('imagemin-mozjpeg');
|
||||
|
||||
const config = require('./config');
|
||||
|
||||
module.exports = {
|
||||
plugins: [
|
||||
new ImageminPlugin({
|
||||
optipng: { optimizationLevel: 7 },
|
||||
gifsicle: { optimizationLevel: 3 },
|
||||
pngquant: { quality: '65-90', speed: 4 },
|
||||
svgo: { removeUnknownsAndDefaults: false, cleanupIDs: false },
|
||||
plugins: [imageminMozjpeg({ quality: 75 })],
|
||||
disable: (config.enabled.watcher),
|
||||
}),
|
||||
],
|
||||
};
|
||||
@@ -1,35 +0,0 @@
|
||||
const url = require('url');
|
||||
const webpack = require('webpack');
|
||||
const BrowserSyncPlugin = require('browsersync-webpack-plugin');
|
||||
|
||||
const config = require('./config');
|
||||
|
||||
const target = process.env.DEVURL || config.devUrl;
|
||||
|
||||
/**
|
||||
* We do this to enable injection over SSL.
|
||||
*/
|
||||
if (url.parse(target).protocol === 'https:') {
|
||||
process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
output: {
|
||||
pathinfo: true,
|
||||
publicPath: config.proxyUrl + config.publicPath,
|
||||
},
|
||||
devtool: '#cheap-module-source-map',
|
||||
stats: false,
|
||||
plugins: [
|
||||
new webpack.optimize.OccurrenceOrderPlugin(),
|
||||
new webpack.HotModuleReplacementPlugin(),
|
||||
new webpack.NoEmitOnErrorsPlugin(),
|
||||
new BrowserSyncPlugin({
|
||||
target,
|
||||
open: config.open,
|
||||
proxyUrl: config.proxyUrl,
|
||||
watch: config.watch,
|
||||
delay: 500,
|
||||
}),
|
||||
],
|
||||
};
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"entry": {
|
||||
"main": [
|
||||
"./scripts/main.js",
|
||||
"./styles/main.scss"
|
||||
],
|
||||
"customizer": [
|
||||
"./scripts/customizer.js"
|
||||
]
|
||||
},
|
||||
"publicPath": "/app/themes/sage",
|
||||
"devUrl": "http://example.dev",
|
||||
"proxyUrl": "http://localhost:3000",
|
||||
"cacheBusting": "[name]_[hash:8]",
|
||||
"watch": [
|
||||
"app/**/*.php",
|
||||
"config/**/*.php",
|
||||
"resources/controllers/**/*.php",
|
||||
"resources/views/**/*.php"
|
||||
]
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
import 'bootstrap';
|
||||
@@ -1,5 +0,0 @@
|
||||
import $ from 'jquery';
|
||||
|
||||
wp.customize('blogname', (value) => {
|
||||
value.bind(to => $('.brand').text(to));
|
||||
});
|
||||
@@ -1,24 +0,0 @@
|
||||
// import external dependencies
|
||||
import 'jquery';
|
||||
|
||||
// Import everything from autoload
|
||||
import "./autoload/**/*"
|
||||
|
||||
// import local dependencies
|
||||
import Router from './util/Router';
|
||||
import common from './routes/common';
|
||||
import home from './routes/home';
|
||||
import aboutUs from './routes/about';
|
||||
|
||||
/** Populate Router instance with DOM routes */
|
||||
const routes = new Router({
|
||||
// All pages
|
||||
common,
|
||||
// Home page
|
||||
home,
|
||||
// About Us page, note the change from about-us to aboutUs.
|
||||
aboutUs,
|
||||
});
|
||||
|
||||
// Load Events
|
||||
jQuery(document).ready(() => routes.loadEvents());
|
||||
@@ -1,5 +0,0 @@
|
||||
export default {
|
||||
init() {
|
||||
// JavaScript to be fired on the about us page
|
||||
},
|
||||
};
|
||||
@@ -1,8 +0,0 @@
|
||||
export default {
|
||||
init() {
|
||||
// JavaScript to be fired on all pages
|
||||
},
|
||||
finalize() {
|
||||
// JavaScript to be fired on all pages, after page specific JS is fired
|
||||
},
|
||||
};
|
||||
@@ -1,8 +0,0 @@
|
||||
export default {
|
||||
init() {
|
||||
// JavaScript to be fired on the home page
|
||||
},
|
||||
finalize() {
|
||||
// JavaScript to be fired on the home page, after the init JS
|
||||
},
|
||||
};
|
||||
@@ -1,63 +0,0 @@
|
||||
import camelCase from './camelCase';
|
||||
|
||||
/**
|
||||
* DOM-based Routing
|
||||
*
|
||||
* Based on {@link http://goo.gl/EUTi53|Markup-based Unobtrusive Comprehensive DOM-ready Execution} by Paul Irish
|
||||
*
|
||||
* The routing fires all common scripts, followed by the page specific scripts.
|
||||
* Add additional events for more control over timing e.g. a finalize event
|
||||
*/
|
||||
class Router {
|
||||
|
||||
/**
|
||||
* Create a new Router
|
||||
* @param {Object} routes
|
||||
*/
|
||||
constructor(routes) {
|
||||
this.routes = routes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fire Router events
|
||||
* @param {string} route DOM-based route derived from body classes (`<body class="...">`)
|
||||
* @param {string} [event] Events on the route. By default, `init` and `finalize` events are called.
|
||||
* @param {string} [arg] Any custom argument to be passed to the event.
|
||||
*/
|
||||
fire(route, event = 'init', arg) {
|
||||
const fire = route !== '' && this.routes[route] && typeof this.routes[route][event] === 'function';
|
||||
if (fire) {
|
||||
this.routes[route][event](arg);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatically load and fire Router events
|
||||
*
|
||||
* Events are fired in the following order:
|
||||
* * common init
|
||||
* * page-specific init
|
||||
* * page-specific finalize
|
||||
* * common finalize
|
||||
*/
|
||||
loadEvents() {
|
||||
// Fire common init JS
|
||||
this.fire('common');
|
||||
|
||||
// Fire page-specific init JS, and then finalize JS
|
||||
document.body.className
|
||||
.toLowerCase()
|
||||
.replace(/-/g, '_')
|
||||
.split(/\s+/)
|
||||
.map(camelCase)
|
||||
.forEach((className) => {
|
||||
this.fire(className);
|
||||
this.fire(className, 'finalize');
|
||||
});
|
||||
|
||||
// Fire common finalize JS
|
||||
this.fire('common', 'finalize');
|
||||
}
|
||||
}
|
||||
|
||||
export default Router
|
||||
@@ -1,9 +0,0 @@
|
||||
/**
|
||||
* the most terrible camelizer on the internet, guaranteed!
|
||||
* @param {string} str String that isn't camel-case, e.g., CAMeL_CaSEiS-harD
|
||||
* @return {string} String converted to camel-case, e.g., camelCaseIsHard
|
||||
*/
|
||||
export default str => `${str.charAt(0).toLowerCase()}${str.replace(/[\W_]/g, '|').split('|')
|
||||
.map(part => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)
|
||||
.join('')
|
||||
.slice(1)}`;
|
||||
@@ -1 +0,0 @@
|
||||
@import "~bootstrap/scss/bootstrap";
|
||||
@@ -1,2 +0,0 @@
|
||||
/** Colors */
|
||||
$brand-primary: #27ae60;
|
||||
@@ -1,23 +0,0 @@
|
||||
.comment-list {
|
||||
@extend .list-unstyled;
|
||||
}
|
||||
|
||||
.comment-list ol {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.comment-form p {
|
||||
@extend .form-group;
|
||||
}
|
||||
|
||||
.comment-form input[type="text"],
|
||||
.comment-form input[type="email"],
|
||||
.comment-form input[type="url"],
|
||||
.comment-form textarea {
|
||||
@extend .form-control;
|
||||
}
|
||||
|
||||
.comment-form input[type="submit"] {
|
||||
@extend .btn;
|
||||
@extend .btn-secondary;
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
/** Search form */
|
||||
.search-form {
|
||||
@extend .form-inline;
|
||||
}
|
||||
|
||||
.search-form label {
|
||||
@extend .form-group;
|
||||
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.search-form .search-field {
|
||||
@extend .form-control;
|
||||
}
|
||||
|
||||
.search-form .search-submit {
|
||||
@extend .btn;
|
||||
@extend .btn-secondary;
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
/**
|
||||
* WordPress Generated Classes
|
||||
* @see http://codex.wordpress.org/CSS#WordPress_Generated_Classes
|
||||
*/
|
||||
|
||||
/** Media alignment */
|
||||
.alignnone {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.aligncenter {
|
||||
display: block;
|
||||
margin: ($spacer / 2) auto;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.alignleft,
|
||||
.alignright {
|
||||
margin-bottom: ($spacer / 2);
|
||||
height: auto;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(sm) {
|
||||
.alignleft {
|
||||
float: left;
|
||||
margin-right: ($spacer / 2);
|
||||
}
|
||||
|
||||
.alignright {
|
||||
float: right;
|
||||
margin-left: ($spacer / 2);
|
||||
}
|
||||
}
|
||||
|
||||
/** Captions */
|
||||
.wp-caption {
|
||||
@extend .figure;
|
||||
}
|
||||
|
||||
.wp-caption img {
|
||||
@extend .figure-img;
|
||||
@extend .img-fluid;
|
||||
}
|
||||
|
||||
.wp-caption-text {
|
||||
@extend .figure-caption;
|
||||
}
|
||||
|
||||
/** Text meant only for screen readers */
|
||||
.screen-reader-text {
|
||||
@extend .sr-only;
|
||||
@extend .sr-only-focusable;
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
.banner .nav li {
|
||||
@extend .nav-item;
|
||||
}
|
||||
|
||||
.banner .nav a {
|
||||
@extend .nav-link;
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
body#tinymce {
|
||||
margin: 12px !important;
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
@import "common/variables";
|
||||
|
||||
/** Import everything from autoload */
|
||||
@import "./autoload/**/*";
|
||||
|
||||
/**
|
||||
* Import npm dependencies
|
||||
*
|
||||
* Prefix your imports with `~` to grab from node_modules/
|
||||
* @see https://github.com/webpack-contrib/sass-loader#imports
|
||||
*/
|
||||
// @import "~some-node-module";
|
||||
|
||||
/** Import theme styles */
|
||||
@import "common/global";
|
||||
@import "components/buttons";
|
||||
@import "components/comments";
|
||||
@import "components/forms";
|
||||
@import "components/wp-classes";
|
||||
@import "layouts/header";
|
||||
@import "layouts/sidebar";
|
||||
@import "layouts/footer";
|
||||
@import "layouts/pages";
|
||||
@import "layouts/posts";
|
||||
@import "layouts/tinymce";
|
||||
@@ -1,10 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Sober\Controller\Controller;
|
||||
|
||||
class About extends Controller
|
||||
{
|
||||
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Sober\Controller\Controller;
|
||||
|
||||
class App extends Controller
|
||||
{
|
||||
public function siteName()
|
||||
{
|
||||
return get_bloginfo('name');
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
use Sober\Controller\Controller;
|
||||
|
||||
class Home extends Controller
|
||||
{
|
||||
|
||||
}
|
||||
25
resources/css/app.scss
Normal file
25
resources/css/app.scss
Normal file
@@ -0,0 +1,25 @@
|
||||
// Global Variables, Mixins, and Framework
|
||||
@use "global/variables";
|
||||
@use "global/mixins";
|
||||
@use "global/fonts";
|
||||
@use "global/typography";
|
||||
@use "global/framework";
|
||||
|
||||
// Third Party Plugins
|
||||
@use "plugins/contact-form-7";
|
||||
@use "plugins/mce";
|
||||
|
||||
// Components
|
||||
@use "components/block";
|
||||
@use "components/forms";
|
||||
@use "components/button";
|
||||
@use "components/card";
|
||||
@use "components/BadEggLightbox";
|
||||
|
||||
// Sections
|
||||
@use "sections/header";
|
||||
@use "sections/footer";
|
||||
|
||||
// Page Styles
|
||||
@use "views/page";
|
||||
|
||||
92
resources/css/components/_BadEggLightbox.scss
Normal file
92
resources/css/components/_BadEggLightbox.scss
Normal file
@@ -0,0 +1,92 @@
|
||||
#badegg-lightbox {
|
||||
&-overlay,
|
||||
&-image,
|
||||
&-close {
|
||||
transition: all 300ms ease;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
&-modal {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
z-index: 9999;
|
||||
padding: 3em;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
&-overlay {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: rgba(white, 0.5);
|
||||
|
||||
.open & {
|
||||
opacity: 1;
|
||||
backdrop-filter: blur(1em);
|
||||
}
|
||||
}
|
||||
|
||||
&-image {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
object-fit: contain;
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
width: auto;
|
||||
height: auto;
|
||||
transform: scale(0.8);
|
||||
|
||||
.open & {
|
||||
transform: none;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
&-close {
|
||||
position: absolute;
|
||||
z-index: 3;
|
||||
top: 1em;
|
||||
right: 1em;
|
||||
display: block;
|
||||
appearance: none;
|
||||
border: none;
|
||||
background: transparent;
|
||||
border: 2px solid black;
|
||||
border-radius: 50%;
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
cursor: pointer;
|
||||
transform: scale(0.01) rotate(-360deg);
|
||||
|
||||
.open & {
|
||||
opacity: 1;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
transform: scale(1.2) rotate(90deg);
|
||||
}
|
||||
|
||||
.admin-bar & {
|
||||
top: calc(1em + 32px);
|
||||
|
||||
@media (max-width: 782px) {
|
||||
top: calc(1em + 46px);
|
||||
}
|
||||
}
|
||||
|
||||
svg {
|
||||
display: block;
|
||||
width: 100%;
|
||||
stroke: black;
|
||||
stroke-width: 5;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline: 2px dashed red;
|
||||
}
|
||||
}
|
||||
}
|
||||
15
resources/css/components/_block.scss
Normal file
15
resources/css/components/_block.scss
Normal file
@@ -0,0 +1,15 @@
|
||||
|
||||
|
||||
.has-bg-image {
|
||||
position: relative;
|
||||
|
||||
>.container {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.badegg-block-background {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
}
|
||||
}
|
||||
111
resources/css/components/_button.scss
Normal file
111
resources/css/components/_button.scss
Normal file
@@ -0,0 +1,111 @@
|
||||
@use "../global/variables/fonts";
|
||||
@use "../global/variables/colours";
|
||||
|
||||
button {
|
||||
&%block,
|
||||
&.block {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
font-size: 1em;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
button,
|
||||
input[type="submit"] {
|
||||
&.btn {
|
||||
appearance: none;
|
||||
}
|
||||
}
|
||||
|
||||
%button,
|
||||
.btn {
|
||||
display: inline-block;
|
||||
padding: 0.5em 1.25em;
|
||||
border: 0.125em solid colours.$black;
|
||||
border-radius: 0.25em;
|
||||
background-color: colours.$black;
|
||||
color: colours.$white;
|
||||
font-family: fonts.$font;
|
||||
font-weight: 700;
|
||||
text-decoration: none;
|
||||
white-space: normal;
|
||||
cursor: pointer;
|
||||
transition: 300ms ease all;
|
||||
|
||||
.knockout & {
|
||||
background-color: colours.$white;
|
||||
border-color: colours.$white;
|
||||
color: currentcolor;
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
color: colours.$white;
|
||||
text-decoration: none;
|
||||
background-color: rgba(colours.$black, 0.5);
|
||||
border-color: rgba(colours.$black, 0.5);
|
||||
|
||||
.knockout & {
|
||||
background-color: rgba(colours.$white, 0.5);
|
||||
border-color: rgba(colours.$white, 0.5);
|
||||
color: currentcolor;
|
||||
}
|
||||
}
|
||||
|
||||
&.outline {
|
||||
border-color: colours.$black;
|
||||
background-color: transparent;
|
||||
color: colours.$black;
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: colours.$black;
|
||||
color: colours.$white;
|
||||
}
|
||||
|
||||
.knockout & {
|
||||
@media screen {
|
||||
border-color: colours.$white;
|
||||
color: colours.$white;
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: colours.$white;
|
||||
color: colours.$black;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.wide {
|
||||
padding-right: 3em;
|
||||
padding-left: 3em;
|
||||
}
|
||||
|
||||
&.thin {
|
||||
padding-top: 0.5em;
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
|
||||
&.full {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding-right: 0.625em;
|
||||
padding-left: 0.625em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
&.small { font-size: 1em; }
|
||||
&.smaller { font-size: 0.875em; }
|
||||
&.big { font-size: 1.25em; }
|
||||
&.bigger { font-size: 1.5em; }
|
||||
}
|
||||
|
||||
.btn-wrap {
|
||||
margin: 1.5em -0.25em -0.25em;
|
||||
|
||||
.btn {
|
||||
margin: 0.25em;
|
||||
}
|
||||
}
|
||||
13
resources/css/components/_card.scss
Normal file
13
resources/css/components/_card.scss
Normal file
@@ -0,0 +1,13 @@
|
||||
.card {
|
||||
position: relative;
|
||||
margin: 0.5em;
|
||||
flex: 0 0 calc(100% - 1em);
|
||||
|
||||
&-wrap {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: -0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
286
resources/css/components/_forms.scss
Normal file
286
resources/css/components/_forms.scss
Normal file
@@ -0,0 +1,286 @@
|
||||
@use "../global/variables/fonts";
|
||||
@use "../global/variables/breakpoints";
|
||||
@use "../global/variables/colours";
|
||||
|
||||
input,
|
||||
textarea {
|
||||
color: colours.$grey;
|
||||
background: white;
|
||||
font-weight: 400;
|
||||
font-size: 1em;
|
||||
font-family: fonts.$font;
|
||||
width: 100%;
|
||||
padding: 0.875em 1em;
|
||||
margin: 0 0 1em;
|
||||
// border-radius: 0.125em;
|
||||
border: 0.0625em solid rgba(colours.$black, 0.1);
|
||||
outline: none;
|
||||
transition: all 300ms ease;
|
||||
|
||||
&::placeholder {
|
||||
color: colours.$grey-light;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
box-shadow: 0 0.25em 0.5em rgba(colours.$black, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
width: auto;
|
||||
|
||||
&:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.field-wrap {
|
||||
flex: 1 1 calc(100% - 1em);
|
||||
margin: 0 0.5em;
|
||||
transition: all 300ms ease;
|
||||
|
||||
p {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
label {
|
||||
flex: 0 0 100%;
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
order: -1;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
textarea,
|
||||
input {
|
||||
flex: 1 1 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* stylelint-disable selector-class-pattern */
|
||||
.mce_inline_error {
|
||||
flex: 0 0 100%;
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
font-family: fonts.$font;
|
||||
}
|
||||
/* stylelint-enable selector-class-pattern */
|
||||
|
||||
@media (min-width: breakpoints.$screen-sm) {
|
||||
&.half {
|
||||
flex: 0 0 calc(50% - 1em);
|
||||
max-width: calc(50% - 1em);
|
||||
width: calc(50% - 1em);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.form-footer {
|
||||
p {
|
||||
margin: 0;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
button,
|
||||
.button,
|
||||
input[type="submit"] {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.wpcf7-list-item {
|
||||
margin: 0;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.form-footer-button {
|
||||
flex: 1 1 100%;
|
||||
display: block;
|
||||
margin: 2em 0 0;
|
||||
}
|
||||
|
||||
@media (min-width: breakpoints.$screen-sm) {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.form-footer-button {
|
||||
flex: 0 0 8.5em;
|
||||
max-width: 8.5em;
|
||||
width: 8.5em;
|
||||
margin: 0 0 0 2em;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.form-footer-text {
|
||||
flex: 1 1 5em;
|
||||
margin: auto;
|
||||
|
||||
p {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.section-form {
|
||||
button {
|
||||
margin: 1em 0 0;
|
||||
}
|
||||
|
||||
span.label {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.textarea-wrap {
|
||||
span.label {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
form {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: 1em -0.5em 0;
|
||||
position: relative;
|
||||
|
||||
.wpcf7 {
|
||||
.screen-reader-response {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&-spinner {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: calc(50% - 12px);
|
||||
left: calc(50% - 12px);
|
||||
}
|
||||
|
||||
&-not-valid-tip {
|
||||
background: colours.$error;
|
||||
color: colours.$white;
|
||||
padding: 0.5em 1em;
|
||||
border-radius: 0 0 0.5em 0.5em;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
&-response-output {
|
||||
margin: 1em 0.5em 0;
|
||||
max-width: calc(100% - 1em);
|
||||
width: calc(100% - 1em);
|
||||
flex: 0 0 calc(100% - 1em);
|
||||
text-align: center;
|
||||
color: colours.$white;
|
||||
font-family: fonts.$font;
|
||||
font-weight: 700;
|
||||
background: colours.$black;
|
||||
border: 0.125em solid colours.$white;
|
||||
padding: 0.5em 1em;
|
||||
border-radius: 0.5em;
|
||||
}
|
||||
|
||||
&-display-none {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&-checkbox {
|
||||
label {
|
||||
display: block;
|
||||
padding: 0 0 0 1.75em;
|
||||
margin: 0;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
input[type="checkbox"] {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 0;
|
||||
left: 0;
|
||||
appearance: none;
|
||||
display: block;
|
||||
width: 1.25em;
|
||||
height: 1.25em;
|
||||
border: 0.125em solid colours.$black;
|
||||
background: transparent;
|
||||
color: currentcolor;
|
||||
|
||||
&::before {
|
||||
content: "\f00c";
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 0;
|
||||
left: 0.125em;
|
||||
font-family: "Font Awesome 6 Free", serif;
|
||||
font-weight: 900;
|
||||
opacity: 0;
|
||||
transition: all 300ms ease;
|
||||
}
|
||||
|
||||
&:checked {
|
||||
&::before {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.submitting {
|
||||
.field-wrap:not(.form-footer) {
|
||||
opacity: 0.1;
|
||||
}
|
||||
|
||||
.form-footer {
|
||||
.form-footer-text {
|
||||
opacity: 0.1;
|
||||
}
|
||||
|
||||
.form-footer-button input {
|
||||
opacity: 0.1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.sent {
|
||||
.wpcf7-response-output {
|
||||
background: colours.$success;
|
||||
border-color: colours.$white;
|
||||
}
|
||||
}
|
||||
|
||||
&.invalid {
|
||||
.wpcf7-response-output {
|
||||
background: colours.$error;
|
||||
border-color: colours.$white;
|
||||
}
|
||||
}
|
||||
|
||||
.ajax-loader {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: calc(50% - 12px);
|
||||
right: calc(50% - 12px);
|
||||
display: block;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&.knockout {
|
||||
form {
|
||||
.wpcf7 {
|
||||
&-checkbox {
|
||||
input[type="checkbox"] {
|
||||
border-color: colours.$white;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
73
resources/css/editor.scss
Normal file
73
resources/css/editor.scss
Normal file
@@ -0,0 +1,73 @@
|
||||
@use "app";
|
||||
@use "global/variables/colours";
|
||||
|
||||
html :where(.wp-block) {
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
.block-editor-block-list__layout .block-editor-block-list__block:not([contenteditable=true]) {
|
||||
&:hover:after {
|
||||
content: '';
|
||||
outline: 2px solid colours.$wpblue;
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
}
|
||||
|
||||
&:focus:after {
|
||||
outline-style: dashed;
|
||||
}
|
||||
}
|
||||
|
||||
.editor-styles-wrapper {
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.editor-visual-editor {
|
||||
&__post-title-wrapper {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
padding: 1rem;
|
||||
margin: 0 !important;
|
||||
background: white;
|
||||
box-shadow: 0 0.5rem 1rem rgba(black, 0.15);
|
||||
}
|
||||
}
|
||||
|
||||
.editor-styles-wrapper {
|
||||
background: colours.$grey-lightest;
|
||||
|
||||
.block-list-appender {
|
||||
width: 350px;
|
||||
max-width: 90%;
|
||||
margin: 1em auto;
|
||||
}
|
||||
}
|
||||
|
||||
.wp-block-post-title {
|
||||
position: relative;
|
||||
padding: 0.5rem;
|
||||
border: 1px solid rgba(black, 0.3);
|
||||
margin: 0;
|
||||
|
||||
&::before {
|
||||
content: 'Page Title';
|
||||
position: absolute;
|
||||
top: -0.5rem;
|
||||
left: 0.5rem;
|
||||
color: rgba(black, 0.3);
|
||||
font-size: 0.8rem;
|
||||
display: block;
|
||||
padding: 0 0.5rem;
|
||||
margin: 0;
|
||||
background: white;
|
||||
line-height: 1;
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
|
||||
.is-root-container > .wp-block:not(.block-list-appender) {
|
||||
max-width: none;
|
||||
margin: 0;
|
||||
}
|
||||
54
resources/css/global/_fonts.scss
Normal file
54
resources/css/global/_fonts.scss
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Roots Fonts Setup
|
||||
* https://roots.io/sage/docs/fonts-setup/
|
||||
*
|
||||
* Self-Hosted Google Fonts (Ubuntu Demo)
|
||||
* https://gwfh.mranftl.com/fonts/ubuntu?subsets=latin
|
||||
*
|
||||
* Add the font to your Tailwind config
|
||||
* tailwind.config.cjs
|
||||
*
|
||||
* Configure theme.json to use the font with Bud
|
||||
*/
|
||||
|
||||
/* stylelint-disable */
|
||||
|
||||
/* ubuntu-regular - latin */
|
||||
@font-face {
|
||||
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
|
||||
font-family: 'Ubuntu';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: url('../fonts/ubuntu-v20-latin-regular.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+ */
|
||||
url('../fonts/ubuntu-v20-latin-regular.woff') format('woff'); /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||
}
|
||||
|
||||
/* ubuntu-italic - latin */
|
||||
@font-face {
|
||||
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
|
||||
font-family: 'Ubuntu';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: url('../fonts/ubuntu-v20-latin-italic.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+ */
|
||||
url('../fonts/ubuntu-v20-latin-italic.woff') format('woff'); /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||
}
|
||||
|
||||
/* ubuntu-700 - latin */
|
||||
@font-face {
|
||||
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
|
||||
font-family: 'Ubuntu';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: url('../fonts/ubuntu-v20-latin-700.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+ */
|
||||
url('../fonts/ubuntu-v20-latin-700.woff') format('woff'); /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||
}
|
||||
|
||||
/* ubuntu-700italic - latin */
|
||||
@font-face {
|
||||
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
|
||||
font-family: 'Ubuntu';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
src: url('../fonts/ubuntu-v20-latin-700italic.woff2') format('woff2'), /* Chrome 36+, Opera 23+, Firefox 39+ */
|
||||
url('../fonts/ubuntu-v20-latin-700italic.woff') format('woff'); /* Chrome 5+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||
}
|
||||
4
resources/css/global/_framework.scss
Normal file
4
resources/css/global/_framework.scss
Normal file
@@ -0,0 +1,4 @@
|
||||
@use "framework/breakpoints";
|
||||
@use "framework/normalise";
|
||||
@use "framework/colours";
|
||||
@use "framework/spacing";
|
||||
4
resources/css/global/_mixins.scss
Normal file
4
resources/css/global/_mixins.scss
Normal file
@@ -0,0 +1,4 @@
|
||||
@use "mixins/linear-gradient";
|
||||
@use "mixins/text-contrast";
|
||||
@use "mixins/generate-colour-classes";
|
||||
@use "mixins/generate-button-classes";
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user