Compare commits
1042 Commits
Author | SHA1 | Date | |
---|---|---|---|
d3ee265122 | |||
10dcc4f45d | |||
3237351450 | |||
8d57e81b99 | |||
e37daa6c66 | |||
ad4247a241 | |||
8a4f5c13da | |||
1161e6f3f6 | |||
e5d5e20efd | |||
9fcb9afa9d | |||
b24b7b86fd | |||
ddca94891d | |||
9f14f3cc08 | |||
6b3fc309cc | |||
60d933b39a | |||
ea57fd9c11 | |||
a9788b04d4 | |||
46c45d9bef | |||
3282e2f063 | |||
05e941e449 | |||
6a14a3f7b1 | |||
b858f1159a | |||
f3d73aae03 | |||
494723c818 | |||
93af9d491d | |||
b07d34ee23 | |||
4b2b94db9e | |||
77b9cea62c | |||
e2dc137b59 | |||
2da4f5f3b9 | |||
7549ed7f0f | |||
0719f3c4e3 | |||
ba055b4278 | |||
0b5a809883 | |||
a4f7a05bff | |||
1730578a23 | |||
f88623e48d | |||
46fdd8eeb3 | |||
40f4216ff8 | |||
fe536fcdd0 | |||
62cff7b388 | |||
b24beb1dae | |||
b52c53f7f5 | |||
f66be1b947 | |||
5d3b26bb58 | |||
55b64d0354 | |||
7ce1b6eb6c | |||
97b42a4a91 | |||
bedde323bd | |||
0cf2787937 | |||
f0bc53766b | |||
f7fc2c16c1 | |||
f6d80b6e8b | |||
17d3f66316 | |||
23e08ecb44 | |||
4dfdfc8423 | |||
5cdce529b5 | |||
522b8a87db | |||
6e8660dcc4 | |||
936b7fed74 | |||
d87794aa1f | |||
8675aaef6e | |||
824e097639 | |||
dce8e94f8e | |||
e22ffcb5e3 | |||
8f94096cdd | |||
faa17b0d5c | |||
c4d4a6e594 | |||
9937bcc2d5 | |||
031c7d9866 | |||
0e84ddb957 | |||
5672823472 | |||
d03e11f938 | |||
3dbd91bfef | |||
d0ff2a9eae | |||
78314944aa | |||
872bf07b25 | |||
17b79ee29f | |||
f5b411e2ae | |||
e3e865eac5 | |||
6b7ffbc4ad | |||
4ddcc14eee | |||
7bca78e268 | |||
82159dd4c5 | |||
1e76b214ea | |||
8c44364dab | |||
7aea3528c4 | |||
b7809608d1 | |||
19bb957ae7 | |||
6e5ba84aab | |||
1a20f53916 | |||
57d364d142 | |||
89f76f67ca | |||
5e589cd5e3 | |||
139fb2f1ad | |||
5e7ece1e87 | |||
47a4e3b4e9 | |||
0019ad110e | |||
62325dc096 | |||
290aceb0e9 | |||
a9f4e47fe0 | |||
ede135c2b4 | |||
8ba6739356 | |||
cef5959fff | |||
9f81b2c787 | |||
5885bd7f84 | |||
f1d8ba51df | |||
39a9bf8e4c | |||
8dfb36cc3c | |||
fdbd25c513 | |||
ef5ec6367e | |||
c5b181949b | |||
03d7306611 | |||
fd5e8b6855 | |||
47e46aeebe | |||
56aae5cc99 | |||
84df282c0a | |||
a95c5bd1e9 | |||
c1b552b5ff | |||
18c2e53af8 | |||
e3808f7a61 | |||
68187a0fb6 | |||
f50dcd3bd1 | |||
ce8191ad6c | |||
5fe02fcc3e | |||
f31086f790 | |||
be20537587 | |||
708813c6cb | |||
3b3cd055df | |||
4b438242ab | |||
722e6f9d27 | |||
7b431d9291 | |||
30c6e6f769 | |||
8b2b8c3d48 | |||
0b5c65d568 | |||
49b2f5528f | |||
6bc58e23c9 | |||
7e66adcc0b | |||
24b906a738 | |||
ddbce0d636 | |||
277f870178 | |||
4be7f37bbc | |||
9ac18ab69e | |||
1bec3b4637 | |||
33e74bb0dd | |||
89d5f108e4 | |||
e4d00171b4 | |||
9f070f1914 | |||
94b5803337 | |||
9a2d4e83b2 | |||
59d91ff7ef | |||
bfe658fc86 | |||
7ced42a494 | |||
6164a92b9f | |||
7b11962bf2 | |||
3c7f1021b6 | |||
644412998a | |||
c1afee57e9 | |||
ac1d014562 | |||
71322ee512 | |||
dc2638a3ab | |||
41b23b24b9 | |||
9c8afa85d4 | |||
18c3424f03 | |||
1b1ee34acf | |||
d963bb4e7d | |||
b1f42bbeba | |||
dcdb447578 | |||
39d22bdd62 | |||
e4c9d037b1 | |||
d1ad7fecd7 | |||
4b92a9a4a5 | |||
9d65fe8d5e | |||
c353830163 | |||
6dd87b0dec | |||
fa3216be9b | |||
31201eb3cc | |||
48c075b730 | |||
14c85e3380 | |||
f551d4388c | |||
751dc539f6 | |||
d305680ba5 | |||
bb7775f87b | |||
54d9b517dd | |||
199910a52f | |||
983102c094 | |||
0d330e08b4 | |||
ccd1a5363d | |||
c368b130b8 | |||
3ffe99d5ab | |||
339068c086 | |||
dad40e262f | |||
0bbd65ac61 | |||
1a7b7d1936 | |||
2bbaa246d7 | |||
296ec54c3e | |||
579de1cc86 | |||
da88250fe1 | |||
ad831316ab | |||
2e97cb6924 | |||
c79787c677 | |||
07954dd968 | |||
2ace6da75b | |||
982568445b | |||
a53e446583 | |||
b033d7d92f | |||
1190d61ca3 | |||
7da5cc847f | |||
2778244faf | |||
3789379084 | |||
72e3c87190 | |||
38640e65e4 | |||
e0718f11ea | |||
eb7cc97ca2 | |||
24d3c0b13b | |||
ec0b1d4de8 | |||
56c90ef452 | |||
5f0ac0ec7e | |||
8c767af5c6 | |||
b0e8263e2f | |||
be592dbf9b | |||
3679320483 | |||
51ab4523f8 | |||
60abe14c7a | |||
f58b5e61b0 | |||
dbb972ec3f | |||
1930410754 | |||
539df2a994 | |||
ad41ef2f5e | |||
7ed0a92eda | |||
9471314917 | |||
69440ec2a6 | |||
0bbdf4b47f | |||
f11aca925f | |||
e4029a607a | |||
eb53973799 | |||
aab8281af0 | |||
3df00548ab | |||
ada346f4ef | |||
b3691a4625 | |||
e02b631172 | |||
2200411455 | |||
b0ab2f404f | |||
4195428643 | |||
1692c9bef5 | |||
cb25cf2944 | |||
794c5ce2d5 | |||
974d2d5a59 | |||
2ebcad1468 | |||
671c7eed7d | |||
72de76fe9b | |||
53cc357632 | |||
47d3472fef | |||
05c5b46089 | |||
f85bd8622f | |||
503cf61c0f | |||
d9eca55189 | |||
e850eaa90c | |||
478eab61e4 | |||
ea53728799 | |||
914d0d37c0 | |||
c1aae2c192 | |||
03cdcb30f8 | |||
a462e72b30 | |||
83db3db90d | |||
9495a40900 | |||
dbc2c9c240 | |||
d6bd1a5527 | |||
c5cd863f15 | |||
8ef1bfaf24 | |||
abac8d7147 | |||
367bcaf233 | |||
fdbb9428d9 | |||
bd047a0108 | |||
05202d572f | |||
a698e416ad | |||
1efc417f82 | |||
4dc31bbdb0 | |||
12dc727fda | |||
6602103d0f | |||
f3e8fb8ae2 | |||
a205d4d7f4 | |||
1783ca6e42 | |||
6555833fb6 | |||
ce3b9b2b7b | |||
1a653c5676 | |||
85a8d8aedb | |||
5c453fcd54 | |||
ec9adf8a6c | |||
b5064ca46f | |||
84b97ead76 | |||
4e578238f7 | |||
bb6d6137aa | |||
74c7728e3a | |||
e13113e38b | |||
68db0dbefe | |||
e015302a94 | |||
20fcf23f8f | |||
11beebf74d | |||
5a53406d33 | |||
ee83e4d748 | |||
970db8f0d8 | |||
71828f9f6e | |||
0525dd0f56 | |||
e3ba525195 | |||
1eed55cbce | |||
fd1331e602 | |||
02b82c04f3 | |||
ad5ef6ebbc | |||
3c5bc5b384 | |||
f229df0383 | |||
9092f892d0 | |||
9c3fb0856f | |||
2a8c665e12 | |||
9b1942ce48 | |||
932b4532f0 | |||
6533a1444d | |||
05a109dcf4 | |||
5b5b7856c6 | |||
4ceb508218 | |||
3afc7dc140 | |||
1c1058667b | |||
129aed2ae9 | |||
f8c7adf5a6 | |||
6346d39507 | |||
1b76f3b862 | |||
40c140a631 | |||
7fd11d4fb5 | |||
7fa694314b | |||
080e385b02 | |||
7c0b625793 | |||
f0b858b1f8 | |||
b218663e7e | |||
d8ea29423d | |||
ff038a1c56 | |||
588e8fca6b | |||
8d9f23d5f8 | |||
ea4637c740 | |||
c0e56a4f92 | |||
53a4722e91 | |||
d175870adf | |||
a64229f688 | |||
cd69e1e7b9 | |||
321db0b004 | |||
aaf01475b0 | |||
1cd38a396e | |||
1f1c9dd077 | |||
0da6d84309 | |||
3a05598166 | |||
5035d64298 | |||
56f6d20244 | |||
650d730c3f | |||
decaa0f636 | |||
c2b9e33b79 | |||
34347f241d | |||
5802f2132d | |||
8e502e5f50 | |||
0187f0cede | |||
8457aa7e2b | |||
67156b7c6f | |||
f9250b66a9 | |||
1fcdccaa33 | |||
5b93b88f46 | |||
cbd41cd1be | |||
95a8943b7e | |||
dd363370f6 | |||
1027a6a676 | |||
0fd93b0ff9 | |||
bfade87b62 | |||
26d9030544 | |||
5688a0daea | |||
92996ac781 | |||
1f471782ab | |||
320459eaab | |||
e65b2cce02 | |||
520ee981d3 | |||
f100ef72da | |||
146e1c871f | |||
669367c9c6 | |||
77d62c431a | |||
4a5fc507ca | |||
06f59dd320 | |||
4367f44449 | |||
856e0f69d3 | |||
c4bd2acd84 | |||
210c240aab | |||
d19f5dc732 | |||
6541c20466 | |||
3952484848 | |||
7d918604c3 | |||
ffaf5b88b6 | |||
eca4a9e923 | |||
1cee4e67e8 | |||
b1c35b60d8 | |||
1e5cfb4eaf | |||
5e5956420f | |||
78446d174a | |||
917d64a3e3 | |||
a3d51b2b08 | |||
3ffbd6e236 | |||
9753331d52 | |||
b266edb8e7 | |||
f1899055b8 | |||
c3f0a36665 | |||
88efb1f3d1 | |||
146f5881f7 | |||
3279fb1154 | |||
5f5efbe876 | |||
12afcfb656 | |||
0aac9e9d60 | |||
4e3b1527cd | |||
b27dcdd40a | |||
7b584dd482 | |||
5e71d94b62 | |||
8bb4338627 | |||
4bcd4a2cf2 | |||
ea7971cb3b | |||
9036b210a0 | |||
f337ac388b | |||
b0ae21ec60 | |||
7d11eeeddd | |||
4577ca5476 | |||
846794b60d | |||
5757af95aa | |||
b8c3b38652 | |||
3d21e4f35e | |||
73ce89d051 | |||
49d9dd666b | |||
53dda33c02 | |||
9b9f61bf13 | |||
651e2d3c56 | |||
0bd627d3b1 | |||
99d0eede80 | |||
d09b4ca409 | |||
caa76983e4 | |||
7b6bbb0bc3 | |||
cdf7c81a94 | |||
86812c5259 | |||
657302b720 | |||
172b5215d2 | |||
52a9d9f76c | |||
8eb7a48d3e | |||
a8bceffc9c | |||
2c728c793a | |||
8d974d8147 | |||
8fbc5c270a | |||
92dc5921df | |||
3c3ce37720 | |||
f369e399ed | |||
01aa1e1e52 | |||
2bbc1b7063 | |||
04b8a0ed73 | |||
761f7c6537 | |||
723dc2c9d3 | |||
d66fbb1c20 | |||
c2107b8d59 | |||
926620e8f8 | |||
82aeb89854 | |||
c67c58709b | |||
75b5958a53 | |||
bba5101669 | |||
b9c5dddbaf | |||
0566b3f5fa | |||
ac4adac1ab | |||
33a9097719 | |||
08c74cdf8b | |||
8c5222d850 | |||
08c76a46af | |||
3d24cb1deb | |||
a151f93be1 | |||
bce6a06c15 | |||
10a6e387f3 | |||
b6a37f274c | |||
2cdbc68643 | |||
7db40b27b5 | |||
b1760ff676 | |||
293eef2c78 | |||
299c6b779e | |||
842f435976 | |||
11faf925cc | |||
1295aa21cc | |||
84cd137c76 | |||
37067dff67 | |||
c7f850e1ba | |||
b25f2cd5f4 | |||
af95080b67 | |||
6b8c35d5fe | |||
a35e0dced4 | |||
c6259eb185 | |||
670017b342 | |||
ce7b210da9 | |||
1a2d8b8d40 | |||
fe2df00a8c | |||
20577d974f | |||
7369465a3a | |||
5769fa45f5 | |||
193b4cbf98 | |||
461df1a560 | |||
d5f78680eb | |||
96dde7107b | |||
3e756bfadd | |||
82c755200e | |||
735d33d05b | |||
90c8e5b2c9 | |||
cd1f06b116 | |||
173f347431 | |||
353d3389cd | |||
fe364978a1 | |||
cd512bbb01 | |||
f5193df721 | |||
25b5d24867 | |||
1d99ff0943 | |||
99d6d96b05 | |||
6ddfe2c605 | |||
d2ec7bba42 | |||
2557171953 | |||
0d7e45ea03 | |||
e677169a51 | |||
e268eac378 | |||
375f2b13c5 | |||
34406a2f72 | |||
cc658bcc3d | |||
973aefe7ae | |||
34e91251e8 | |||
882402645d | |||
d9d4dccc09 | |||
9d2fcccbf5 | |||
c4fdd881e6 | |||
83f7eee8ae | |||
dc1f63d8bb | |||
3e2425abd8 | |||
65e78c7990 | |||
2bdc5d3683 | |||
1de276378f | |||
cc76fe77f0 | |||
c8636aac6f | |||
a09f41143e | |||
8b29694446 | |||
5e0e89408c | |||
86076547c3 | |||
b1bbabe14d | |||
f5c678ec2d | |||
223625bd9b | |||
fbd7cf8cc7 | |||
26c7e4d1cc | |||
4832771185 | |||
7fb8d64628 | |||
36fed3bbf8 | |||
8ab738b315 | |||
b84b9606e9 | |||
aa68b7e148 | |||
ca44339512 | |||
91f5376dfc | |||
d51ef70db6 | |||
c164268c20 | |||
4c7c94c75d | |||
ccf141b279 | |||
e42808f22d | |||
75a4b2c538 | |||
f1d64c0572 | |||
25c57bf9fe | |||
079c90dbba | |||
0fc342ee4c | |||
7570c9fa0e | |||
7642c4da4f | |||
dce13e5b8e | |||
8b922681b6 | |||
bd33cdbc24 | |||
bc04ad2528 | |||
c54a5213b3 | |||
07cf0cd79b | |||
e64dc1669f | |||
48181994d8 | |||
31c2915075 | |||
67f05ecfe2 | |||
c121c60e8c | |||
110859508e | |||
efd3377ecd | |||
a7c1d8431d | |||
127f3e6363 | |||
6bec12c762 | |||
d1df2d4f42 | |||
5598f0af19 | |||
8dd80ce0f2 | |||
e45510e064 | |||
bfafff132a | |||
d6748fe979 | |||
2169522818 | |||
06cfa3fc60 | |||
f9e507eb15 | |||
90332a23b3 | |||
a82a810269 | |||
5a378b3c5f | |||
49a2df3dbb | |||
dee5ff38f5 | |||
70aefb421b | |||
764e1a1bf0 | |||
b140011f92 | |||
b48c9e437e | |||
f34efb4d6f | |||
324c03e8b9 | |||
e718101425 | |||
080ce50fea | |||
1b9eb223b0 | |||
ea2fa794ac | |||
c46c61a923 | |||
1136431551 | |||
957be23212 | |||
91a88b3e91 | |||
7c5d239267 | |||
c748b80447 | |||
725e0ecb00 | |||
eb71dd8a68 | |||
ce1687cf97 | |||
2e328b6d7f | |||
8489e63d34 | |||
f8c17730fc | |||
93e43eee7a | |||
9063dc3079 | |||
9d55d3f134 | |||
d199c3768a | |||
0e0c2447d9 | |||
99dfb3d24b | |||
c4366e009b | |||
1d31202607 | |||
78d25ffb69 | |||
b710682c66 | |||
52c6b94315 | |||
fd6b49e598 | |||
df2982454e | |||
8a19fd906f | |||
99198e5c2d | |||
9204f37560 | |||
765aa6efab | |||
50b613365f | |||
4fe8d10d6c | |||
162dab790d | |||
6e8c9731d8 | |||
235552f91d | |||
4ee08c296b | |||
bda979ec4f | |||
78f10f064e | |||
eca4a68fec | |||
9daa5d58c7 | |||
6cc232fbad | |||
6a07bd44ff | |||
63cd326191 | |||
40b15b0eb1 | |||
3825e9cb11 | |||
7db2942140 | |||
3a5d28f24a | |||
d02c63844d | |||
c3045dba07 | |||
c239566e1e | |||
dfdc8cfd09 | |||
4977b7ffa2 | |||
8e69299a6a | |||
903bcbb92e | |||
8d6492ac8c | |||
c39ae1fe1f | |||
e3539b06a2 | |||
d34a265ac2 | |||
9a72e361b1 | |||
a520e4bd93 | |||
9ab6ebbe0d | |||
6a3cfd05e7 | |||
f825e535e3 | |||
a2c5420d7f | |||
c6d3573652 | |||
e41bcd0d02 | |||
f805907954 | |||
d970efc0da | |||
c0ce5944dc | |||
467f354eb1 | |||
3f016b45f9 | |||
679f74e498 | |||
08b314e0b4 | |||
cc5959805b | |||
407f3d1609 | |||
503df3584c | |||
fa9510f0c1 | |||
cc92df4e7f | |||
d76c5d32f2 | |||
c6198cba4c | |||
e29dd4286e | |||
98c1c33341 | |||
78cc8743d5 | |||
89e75b3828 | |||
982d104ba0 | |||
2ce4461c63 | |||
146a55b921 | |||
7e883d3e5b | |||
7896efcd6c | |||
a1ef87ef78 | |||
d058f1741f | |||
ff0852fa39 | |||
5f07b68b07 | |||
0c2934a556 | |||
885b51a6cf | |||
6cb5ceca21 | |||
9a14ddb57c | |||
5c6f32488a | |||
4ec8f27d36 | |||
9554727370 | |||
394f9abd67 | |||
6ee45f0f54 | |||
2e9ae1ed0b | |||
74b12bd2d9 | |||
279adcfbcf | |||
64d655857b | |||
b2b5f3c22a | |||
588f3a9feb | |||
8c676b773d | |||
c76a0adb5e | |||
848fc51070 | |||
af1e09f46f | |||
f1abfe557a | |||
aa52ca804e | |||
273551fa36 | |||
17898b243a | |||
81ed12d454 | |||
2f78c99381 | |||
480c7d25e0 | |||
c1a6c5a215 | |||
8fadc87036 | |||
5176566882 | |||
b52b9990da | |||
8796599d89 | |||
9808245d30 | |||
12f2d1730f | |||
dac8c1e2f3 | |||
a3e1f8d8c6 | |||
2c28449b58 | |||
43197bf859 | |||
bd34c4e7ec | |||
511b8ad7ff | |||
a60562254c | |||
96368cbd3f | |||
e384e7dea3 | |||
86fbcd3a57 | |||
9730fb9272 | |||
a3f2ee8bbb | |||
a177b3b8da | |||
f369fdfa4a | |||
80a6e78d48 | |||
f65821256c | |||
dd10389c55 | |||
3dd6ef3da7 | |||
036d0a29ae | |||
d199e0b77e | |||
17ab79aa6f | |||
b10cd32449 | |||
f9001c1826 | |||
31050394b9 | |||
e9970f3cc8 | |||
516c460ace | |||
03d80290e6 | |||
d65b567858 | |||
0d10f4b1dd | |||
610d0204eb | |||
545a4adc66 | |||
38d8a1cd00 | |||
53201c7422 | |||
6f447e8a93 | |||
368a400fea | |||
902eeccea1 | |||
c8cf00a151 | |||
f41423e6a2 | |||
774485d5f2 | |||
8f4d62b080 | |||
8003a3e97f | |||
cf572985a7 | |||
c4966a9cc1 | |||
c6e6b13731 | |||
975041d211 | |||
ea16472ab1 | |||
713b0255f7 | |||
2aa63bbb8e | |||
f6708d9526 | |||
65b56271d4 | |||
c9c35d591b | |||
e9cfcb51ba | |||
dc5e5b4f8b | |||
ccb5369c57 | |||
bfe3ff17af | |||
756b0587bc | |||
af3d08ff36 | |||
a91913e633 | |||
736d8a8b12 | |||
9b5bdb2206 | |||
3ad606a767 | |||
e0cab11293 | |||
bffafdcd33 | |||
6dfeb7a100 | |||
a6431678ed | |||
cdcdfb135c | |||
7821c5767b | |||
6a5b7adc16 | |||
e58de01950 | |||
ae6e790879 | |||
d21b2fe21d | |||
6b8e8988b8 | |||
0db495eb1d | |||
6ad315b8de | |||
945ff65358 | |||
e0458ca444 | |||
5bd639e0be | |||
c78a050d86 | |||
e37a824d86 | |||
fe4d78992f | |||
1c380933e1 | |||
a8c3465133 | |||
edbfb957b1 | |||
161b8d8f34 | |||
96d9347cff | |||
dfb7133dbb | |||
a264b00200 | |||
100a301476 | |||
35c3ebfb20 | |||
e3db69282d | |||
45999f98b2 | |||
6f5c39e97c | |||
4644f3fe08 | |||
d951ebd351 | |||
a7bc4e7c70 | |||
a08553c9bc | |||
8161b83ded | |||
ad46d05c6b | |||
f231f3dc6d | |||
933b947f45 | |||
f6a5e0117c | |||
56c79dd66a | |||
25ba667cb1 | |||
1ac9c86a66 | |||
94a2e54c1e | |||
fbf4c853c1 | |||
5fba25d823 | |||
18efc02921 | |||
bdd803c517 | |||
382e232538 | |||
a2cddc761c | |||
6b4d2409cc | |||
da110bed80 | |||
363ee93c25 | |||
db0024dc58 | |||
1b59b95f52 | |||
2d0673a864 | |||
9f4b0d0ca1 | |||
97c1712fa6 | |||
455e3fbb90 | |||
3c718e3f68 | |||
63e797ba37 | |||
48340872f8 | |||
1b5d85d41a | |||
0595852d5a | |||
448e89d062 | |||
f92ee90e9b | |||
80f22c5b50 | |||
4b74d66529 | |||
ca72e11d9a | |||
5a0ec403f6 | |||
b6e7e39fb0 | |||
8c24d59f43 | |||
5ed0c3fb2d | |||
2151118183 | |||
4c65374a0c | |||
32cf2084b8 | |||
9dc834e14a | |||
3db11c443d | |||
421549d6ee | |||
a7277f3437 | |||
4d56911230 | |||
0f23dea7fc | |||
742e3e85e9 | |||
6eeb5bb1bf | |||
01eb59a295 | |||
8ddd42ea4c | |||
eb80adc2ed | |||
3103ef11d5 | |||
a1ead743fa | |||
c8d0291e41 | |||
bd44d77973 | |||
f872ab1819 | |||
55371ce7ee | |||
ba45d23307 | |||
f660bd9bd7 | |||
1332fb89e4 | |||
dc5254721e | |||
918a4d7c74 | |||
ec29c8fb49 | |||
43922a7c27 | |||
76b1166269 | |||
12c0605f92 | |||
0bbf1b96d5 | |||
b716b427a7 | |||
c1ac9f7922 | |||
3dd872e211 | |||
a09a9cdcbf | |||
2d835cdec1 | |||
28b91ed994 | |||
1e147c9dd5 | |||
6f89b47b30 | |||
8d5c07a317 | |||
9ff72b4d4c | |||
4fe5219b89 | |||
2dab7fdb0c | |||
5075982cd3 | |||
1a58166a0b | |||
ca0681b1a7 | |||
540b34c63f | |||
c8565b1197 | |||
75906820e5 | |||
2cacb5809d | |||
900faa2a71 | |||
c140eea734 | |||
5201c359d3 | |||
4e1b1b3c27 | |||
8af01c3bcb | |||
d94dabb8d6 | |||
63b1f1670b | |||
2d050b0ea5 | |||
686f702ec9 | |||
5754302154 | |||
e2ede3e568 | |||
f95824dea0 | |||
650a8704cd | |||
cd37f92592 | |||
6bf201b45e | |||
e178d6519c | |||
97d4a8e4f8 | |||
e5ce252587 | |||
b7cae6dac4 | |||
07d3b753b8 | |||
72ef0909f5 | |||
a5473bf882 | |||
c4e7ea4c8e | |||
ce462f1643 | |||
91936aff92 | |||
57858bbe9a | |||
42d9b1241e | |||
fc4a5315df | |||
e771bd53da | |||
291f46d732 | |||
e236d3312c | |||
794090291a | |||
380eec1ed6 | |||
7c283b7fda | |||
916080fa5a | |||
c10f80457d | |||
9773408c8b | |||
5ba5426281 | |||
098aebfaf9 | |||
75d79f19cc | |||
1b70e6d494 | |||
2c57251bae | |||
9bdb32c073 | |||
b74890137a | |||
57548b579f | |||
7aa1a5f4ba | |||
d60e399a3b | |||
da34614b5c | |||
a0d330fded | |||
f766661f8c | |||
82ddce42df | |||
bfe95676c3 | |||
789bb0b396 | |||
2620ef0b57 | |||
627962570e | |||
bbdbf6a52d | |||
56ed9f4ece | |||
e6188f5cef | |||
a37e5bbe74 | |||
9df99b1a00 | |||
5ff543e62d | |||
8f14c5ac53 | |||
4e0aa3c56d | |||
545c6bfa5e | |||
cd3652eaa6 | |||
655641737b | |||
152794720a | |||
cb294fb303 | |||
98744a53c1 | |||
430fcc20a8 | |||
1df78f22d3 | |||
2f823f5606 | |||
086d6dce7e | |||
879cca9fb3 | |||
3434fbe3b5 | |||
d4f9ccca5e | |||
4a74c3e6fd | |||
60d9a3f1ac | |||
b64fbbdb7f | |||
12e8d44a43 | |||
667658ae2f | |||
9d2624163c | |||
8f6688eba7 | |||
b360d9a2cf | |||
11384bbf6a | |||
6235944442 | |||
83573b0d43 | |||
bd87c09e1a | |||
1010b64c05 | |||
dd1fcd5100 | |||
75706c9e8b | |||
61e1dd6a83 | |||
8d5af952f6 | |||
2751a4bf3a | |||
ed297dd68d | |||
17c7d42ede | |||
1741b39375 | |||
800432ab54 | |||
f169c8f8ac | |||
f92a12db30 | |||
3ea730a0b6 | |||
e3c19fa306 | |||
f2c4890def | |||
5bc2f62d98 | |||
c954603bfc | |||
bf552801ec | |||
6bb1af0a18 | |||
48dca5e298 | |||
c08813be1d | |||
1cc6d93717 | |||
18a071fd7b | |||
32d310d999 | |||
c76d18e647 | |||
865706c112 | |||
3238049828 | |||
a41de82030 | |||
ccec1faeb1 | |||
b19887add0 | |||
ba2cb75877 | |||
b89905aa80 | |||
a25e879cac | |||
0106c5123d | |||
2cb20a8f63 | |||
fe1a994442 | |||
70889ab06d | |||
aab6865f50 | |||
efd32043e3 | |||
3eaa13a421 | |||
80d2ab44a3 |
@ -71,13 +71,6 @@ anchors:
|
||||
- trunk
|
||||
- release
|
||||
|
||||
only_trunk_and_cot: &only_trunk_and_cot
|
||||
filters:
|
||||
branches:
|
||||
only:
|
||||
- trunk
|
||||
- /^cot-.*/
|
||||
|
||||
multisite_acceptance_config: &multisite_acceptance_config
|
||||
multisite: 1
|
||||
requires:
|
||||
@ -186,10 +179,10 @@ jobs:
|
||||
- run:
|
||||
name: Download additional WP Plugins for tests
|
||||
command: |
|
||||
./do download:woo-commerce-zip 6.8.2
|
||||
./do download:woo-commerce-subscriptions-zip 4.5.1
|
||||
./do download:woo-commerce-memberships-zip 1.23.0
|
||||
./do download:woo-commerce-blocks-zip 8.4.0
|
||||
./do download:woo-commerce-zip 7.1.0
|
||||
./do download:woo-commerce-subscriptions-zip 4.6.0
|
||||
./do download:woo-commerce-memberships-zip 1.23.1
|
||||
./do download:woo-commerce-blocks-zip 8.8.2
|
||||
- run:
|
||||
name: Dump tests ENV variables for acceptance tests
|
||||
command: |
|
||||
@ -318,7 +311,8 @@ jobs:
|
||||
parallelism: 20
|
||||
working_directory: /home/circleci/mailpoet/mailpoet
|
||||
machine:
|
||||
image: ubuntu-2204:2022.07.1
|
||||
image: ubuntu-2204:2022.10.2
|
||||
docker_layer_caching: false
|
||||
parameters:
|
||||
multisite:
|
||||
type: integer
|
||||
@ -329,7 +323,7 @@ jobs:
|
||||
mysql_command:
|
||||
type: string
|
||||
default: ''
|
||||
mysql_image_version:
|
||||
mysql_image:
|
||||
type: string
|
||||
default: ''
|
||||
codeception_image_version:
|
||||
@ -356,12 +350,9 @@ jobs:
|
||||
enable_cot_sync:
|
||||
type: integer
|
||||
default: 0
|
||||
allow_fail:
|
||||
type: integer
|
||||
default: 0
|
||||
environment:
|
||||
MYSQL_COMMAND: << parameters.mysql_command >>
|
||||
MYSQL_IMAGE_VERSION: << parameters.mysql_image_version >>
|
||||
MYSQL_IMAGE: << parameters.mysql_image >>
|
||||
CODECEPTION_IMAGE_VERSION: << parameters.codeception_image_version >>
|
||||
WORDPRESS_IMAGE_VERSION: << parameters.wordpress_image_version >>
|
||||
steps:
|
||||
@ -410,7 +401,9 @@ jobs:
|
||||
name: Group acceptance tests
|
||||
command: |
|
||||
# Convert test result filename values to be relative paths because the circleci CLI's split command requires exact matches
|
||||
sed -i.bak 's#/wp-core/wp-content/plugins/mailpoet/##g' $CIRCLE_INTERNAL_TASK_DATA/circle-test-results/results.json
|
||||
if [ -e $CIRCLE_INTERNAL_TASK_DATA/circle-test-results/results.json ]; then
|
||||
sed -i.bak 's#/wp-core/wp-content/plugins/mailpoet/##g' $CIRCLE_INTERNAL_TASK_DATA/circle-test-results/results.json
|
||||
fi
|
||||
# `circleci tests split` returns different values based on the container it's run on
|
||||
# in case group is defined find only tests containing the group
|
||||
if [[ -n '<< parameters.group >>' ]]; then
|
||||
@ -419,6 +412,12 @@ jobs:
|
||||
circleci tests glob "tests/acceptance/**/*Cest.php" | circleci tests split --split-by=timings > tests/acceptance/_groups/circleci_split_group
|
||||
fi
|
||||
cat tests/acceptance/_groups/circleci_split_group
|
||||
- run:
|
||||
name: Create docker containers for test
|
||||
# We experienced some failures when creating containers so we do it explicitly with one retry
|
||||
command: |
|
||||
cd tests/docker
|
||||
docker-compose create || docker-compose create
|
||||
- run:
|
||||
name: Run acceptance tests
|
||||
command: |
|
||||
@ -432,9 +431,6 @@ jobs:
|
||||
--xml
|
||||
-g circleci_split_group
|
||||
)
|
||||
if [[ << parameters.allow_fail >> == 1 ]]; then
|
||||
args+=(--no-exit)
|
||||
fi
|
||||
docker-compose run -e SKIP_DEPS=1 \
|
||||
-e CIRCLE_BRANCH=${CIRCLE_BRANCH} \
|
||||
-e CIRCLE_JOB=${CIRCLE_JOB} \
|
||||
@ -442,18 +438,13 @@ jobs:
|
||||
-e ENABLE_COT=<< parameters.enable_cot >> \
|
||||
-e ENABLE_COT_SYNC=<< parameters.enable_cot_sync >> \
|
||||
codeception_acceptance "${args[@]}"
|
||||
- when:
|
||||
condition:
|
||||
not:
|
||||
equal: [1, << parameters.allow_fail >>]
|
||||
steps:
|
||||
- run:
|
||||
name: Check exceptions
|
||||
command: |
|
||||
if [ "$(ls tests/_output/exceptions/*.html)" ]; then
|
||||
echo "There were some exceptions during the tests run"
|
||||
exit 1
|
||||
fi
|
||||
- run:
|
||||
name: Check exceptions
|
||||
command: |
|
||||
if [ "$(ls tests/_output/exceptions/*.html)" ]; then
|
||||
echo "There were some exceptions during the tests run"
|
||||
exit 1
|
||||
fi
|
||||
- store_artifacts:
|
||||
path: tests/_output
|
||||
- store_test_results:
|
||||
@ -492,9 +483,12 @@ jobs:
|
||||
integration_tests:
|
||||
working_directory: /home/circleci/mailpoet/mailpoet
|
||||
machine:
|
||||
image: ubuntu-2204:2022.07.1
|
||||
image: ubuntu-2204:2022.10.2
|
||||
docker_layer_caching: false
|
||||
environment:
|
||||
CODECEPTION_IMAGE_VERSION: << parameters.codeception_image_version >>
|
||||
MYSQL_COMMAND: << parameters.mysql_command >>
|
||||
MYSQL_IMAGE: << parameters.mysql_image >>
|
||||
parameters:
|
||||
codeception_image_version:
|
||||
type: string
|
||||
@ -517,12 +511,12 @@ jobs:
|
||||
multisite:
|
||||
type: integer
|
||||
default: 0
|
||||
woo_core_version:
|
||||
mysql_command:
|
||||
type: string
|
||||
default: ''
|
||||
mysql_image:
|
||||
type: string
|
||||
default: ''
|
||||
allow_fail:
|
||||
type: integer
|
||||
default: 0
|
||||
steps:
|
||||
- attach_workspace:
|
||||
at: /home/circleci
|
||||
@ -530,14 +524,12 @@ jobs:
|
||||
name: 'Pull test docker images'
|
||||
# Pull docker images with 3 retries
|
||||
command: i='0';while ! docker-compose -f tests/docker/docker-compose.yml pull && ((i < 3)); do sleep 3 && i=$[$i+1]; done
|
||||
- when:
|
||||
condition: << parameters.woo_core_version >>
|
||||
steps:
|
||||
- run:
|
||||
name: Download WooCommerce Core
|
||||
command: |
|
||||
cd tests/docker
|
||||
docker-compose run --rm -w /project --entrypoint "./do download:woo-commerce-zip << parameters.woo_core_version >>" --no-deps codeception_integration
|
||||
- run:
|
||||
name: Create docker containers for test
|
||||
# We experienced some failures when creating containers so we do it explicitly with one retry
|
||||
command: |
|
||||
cd tests/docker
|
||||
docker-compose create || docker-compose create
|
||||
- run:
|
||||
name: 'PHP Integration tests'
|
||||
command: |
|
||||
@ -556,9 +548,6 @@ jobs:
|
||||
if [[ -n '<< parameters.skip_group >>' ]]; then
|
||||
args+=(--skip-group << parameters.skip_group >>)
|
||||
fi
|
||||
if [[ << parameters.allow_fail >> == 1 ]]; then
|
||||
args+=(--no-exit)
|
||||
fi
|
||||
docker-compose run -e SKIP_DEPS=1 \
|
||||
-e CIRCLE_BRANCH=${CIRCLE_BRANCH} \
|
||||
-e CIRCLE_JOB=${CIRCLE_JOB} \
|
||||
@ -651,7 +640,7 @@ workflows:
|
||||
- build
|
||||
- acceptance_tests:
|
||||
<<: *slack-fail-post-step
|
||||
name: acceptance_tests
|
||||
name: acceptance_tests_base_and_woo_cot_off
|
||||
requires:
|
||||
- unit_tests
|
||||
- static_analysis_php8
|
||||
@ -659,13 +648,10 @@ workflows:
|
||||
- qa_php
|
||||
- acceptance_tests:
|
||||
<<: *slack-fail-post-step
|
||||
<<: *only_trunk_and_cot
|
||||
name: acceptance_tests_woo_cot_sync
|
||||
group: woo
|
||||
enable_cot: 1
|
||||
enable_cot_sync: 1
|
||||
allow_fail: 1
|
||||
woo_core_version: woo-cot-beta # Temporarily force COT beta version
|
||||
requires:
|
||||
- unit_tests
|
||||
- static_analysis_php8
|
||||
@ -673,24 +659,10 @@ workflows:
|
||||
- qa_php
|
||||
- acceptance_tests:
|
||||
<<: *slack-fail-post-step
|
||||
<<: *only_trunk_and_cot
|
||||
name: acceptance_tests_woo_cot_no_sync
|
||||
group: woo
|
||||
enable_cot: 1
|
||||
enable_cot_sync: 0
|
||||
allow_fail: 1
|
||||
woo_core_version: woo-cot-beta # Temporarily force COT beta version
|
||||
requires:
|
||||
- unit_tests
|
||||
- static_analysis_php8
|
||||
- qa_js
|
||||
- qa_php
|
||||
- acceptance_tests:
|
||||
<<: *slack-fail-post-step
|
||||
<<: *only_trunk_and_cot
|
||||
name: acceptance_tests_woo_cot_off
|
||||
group: woo
|
||||
woo_core_version: woo-cot-beta # Temporarily force COT beta version
|
||||
requires:
|
||||
- unit_tests
|
||||
- static_analysis_php8
|
||||
@ -703,20 +675,8 @@ workflows:
|
||||
- integration_tests:
|
||||
<<: *slack-fail-post-step
|
||||
group: woo
|
||||
name: integration_test_woocommerce
|
||||
requires:
|
||||
- unit_tests
|
||||
- static_analysis_php8
|
||||
- qa_js
|
||||
- qa_php
|
||||
- integration_tests:
|
||||
<<: *slack-fail-post-step
|
||||
<<: *only_trunk_and_cot
|
||||
group: woo
|
||||
enable_cot: 1
|
||||
enable_cot_sync: 1
|
||||
allow_fail: 1
|
||||
woo_core_version: woo-cot-beta # Temporarily force COT beta version
|
||||
name: integration_test_woo_cot_sync
|
||||
requires:
|
||||
- unit_tests
|
||||
@ -725,12 +685,9 @@ workflows:
|
||||
- qa_php
|
||||
- integration_tests:
|
||||
<<: *slack-fail-post-step
|
||||
<<: *only_trunk_and_cot
|
||||
group: woo
|
||||
enable_cot: 1
|
||||
enable_cot_sync: 0
|
||||
allow_fail: 1
|
||||
woo_core_version: woo-cot-beta # Temporarily force COT beta version
|
||||
name: integration_test_woo_cot_no_sync
|
||||
requires:
|
||||
- unit_tests
|
||||
@ -739,9 +696,7 @@ workflows:
|
||||
- qa_php
|
||||
- integration_tests:
|
||||
<<: *slack-fail-post-step
|
||||
<<: *only_trunk_and_cot
|
||||
group: woo
|
||||
woo_core_version: woo-cot-beta # Temporarily force COT beta version
|
||||
name: integration_test_woo_cot_off
|
||||
requires:
|
||||
- unit_tests
|
||||
@ -777,10 +732,14 @@ workflows:
|
||||
<<: *slack-fail-post-step
|
||||
requires:
|
||||
- build
|
||||
- acceptance_tests
|
||||
- acceptance_tests_base_and_woo_cot_off
|
||||
- js_tests
|
||||
- integration_test_woocommerce
|
||||
- integration_test_base
|
||||
- integration_test_woo_cot_no_sync
|
||||
- integration_test_woo_cot_off
|
||||
- integration_test_woo_cot_sync
|
||||
- acceptance_tests_woo_cot_sync
|
||||
- acceptance_tests_woo_cot_no_sync
|
||||
|
||||
nightly:
|
||||
triggers:
|
||||
@ -805,14 +764,14 @@ workflows:
|
||||
- acceptance_tests:
|
||||
<<: *slack-fail-post-step
|
||||
name: acceptance_oldest
|
||||
woo_core_version: 6.2.2
|
||||
woo_core_version: 6.8.0
|
||||
woo_subscriptions_version: 4.3.0
|
||||
woo_memberships_version: 1.21.0
|
||||
woo_blocks_version: 5.3.2
|
||||
mysql_command: --max_allowed_packet=100M
|
||||
mysql_image_version: 5.7.36
|
||||
codeception_image_version: 7.4-cli_20210126.1
|
||||
wordpress_image_version: wp-5.6_php7.2_20220406.1
|
||||
woo_blocks_version: 6.8.0
|
||||
mysql_command: --max_allowed_packet=100M --default-storage-engine=MYISAM
|
||||
mysql_image: mysql:5.5
|
||||
codeception_image_version: 7.4-cli_20220605.0
|
||||
wordpress_image_version: wp-5.8_php7.3_20221104.1
|
||||
requires:
|
||||
- build
|
||||
- unit_tests:
|
||||
@ -835,6 +794,8 @@ workflows:
|
||||
<<: *slack-fail-post-step
|
||||
name: integration_oldest
|
||||
codeception_image_version: 7.2-cli_20220605.0
|
||||
mysql_command: --max_allowed_packet=100M --default-storage-engine=MYISAM
|
||||
mysql_image: mysql:5.5
|
||||
requires:
|
||||
- build
|
||||
- build_premium:
|
||||
|
15
README.md
15
README.md
@ -126,23 +126,24 @@ You can access this help in your command line running `./do` without parameters.
|
||||
|
||||
[Read the article.](https://mailpoet.atlassian.net/wiki/spaces/MAILPOET/pages/629374977/Adding+new+templates+to+the+plugin)
|
||||
|
||||
## 🚥 Testing with PHP 7.4 or PHP 8.0
|
||||
## 🚥 Testing with different PHP versions
|
||||
|
||||
To switch the environment to PHP 7.4/8.0:
|
||||
To switch the environment to a different PHP version:
|
||||
|
||||
1. Configure the `wordpress` service in `docker-compose.override.yml` to build from the php74 Dockerfile:
|
||||
1. Check https://github.com/mailpoet/mailpoet/tree/trunk/dev for a list of available PHP versions. Each directory starting with `php` corresponds to a available version.
|
||||
2. Configure the `wordpress` service in `docker-compose.override.yml` to build from the desired PHP version Dockerfile (replace {PHP_VERSION} with the name of the directory that corresponds to the version that you want to use):
|
||||
|
||||
```yaml
|
||||
wordpress:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: dev/php74/Dockerfile # OR dev/php80/Dockerfile
|
||||
dockerfile: dev/{PHP_VERSION}/Dockerfile
|
||||
```
|
||||
|
||||
2. Run `docker-compose build wordpress`.
|
||||
3. Start the stack with `./do start`.
|
||||
3. Run `docker-compose build wordpress`.
|
||||
4. Start the stack with `./do start`.
|
||||
|
||||
To switch back to PHP 8.1 remove what was added in 1) and, run `docker-compose build wordpress` for application container and `docker-compose build test_wordpress` for tests container,
|
||||
To switch back to the default PHP version remove what was added in 2) and, run `docker-compose build wordpress` for application container and `docker-compose build test_wordpress` for tests container,
|
||||
and start the stack using `./do start`.
|
||||
|
||||
## ✅ TODO
|
||||
|
46
dev/php82/Dockerfile
Normal file
46
dev/php82/Dockerfile
Normal file
@ -0,0 +1,46 @@
|
||||
FROM php:8.2.0RC6-apache
|
||||
|
||||
ARG UID=1000
|
||||
ARG GID=1000
|
||||
|
||||
# additinal extensions
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y git zlib1g-dev libzip-dev zip wget gnupg msmtp libpng-dev gettext subversion \
|
||||
&& \
|
||||
# Install NodeJS, enable Corepack
|
||||
curl -sL https://deb.nodesource.com/setup_17.x | bash - && \
|
||||
apt-get install -y nodejs build-essential && \
|
||||
corepack enable && \
|
||||
\
|
||||
# Install WP-CLI
|
||||
curl -o /usr/local/bin/wp https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && \
|
||||
chmod +x /usr/local/bin/wp && \
|
||||
\
|
||||
# Clean up
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
COPY dev/php.ini /usr/local/etc/php/conf.d/php_user.ini
|
||||
|
||||
# msmtp config
|
||||
RUN printf "account default\nhost smtp\nport 1025" > /etc/msmtprc
|
||||
|
||||
# xdebug build an config
|
||||
ENV XDEBUGINI_PATH=/usr/local/etc/php/conf.d/xdebug.ini
|
||||
RUN git clone -b "3.2.0RC2" --depth 1 https://github.com/xdebug/xdebug.git /usr/src/php/ext/xdebug \
|
||||
&& docker-php-ext-configure xdebug --enable-xdebug-dev \
|
||||
&& docker-php-ext-install xdebug \
|
||||
&& mkdir /tmp/debug
|
||||
COPY dev/xdebug.ini /tmp/xdebug.ini
|
||||
RUN cat /tmp/xdebug.ini >> $XDEBUGINI_PATH
|
||||
|
||||
# php extensions
|
||||
RUN docker-php-ext-install pdo_mysql
|
||||
RUN docker-php-ext-install mysqli
|
||||
|
||||
# allow .htaccess files (between <Directory /var/www/> and </Directory>, which is WordPress installation)
|
||||
RUN sed -i '/<Directory \/var\/www\/>/,/<\/Directory>/ s/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
|
||||
|
||||
# ensure existing content in /var/www/html respects UID and GID, give Node permissions for Corepack
|
||||
RUN chown -R ${UID}:${GID} /var/www/html && \
|
||||
mkdir -p /.node && chown -R ${UID}:${GID} /.node
|
@ -28,6 +28,7 @@ Class `\MailPoet\API\API` becomes available once MailPoet plugin is loaded by Wo
|
||||
- [Add List (addList)](api_methods/AddList.md)
|
||||
- [Add Subscriber (addSubscriber)](api_methods/AddSubscriber.md)
|
||||
- [Add Subscriber Field (addSubscriberField)](api_methods/AddSubscriberField.md)
|
||||
- [Delete List (deleteList)](api_methods/DeleteList.md)
|
||||
- [Get Lists (getLists)](api_methods/GetLists.md)
|
||||
- [Get Subscriber (getSubscriber)](api_methods/GetSubscriber.md)
|
||||
- [Get Subscribers (getSubscribers)](api_methods/GetSubscribers.md)
|
||||
@ -38,6 +39,7 @@ Class `\MailPoet\API\API` becomes available once MailPoet plugin is loaded by Wo
|
||||
- [Subscribe to Lists (subscribeToLists)](api_methods/SubscribeToLists.md)
|
||||
- [Unsubscribe from List (unsubscribeFromList)](api_methods/UnsubscribeFromList.md)
|
||||
- [Unsubscribe from Lists (unsubscribeFromLists)](api_methods/UnsubscribeFromLists.md)
|
||||
- [Update List (updateList)](api_methods/UpdateList.md)
|
||||
|
||||
### Usage examples
|
||||
|
||||
|
27
doc/api_methods/DeleteList.md
Normal file
27
doc/api_methods/DeleteList.md
Normal file
@ -0,0 +1,27 @@
|
||||
[back to list](../Readme.md)
|
||||
|
||||
# Delete List
|
||||
|
||||
## `bool deleteList(string $list_id)`
|
||||
|
||||
This method provides functionality for deleting a list that is of the type 'default'.
|
||||
|
||||
It returns a boolean value.
|
||||
|
||||
## Error handling
|
||||
|
||||
All expected errors from the API are exceptions of class `\MailPoet\API\MP\v1\APIException`.
|
||||
Code of the exception is populated to distinguish between different errors.
|
||||
|
||||
An exception of base class `\Exception` can be thrown when something unexpected happens.
|
||||
|
||||
Codes description:
|
||||
|
||||
| Code | Description |
|
||||
| ---- | --------------------------------------------------------------- |
|
||||
| 5 | List does not exist |
|
||||
| 18 | List id is empty |
|
||||
| 20 | List cannot be deleted because it’s used for an automatic email |
|
||||
| 21 | List cannot be deleted because it’s used for a form |
|
||||
| 22 | The list couldn’t be deleted from the database |
|
||||
| 23 | Only lists of the type 'default' can be deleted |
|
@ -18,8 +18,8 @@ This method returns a list of subscribers. To see the subscriber data structure,
|
||||
|
||||
Filter argument supports following array keys.
|
||||
|
||||
| Key | Type | Description |
|
||||
| -------------- | ------------ | ----------------------------------------------------------------------------------------------------------------- |
|
||||
| status | string | Specific status of subscribers. One of values: `unconfirmed`, `subscribed`, `unsubscribed`, `bounced`, `inactive` |
|
||||
| list_id | int | List id or dynamic segment id |
|
||||
| min_updated_at | DateTime\int | DateTime object or timestamp of the minimal last update of subscribers |
|
||||
| Key | Type | Description |
|
||||
| ------------ | ------------ | ----------------------------------------------------------------------------------------------------------------- |
|
||||
| status | string | Specific status of subscribers. One of values: `unconfirmed`, `subscribed`, `unsubscribed`, `bounced`, `inactive` |
|
||||
| listId | int | List id or dynamic segment id |
|
||||
| minUpdatedAt | DateTime\int | DateTime object or timestamp of the minimal last update of subscribers |
|
||||
|
39
doc/api_methods/UpdateList.md
Normal file
39
doc/api_methods/UpdateList.md
Normal file
@ -0,0 +1,39 @@
|
||||
[back to list](../Readme.md)
|
||||
|
||||
# Add Subscriber
|
||||
|
||||
## `array updateList(array $list)`
|
||||
|
||||
This method provides functionality for updating a list name or description. Only lists of type 'default' are supported.
|
||||
|
||||
It returns the updated list. See [Get Lists](GetLists.md) for a list data structure description.
|
||||
|
||||
## Arguments
|
||||
|
||||
### `$list` (required)
|
||||
|
||||
An associative array which contains list data.
|
||||
|
||||
| Property | Type | Limits | Description |
|
||||
| ---------------------- | ------------ | --------- | -------------------------- |
|
||||
| id (required) | string | 11 chars | A id of the list. |
|
||||
| name (required) | string | 90 chars | A name of the list. |
|
||||
| description (optional) | string\|null | 250 chars | A description of the list. |
|
||||
|
||||
## Error handling
|
||||
|
||||
All expected errors from the API are exceptions of class `\MailPoet\API\MP\v1\APIException`.
|
||||
Code of the exception is populated to distinguish between different errors.
|
||||
|
||||
An exception of base class `\Exception` can be thrown when something unexpected happens.
|
||||
|
||||
Codes description:
|
||||
|
||||
| Code | Description |
|
||||
| ---- | ----------------------------------------------- |
|
||||
| 5 | The list was not found by id |
|
||||
| 14 | Missing list name |
|
||||
| 15 | Trying to use a list name that is already used |
|
||||
| 18 | Missing list id |
|
||||
| 19 | The list couldn’t be updated in the database |
|
||||
| 23 | Only lists of the type 'default' can be updated |
|
@ -15,6 +15,7 @@ services:
|
||||
volumes:
|
||||
- my-datavolume:/var/lib/mysql
|
||||
- ./dev/database/create_test_db.sh:/docker-entrypoint-initdb.d/10-create_test_db.sh
|
||||
command: --sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI,ONLY_FULL_GROUP_BY
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: somewordpress
|
||||
MYSQL_DATABASE: wordpress
|
||||
|
@ -5,7 +5,6 @@
|
||||
"@babel/preset-env"
|
||||
],
|
||||
"plugins": [
|
||||
"babel-plugin-typescript-to-proptypes",
|
||||
[
|
||||
"@babel/plugin-transform-runtime",
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
|
||||
|
||||
// phpcs:disable PSR1.Classes.ClassDeclaration
|
||||
// phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
|
||||
@ -117,11 +117,45 @@ class RoboFile extends \Robo\Tasks {
|
||||
}
|
||||
|
||||
public function translationsBuild() {
|
||||
$exclude = implode(',', [
|
||||
'.mp_svn',
|
||||
'assets/css',
|
||||
'assets/img',
|
||||
'assets/js',
|
||||
'generated',
|
||||
'lang',
|
||||
'lib-3rd-party',
|
||||
'mailpoet-premium',
|
||||
'node_modules',
|
||||
'plugin_repository',
|
||||
'prefixer',
|
||||
'tasks',
|
||||
'temp',
|
||||
'tests',
|
||||
'tools',
|
||||
'vendor',
|
||||
'vendor-prefixed',
|
||||
]);
|
||||
|
||||
$headers = escapeshellarg(
|
||||
json_encode([
|
||||
'Report-Msgid-Bugs-To' => 'http://support.mailpoet.com/',
|
||||
'Last-Translator' => 'MailPoet i18n (https://www.transifex.com/organization/wysija)',
|
||||
'Language-Team' => 'MailPoet i18n <https://www.transifex.com/organization/wysija>',
|
||||
'Plural-Forms' => 'nplurals=2; plural=(n != 1);',
|
||||
])
|
||||
);
|
||||
|
||||
$this->collectionBuilder()
|
||||
->taskExec('mkdir -p ' . __DIR__ . '/lang')
|
||||
->taskExec(
|
||||
'php -d memory_limit=-1 tasks/makepot/grunt-makepot.php wp-plugin . lang/mailpoet.pot mailpoet .mp_svn,assets,lang,node_modules,plugin_repository,tasks,tests,vendor'
|
||||
)->run();
|
||||
|
||||
// HTML, HBS
|
||||
->taskExec("php -d memory_limit=-1 tasks/makepot/makepot-views.php . > lang/mailpoet.pot")
|
||||
|
||||
// PHP, JS/TS
|
||||
->taskExec("vendor/bin/wp i18n make-pot --merge --slug=mailpoet --domain=mailpoet --exclude=$exclude --headers=$headers . lang/mailpoet.pot")
|
||||
|
||||
->run();
|
||||
}
|
||||
|
||||
public function translationsGetPotFileFromBuild() {
|
||||
@ -263,6 +297,29 @@ class RoboFile extends \Robo\Tasks {
|
||||
return $this->runTestsInContainer($opts);
|
||||
}
|
||||
|
||||
public function testPerformance($path = null, $opts = ['url' => null, 'head' => false, 'scenario' => null]) {
|
||||
// run WordPress setup
|
||||
$this->taskExec('COMPOSE_HTTP_TIMEOUT=200 docker-compose run --rm -it setup')
|
||||
->dir(__DIR__ . '/tests/performance')
|
||||
->run();
|
||||
|
||||
// run performance tests
|
||||
$dir = __DIR__;
|
||||
return $this->taskExec("php $dir/tools/xk6browser.php")
|
||||
->arg('run')
|
||||
->option('env', 'URL=' . $opts['url'])
|
||||
->option('env', 'HEADLESS=' . ($opts['head'] ? 'false' : 'true'))
|
||||
->option('env', 'SCENARIO=' . $opts['scenario'])
|
||||
->arg($path ?? "$dir/tests/performance/scenarios.js")
|
||||
->dir($dir)->run();
|
||||
}
|
||||
|
||||
public function testPerformanceClean() {
|
||||
$this->taskExec('COMPOSE_HTTP_TIMEOUT=200 docker-compose down --remove-orphans -v')
|
||||
->dir(__DIR__ . '/tests/performance')
|
||||
->run();
|
||||
}
|
||||
|
||||
public function testAcceptanceMultisite($opts = ['file' => null, 'skip-deps' => false, 'group' => null, 'timeout' => null, 'enable-cot' => false, 'enable-cot-sync' => false]) {
|
||||
return $this->runTestsInContainer(array_merge($opts, ['multisite' => true]));
|
||||
}
|
||||
@ -351,6 +408,25 @@ class RoboFile extends \Robo\Tasks {
|
||||
$this->say("Validator metadata generated to: $validatorMetadataDir");
|
||||
}
|
||||
|
||||
public function migrationsNew() {
|
||||
$generator = new \MailPoet\Migrator\Repository();
|
||||
$result = $generator->create();
|
||||
$path = realpath($result['path']);
|
||||
$this->output->writeln('MAILPOET DATABASE MIGRATIONS');
|
||||
$this->output->writeln("============================\n");
|
||||
$this->output->writeln("New migration created ✔\n");
|
||||
$this->output->writeln(" Name: {$result['name']}");
|
||||
$this->output->writeln(" Path: $path");
|
||||
}
|
||||
|
||||
public function migrationsStatus() {
|
||||
return $this->taskExec('vendor/bin/wp mailpoet:migrations:status');
|
||||
}
|
||||
|
||||
public function migrationsRun() {
|
||||
return $this->taskExec('vendor/bin/wp mailpoet:migrations:run');
|
||||
}
|
||||
|
||||
public function qa() {
|
||||
$collection = $this->collectionBuilder();
|
||||
$collection->addCode([$this, 'qaPhp']);
|
||||
@ -372,6 +448,9 @@ class RoboFile extends \Robo\Tasks {
|
||||
$collection->addCode(function() {
|
||||
return $this->qaCodeSniffer([]);
|
||||
});
|
||||
$collection->addCode(function() {
|
||||
return $this->qaMinimalPluginStandard([]);
|
||||
});
|
||||
return $collection->run();
|
||||
}
|
||||
|
||||
@ -448,7 +527,56 @@ class RoboFile extends \Robo\Tasks {
|
||||
'./tasks/code_sniffer/vendor/bin/phpcs',
|
||||
'--extensions=php',
|
||||
$severityFlag,
|
||||
'--standard=tasks/code_sniffer/MailPoet',
|
||||
'--standard=tasks/code_sniffer/MailPoet/free-ruleset.xml',
|
||||
'-s',
|
||||
]);
|
||||
|
||||
$ignorePaths = [
|
||||
'.mp_svn',
|
||||
'assets',
|
||||
'doc',
|
||||
'generated',
|
||||
'lib/Config/PopulatorData/Templates',
|
||||
'lib-3rd-party',
|
||||
'node_modules',
|
||||
'plugin_repository',
|
||||
'prefixer/build',
|
||||
'prefixer/vendor',
|
||||
'tasks/code_sniffer/vendor',
|
||||
'tasks/phpstan/vendor',
|
||||
'tasks/makepot',
|
||||
'tools/vendor',
|
||||
'temp',
|
||||
'tests/_data',
|
||||
'tests/_output',
|
||||
'tests/_support/_generated',
|
||||
'vendor',
|
||||
'vendor-prefixed',
|
||||
'views',
|
||||
];
|
||||
|
||||
// the "--ignore" arg takes a list of regexes, we need to anchor and escape them
|
||||
$ignorePatterns = array_map(function (string $path): string {
|
||||
return '^' . preg_quote(__DIR__ . DIRECTORY_SEPARATOR . $path);
|
||||
}, $ignorePaths);
|
||||
|
||||
$stringFilesToCheck = !empty($filesToCheck) ? implode(' ', $filesToCheck) : '.';
|
||||
|
||||
return $this->taskExec($task)
|
||||
->arg('--ignore=' . implode(',', $ignorePatterns))
|
||||
->rawArg($stringFilesToCheck)
|
||||
->run();
|
||||
}
|
||||
|
||||
public function qaMinimalPluginStandard(array $filesToCheck, $opts = ['severity' => 'all']) {
|
||||
$severityFlag = $opts['severity'] === 'all' ? '-w' : '-n';
|
||||
|
||||
$task = implode(' ', [
|
||||
'php -d memory_limit=-1',
|
||||
'./tasks/code_sniffer/vendor/bin/phpcs',
|
||||
'--extensions=php',
|
||||
$severityFlag,
|
||||
'--standard=tasks/code_sniffer/vendor/wporg/plugin-directory/MinimalPluginStandard',
|
||||
'-s',
|
||||
]);
|
||||
|
||||
@ -746,6 +874,9 @@ class RoboFile extends \Robo\Tasks {
|
||||
->addCode(function () use ($version) {
|
||||
$this->releaseCreatePullRequest($version);
|
||||
})
|
||||
->addCode(function () use ($version) {
|
||||
$this->releaseRerunCircleWorkflow(\MailPoetTasks\Release\CircleCiController::PROJECT_PREMIUM);
|
||||
})
|
||||
->addCode(function () use ($version) {
|
||||
$this->translationsPrepareLanguagePacks($version);
|
||||
})
|
||||
@ -1063,6 +1194,18 @@ class RoboFile extends \Robo\Tasks {
|
||||
$this->say("Release '$version[name]' info was published on Slack.");
|
||||
}
|
||||
|
||||
public function releaseRerunCircleWorkflow(string $project = null) {
|
||||
$circleciController = $this->createCircleCiController();
|
||||
$result = $circleciController->rerunLatestWorkflow($project);
|
||||
// Sometimes can be useful to know which Circle project workflow was restarted
|
||||
$project = $project ? " for the project '{$project}'" : '';
|
||||
if (!$result) {
|
||||
$this->yell("Circle Workflow{$project} was not restarted", 40, 'red');
|
||||
} else {
|
||||
$this->say("Circle Workflow{$project} was started from the beginning");
|
||||
}
|
||||
}
|
||||
|
||||
public function downloadWooCommerceBlocksZip($tag = null) {
|
||||
$this->createWpOrgDownloader('woo-gutenberg-products-block')
|
||||
->downloadPluginZip('woo-gutenberg-products-block.zip', __DIR__ . '/tests/plugins/', $tag);
|
||||
@ -1087,20 +1230,10 @@ class RoboFile extends \Robo\Tasks {
|
||||
}
|
||||
|
||||
public function downloadWooCommerceZip($tag = null) {
|
||||
if ($tag === 'woo-cot-beta') {
|
||||
$this->downloadWooCommerceCotZip();
|
||||
return;
|
||||
}
|
||||
$this->createWpOrgDownloader('woocommerce')
|
||||
->downloadPluginZip('woocommerce.zip', __DIR__ . '/tests/plugins/', $tag);
|
||||
}
|
||||
|
||||
public function downloadWooCommerceCotZip() {
|
||||
$cotBuildUrl = 'https://github.com/woocommerce/woocommerce/files/9706609/woocommerce.zip';
|
||||
file_put_contents(__DIR__ . '/tests/plugins/woocommerce.zip', file_get_contents($cotBuildUrl));
|
||||
file_put_contents(__DIR__ . '/tests/plugins/woocommerce.zip-info', $cotBuildUrl);
|
||||
}
|
||||
|
||||
public function generateData($generatorName = null, $threads = 1) {
|
||||
require_once __DIR__ . '/tests/DataGenerator/_bootstrap.php';
|
||||
$generator = new \MailPoet\Test\DataGenerator\DataGenerator(new \Codeception\Lib\Console\Output([]));
|
||||
|
BIN
mailpoet/assets/audio/0.mp3
Normal file
BIN
mailpoet/assets/audio/0.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/1.mp3
Normal file
BIN
mailpoet/assets/audio/1.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/2.mp3
Normal file
BIN
mailpoet/assets/audio/2.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/3.mp3
Normal file
BIN
mailpoet/assets/audio/3.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/4.mp3
Normal file
BIN
mailpoet/assets/audio/4.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/5.mp3
Normal file
BIN
mailpoet/assets/audio/5.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/6.mp3
Normal file
BIN
mailpoet/assets/audio/6.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/7.mp3
Normal file
BIN
mailpoet/assets/audio/7.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/8.mp3
Normal file
BIN
mailpoet/assets/audio/8.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/9.mp3
Normal file
BIN
mailpoet/assets/audio/9.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/a.mp3
Normal file
BIN
mailpoet/assets/audio/a.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/b.mp3
Normal file
BIN
mailpoet/assets/audio/b.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/c.mp3
Normal file
BIN
mailpoet/assets/audio/c.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/d.mp3
Normal file
BIN
mailpoet/assets/audio/d.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/e.mp3
Normal file
BIN
mailpoet/assets/audio/e.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/f.mp3
Normal file
BIN
mailpoet/assets/audio/f.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/g.mp3
Normal file
BIN
mailpoet/assets/audio/g.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/h.mp3
Normal file
BIN
mailpoet/assets/audio/h.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/i.mp3
Normal file
BIN
mailpoet/assets/audio/i.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/j.mp3
Normal file
BIN
mailpoet/assets/audio/j.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/k.mp3
Normal file
BIN
mailpoet/assets/audio/k.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/l.mp3
Normal file
BIN
mailpoet/assets/audio/l.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/m.mp3
Normal file
BIN
mailpoet/assets/audio/m.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/n.mp3
Normal file
BIN
mailpoet/assets/audio/n.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/o.mp3
Normal file
BIN
mailpoet/assets/audio/o.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/p.mp3
Normal file
BIN
mailpoet/assets/audio/p.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/q.mp3
Normal file
BIN
mailpoet/assets/audio/q.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/r.mp3
Normal file
BIN
mailpoet/assets/audio/r.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/s.mp3
Normal file
BIN
mailpoet/assets/audio/s.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/t.mp3
Normal file
BIN
mailpoet/assets/audio/t.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/u.mp3
Normal file
BIN
mailpoet/assets/audio/u.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/v.mp3
Normal file
BIN
mailpoet/assets/audio/v.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/w.mp3
Normal file
BIN
mailpoet/assets/audio/w.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/x.mp3
Normal file
BIN
mailpoet/assets/audio/x.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/y.mp3
Normal file
BIN
mailpoet/assets/audio/y.mp3
Normal file
Binary file not shown.
BIN
mailpoet/assets/audio/z.mp3
Normal file
BIN
mailpoet/assets/audio/z.mp3
Normal file
Binary file not shown.
@ -1,4 +1,4 @@
|
||||
.mailpoet-automation-workflow-add-trigger {
|
||||
.mailpoet-automation-add-trigger {
|
||||
align-items: center;
|
||||
border: 1px dashed #c3c4c7;
|
||||
border-radius: 4px;
|
||||
|
@ -0,0 +1,37 @@
|
||||
.mailpoet-automation-editor-automation {
|
||||
background: #fbfbfb;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.mailpoet-automation-editor-automation-wrapper {
|
||||
display: grid;
|
||||
padding: 50px 20px;
|
||||
}
|
||||
|
||||
.mailpoet-automation-editor-automation-end {
|
||||
background: #8c8f94;
|
||||
border-radius: 999999px;
|
||||
fill: white;
|
||||
height: 18px;
|
||||
margin: 4px auto;
|
||||
padding: 3px;
|
||||
width: 18px;
|
||||
}
|
||||
|
||||
.mailpoet-automation-editor-stats {
|
||||
margin: 0 auto 32px;
|
||||
max-width: 480px;
|
||||
width: 100%;
|
||||
|
||||
.mailpoet-automation-stats-item {
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
.mailpoet-automation-stats-label {
|
||||
color: #787c82;
|
||||
}
|
||||
|
||||
.mailpoet-automation-stats-value {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
.mailpoet-automatoin-deactivate-modal {
|
||||
color: #1d2327;
|
||||
font-size: 13px;
|
||||
line-height: 21px;
|
||||
max-width: 480px;
|
||||
|
||||
.mailpoet-automation-options {
|
||||
li {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-option {
|
||||
border: 2px solid #dcdcde;
|
||||
border-radius: 4px;
|
||||
color: #646970;
|
||||
display: grid;
|
||||
font-size: 12px;
|
||||
grid-gap: 8px;
|
||||
grid-template-columns: 20px auto;
|
||||
line-height: 16px;
|
||||
padding: 8px;
|
||||
|
||||
&.active {
|
||||
border-color: #2271b1;
|
||||
}
|
||||
|
||||
strong {
|
||||
color: #1d2327;
|
||||
display: block;
|
||||
font-size: 13px;
|
||||
font-weight: normal;
|
||||
line-height: 21px;
|
||||
}
|
||||
}
|
||||
|
||||
.components-button {
|
||||
float: right;
|
||||
|
||||
&.is-tertiary {
|
||||
margin-right: 12px;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
.mailpoet-automation-editor-empty-workflow {
|
||||
.mailpoet-automation-editor-empty-automation {
|
||||
align-items: center;
|
||||
display: grid;
|
||||
height: 100%;
|
@ -30,3 +30,32 @@
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-field__error {
|
||||
position: relative;
|
||||
|
||||
input:not([type='radio'])
|
||||
select,
|
||||
textarea,
|
||||
input[type='text'].components-form-token-field__input {
|
||||
background: right top/26px no-repeat url('../../img/icons/alert.svg');
|
||||
padding-right: 26px;
|
||||
}
|
||||
|
||||
select,
|
||||
input[type=number] {
|
||||
background-position-x: calc(100% - 26px);
|
||||
padding-right: 8px !important;
|
||||
}
|
||||
|
||||
.components-base-control__help,
|
||||
.mailpoet-automation-field-message {
|
||||
color: #d63638;
|
||||
}
|
||||
|
||||
.components-button.mailpoet-automation-button-sidebar-primary,
|
||||
.components-button.mailpoet-automation-button-sidebar-primary.has-text,
|
||||
.components-button.mailpoet-automation-button-sidebar-primary.has-icon {
|
||||
background: #d63638;
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,10 @@
|
||||
.components-panel__body-title.mailpoet-automation-panel-plain-body-title {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr auto;
|
||||
|
||||
&:hover {
|
||||
background: none;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-panel-plain-body-title-text {
|
||||
@ -12,6 +16,10 @@
|
||||
font-weight: 500;
|
||||
line-height: normal;
|
||||
padding: 16px 48px 16px 16px;
|
||||
|
||||
label & {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-panel-plain-body-title-action {
|
||||
@ -57,3 +65,78 @@
|
||||
color: #757575;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.mailpoet-automation-activate-panel {
|
||||
animation: mailpoet-automation-activate-panel-animation .1s forwards;
|
||||
background: #fff;
|
||||
border-left: 1px solid #ddd;
|
||||
bottom: 0;
|
||||
height: 100%;
|
||||
left: auto;
|
||||
overflow: auto;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
top: 0;
|
||||
transform: translateX(100%);
|
||||
width: 281px;
|
||||
z-index: 999999;
|
||||
|
||||
button {
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-activate-panel__header {
|
||||
align-content: space-between;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
height: 61px;
|
||||
|
||||
.has-icon {
|
||||
margin-left: auto;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-activate-panel__header,
|
||||
.mailpoet-automation-activate-panel__section {
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.mailpoet-automation-activate-panel__header,
|
||||
.mailpoet-automation-activate-panel__body {
|
||||
padding-left: 16px;
|
||||
padding-right: 16px;
|
||||
|
||||
.components-spinner {
|
||||
display: block;
|
||||
margin: 100px auto 0;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-activate-panel__section {
|
||||
margin-left: -16px;
|
||||
margin-right: -16px;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
.mailpoet-automation-activate-panel__header-activate-button,
|
||||
.mailpoet-automation-activate-panel__header-cancel-button {
|
||||
flex-grow: 1;
|
||||
max-width: 160px;
|
||||
}
|
||||
|
||||
.mailpoet-automation-activate-panel__header-activate-button {
|
||||
padding-right: 4px;
|
||||
}
|
||||
|
||||
.mailpoet-automation-activate-panel__header-cancel-button {
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
@keyframes mailpoet-automation-activate-panel-animation {
|
||||
100% {
|
||||
transform: translateX(0);
|
||||
}
|
||||
}
|
||||
|
@ -1,19 +0,0 @@
|
||||
.mailpoet-automation-editor-workflow {
|
||||
background: #fbfbfb;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.mailpoet-automation-editor-workflow-wrapper {
|
||||
display: grid;
|
||||
padding: 50px 20px;
|
||||
}
|
||||
|
||||
.mailpoet-automation-editor-workflow-end {
|
||||
background: #8c8f94;
|
||||
border-radius: 999999px;
|
||||
fill: white;
|
||||
height: 18px;
|
||||
margin: 4px auto;
|
||||
padding: 3px;
|
||||
width: 18px;
|
||||
}
|
@ -4,18 +4,64 @@
|
||||
.mailpoet-add-new-button {
|
||||
padding-right: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-listing {
|
||||
/* Prevent border radius beneath tabs */
|
||||
border-radius: 0 0 1px 1px;
|
||||
.mailpoet-automation-is-onboarding {
|
||||
.notice {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-listing-heading {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.mailpoet-automation-listing {
|
||||
box-shadow: none;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.mailpoet-automation-listing-cell-name {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
|
||||
> a:only-child {
|
||||
bottom: 2px;
|
||||
display: flex;
|
||||
left: 0;
|
||||
padding: 16px 24px;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-filter-tab-panel {
|
||||
background-color: #fff;
|
||||
border-radius: 1px;
|
||||
box-shadow: 0 0 0 1px rgba(0, 0, 0, .1);
|
||||
outline: none;
|
||||
border: 1px solid #dcdcde;
|
||||
border-radius: 2px;
|
||||
|
||||
.components-tab-panel__tabs {
|
||||
box-shadow: inset 0 -1px 0 0 #dcdcde;
|
||||
}
|
||||
|
||||
.components-tab-panel__tabs-item:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.components-tab-panel__tabs-item.is-active {
|
||||
box-shadow: inset 0 -4px 0 0 var(--wp-admin-theme-color);
|
||||
}
|
||||
|
||||
.components-tab-panel__tabs-item:focus-visible {
|
||||
box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
|
||||
}
|
||||
|
||||
.components-tab-panel__tabs-item.is-active:focus-visible {
|
||||
box-shadow:
|
||||
inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color),
|
||||
inset 0 -4px 0 0 var(--wp-admin-theme-color);
|
||||
}
|
||||
|
||||
.count {
|
||||
background-color: #f0f0f1;
|
||||
@ -27,6 +73,13 @@
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-listing-heading {
|
||||
margin-bottom: 16px;
|
||||
.mailpoet-automation-listing-more-button button.components-button {
|
||||
height: 36px;
|
||||
padding: 0;
|
||||
width: 36px;
|
||||
|
||||
svg {
|
||||
height: 28px;
|
||||
width: 28px;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,201 @@
|
||||
@mixin full-width {
|
||||
margin-left: -20px;
|
||||
padding-left: 104px;
|
||||
padding-right: 104px;
|
||||
width: calc(100% + 60px);
|
||||
|
||||
@media screen and (max-width: 782px) {
|
||||
margin-left: -10px;
|
||||
width: calc(100% + 34px);
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-section {
|
||||
@include full-width;
|
||||
}
|
||||
|
||||
.mailpoet-automation-white-background {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.mailpoet-automation-section-content {
|
||||
display: block;
|
||||
margin: auto;
|
||||
max-width: 1072px;
|
||||
padding: 65px 0;
|
||||
|
||||
h2 {
|
||||
font-size: 23px;
|
||||
font-weight: 400;
|
||||
line-height: 32px;
|
||||
margin: 0;
|
||||
padding: 0 0 8px;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
line-height: 22px;
|
||||
margin: 0;
|
||||
padding: 0 0 40px;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-section-hero {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
margin-top: -20px;
|
||||
|
||||
h1 {
|
||||
font-size: 32px;
|
||||
font-weight: 400;
|
||||
line-height: 40px;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 14px;
|
||||
line-height: 22px;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
> div {
|
||||
width: 400px;
|
||||
}
|
||||
|
||||
img {
|
||||
margin-top: 16px;
|
||||
max-width: 100%;
|
||||
width: 532px;
|
||||
|
||||
@media screen and (min-width: 1305px) {
|
||||
height: 100%;
|
||||
margin-top: 0;
|
||||
max-height: 294px;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-preheading {
|
||||
display: block;
|
||||
font-size: 11px;
|
||||
letter-spacing: .2px;
|
||||
line-height: 16px;
|
||||
margin-bottom: 32px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.mailpoet-section-templates {
|
||||
padding: 48px 0;
|
||||
|
||||
.components-button {
|
||||
display: block;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
line-height: 25px;
|
||||
text-align: center;
|
||||
text-underline-offset: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-section-template-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 40px;
|
||||
|
||||
> li {
|
||||
flex-grow: 1;
|
||||
margin-right: 8px;
|
||||
max-width: 336px;
|
||||
|
||||
&:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
button {
|
||||
background: #fff;
|
||||
border: 1px solid #dcdcde;
|
||||
border-radius: 0;
|
||||
color: #1d2327;
|
||||
cursor: pointer;
|
||||
padding: 24px;
|
||||
text-align: left;
|
||||
|
||||
h3 {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
line-height: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-section-build-list-button {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
color: #000;
|
||||
cursor: pointer;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
line-height: 24px;
|
||||
padding: 0;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.mailpoet-section-build-your-own {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
|
||||
ol {
|
||||
list-style: decimal-leading-zero inside;
|
||||
margin: 0;
|
||||
max-width: 373px;
|
||||
padding: 0;
|
||||
|
||||
> li {
|
||||
border-bottom: 1px solid #dcdcde;
|
||||
display: grid;
|
||||
grid-gap: 16px;
|
||||
grid-template-columns: 16px auto;
|
||||
margin-bottom: 16px;
|
||||
padding-bottom: 16px;
|
||||
|
||||
&.open {
|
||||
p {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.mailpoet-section-build-list-button {
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
border: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.marker {
|
||||
color: #ff5301;
|
||||
display: inline-block;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
p {
|
||||
display: none;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
height: auto;
|
||||
max-width: 400px;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
.mailpoet-automation-listing-cell-actions {
|
||||
align-items: center;
|
||||
display: grid;
|
||||
gap: 8px;
|
||||
grid-auto-flow: column;
|
||||
white-space: nowrap;
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
.mailpoet-automation-listing-cell-status {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
display: grid;
|
||||
grid-auto-flow: column;
|
||||
white-space: nowrap;
|
||||
|
||||
> div.components-base-control > div.components-base-control__field {
|
||||
margin-bottom: 0;
|
||||
|
@ -0,0 +1,33 @@
|
||||
.mailpoet-option-button {
|
||||
display: flex;
|
||||
margin-top: 8px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.mailpoet-option-button-main {
|
||||
border-radius: 2px 0 0 2px;
|
||||
margin-right: 1px;
|
||||
}
|
||||
|
||||
.mailpoet-option-button-opener {
|
||||
background: var(--wp-admin-theme-color);
|
||||
border-radius: 0 2px 2px 0;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.mailpoet-option-button-opener svg {
|
||||
fill: white;
|
||||
}
|
||||
|
||||
.mailpoet-option-button-opener .is-opened svg {
|
||||
transform: scale(-1, -1);
|
||||
transform-origin: center 12.5px;
|
||||
}
|
||||
|
||||
.mailpoet-option-button-opener.is-busy {
|
||||
animation: components-button__busy-animation 2500ms infinite linear;
|
||||
background-color: var(--wp-admin-theme-color);
|
||||
background-image: linear-gradient(-45deg, var(--wp-admin-theme-color) 33%, var(--wp-admin-theme-color-darker-20) 33%, var(--wp-admin-theme-color-darker-20) 70%, var(--wp-admin-theme-color) 70%);
|
||||
background-size: 100px 100%;
|
||||
border-color: var(--wp-admin-theme-color);
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
.mailpoet-automation-stats {
|
||||
display: grid;
|
||||
grid-auto-flow: column;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.mailpoet-automation-stats-item {
|
||||
color: $color-wordpress-heading;
|
||||
display: grid;
|
||||
font-size: 12px;
|
||||
line-height: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.mailpoet-automation-stats-label {
|
||||
color: #646970;
|
||||
display: block;
|
||||
|
||||
&.display-after {
|
||||
order: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-stats-value {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.mailpoet-automation-stats-item-separator {
|
||||
color: #a7aaad;
|
||||
font-size: 20px;
|
||||
margin: 0 16px;
|
||||
}
|
@ -51,4 +51,8 @@
|
||||
.mailpoet_form_field_block {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.mailpoet_form_field_input_nowrap {
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,41 @@
|
||||
.mailpoet_coupon_block {
|
||||
.mailpoet_editor_coupon {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.mailpoet_editor_coupon_overlay {
|
||||
background: rgba(255, 255, 255, .5);
|
||||
color: #000;
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
font-size: 18px;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
:hover {
|
||||
.mailpoet_editor_coupon {
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
.mailpoet_editor_coupon_overlay {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.coupon_amount_wrapper {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.amount_percentage_sign {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
left: 150px; // .mailpoet_input_medium width
|
||||
line-height: 30px;
|
||||
margin-left: 10px;
|
||||
position: absolute;
|
||||
}
|
@ -111,10 +111,29 @@ h2 {
|
||||
|
||||
.edit-post-visual-editor {
|
||||
background-color: $color-white;
|
||||
padding: 10px;
|
||||
padding: 10px 10px 100px;
|
||||
}
|
||||
|
||||
// Unify padding o wp-block-columns with background with front end rendering
|
||||
.wp-block-columns.has-background {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
// Close button animation
|
||||
.edit-post-header-toolbar.edit-post-header-toolbar__left > .edit-post-header-toolbar__inserter-toggle {
|
||||
svg {
|
||||
transition: transform cubic-bezier(.165, .84, .44, 1) .2s;
|
||||
}
|
||||
|
||||
&.is-pressed svg {
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
}
|
||||
|
||||
// Hide block selector header with close button on desktops
|
||||
|
||||
@include respond-to(not-small-screen) {
|
||||
.edit-post-editor__inserter-panel-header {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
@ -1,28 +0,0 @@
|
||||
// Override CSS for HelpScout beacon on form editor page
|
||||
.admin_page_mailpoet-form-editor {
|
||||
.BeaconFabButtonFrame,
|
||||
.BeaconContainer {
|
||||
left: 175px;
|
||||
}
|
||||
|
||||
&.folded {
|
||||
.BeaconFabButtonFrame,
|
||||
.BeaconContainer {
|
||||
left: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
@include respond-to(medium-screen) {
|
||||
.BeaconFabButtonFrame,
|
||||
.BeaconContainer {
|
||||
left: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
@include respond-to(small-screen) {
|
||||
.BeaconFabButtonFrame,
|
||||
.BeaconContainer {
|
||||
left: 15px;
|
||||
}
|
||||
}
|
||||
}
|
@ -123,4 +123,5 @@
|
||||
// This style hides the horizontal scrollbar in Firefox browser
|
||||
.interface-interface-skeleton__sidebar {
|
||||
overflow-x: hidden;
|
||||
padding-bottom: 100px;
|
||||
}
|
||||
|
@ -0,0 +1,26 @@
|
||||
.mailpoet-homepage-section__container {
|
||||
background-color: $color-white;
|
||||
box-shadow: rgb(0 0 0 / 10%) 0 0 0 1px;
|
||||
margin: $grid-gap-xl 0 $grid-gap-medium;
|
||||
}
|
||||
|
||||
.mailpoet-homepage-section__heading {
|
||||
align-items: center;
|
||||
border-bottom: 1px solid $color-homepage-borders;
|
||||
display: grid;
|
||||
grid-template-columns: auto $grid-gap-medium;
|
||||
height: 60px;
|
||||
padding: 0 $grid-gap-medium;
|
||||
position: relative;
|
||||
|
||||
h2 {
|
||||
font-size: 20px;
|
||||
font-weight: normal;
|
||||
line-height: 28px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@include respond-to(small-screen) {
|
||||
padding: $grid-gap-half $grid-gap-medium;
|
||||
}
|
||||
}
|
5
mailpoet/assets/css/src/components-homepage/_layout.scss
Normal file
5
mailpoet/assets/css/src/components-homepage/_layout.scss
Normal file
@ -0,0 +1,5 @@
|
||||
.mailpoet-homepage__container {
|
||||
margin: 0 auto;
|
||||
margin-top: $grid-gap-xl;
|
||||
max-width: 680px;
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
.mailpoet-homepage-product-discovery {
|
||||
ul {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-product-discovery__task {
|
||||
align-items: center;
|
||||
border-bottom: 1px solid $color-homepage-borders;
|
||||
box-sizing: border-box;
|
||||
cursor: pointer;
|
||||
display: grid;
|
||||
font-weight: 600;
|
||||
grid-template-columns: (124px + $grid-gap-medium) auto $grid-gap-xl;
|
||||
margin: 0;
|
||||
padding: $grid-gap-medium;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
|
||||
@include respond-to(small-screen) {
|
||||
grid-template-columns: auto $grid-gap-xl;
|
||||
|
||||
img {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
box-shadow: inset 5px 0 0 0 var(--wp-admin-theme-color);
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-product-discovery__task--completed {
|
||||
cursor: inherit;
|
||||
|
||||
&:hover {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-product-discovery__task-content {
|
||||
h3 {
|
||||
color: var(--wp-admin-theme-color);
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
p {
|
||||
color: $color-text-light;
|
||||
font-weight: normal;
|
||||
margin: 3px 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-product-discovery__task-after {
|
||||
.mailpoet-task-list__task-icon {
|
||||
background-color: var(--wp-admin-theme-color);
|
||||
|
||||
svg {
|
||||
fill: $color-white;
|
||||
}
|
||||
}
|
||||
}
|
126
mailpoet/assets/css/src/components-homepage/_task-list.scss
Normal file
126
mailpoet/assets/css/src/components-homepage/_task-list.scss
Normal file
@ -0,0 +1,126 @@
|
||||
$task-icon-size: 32px;
|
||||
|
||||
.mailpoet-task-list__task {
|
||||
background-color: $color-white;
|
||||
border-bottom: 1px solid $color-homepage-borders;
|
||||
box-sizing: border-box;
|
||||
cursor: pointer;
|
||||
display: grid;
|
||||
font-weight: 600;
|
||||
grid-template-columns: $grid-gap-xl auto $grid-gap-xl;
|
||||
margin: 0;
|
||||
padding: $grid-gap $grid-gap-medium;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
|
||||
&:hover {
|
||||
background-color: $color-grey-0;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-task-list__task-content {
|
||||
align-content: center;
|
||||
color: var(--wp-admin-theme-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-size: 14px;
|
||||
justify-content: center;
|
||||
line-height: 20px;
|
||||
|
||||
p {
|
||||
color: $color-text-light;
|
||||
font-weight: normal;
|
||||
margin: 3px 0 0;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--wp-admin-theme-color);
|
||||
|
||||
&:hover {
|
||||
color: var(--wp-admin-theme-color-darker-20);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-task-list__task-before {
|
||||
color: var(--wp-admin-theme-color);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.mailpoet-task-list__task-icon {
|
||||
border: 1px solid var(--wp-admin-theme-color);
|
||||
border-radius: 50%;
|
||||
box-sizing: border-box;
|
||||
height: $task-icon-size;
|
||||
line-height: $task-icon-size;
|
||||
text-align: center;
|
||||
width: $task-icon-size;
|
||||
|
||||
svg {
|
||||
fill: var(--wp-admin-theme-color);
|
||||
margin: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-task-list__task--completed {
|
||||
cursor: inherit;
|
||||
|
||||
&:hover {
|
||||
background-color: $color-white;
|
||||
}
|
||||
|
||||
.mailpoet-task-list__task-icon {
|
||||
background-color: var(--wp-admin-theme-color);
|
||||
|
||||
svg {
|
||||
fill: $color-white;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-task-list__task--active {
|
||||
box-shadow: inset 5px 0 0 0 var(--wp-admin-theme-color);
|
||||
|
||||
&:after {
|
||||
background-color: var(--wp-admin-theme-color);
|
||||
content: '';
|
||||
height: 100%;
|
||||
left: 0;
|
||||
opacity: .1;
|
||||
pointer-events: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-task-list__heading p,
|
||||
.mailpoet-task-list__all-set {
|
||||
color: $color-text-light;
|
||||
font-size: $heading-font-size-h4;
|
||||
line-height: 1.5;
|
||||
margin-top: $grid-gap-large;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.mailpoet-task-list__heading {
|
||||
margin-bottom: $grid-gap-large;
|
||||
position: relative;
|
||||
|
||||
h1 {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: $grid-gap-half;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.components-dropdown {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 6px;
|
||||
}
|
||||
}
|
@ -122,3 +122,21 @@ body .components-modal__screen-overlay {
|
||||
justify-content: flex-end;
|
||||
margin-top: $grid-gap-half;
|
||||
}
|
||||
|
||||
.mailpoet-locked-badge {
|
||||
align-items: center;
|
||||
background: #fcf9e8;
|
||||
border: .5px solid #f5e6ab;
|
||||
border-radius: 4px;
|
||||
color: #bd8600;
|
||||
display: flex;
|
||||
font-size: 11px;
|
||||
font-weight: 500;
|
||||
gap: 4px;
|
||||
height: 20px;
|
||||
letter-spacing: .2px;
|
||||
line-height: 16px;
|
||||
padding: 2px 8px 2px 4px;
|
||||
text-transform: uppercase;
|
||||
width: 82px;
|
||||
}
|
||||
|
@ -232,3 +232,7 @@ progress::-moz-progress-bar {
|
||||
.mailpoet-form-field-tags label.components-form-token-field__label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.mailpoet-form-field-disabled {
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
196
mailpoet/assets/css/src/components-plugin/_landingpage.scss
Normal file
196
mailpoet/assets/css/src/components-plugin/_landingpage.scss
Normal file
@ -0,0 +1,196 @@
|
||||
#mailpoet_landingpage_container {
|
||||
$content-padding: 32px 65px;
|
||||
$mobile-content-padding: 25px;
|
||||
|
||||
.mailpoet-content-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.mailpoet-content-padding {
|
||||
padding: $content-padding;
|
||||
|
||||
@include respond-to(small-screen) {
|
||||
padding: $mobile-content-padding
|
||||
}
|
||||
}
|
||||
|
||||
.landing-header {
|
||||
padding: $content-padding;
|
||||
|
||||
@include respond-to(small-screen) {
|
||||
padding: $mobile-content-padding
|
||||
}
|
||||
}
|
||||
|
||||
.landing-footer {
|
||||
background-color: $color-landingpage-background-light;
|
||||
padding: $content-padding;
|
||||
|
||||
.landing-footer-content {
|
||||
box-shadow: 0 -1px 0 0 $color-tertiary-light;
|
||||
padding: 25px 0;
|
||||
}
|
||||
}
|
||||
|
||||
.landing-faq {
|
||||
background-color: $color-landingpage-background-light;
|
||||
padding: $content-padding;
|
||||
|
||||
.mailpoet-faq-accordion {
|
||||
margin: 25px 0;
|
||||
}
|
||||
|
||||
.landing-faq-mobile {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@include respond-to(small-screen) {
|
||||
padding: $mobile-content-padding;
|
||||
|
||||
.landing-faq-header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.landing-faq-mobile {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.landing-content {
|
||||
.hero-section {
|
||||
$hero-image-offset: 6rem;
|
||||
background-color: $color-landingpage-background-light;
|
||||
margin-top: $hero-image-offset;
|
||||
padding: $content-padding;
|
||||
|
||||
.hero-image {
|
||||
margin-top: -($hero-image-offset + 2rem);
|
||||
}
|
||||
|
||||
@include respond-to(small-screen) {
|
||||
padding: $mobile-content-padding
|
||||
}
|
||||
}
|
||||
|
||||
.landingpage-images {
|
||||
@include respond-to(medium-screen) {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.landingpage-general-features {
|
||||
p:last-child {
|
||||
margin: 10px auto;
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
.landingpage-feature-icon {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@include respond-to(medium-screen) {
|
||||
p:last-child {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.landingpage-wooCommerce-features {
|
||||
margin-top: 30px;
|
||||
padding: 2rem 10rem;
|
||||
|
||||
.landingpage-wooCommerce-feature-item {
|
||||
padding: 30px;
|
||||
|
||||
@media screen and (min-width: 960px) and (max-width: 1460px) {
|
||||
.landingpage-images {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
div:last-child {
|
||||
margin: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@include respond-to(small-screen) {
|
||||
padding: $mobile-content-padding;
|
||||
|
||||
.landingpage-wooCommerce-feature-item {
|
||||
padding: 25px 0;
|
||||
|
||||
div:last-child {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-faq-accordion {
|
||||
details {
|
||||
overflow: hidden;
|
||||
|
||||
&:not(:first-child) {
|
||||
border-top: 1px solid $color-editor-border-structure;
|
||||
}
|
||||
|
||||
summary {
|
||||
cursor: pointer;
|
||||
padding: 20px 5px;
|
||||
position: relative;
|
||||
|
||||
&::-webkit-details-marker { // remove default marker
|
||||
content: '';
|
||||
display: none;
|
||||
}
|
||||
|
||||
&::marker { // remove default marker
|
||||
content: '';
|
||||
display: none;
|
||||
}
|
||||
|
||||
&:after {
|
||||
content: '›';
|
||||
font-size: 30px;
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: 0;
|
||||
transform: rotate(90deg);
|
||||
transform-origin: center;
|
||||
transition: .2s transform ease;
|
||||
}
|
||||
|
||||
@include respond-to(small-screen) {
|
||||
&:after {
|
||||
right: -1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
max-height: 0;
|
||||
overflow: hidden;
|
||||
padding: 10px 5px;
|
||||
transition: max-height .3s ease;
|
||||
}
|
||||
|
||||
// when accordion is opened
|
||||
&[open] {
|
||||
summary:after {
|
||||
transform: rotate(-90deg);
|
||||
transition: .5s transform ease;
|
||||
}
|
||||
|
||||
.content {
|
||||
max-height: 400px;
|
||||
transition: max-height .5s ease-in;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -4,6 +4,6 @@
|
||||
}
|
||||
|
||||
// Fix for 3rd party plugins icons in menu that might display broken because we block loading 3rd party CSS on mailepoet pages
|
||||
#adminmenu .wp-menu-image img {
|
||||
#adminmenu :not(.toplevel_page_site-card) .wp-menu-image img {
|
||||
max-width: 20px;
|
||||
}
|
||||
|
@ -119,6 +119,10 @@
|
||||
color: $color-stats-average;
|
||||
}
|
||||
|
||||
.mailpoet-statistics-value-number-critical {
|
||||
color: $color-stats-critical;
|
||||
}
|
||||
|
||||
.mailpoet-statistics-value-number-excellent {
|
||||
color: $color-stats-excellent;
|
||||
}
|
||||
|
@ -22,6 +22,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
#mailpoet-wizard-container {
|
||||
.mailpoet-top-bar {
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-wizard-logo {
|
||||
margin-bottom: 100px;
|
||||
text-align: center;
|
||||
@ -35,6 +41,7 @@
|
||||
align-items: center;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: 8px;
|
||||
|
||||
@include respond-to(medium-screen) {
|
||||
flex-direction: column;
|
||||
@ -42,7 +49,7 @@
|
||||
}
|
||||
|
||||
.mailpoet-wizard-step-illustration {
|
||||
margin-right: $grid-gap;
|
||||
margin-right: $grid-gap-xl;
|
||||
max-width: $grid-column;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
@ -63,12 +70,16 @@
|
||||
}
|
||||
|
||||
.mailpoet-wizard-step-content {
|
||||
max-width: $grid-column-small + $grid-gap + $grid-column;
|
||||
max-width: 480px;
|
||||
width: 100%;
|
||||
|
||||
@include respond-to(medium-screen) {
|
||||
max-width: $grid-column;
|
||||
}
|
||||
|
||||
.mailpoet-button {
|
||||
height: 36px;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-wizard-label {
|
||||
@ -111,12 +122,16 @@
|
||||
|
||||
.mailpoet-wizard-woocommerce-option {
|
||||
align-items: center;
|
||||
box-shadow: 0 -1px 0 0 $color-tertiary-light;
|
||||
box-shadow: 0 1px 0 0 $color-tertiary-light;
|
||||
display: flex;
|
||||
flex-direction: row-reverse;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 25px;
|
||||
padding-top: 1px;
|
||||
|
||||
&:last-child {
|
||||
box-shadow: 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-wizard-note {
|
||||
|
@ -63,6 +63,11 @@ $form-line-height: 1.4;
|
||||
.mailpoet-has-font-size {
|
||||
line-height: $form-line-height;
|
||||
}
|
||||
|
||||
.mailpoet_submit {
|
||||
white-space: normal;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
}
|
||||
|
||||
/* Reset fieldset styles in form for backward compatibility. */
|
||||
|
12
mailpoet/assets/css/src/components-public/captcha.scss
Normal file
12
mailpoet/assets/css/src/components-public/captcha.scss
Normal file
@ -0,0 +1,12 @@
|
||||
.mailpoet_captcha_form {
|
||||
.mailpoet_icon_button {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
|
||||
img {
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,63 +0,0 @@
|
||||
.mailpoet-automation-stats {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
margin: auto;
|
||||
|
||||
@at-root #mailpoet_automation_editor #{&} {
|
||||
justify-content: center;
|
||||
margin-bottom: 32px;
|
||||
max-width: 560px;
|
||||
}
|
||||
|
||||
.mailpoet-automation-stats-item {
|
||||
color: $color-wordpress-heading;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
line-height: 16px;
|
||||
padding: 0 16px;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
|
||||
@at-root #mailpoet_automation_editor #{&} {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
&:first-of-type {
|
||||
@at-root #mailpoet_automation #{&} {
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@at-root #mailpoet_automation_editor #{&} {
|
||||
font-size: 14px;
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
&:after {
|
||||
align-items: center;
|
||||
color: #a7aaad;
|
||||
content: '›';
|
||||
display: flex;
|
||||
font-size: 20px;
|
||||
font-weight: normal;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
&:last-of-type:after {
|
||||
content: '';
|
||||
}
|
||||
|
||||
.mailpoet-automation-stats-label {
|
||||
color: #646970;
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
line-height: 16px;
|
||||
}
|
||||
}
|
||||
}
|
@ -112,3 +112,11 @@
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.authorize-sender-email-and-domain-modal {
|
||||
z-index: 30; // overlay other modals
|
||||
}
|
||||
|
||||
.authorize-sender-email-and-domain-modal-overlay {
|
||||
z-index: $modal-screen-overlay-z-index + 4; // overlay other modals
|
||||
}
|
||||
|
@ -41,6 +41,15 @@
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-tag-critical {
|
||||
border-color: $color-stats-critical;
|
||||
color: $color-stats-critical;
|
||||
|
||||
&.mailpoet-tag-inverted {
|
||||
background: $color-stats-critical;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-tag-good {
|
||||
border-color: $color-stats-good;
|
||||
color: $color-stats-good;
|
||||
|
@ -29,7 +29,6 @@ $beamer-dot-size: 8px;
|
||||
}
|
||||
|
||||
.mailpoet-top-bar-logo {
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
top: 2px;
|
||||
z-index: 1;
|
||||
@ -39,6 +38,10 @@ $beamer-dot-size: 8px;
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
a.mailpoet-top-bar-logo {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-top-bar-logo-desktop {
|
||||
|
@ -2,22 +2,29 @@
|
||||
@import '../../../node_modules/@wordpress/edit-site/build-style/style';
|
||||
@import '../../../node_modules/@wordpress/block-editor/build-style/style'; // for inserter styles
|
||||
@import 'settings/colors';
|
||||
|
||||
// automation components
|
||||
|
||||
@import './components-automation/statistics';
|
||||
|
||||
// automation editor
|
||||
|
||||
@import './components-automation-editor/add-step-button';
|
||||
@import './components-automation-editor/add-trigger';
|
||||
@import './components-automation-editor/automation';
|
||||
@import './components-automation-editor/block-icon';
|
||||
@import './components-automation-editor/chip';
|
||||
@import './components-automation-editor/dropdown';
|
||||
@import './components-automation-editor/empty-workflow';
|
||||
@import './components-automation-editor/empty-automation';
|
||||
@import './components-automation-editor/errors';
|
||||
@import './components-automation-editor/panel';
|
||||
@import './components-automation-editor/separator';
|
||||
@import './components-automation-editor/status';
|
||||
@import './components-automation-editor/step';
|
||||
@import './components-automation-editor/step-card';
|
||||
@import './components-automation-editor/workflow';
|
||||
@import './components-automation-editor/notices';
|
||||
@import './components-automation-editor/deactivate-modal';
|
||||
|
||||
// integrations
|
||||
|
||||
@import './components-automation-integrations/mailpoet';
|
||||
@import './components/automation_statistics';
|
||||
|
@ -13,18 +13,34 @@ ul.mailpoet-automation-templates {
|
||||
margin: auto;
|
||||
max-width: 982px;
|
||||
padding: 48px 0;
|
||||
}
|
||||
|
||||
.mailpoet-automation-template-list-item {
|
||||
button.components-button {
|
||||
align-content: baseline;
|
||||
align-items: flex-start;
|
||||
background: #fff;
|
||||
border: 1px solid #dcdcde;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
display: grid;
|
||||
grid-template-rows: 40px auto auto;
|
||||
height: 100%;
|
||||
padding: 24px 24px 26px;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
|
||||
&:disabled,
|
||||
&[aria-disabled='true'] {
|
||||
color: #787c82;
|
||||
cursor: not-allowed;
|
||||
opacity: 1;
|
||||
|
||||
h2 {
|
||||
color: #787c82;
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: #fff;
|
||||
border: 1px solid #dcdcde;
|
||||
@ -37,12 +53,15 @@ ul.mailpoet-automation-templates {
|
||||
box-shadow: 0 3px 6px rgba(0, 0, 0, .15);
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
>* {
|
||||
width: 100%
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
background: transparent;
|
||||
border: none;
|
||||
color: #2271b1;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
line-height: 21px;
|
||||
@ -54,7 +73,7 @@ ul.mailpoet-automation-templates {
|
||||
margin: 8px 0 0;
|
||||
}
|
||||
|
||||
.mailpoet-automation-from-scratch {
|
||||
&.mailpoet-automation-from-scratch {
|
||||
button {
|
||||
align-content: center;
|
||||
border: 2px dashed #dcdcde;
|
||||
@ -71,4 +90,27 @@ ul.mailpoet-automation-templates {
|
||||
fill: #dcdcde;
|
||||
}
|
||||
}
|
||||
|
||||
.badge {
|
||||
text-align: right;
|
||||
transform: translateX(24px);
|
||||
|
||||
span {
|
||||
padding: 3px 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-template-list-item-coming-soon {
|
||||
.badge span {
|
||||
background: #ffe9cc;
|
||||
color: #1d2327;
|
||||
}
|
||||
}
|
||||
|
||||
.mailpoet-automation-template-list-item-premium {
|
||||
.badge span {
|
||||
background: #ff5301;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,17 @@
|
||||
@import '../../../node_modules/@woocommerce/components/build-style/style';
|
||||
@import 'settings/colors';
|
||||
|
||||
// automation components
|
||||
|
||||
@import './components-automation/statistics';
|
||||
@import './components-automation/option-button';
|
||||
|
||||
// automation listing
|
||||
|
||||
@import './components-automation-listing/sections';
|
||||
@import './components-automation-listing/listing';
|
||||
@import './components-automation-listing/header';
|
||||
@import './components-automation-listing/search';
|
||||
@import './components-automation-listing/cells/actions';
|
||||
@import './components-automation-listing/cells/status';
|
||||
@import './components/automation_statistics';
|
||||
@import './mailpoet-automation-templates';
|
||||
|
@ -53,6 +53,7 @@
|
||||
@import 'components-editor/content-blocks/unknown_block_fallback';
|
||||
@import 'components-editor/content-blocks/woocommerce-heading';
|
||||
@import 'components-editor/content-blocks/woocommerce-content';
|
||||
@import 'components-editor/content-blocks/coupon';
|
||||
|
||||
// Utilities
|
||||
// Helpers and overrides.
|
||||
|
@ -34,7 +34,6 @@
|
||||
@import './components-form-editor/custom-field';
|
||||
@import './components-form-editor/form-title';
|
||||
@import './components-form-editor/header';
|
||||
@import './components-form-editor/helpscout';
|
||||
@import './components-form-editor/form-placement';
|
||||
@import './components-form-editor/preview';
|
||||
@import './components-form-editor/block-editor';
|
||||
|
23
mailpoet/assets/css/src/mailpoet-homepage.scss
Normal file
23
mailpoet/assets/css/src/mailpoet-homepage.scss
Normal file
@ -0,0 +1,23 @@
|
||||
|
||||
@import '../../../node_modules/@woocommerce/components/build-style/style'; // Needed to load WP admin themes color variables
|
||||
|
||||
// Settings
|
||||
// Global variables, config switches. Not producing any CSS.
|
||||
|
||||
@import 'settings/breakpoints';
|
||||
@import 'settings/colors';
|
||||
@import 'settings/grid';
|
||||
@import 'settings/typography';
|
||||
|
||||
// Tools
|
||||
// Default mixins and functions. Still not producing any CSS.
|
||||
|
||||
@import 'mixins/breakpoints';
|
||||
|
||||
// Components
|
||||
// Actual UI components.
|
||||
|
||||
@import 'components-homepage/_layout';
|
||||
@import 'components-homepage/_task-list';
|
||||
@import 'components-homepage/_content-section';
|
||||
@import 'components-homepage/_product-discovery';
|
@ -85,3 +85,4 @@
|
||||
@import 'components-plugin/set-from-address-modal';
|
||||
@import 'components-plugin/stats';
|
||||
@import 'components-plugin/import-export';
|
||||
@import 'components-plugin/landingpage';
|
||||
|
@ -19,3 +19,4 @@
|
||||
@import 'components-public/public';
|
||||
@import 'components-public/animation';
|
||||
@import 'components-public/form_colors';
|
||||
@import 'components-public/captcha';
|
||||
|
@ -1,3 +1,3 @@
|
||||
// WordPress breakpoints
|
||||
$mailpoet-breakpoint-small: 782px;
|
||||
$mailpoet-breakpoint-small: 781px;
|
||||
$mailpoet-breakpoint-medium: 960px;
|
||||
|
@ -69,6 +69,7 @@ $color-badge-video-guide: #46b450;
|
||||
$color-stats-average: #f559c3;
|
||||
$color-stats-good: #ff9f00;
|
||||
$color-stats-excellent: #7ed321;
|
||||
$color-stats-critical: #f00;
|
||||
$color-stats-unknown: $color-primary-inactive;
|
||||
|
||||
// Automation editor
|
||||
@ -78,3 +79,9 @@ $color-chip-success-bg: #b8e6bf;
|
||||
$color-chip-success-text: #005c12;
|
||||
$color-chip-danger-bg: #facfd2;
|
||||
$color-chip-danger-text: #8a2424;
|
||||
|
||||
// Landing page
|
||||
$color-landingpage-background-light: #fbfbfb;
|
||||
|
||||
// Homepage
|
||||
$color-homepage-borders: #e0e0e0;
|
||||
|
5
mailpoet/assets/img/icons/alert.svg
Normal file
5
mailpoet/assets/img/icons/alert.svg
Normal file
@ -0,0 +1,5 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 4.75C7.99594 4.75 4.75 7.99594 4.75 12C4.75 16.0041 7.99594 19.25 12 19.25C16.0041 19.25 19.25 16.0041 19.25 12C19.25 7.99594 16.0041 4.75 12 4.75ZM3.25 12C3.25 7.16751 7.16751 3.25 12 3.25C16.8325 3.25 20.75 7.16751 20.75 12C20.75 16.8325 16.8325 20.75 12 20.75C7.16751 20.75 3.25 16.8325 3.25 12Z" fill="#d63638"/>
|
||||
<path d="M13 7H11V13H13V7Z" fill="#d63638"/>
|
||||
<path d="M13 15H11V17H13V15Z" fill="#d63638"/>
|
||||
</svg>
|
After Width: | Height: | Size: 565 B |
1
mailpoet/assets/img/icons/controls-volumeon.svg
Normal file
1
mailpoet/assets/img/icons/controls-volumeon.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><rect x="0" fill="none" width="20" height="20"/><g><path d="M2 7h4l5-4v14l-5-4H2V7zm12.69-2.46C14.82 4.59 18 5.92 18 10s-3.18 5.41-3.31 5.46c-.06.03-.13.04-.19.04-.2 0-.39-.12-.46-.31-.11-.26.02-.55.27-.65.11-.05 2.69-1.15 2.69-4.54 0-3.41-2.66-4.53-2.69-4.54-.25-.1-.38-.39-.27-.65.1-.25.39-.38.65-.27zM16 10c0 2.57-2.23 3.43-2.32 3.47-.06.02-.12.03-.18.03-.2 0-.39-.12-.47-.32-.1-.26.04-.55.29-.65.07-.02 1.68-.67 1.68-2.53s-1.61-2.51-1.68-2.53c-.25-.1-.38-.39-.29-.65.1-.25.39-.39.65-.29.09.04 2.32.9 2.32 3.47z"/></g></svg>
|
After Width: | Height: | Size: 587 B |
1
mailpoet/assets/img/icons/image-rotate.svg
Normal file
1
mailpoet/assets/img/icons/image-rotate.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><rect x="0" fill="none" width="20" height="20"/><g><path d="M10.25 1.02c5.1 0 8.75 4.04 8.75 9s-3.65 9-8.75 9c-3.2 0-6.02-1.59-7.68-3.99l2.59-1.52c1.1 1.5 2.86 2.51 4.84 2.51 3.3 0 6-2.79 6-6s-2.7-6-6-6c-1.97 0-3.72 1-4.82 2.49L7 8.02l-6 2v-7L2.89 4.6c1.69-2.17 4.36-3.58 7.36-3.58z"/></g></svg>
|
After Width: | Height: | Size: 355 B |
@ -18,7 +18,7 @@ import _ from 'underscore';
|
||||
*/
|
||||
var eventsCache = [];
|
||||
|
||||
function track(name, data = []) {
|
||||
function track(name, data = [], options = {}, callback = null) {
|
||||
let trackedData = data;
|
||||
|
||||
if (typeof window.mixpanel.track !== 'function') {
|
||||
@ -33,7 +33,7 @@ function track(name, data = []) {
|
||||
trackedData['MailPoet Premium version'] = window.mailpoet_premium_version;
|
||||
}
|
||||
|
||||
window.mixpanel.track(name, trackedData);
|
||||
window.mixpanel.track(name, trackedData, options, callback);
|
||||
}
|
||||
|
||||
function exportMixpanel() {
|
||||
@ -45,24 +45,37 @@ function exportMixpanel() {
|
||||
) {
|
||||
window.MailPoet.trackEvent = track;
|
||||
} else {
|
||||
window.MailPoet.trackEvent = function emptyFunction() {};
|
||||
window.MailPoet.trackEvent = function emptyFunction(
|
||||
name,
|
||||
data,
|
||||
options,
|
||||
callback,
|
||||
) {
|
||||
if (typeof callback === 'function') {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
function trackCachedEvents() {
|
||||
eventsCache.forEach(function trackIfEnabled(event) {
|
||||
if (window.mailpoet_analytics_enabled || event.forced) {
|
||||
track(event.name, event.data);
|
||||
track(event.name, event.data, event.options);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function cacheEvent(forced, name, data) {
|
||||
function cacheEvent(forced, name, data, options, callback) {
|
||||
eventsCache.push({
|
||||
name: name,
|
||||
data: data,
|
||||
options: options,
|
||||
forced: forced,
|
||||
});
|
||||
if (typeof callback === 'function') {
|
||||
callback();
|
||||
}
|
||||
}
|
||||
|
||||
function initializeMixpanelWhenLoaded() {
|
||||
|
@ -1,81 +0,0 @@
|
||||
import { useCallback, useEffect, useState } from 'react';
|
||||
import { api } from '../config';
|
||||
|
||||
const API_URL = `${api.root}/mailpoet/v1/automation`;
|
||||
|
||||
export const request = (
|
||||
path: string,
|
||||
init?: RequestInit,
|
||||
): ReturnType<typeof fetch> => fetch(`${API_URL}/${path}`, init);
|
||||
|
||||
type Error<T> = {
|
||||
response?: Response;
|
||||
data?: T;
|
||||
};
|
||||
|
||||
type State<T> = {
|
||||
data?: T;
|
||||
loading: boolean;
|
||||
error?: Error<T>;
|
||||
};
|
||||
|
||||
type Result<T> = [(init?: RequestInit) => Promise<void>, State<T>];
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
type Data = Record<string, any>;
|
||||
|
||||
export const useMutation = <T extends Data>(
|
||||
path: string,
|
||||
config?: RequestInit,
|
||||
): Result<T> => {
|
||||
const [state, setState] = useState<State<T>>({
|
||||
data: undefined,
|
||||
loading: false,
|
||||
error: undefined,
|
||||
});
|
||||
|
||||
const mutation = useCallback(
|
||||
async (init?: RequestInit) => {
|
||||
setState((prevState) => ({ ...prevState, loading: true }));
|
||||
const response = await request(path, {
|
||||
...config,
|
||||
...init,
|
||||
headers: {
|
||||
'content-type': 'application/json',
|
||||
...(init?.headers ?? {}),
|
||||
'x-wp-nonce': api.nonce,
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
const data = await response.json();
|
||||
const error = response.ok ? null : { ...response, data };
|
||||
setState((prevState) => ({ ...prevState, data, error }));
|
||||
} catch (_) {
|
||||
const error = { response };
|
||||
setState((prevState) => ({ ...prevState, error }));
|
||||
} finally {
|
||||
setState((prevState) => ({ ...prevState, loading: false }));
|
||||
}
|
||||
},
|
||||
[config, path],
|
||||
);
|
||||
|
||||
return [mutation, state];
|
||||
};
|
||||
|
||||
export const useQuery = <T extends Data>(
|
||||
path: string,
|
||||
init?: RequestInit,
|
||||
): State<T> => {
|
||||
const [mutation, result] = useMutation<T>(path, init);
|
||||
|
||||
useEffect(
|
||||
() => {
|
||||
void mutation();
|
||||
},
|
||||
[] /* eslint-disable-line react-hooks/exhaustive-deps -- request only on initial load */,
|
||||
);
|
||||
|
||||
return result;
|
||||
};
|
@ -1,9 +1,7 @@
|
||||
import apiFetch from '@wordpress/api-fetch';
|
||||
import { api } from '../config';
|
||||
|
||||
export * from './hooks';
|
||||
|
||||
const apiUrl = `${api.root}/mailpoet/v1/automation/`;
|
||||
const apiUrl = `${api.root}/mailpoet/v1/`;
|
||||
|
||||
export type ApiError = {
|
||||
code?: string;
|
||||
|
@ -1,136 +1,92 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import { BrowserRouter } from 'react-router-dom';
|
||||
import { TopBarWithBeamer } from 'common/top_bar/top_bar';
|
||||
import { plusIcon } from 'common/button/icon/plus';
|
||||
import { Button, Flex } from '@wordpress/components';
|
||||
import { Workflow } from './listing/workflow';
|
||||
import { AutomationListing } from './listing';
|
||||
import { Onboarding } from './onboarding';
|
||||
import {
|
||||
CreateEmptyWorkflowButton,
|
||||
CreateWorkflowFromTemplateButton,
|
||||
} from './testing';
|
||||
import { useMutation, useQuery } from './api';
|
||||
import { WorkflowListingNotices } from './listing/workflow-listing-notices';
|
||||
import { Popover, SlotFillProvider } from '@wordpress/components';
|
||||
import { useSelect } from '@wordpress/data';
|
||||
import { initializeApi } from './api';
|
||||
import { registerTranslations } from './i18n';
|
||||
import { createStore, storeName } from './listing/store';
|
||||
import { AutomationListing, AutomationListingHeader } from './listing';
|
||||
import { registerApiErrorHandler } from './listing/api-error-handler';
|
||||
import { Notices } from './listing/components/notices';
|
||||
import { BuildYourOwnSection, HeroSection, TemplatesSection } from './sections';
|
||||
import { MailPoet } from '../mailpoet';
|
||||
|
||||
const trackOpenEvent = () => {
|
||||
MailPoet.trackEvent('Automations > Listing viewed');
|
||||
};
|
||||
|
||||
function Content(): JSX.Element {
|
||||
const { data, loading, error } = useQuery<{ data: Workflow[] }>('workflows');
|
||||
const [isBooting, setIsBooting] = useState(true);
|
||||
const count = useSelect((select) => select(storeName).getAutomationCount());
|
||||
|
||||
if (error) {
|
||||
return <div>Error: {error}</div>;
|
||||
}
|
||||
useEffect(() => {
|
||||
if (!isBooting || count === 0) {
|
||||
return;
|
||||
}
|
||||
trackOpenEvent();
|
||||
setIsBooting(false);
|
||||
}, [isBooting, count]);
|
||||
const content =
|
||||
count > 0 ? (
|
||||
<>
|
||||
<AutomationListingHeader />
|
||||
<AutomationListing />
|
||||
</>
|
||||
) : (
|
||||
<HeroSection />
|
||||
);
|
||||
|
||||
if (loading) {
|
||||
return <div>Loading workflows...</div>;
|
||||
}
|
||||
|
||||
const workflows = data?.data ?? [];
|
||||
return workflows.length > 0 ? (
|
||||
<AutomationListing workflows={workflows} loading={loading} />
|
||||
) : (
|
||||
<Onboarding />
|
||||
// Hide notices on onboarding screen
|
||||
useEffect(() => {
|
||||
const onboardingClass = 'mailpoet-automation-is-onboarding';
|
||||
const element = document.querySelector('body');
|
||||
if (count === 0 && !element.classList.contains(onboardingClass)) {
|
||||
element.classList.add(onboardingClass);
|
||||
}
|
||||
if (count > 0 && element.classList.contains(onboardingClass)) {
|
||||
element.classList.remove(onboardingClass);
|
||||
}
|
||||
}, [count]);
|
||||
return (
|
||||
<>
|
||||
{content}
|
||||
<TemplatesSection />
|
||||
<BuildYourOwnSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function Workflows(): JSX.Element {
|
||||
function Automations(): JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<TopBarWithBeamer />
|
||||
<Flex className="mailpoet-automation-listing-heading">
|
||||
<h1 className="wp-heading-inline">Automations</h1>
|
||||
<Button
|
||||
href={MailPoet.urls.automationTemplates}
|
||||
icon={plusIcon}
|
||||
variant="primary"
|
||||
className="mailpoet-add-new-button"
|
||||
>
|
||||
New automation
|
||||
</Button>
|
||||
</Flex>
|
||||
<Notices />
|
||||
<Content />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function RecreateSchemaButton(): JSX.Element {
|
||||
const [createSchema, { loading, error }] = useMutation('system/database', {
|
||||
method: 'POST',
|
||||
});
|
||||
|
||||
return (
|
||||
<div>
|
||||
<WorkflowListingNotices />
|
||||
<button
|
||||
className="button button-link-delete"
|
||||
type="button"
|
||||
onClick={() => createSchema()}
|
||||
disabled={loading}
|
||||
>
|
||||
Recreate DB schema (data will be lost)
|
||||
</button>
|
||||
{error && (
|
||||
<div>{error?.data?.message ?? 'An unknown error occurred'}</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function DeleteSchemaButton(): JSX.Element {
|
||||
const [deleteSchema, { loading, error }] = useMutation('system/database', {
|
||||
method: 'DELETE',
|
||||
});
|
||||
|
||||
return (
|
||||
<div>
|
||||
<button
|
||||
className="button button-link-delete"
|
||||
type="button"
|
||||
onClick={async () => {
|
||||
await deleteSchema();
|
||||
window.location.href =
|
||||
'/wp-admin/admin.php?page=mailpoet-experimental';
|
||||
}}
|
||||
disabled={loading}
|
||||
>
|
||||
Delete DB schema & deactivate feature
|
||||
</button>
|
||||
{error && (
|
||||
<div>{error?.data?.message ?? 'An unknown error occurred'}</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function App(): JSX.Element {
|
||||
return (
|
||||
<BrowserRouter>
|
||||
<div>
|
||||
<Workflows />
|
||||
<div style={{ marginTop: 30, display: 'grid', gridGap: 8 }}>
|
||||
<CreateEmptyWorkflowButton />
|
||||
<CreateWorkflowFromTemplateButton slug="simple-welcome-email">
|
||||
Create testing workflow from template (welcome email)
|
||||
</CreateWorkflowFromTemplateButton>
|
||||
<CreateWorkflowFromTemplateButton slug="welcome-email-sequence">
|
||||
Create testing workflow from template (welcome sequence, only
|
||||
premium)
|
||||
</CreateWorkflowFromTemplateButton>
|
||||
<CreateWorkflowFromTemplateButton slug="advanced-welcome-email-sequence">
|
||||
Create testing workflow from template (advanced welcome sequence,
|
||||
only premium)
|
||||
</CreateWorkflowFromTemplateButton>
|
||||
<RecreateSchemaButton />
|
||||
<DeleteSchemaButton />
|
||||
</div>
|
||||
</div>
|
||||
</BrowserRouter>
|
||||
<SlotFillProvider>
|
||||
<BrowserRouter>
|
||||
<Automations />
|
||||
<Popover.Slot />
|
||||
</BrowserRouter>
|
||||
</SlotFillProvider>
|
||||
);
|
||||
}
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
createStore();
|
||||
|
||||
const root = document.getElementById('mailpoet_automation');
|
||||
if (root) {
|
||||
registerTranslations();
|
||||
registerApiErrorHandler();
|
||||
initializeApi();
|
||||
ReactDOM.render(<App />, root);
|
||||
}
|
||||
});
|
||||
|
@ -0,0 +1,64 @@
|
||||
import { Dispatch, SetStateAction, useState } from 'react';
|
||||
import { Button, DropdownMenu } from '@wordpress/components';
|
||||
import { chevronDown } from '@wordpress/icons';
|
||||
import { __ } from '@wordpress/i18n';
|
||||
import { Fragment } from '@wordpress/element';
|
||||
import { StepMoreControlsType } from '../../types/filters';
|
||||
|
||||
type OptionButtonPropType = {
|
||||
variant: Button.ButtonVariant;
|
||||
controls: StepMoreControlsType;
|
||||
title: string;
|
||||
onClick: (setIsBusy: Dispatch<SetStateAction<boolean>>) => void;
|
||||
};
|
||||
export function OptionButton({
|
||||
controls,
|
||||
title,
|
||||
onClick,
|
||||
variant,
|
||||
}: OptionButtonPropType): JSX.Element {
|
||||
const [isBusy, setIsBusy] = useState(false);
|
||||
const slots = Object.values(controls).filter((item) => item.slot);
|
||||
const dropDownMenuClassNames = isBusy
|
||||
? `mailpoet-option-button-opener is-busy`
|
||||
: `mailpoet-option-button-opener`;
|
||||
return (
|
||||
<div className="mailpoet-option-button">
|
||||
<Button
|
||||
isBusy={isBusy}
|
||||
disabled={isBusy}
|
||||
variant={variant}
|
||||
className="mailpoet-option-button-main"
|
||||
onClick={() => {
|
||||
setIsBusy(true);
|
||||
onClick(setIsBusy);
|
||||
}}
|
||||
>
|
||||
{title}
|
||||
</Button>
|
||||
{slots.length > 0 &&
|
||||
slots.map(({ key, slot }) => (
|
||||
<Fragment key={`slot-${key}`}>{slot}</Fragment>
|
||||
))}
|
||||
{Object.values(controls).length > 0 && (
|
||||
<DropdownMenu
|
||||
className={dropDownMenuClassNames}
|
||||
label={__('More', 'mailpoet')}
|
||||
icon={chevronDown}
|
||||
controls={Object.values(controls).map((item) => {
|
||||
const control = {
|
||||
...item.control,
|
||||
onClick: () => {
|
||||
setIsBusy(true);
|
||||
item.control.onClick(setIsBusy);
|
||||
},
|
||||
};
|
||||
|
||||
return control;
|
||||
})}
|
||||
popoverProps={{ position: 'bottom left' }}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
import { Fragment } from '@wordpress/element';
|
||||
import { locale } from '../../config';
|
||||
|
||||
type Item = {
|
||||
key: string;
|
||||
label: string;
|
||||
value: number;
|
||||
};
|
||||
|
||||
type Props = {
|
||||
items: Item[];
|
||||
labelPosition?: 'before' | 'after';
|
||||
};
|
||||
|
||||
export function Statistics({
|
||||
items,
|
||||
labelPosition = 'before',
|
||||
}: Props): JSX.Element {
|
||||
const intl = new Intl.NumberFormat(locale.toString());
|
||||
return (
|
||||
<div className="mailpoet-automation-stats">
|
||||
{items.map((item, i) => (
|
||||
<Fragment key={item.key}>
|
||||
<div key={item.key} className="mailpoet-automation-stats-item">
|
||||
<span
|
||||
className={`mailpoet-automation-stats-label display-${labelPosition}`}
|
||||
>
|
||||
{item.label}
|
||||
</span>
|
||||
<span className="mailpoet-automation-stats-value">
|
||||
{intl.format(item.value)}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{i < items.length - 1 && (
|
||||
<div className="mailpoet-automation-stats-item-separator">›</div>
|
||||
)}
|
||||
</Fragment>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
}
|
@ -4,7 +4,29 @@ declare global {
|
||||
root: string;
|
||||
nonce: string;
|
||||
};
|
||||
mailpoet_locale_full: string;
|
||||
mailpoet_automation_count: number;
|
||||
}
|
||||
}
|
||||
|
||||
export const api = window.mailpoet_automation_api;
|
||||
export const automationCount = window.mailpoet_automation_count;
|
||||
|
||||
// export locale to use with Intl APIs
|
||||
export const locale: Intl.Locale = (() => {
|
||||
const tag = (
|
||||
window.mailpoet_locale_full ??
|
||||
document.documentElement.lang ??
|
||||
'en'
|
||||
).replace('_', '-');
|
||||
|
||||
try {
|
||||
return new Intl.Locale(tag);
|
||||
} catch (_) {
|
||||
try {
|
||||
return new Intl.Locale(tag.split('-')[0]);
|
||||
} catch (__) {
|
||||
return new Intl.Locale('en');
|
||||
}
|
||||
}
|
||||
})();
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user