Compare commits
2125 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39106de96c | ||
|
|
8adb76abfb | ||
|
|
4889b04283 | ||
|
|
e9973a242b | ||
|
|
d324ad0ac5 | ||
|
|
ab6cc2698a | ||
|
|
da076f71a1 | ||
|
|
63c1fe8e75 | ||
|
|
31f0833629 | ||
|
|
d4dc094049 | ||
|
|
21a84e8032 | ||
|
|
819a1baae0 | ||
|
|
b0ee67faff | ||
|
|
0684bd105a | ||
|
|
5c948862a0 | ||
|
|
23291b38de | ||
|
|
9357bd55a6 | ||
|
|
e51d668418 | ||
|
|
a48df70631 | ||
|
|
9853e8311b | ||
|
|
cd8041b048 | ||
|
|
00bf5b7ad6 | ||
|
|
40bcc983c7 | ||
|
|
dfb26f31db | ||
|
|
a57a0bebef | ||
|
|
4853621b1b | ||
|
|
e3209c6fb3 | ||
|
|
13d25cce1f | ||
|
|
cb16b0ca64 | ||
|
|
b3ce3159e7 | ||
|
|
76ffc70892 | ||
|
|
2734587981 | ||
|
|
223e93d654 | ||
|
|
26351726a8 | ||
|
|
efc84db580 | ||
|
|
3bf58bb6f0 | ||
|
|
a7962d9404 | ||
|
|
5ce9bb306d | ||
|
|
5b5bb38f4f | ||
|
|
419ad311a0 | ||
|
|
0c3af09566 | ||
|
|
c9063625ec | ||
|
|
205858a41d | ||
|
|
87edad17c3 | ||
|
|
1c54e80951 | ||
|
|
6c19cdc729 | ||
|
|
84a703bb50 | ||
|
|
27ed95b044 | ||
|
|
0358dfe790 | ||
|
|
68cee65f22 | ||
|
|
24b2125b97 | ||
|
|
eceed12992 | ||
|
|
f9028433a0 | ||
|
|
1936e7b212 | ||
|
|
c04a972be3 | ||
|
|
9c26b011e4 | ||
|
|
821f125789 | ||
|
|
e0f376880a | ||
|
|
6da77bb3c7 | ||
|
|
2fd660a93f | ||
|
|
f3eefc748a | ||
|
|
4852698d74 | ||
|
|
36b24dc826 | ||
|
|
d60bc1d4b6 | ||
|
|
06a02c0877 | ||
|
|
1a53a9f30b | ||
|
|
7ee81d4693 | ||
|
|
0a32d03fda | ||
|
|
6c43dfea18 | ||
|
|
7d1e226743 | ||
|
|
8ea903b81a | ||
|
|
24b08599b3 | ||
|
|
a0f1c1f227 | ||
|
|
efbb014588 | ||
|
|
f881a0e1d5 | ||
|
|
acdb81e8a3 | ||
|
|
6559a87323 | ||
|
|
8301bab768 | ||
|
|
eb0b2010f9 | ||
|
|
8158ea164d | ||
|
|
beb3134af9 | ||
|
|
5fdc6a21a5 | ||
|
|
e7516c57bc | ||
|
|
2169d81b73 | ||
|
|
1d6bb9f9f6 | ||
|
|
812bd07d03 | ||
|
|
19bb02f905 | ||
|
|
58d750f726 | ||
|
|
7f3bb58ec1 | ||
|
|
08ceaf204f | ||
|
|
eced1221a8 | ||
|
|
3a5bbde0cc | ||
|
|
eb1a790485 | ||
|
|
21e9c85bf7 | ||
|
|
632f783d57 | ||
|
|
3ba3908108 | ||
|
|
903a4e91b0 | ||
|
|
6496b129ce | ||
|
|
9fff7a2ea8 | ||
|
|
6d94617e59 | ||
|
|
b95d07babb | ||
|
|
9748d075fa | ||
|
|
aaeeb84ed3 | ||
|
|
c3702ee6d5 | ||
|
|
f239987043 | ||
|
|
6aa67c3fae | ||
|
|
1fc5d75cc0 | ||
|
|
2e0cd1964c | ||
|
|
bcfd3bb636 | ||
|
|
9b893b56f4 | ||
|
|
733254e2c0 | ||
|
|
1e351e60a5 | ||
|
|
90c53e4b46 | ||
|
|
69f54a00c5 | ||
|
|
372c4d33f0 | ||
|
|
5ba77aae3d | ||
|
|
28f4de1b7f | ||
|
|
ed162e2546 | ||
|
|
e16cecd149 | ||
|
|
3a26a5b4d8 | ||
|
|
3848af08fe | ||
|
|
ae79e52486 | ||
|
|
1968f5064d | ||
|
|
9d21bcecbe | ||
|
|
7a84933b2f | ||
|
|
9a10240fcc | ||
|
|
99516421ac | ||
|
|
5eecffb75e | ||
|
|
9d2627849a | ||
|
|
22b8222c3d | ||
|
|
b3d1b14abd | ||
|
|
f1cd0d3dd4 | ||
|
|
3d7815d65f | ||
|
|
a3e7d1f981 | ||
|
|
2e79190977 | ||
|
|
ee7debeef7 | ||
|
|
61f547733c | ||
|
|
5129e6d6ac | ||
|
|
0a9c14f8b1 | ||
|
|
a1960489e1 | ||
|
|
66fe1a83c6 | ||
|
|
a88d384ac7 | ||
|
|
2dc6b68974 | ||
|
|
0988ecc515 | ||
|
|
5ff100da27 | ||
|
|
f218846f4a | ||
|
|
fc0aba60b9 | ||
|
|
82e6a62c54 | ||
|
|
fce8950cc5 | ||
|
|
54247e85e0 | ||
|
|
cc3f9cd8a4 | ||
|
|
6dd79dc5d2 | ||
|
|
6eb53770c3 | ||
|
|
10faeca121 | ||
|
|
38252d9ffc | ||
|
|
86f62aeb99 | ||
|
|
e3a6bb8781 | ||
|
|
8ed94ed12f | ||
|
|
95bcfc2ee0 | ||
|
|
313e4811a1 | ||
|
|
5bb9dfeaf8 | ||
|
|
aabb316c7d | ||
|
|
ae40e6f41b | ||
|
|
e644d5d20d | ||
|
|
ae9abd08ff | ||
|
|
965128c802 | ||
|
|
26324a63df | ||
|
|
b9d9754818 | ||
|
|
0fb516a86c | ||
|
|
4b4c7d8927 | ||
|
|
e3cae93bd3 | ||
|
|
324f87dc19 | ||
|
|
347b5c9411 | ||
|
|
7371f8a29d | ||
|
|
fb381a30cf | ||
|
|
474e3dae65 | ||
|
|
738ac3f1c9 | ||
|
|
2fbe69afc5 | ||
|
|
693448cb42 | ||
|
|
17a416d905 | ||
|
|
09a6ede925 | ||
|
|
5fc04ae318 | ||
|
|
900ea0fb5c | ||
|
|
85a6a1d884 | ||
|
|
0572009456 | ||
|
|
9bcd98cb69 | ||
|
|
aefce2a842 | ||
|
|
ee4fe99b08 | ||
|
|
2cb85d47b8 | ||
|
|
0713b6b419 | ||
|
|
8f116fddab | ||
|
|
58838cd806 | ||
|
|
7d5918b320 | ||
|
|
7eb4ca0fb4 | ||
|
|
d575bfa0fb | ||
|
|
b60ea3f153 | ||
|
|
6e7bc6cfb4 | ||
|
|
9b85a0044c | ||
|
|
b8708382b1 | ||
|
|
e0601c7b38 | ||
|
|
0725714144 | ||
|
|
ab501e1c6a | ||
|
|
7cd401327b | ||
|
|
e886088dff | ||
|
|
ebe7cc32af | ||
|
|
5e607c3b8e | ||
|
|
5ec809e3dd | ||
|
|
9d3b6e0556 | ||
|
|
acd003814a | ||
|
|
c4991d09f3 | ||
|
|
ca9b2dada3 | ||
|
|
6a3004d75d | ||
|
|
9bd624f31a | ||
|
|
acb264da20 | ||
|
|
c23b0fbfe7 | ||
|
|
0e78b5e289 | ||
|
|
91ab895a1d | ||
|
|
5c37238114 | ||
|
|
3cf40ba504 | ||
|
|
9229961f72 | ||
|
|
0b35b11909 | ||
|
|
77a27d8716 | ||
|
|
be32939029 | ||
|
|
4f046425aa | ||
|
|
89bf6b1fd9 | ||
|
|
d81414cca6 | ||
|
|
d8eb96a37a | ||
|
|
d1b3b0ba34 | ||
|
|
dca207347f | ||
|
|
5a7ebf8027 | ||
|
|
f6d877715c | ||
|
|
754eb32db4 | ||
|
|
67c04c7f59 | ||
|
|
daebb26ffa | ||
|
|
3e2993d048 | ||
|
|
2745cf4015 | ||
|
|
4e99e2960c | ||
|
|
649028307d | ||
|
|
24787c32dd | ||
|
|
625ddac65a | ||
|
|
78ff2e6d07 | ||
|
|
837426d3c5 | ||
|
|
65477a5b2b | ||
|
|
a9fa8be5a2 | ||
|
|
0bb26150d6 | ||
|
|
fd8f7ade51 | ||
|
|
3310bc2fed | ||
|
|
0cbb640054 | ||
|
|
b4aa88ac33 | ||
|
|
f2906e57f0 | ||
|
|
8d381b167e | ||
|
|
d78e316349 | ||
|
|
82d00c6a4a | ||
|
|
ba4fd7f1ef | ||
|
|
591d265167 | ||
|
|
af9d973a91 | ||
|
|
15096a3118 | ||
|
|
7c78a9697c | ||
|
|
3f5051f697 | ||
|
|
044a66f2e8 | ||
|
|
6fb8775bb7 | ||
|
|
f16d0300ba | ||
|
|
84e12f1eea | ||
|
|
ba40b7ff15 | ||
|
|
e733326056 | ||
|
|
b3d987e933 | ||
|
|
e919874e9e | ||
|
|
a2f51f151a | ||
|
|
ea288abb27 | ||
|
|
b274900ae0 | ||
|
|
10d29d3a3f | ||
|
|
a92e04343a | ||
|
|
be31c18bfe | ||
|
|
9d0a5fd8f3 | ||
|
|
5ca577bc0a | ||
|
|
4d25d185c3 | ||
|
|
ea289e02da | ||
|
|
a3f16eb7e8 | ||
|
|
ddd29abe99 | ||
|
|
decd56f2d2 | ||
|
|
387401cb44 | ||
|
|
57c1a6b540 | ||
|
|
8dba0e8242 | ||
|
|
ee715f6387 | ||
|
|
b770b30334 | ||
|
|
d61abac126 | ||
|
|
ccf28b8012 | ||
|
|
3762cb06bb | ||
|
|
15400f2a3e | ||
|
|
20d1b1fe83 | ||
|
|
73844f8813 | ||
|
|
2187553625 | ||
|
|
984b2a5dea | ||
|
|
9098d9454f | ||
|
|
027dd93fb5 | ||
|
|
a005adc89a | ||
|
|
866ef04fbf | ||
|
|
00b6f97e3a | ||
|
|
a1d21b1a2a | ||
|
|
7358ea43d8 | ||
|
|
88c69311eb | ||
|
|
c1e45e5d0d | ||
|
|
fe78de2417 | ||
|
|
4c1fc201e6 | ||
|
|
3f5d270915 | ||
|
|
a452fbeb07 | ||
|
|
a6f02c245f | ||
|
|
cb4f9129d6 | ||
|
|
9c5d64c211 | ||
|
|
41dc0ecc60 | ||
|
|
6b9409b889 | ||
|
|
ea66eeed6c | ||
|
|
a419d28ef1 | ||
|
|
481dfc24fd | ||
|
|
ed686a7d52 | ||
|
|
b4c5a07800 | ||
|
|
6ae16f7fef | ||
|
|
4aae2ed3b8 | ||
|
|
81d4137b20 | ||
|
|
77ecb02a17 | ||
|
|
4a375f92ed | ||
|
|
7caf91460a | ||
|
|
0e015c8b97 | ||
|
|
7b69ddb14d | ||
|
|
2271eb270e | ||
|
|
7e5b2e4e79 | ||
|
|
124b9d9ea5 | ||
|
|
36076068ec | ||
|
|
c868354b5b | ||
|
|
db91f0b2a0 | ||
|
|
d7e83bb78e | ||
|
|
feb2a39e05 | ||
|
|
a6cf910d05 | ||
|
|
b891b44ac6 | ||
|
|
026a3ebb81 | ||
|
|
71ba246011 | ||
|
|
a391204fa6 | ||
|
|
9c773399a8 | ||
|
|
528b85352a | ||
|
|
249c369c14 | ||
|
|
9803fc1031 | ||
|
|
299fde1c98 | ||
|
|
7f55734fbb | ||
|
|
efe230865a | ||
|
|
6e52e684c8 | ||
|
|
99d880297a | ||
|
|
dec706ae72 | ||
|
|
2e60f0a0c2 | ||
|
|
ef612f86e5 | ||
|
|
9c16e03ea7 | ||
|
|
7780c0310e | ||
|
|
b0a23c0d1a | ||
|
|
05c85cea08 | ||
|
|
1ffae0a1de | ||
|
|
15cbccd15f | ||
|
|
266b2f2ac8 | ||
|
|
26f9fb4199 | ||
|
|
67887fb6ef | ||
|
|
3d102e39ff | ||
|
|
ddd9089130 | ||
|
|
d8ce88ab57 | ||
|
|
01794a47c6 | ||
|
|
17626dbbdb | ||
|
|
e5bd86658d | ||
|
|
e911dc1353 | ||
|
|
27e3e5aa6a | ||
|
|
5b65525bf1 | ||
|
|
277804f8b1 | ||
|
|
4c77802e3c | ||
|
|
aacfea6ea5 | ||
|
|
6d55040e43 | ||
|
|
290f785a47 | ||
|
|
39ef187f6b | ||
|
|
a7a475e763 | ||
|
|
6eb380ea38 | ||
|
|
4d150cb323 | ||
|
|
09d6d99b14 | ||
|
|
5e7fd8baff | ||
|
|
52c159e2e8 | ||
|
|
67e8feb879 | ||
|
|
a5b61d5244 | ||
|
|
decc3a16ed | ||
|
|
7f39e9f0cc | ||
|
|
95afa1a6ad | ||
|
|
0d0bb5f9e2 | ||
|
|
3dd5ce5035 | ||
|
|
549e56d551 | ||
|
|
50b6215d1e | ||
|
|
ff69bfdce7 | ||
|
|
c04cc8ec0f | ||
|
|
f324de2254 | ||
|
|
40af4e6f34 | ||
|
|
5d9b66b5cb | ||
|
|
d2a8277c13 | ||
|
|
ada85fc0f3 | ||
|
|
505345eff7 | ||
|
|
2911ade880 | ||
|
|
8980dc8f9c | ||
|
|
d94a1c47c0 | ||
|
|
99c3e5182d | ||
|
|
70e39fee40 | ||
|
|
26d6bec8a0 | ||
|
|
c9ac1a1402 | ||
|
|
6949c1092c | ||
|
|
aae8a54481 | ||
|
|
e1d93bf670 | ||
|
|
fea0533cb1 | ||
|
|
5cd991f02a | ||
|
|
50a8a605d5 | ||
|
|
9ce7d8f5d6 | ||
|
|
eae2587e4c | ||
|
|
323097f201 | ||
|
|
014499888a | ||
|
|
5662de21ae | ||
|
|
17c2eba455 | ||
|
|
1f2c986e8f | ||
|
|
12040b5f6d | ||
|
|
20a985848f | ||
|
|
c06c6169e5 | ||
|
|
917aeb79ef | ||
|
|
c4f36a39fe | ||
|
|
befedc30ad | ||
|
|
d3bc67daa2 | ||
|
|
5d7e211367 | ||
|
|
fa9daa01ec | ||
|
|
0ed9dc63b8 | ||
|
|
5dd6b33eb2 | ||
|
|
1210b823c7 | ||
|
|
04240b4b3d | ||
|
|
787f592a1a | ||
|
|
e7363fbd40 | ||
|
|
e2762825e5 | ||
|
|
bbbca70c71 | ||
|
|
8dde423866 | ||
|
|
fc4c1c2b7e | ||
|
|
bf02e2de3f | ||
|
|
a26ba4dc6e | ||
|
|
f187cc9314 | ||
|
|
c15c6374f9 | ||
|
|
acec382dfe | ||
|
|
fbc078c6b6 | ||
|
|
170b20185a | ||
|
|
3e8489c13b | ||
|
|
18dfc4c23e | ||
|
|
e6bae3dc77 | ||
|
|
6f9f27c030 | ||
|
|
874bef74c7 | ||
|
|
ad483e0916 | ||
|
|
5b4bbaec20 | ||
|
|
b8ae0db0bd | ||
|
|
f2c18fad52 | ||
|
|
9716655b94 | ||
|
|
efb317191c | ||
|
|
a47b5db40c | ||
|
|
ec94796b9c | ||
|
|
e3e0cd61a2 | ||
|
|
a438473279 | ||
|
|
12b5b8b509 | ||
|
|
22442b47a8 | ||
|
|
30c8b7d64f | ||
|
|
b643575c4f | ||
|
|
7dd7124fac | ||
|
|
4b1eebf5bb | ||
|
|
3257943926 | ||
|
|
24246c83e0 | ||
|
|
a26787f478 | ||
|
|
ec3b88f890 | ||
|
|
7f5f1dad92 | ||
|
|
b6db128214 | ||
|
|
8831635db2 | ||
|
|
e19198b720 | ||
|
|
f618d9dc1a | ||
|
|
66a667a0a3 | ||
|
|
8a4c67f712 | ||
|
|
fa6ef2e989 | ||
|
|
7450b99197 | ||
|
|
023fd272b1 | ||
|
|
84067cb027 | ||
|
|
3087ef70e7 | ||
|
|
387385bb1c | ||
|
|
6766d0d08c | ||
|
|
371d890793 | ||
|
|
57046c1b38 | ||
|
|
2a64144e94 | ||
|
|
9b0320ccf1 | ||
|
|
23f209131e | ||
|
|
d71f1c7f9a | ||
|
|
d21ea2c854 | ||
|
|
cd7f3ba820 | ||
|
|
e057d3ed9a | ||
|
|
5f04607a44 | ||
|
|
9440d13a08 | ||
|
|
85c4f1654e | ||
|
|
eed339cc64 | ||
|
|
3d1a23576a | ||
|
|
ed0e2e4bb5 | ||
|
|
954d0a0637 | ||
|
|
f2c8788602 | ||
|
|
49c63da27c | ||
|
|
24496d1856 | ||
|
|
991ebe09a2 | ||
|
|
85da4f6d85 | ||
|
|
5f065db991 | ||
|
|
ffb40586d7 | ||
|
|
fcfd87fd50 | ||
|
|
eb5b12aa7b | ||
|
|
f6e2438744 | ||
|
|
e3c7dc695d | ||
|
|
82d2025e6c | ||
|
|
91b82d78b8 | ||
|
|
b97e792893 | ||
|
|
13ac5ec7dc | ||
|
|
199f880936 | ||
|
|
ed86c207ba | ||
|
|
b4cf290f4d | ||
|
|
e526a6fd64 | ||
|
|
94cbbf169a | ||
|
|
2837ed16a7 | ||
|
|
68961deb6b | ||
|
|
ec54bfee98 | ||
|
|
385e97b76a | ||
|
|
cbd916877f | ||
|
|
38586034cd | ||
|
|
62b3ba2bff | ||
|
|
dd470b61b5 | ||
|
|
4fa92d2327 | ||
|
|
6f6c2db66d | ||
|
|
e6348cfa20 | ||
|
|
a006d1000a | ||
|
|
4a575e642f | ||
|
|
93525bc577 | ||
|
|
2cf0e9a723 | ||
|
|
c32164bfea | ||
|
|
714b0924e7 | ||
|
|
43079790a8 | ||
|
|
d03e61b625 | ||
|
|
2d760112a3 | ||
|
|
f46507ec72 | ||
|
|
e9e10bdc93 | ||
|
|
0386967a32 | ||
|
|
4900fc8b88 | ||
|
|
99294b5643 | ||
|
|
eb12bcb83c | ||
|
|
22a2e57642 | ||
|
|
5eaae06ceb | ||
|
|
ce7fc35349 | ||
|
|
8d4b5c83ae | ||
|
|
cbd3c56ca0 | ||
|
|
be6dad1424 | ||
|
|
298452fa7b | ||
|
|
4abbd7c35c | ||
|
|
c2f51c51ab | ||
|
|
255cff6664 | ||
|
|
8a9578bb0a | ||
|
|
8831f6cecc | ||
|
|
f3daa7e48b | ||
|
|
6163597958 | ||
|
|
f9e1222065 | ||
|
|
7d85de7c6c | ||
|
|
cf452c2300 | ||
|
|
72bd1d548d | ||
|
|
4556f4dee6 | ||
|
|
3dfbd3165a | ||
|
|
02b8e02131 | ||
|
|
087ded9f9e | ||
|
|
21f122ee82 | ||
|
|
d60a7e8c94 | ||
|
|
b8981c249f | ||
|
|
e71275a0dc | ||
|
|
4fb0db7a1e | ||
|
|
1e9beedc77 | ||
|
|
4a4a0653ef | ||
|
|
c80a900277 | ||
|
|
6fb0394d96 | ||
|
|
a6a7712039 | ||
|
|
dd0687ba29 | ||
|
|
9cb87a5333 | ||
|
|
8ec93d84a0 | ||
|
|
1d38715db9 | ||
|
|
6225c4eb35 | ||
|
|
e58ce2fbe6 | ||
|
|
8881d62e78 | ||
|
|
effb2a1265 | ||
|
|
ab387473b5 | ||
|
|
3cf6079b70 | ||
|
|
53c655bb53 | ||
|
|
87952463c2 | ||
|
|
3a8a63a49a | ||
|
|
debe115044 | ||
|
|
554d2808fd | ||
|
|
12b2c89a25 | ||
|
|
a66fc3a07e | ||
|
|
7b3705cab0 | ||
|
|
8e99e5f5e8 | ||
|
|
c5ba5370bb | ||
|
|
464dec9810 | ||
|
|
c2e2ec8803 | ||
|
|
37378e2360 | ||
|
|
678385d90c | ||
|
|
4c461f087f | ||
|
|
88a2b69980 | ||
|
|
1f57792da7 | ||
|
|
9bb4c45a23 | ||
|
|
75fd19f491 | ||
|
|
0ac16bdeb7 | ||
|
|
223ee41e10 | ||
|
|
c126ded82e | ||
|
|
0edf78b7fd | ||
|
|
5af3580987 | ||
|
|
343cb6f97a | ||
|
|
023c8ac13e | ||
|
|
c385eed795 | ||
|
|
ee5fdd789f | ||
|
|
df1e400f4e | ||
|
|
6c9c298478 | ||
|
|
7106ee150d | ||
|
|
03e2287f80 | ||
|
|
2edcd41e24 | ||
|
|
0fe043bd99 | ||
|
|
6686f5240d | ||
|
|
2936facf0f | ||
|
|
cc208f2c43 | ||
|
|
9a0fc231e5 | ||
|
|
bfc0ae62ec | ||
|
|
5e7d8d97f2 | ||
|
|
70ceb16ed6 | ||
|
|
f162fa639f | ||
|
|
f000c72546 | ||
|
|
32c01f931c | ||
|
|
d0121e2b9d | ||
|
|
1caab8ce1d | ||
|
|
878be435a1 | ||
|
|
6a68ae989e | ||
|
|
00993da781 | ||
|
|
e9ef67e402 | ||
|
|
83ebfececf | ||
|
|
ec8bf6251f | ||
|
|
1b2874b3a5 | ||
|
|
0ac1053a71 | ||
|
|
224d270952 | ||
|
|
c6137545cd | ||
|
|
335417f9f4 | ||
|
|
cb797223ed | ||
|
|
3a2a0313ac | ||
|
|
e221a5a73a | ||
|
|
2b7aaf095f | ||
|
|
6f01e7b8d8 | ||
|
|
d594419200 | ||
|
|
bf50e3f898 | ||
|
|
d434f1781f | ||
|
|
3f311a45ef | ||
|
|
9293b7796e | ||
|
|
b1e7883526 | ||
|
|
7fcf6a253d | ||
|
|
be8d985d15 | ||
|
|
974c90dddc | ||
|
|
4811d395d2 | ||
|
|
132423d577 | ||
|
|
10829e2f00 | ||
|
|
47b908c964 | ||
|
|
0f8e471d5d | ||
|
|
2537119250 | ||
|
|
977066d114 | ||
|
|
46e956dc74 | ||
|
|
7afdd8d44f | ||
|
|
6daf204b4f | ||
|
|
2f4a550a4a | ||
|
|
fe214f6b41 | ||
|
|
ca7de81888 | ||
|
|
17ce20355a | ||
|
|
34981b4765 | ||
|
|
21151a2e09 | ||
|
|
1abb7f5b8c | ||
|
|
05998549a4 | ||
|
|
96283a3629 | ||
|
|
2bfc7abe9c | ||
|
|
4f389eca8d | ||
|
|
1789479955 | ||
|
|
212800155b | ||
|
|
c241bf2104 | ||
|
|
bda61f32f3 | ||
|
|
59316dbaf9 | ||
|
|
b726073a5b | ||
|
|
adf897c812 | ||
|
|
1fc4c2442c | ||
|
|
414643ee90 | ||
|
|
1a1cbd6ea1 | ||
|
|
9ae809a62f | ||
|
|
eb9b1c905d | ||
|
|
fe9a8f49c1 | ||
|
|
f912c8fce3 | ||
|
|
1d1ca43c35 | ||
|
|
bce45f44e4 | ||
|
|
07583fb563 | ||
|
|
775aa23992 | ||
|
|
05ed6b7e73 | ||
|
|
d602694ea7 | ||
|
|
18d71bc0d4 | ||
|
|
3fa68643ba | ||
|
|
8904525c36 | ||
|
|
3ce09a98f3 | ||
|
|
b833768e71 | ||
|
|
b9a6afd993 | ||
|
|
b5a81ea927 | ||
|
|
750e92cdde | ||
|
|
da45f4c011 | ||
|
|
544bb5c11c | ||
|
|
1fc6f62f70 | ||
|
|
8751ad27ec | ||
|
|
159d3d5b87 | ||
|
|
34d6d99d8c | ||
|
|
6c46931b1a | ||
|
|
2c3e2d9d08 | ||
|
|
7be1562fa4 | ||
|
|
294389e7c7 | ||
|
|
2c8ce133f7 | ||
|
|
4f1d4d90d0 | ||
|
|
7b7484332b | ||
|
|
50e94b85aa | ||
|
|
9b820594ef | ||
|
|
ddcd45d56d | ||
|
|
c4a4c16516 | ||
|
|
5ae9ad0762 | ||
|
|
405f7d498e | ||
|
|
bcd6a5b1e7 | ||
|
|
e5e5ac994c | ||
|
|
e1f8d6ec49 | ||
|
|
6f50242f5a | ||
|
|
036f7ece05 | ||
|
|
622a2ff072 | ||
|
|
60334ca04a | ||
|
|
ade47b4e83 | ||
|
|
d7e550dfea | ||
|
|
c3cc0b9bf7 | ||
|
|
5ad89189c1 | ||
|
|
f1bbd4eb13 | ||
|
|
fba89dfacb | ||
|
|
b93ed41215 | ||
|
|
13ff6a7304 | ||
|
|
ad97405e55 | ||
|
|
376e231d7b | ||
|
|
e16d76f6dd | ||
|
|
ffd0fd92fc | ||
|
|
933613d730 | ||
|
|
9b0673bf92 | ||
|
|
7cba22aa28 | ||
|
|
af05b614a9 | ||
|
|
c0fa219a8b | ||
|
|
4e3a47b0f4 | ||
|
|
161276b58a | ||
|
|
47713019a5 | ||
|
|
010632a21d | ||
|
|
e77fe550af | ||
|
|
0a4233da14 | ||
|
|
56fb70ab1e | ||
|
|
4a1f2bc01d | ||
|
|
20292fbf16 | ||
|
|
1290cf8991 | ||
|
|
b8b8af7cf1 | ||
|
|
75f4f452d3 | ||
|
|
9de492384f | ||
|
|
14c4e161f2 | ||
|
|
c55efbc0ba | ||
|
|
f0610222d9 | ||
|
|
302ee4a50f | ||
|
|
2170819159 | ||
|
|
0d1fac321a | ||
|
|
dbbc1756dd | ||
|
|
d5b882d3f8 | ||
|
|
3025ea9a7b | ||
|
|
5dba4d1384 | ||
|
|
e4f1e7b093 | ||
|
|
d0a0597087 | ||
|
|
c9ccf9a1b5 | ||
|
|
69107d4441 | ||
|
|
e25afc1ef7 | ||
|
|
9babfd150e | ||
|
|
532dbbea4a | ||
|
|
0d284d05d9 | ||
|
|
28fccae3ac | ||
|
|
3a4a6da69c | ||
|
|
4ea07a95e7 | ||
|
|
80ceb49358 | ||
|
|
589337116a | ||
|
|
cb50067223 | ||
|
|
4d63266d88 | ||
|
|
90dd33ce21 | ||
|
|
763b849ddf | ||
|
|
9c76c54283 | ||
|
|
5cb17b3a36 | ||
|
|
2f7b5d1cbb | ||
|
|
4fe14eb2e9 | ||
|
|
eb089f2b58 | ||
|
|
4f0ac98eea | ||
|
|
af19940fa1 | ||
|
|
5635d2a325 | ||
|
|
5e2de35693 | ||
|
|
ef7180f23f | ||
|
|
f939973d4f | ||
|
|
63f327733e | ||
|
|
c1fb807fe4 | ||
|
|
b7ddf44267 | ||
|
|
6d4c72ea5e | ||
|
|
3db11b9372 | ||
|
|
b8714f4abe | ||
|
|
7ccbe74bbe | ||
|
|
ea3ae3516b | ||
|
|
d33af3ca52 | ||
|
|
291c3fa908 | ||
|
|
a51fa58122 | ||
|
|
65a3967abd | ||
|
|
e1e5c94a43 | ||
|
|
f15127eceb | ||
|
|
071a238b71 | ||
|
|
050b052156 | ||
|
|
8f65cca776 | ||
|
|
66624a8c47 | ||
|
|
c8b9a415e6 | ||
|
|
a1dcb4c203 | ||
|
|
d4edc3e622 | ||
|
|
e2b8c3ee0e | ||
|
|
c37816e90d | ||
|
|
a35cfcdca7 | ||
|
|
d381646226 | ||
|
|
285e7afec2 | ||
|
|
df7d678c32 | ||
|
|
f36f7e58de | ||
|
|
0e16c834d8 | ||
|
|
31a3256128 | ||
|
|
aa8f70da28 | ||
|
|
f375ffb8f8 | ||
|
|
de240e40a5 | ||
|
|
7d30aea07f | ||
|
|
04a7361d0d | ||
|
|
7b19618eca | ||
|
|
bd9600cc08 | ||
|
|
32172bc791 | ||
|
|
c92f57fb07 | ||
|
|
8fbdea7f36 | ||
|
|
df15da5145 | ||
|
|
846fe53c0f | ||
|
|
3bbdc828d9 | ||
|
|
c454c3f0f2 | ||
|
|
77b1a546e8 | ||
|
|
7c7f063204 | ||
|
|
0a0fcb305c | ||
|
|
da8028784d | ||
|
|
48edd888a6 | ||
|
|
da4f134095 | ||
|
|
0a71620046 | ||
|
|
1b5a762578 | ||
|
|
d9d031ed2b | ||
|
|
403e56b4ef | ||
|
|
499b06e300 | ||
|
|
cb69540bdd | ||
|
|
1f27fa419a | ||
|
|
a561b2bd91 | ||
|
|
eeec85d1de | ||
|
|
e01484f854 | ||
|
|
fb996ded88 | ||
|
|
a11bfca15a | ||
|
|
6262e1c9e6 | ||
|
|
4e318af7cc | ||
|
|
d587b7867e | ||
|
|
bd03ead9c3 | ||
|
|
c1685b7128 | ||
|
|
7625e79574 | ||
|
|
c5bf7875b9 | ||
|
|
da026293bc | ||
|
|
86e5677574 | ||
|
|
a48636604f | ||
|
|
e6945ac076 | ||
|
|
9107d76522 | ||
|
|
52b925b306 | ||
|
|
49d3dc0aa0 | ||
|
|
0d41a1ae70 | ||
|
|
49e22d790a | ||
|
|
12e5eedd6b | ||
|
|
159b651871 | ||
|
|
080be7a885 | ||
|
|
e526627eb9 | ||
|
|
67fc37c76c | ||
|
|
b2b92aea31 | ||
|
|
e0680d9612 | ||
|
|
d54ac37403 | ||
|
|
eedb3d3dd8 | ||
|
|
015aff9c4b | ||
|
|
d286df649e | ||
|
|
567bfc41e0 | ||
|
|
90d77e9ffb | ||
|
|
2b33ba1984 | ||
|
|
1918f0c5d5 | ||
|
|
91d79de723 | ||
|
|
62b05f2377 | ||
|
|
b628ec4c57 | ||
|
|
494394f084 | ||
|
|
e99b4b183c | ||
|
|
9186353654 | ||
|
|
bd2a7b9095 | ||
|
|
42b70e7a94 | ||
|
|
7f913203a1 | ||
|
|
9b94958840 | ||
|
|
2070e93379 | ||
|
|
772f4d938f | ||
|
|
531f3af203 | ||
|
|
ed522341c1 | ||
|
|
ee59c5068e | ||
|
|
ebe3abd05b | ||
|
|
358dd4dddc | ||
|
|
3d924d3631 | ||
|
|
0bed316a40 | ||
|
|
24b5937793 | ||
|
|
c5b5876700 | ||
|
|
0f969e952d | ||
|
|
43ba512fd5 | ||
|
|
e0cbc247b2 | ||
|
|
a2c8a82559 | ||
|
|
8aadbffe8c | ||
|
|
be7e7bc6fd | ||
|
|
3a10d4bdc0 | ||
|
|
fc03ecd1b3 | ||
|
|
c7b10f0e83 | ||
|
|
6a94ce5e1c | ||
|
|
59859a8e2f | ||
|
|
f51a8aae39 | ||
|
|
bd5b8c5e0e | ||
|
|
67e7744566 | ||
|
|
65a6663c31 | ||
|
|
603e80fd26 | ||
|
|
de4ee6bbe6 | ||
|
|
a8aa242280 | ||
|
|
0d32c2a9d9 | ||
|
|
6d5a02e2a8 | ||
|
|
67f3cbaaa8 | ||
|
|
f17504e1a0 | ||
|
|
b1a9af5de8 | ||
|
|
913bf553ae | ||
|
|
356dcc42bf | ||
|
|
8c006f24ce | ||
|
|
6f2f0092f0 | ||
|
|
56afc4c614 | ||
|
|
0a3b9f8f9a | ||
|
|
9b0623f4a4 | ||
|
|
c13ef17a86 | ||
|
|
d5ac2f521f | ||
|
|
037af18114 | ||
|
|
92299458f5 | ||
|
|
3272f2a4cf | ||
|
|
6a6dfdd82c | ||
|
|
fa27452983 | ||
|
|
8df5ec41d5 | ||
|
|
55aad3a742 | ||
|
|
e46890d87e | ||
|
|
3a36e10fce | ||
|
|
cc30c6d271 | ||
|
|
5e75ff7fb7 | ||
|
|
80681a1f8b | ||
|
|
5954e10155 | ||
|
|
78c43b7a10 | ||
|
|
8c6f8bf97b | ||
|
|
f220438257 | ||
|
|
bbd06752d3 | ||
|
|
e34df2ce95 | ||
|
|
b197c08716 | ||
|
|
aeb6c0f433 | ||
|
|
8f32767267 | ||
|
|
afd43b9a9a | ||
|
|
5893e02c48 | ||
|
|
66d3325e3c | ||
|
|
e513993a0d | ||
|
|
ddbdf42265 | ||
|
|
badaa33ddb | ||
|
|
befa3d7a6d | ||
|
|
513f1e8b86 | ||
|
|
4128f0fb73 | ||
|
|
3d81a63410 | ||
|
|
c0ba44cacc | ||
|
|
deba027457 | ||
|
|
47089d286e | ||
|
|
6c50292a66 | ||
|
|
1f23f06926 | ||
|
|
63319d32e8 | ||
|
|
66f28ef7a6 | ||
|
|
4e4eccd909 | ||
|
|
c21fe99368 | ||
|
|
53ea91e945 | ||
|
|
7cde05b58a | ||
|
|
0fc9b35307 | ||
|
|
4a36826af0 | ||
|
|
26a278c5f4 | ||
|
|
66a4d79730 | ||
|
|
097d541391 | ||
|
|
788ef9b106 | ||
|
|
a38e1163af | ||
|
|
a633ff5174 | ||
|
|
6b412106de | ||
|
|
93b5cb6161 | ||
|
|
4b80fbe5eb | ||
|
|
52775aae60 | ||
|
|
0430178b3e | ||
|
|
470123c77a | ||
|
|
66d4798db3 | ||
|
|
cc39395a12 | ||
|
|
3aeb9cf0b1 | ||
|
|
f1b383f0b7 | ||
|
|
e2896b7bf0 | ||
|
|
780dfb8966 | ||
|
|
8b91323705 | ||
|
|
89fdbf5660 | ||
|
|
ac47ab3f8a | ||
|
|
7ed5dfdb8f | ||
|
|
bfc1488860 | ||
|
|
726f733434 | ||
|
|
0c97e31101 | ||
|
|
ec2b0718e6 | ||
|
|
720056268c | ||
|
|
345992eda4 | ||
|
|
e3e6b35eb7 | ||
|
|
701ea950de | ||
|
|
4b78865823 | ||
|
|
5b2bdf4cf6 | ||
|
|
a677b7fd3a | ||
|
|
9cbd3db022 | ||
|
|
5f52d2c2c7 | ||
|
|
b8c403aa5d | ||
|
|
2c6863e18e | ||
|
|
e7a462c685 | ||
|
|
0cf671ae3b | ||
|
|
dfc6f5bfb4 | ||
|
|
64b9be7e42 | ||
|
|
7412a8761c | ||
|
|
65cdeabc77 | ||
|
|
a507d4464d | ||
|
|
9143cc39d9 | ||
|
|
e821755721 | ||
|
|
d081688fc9 | ||
|
|
cdc7ee698c | ||
|
|
0d0a9c872c | ||
|
|
30953cce66 | ||
|
|
f6008cf46a | ||
|
|
eb0587f726 | ||
|
|
ba56ac87c5 | ||
|
|
5800ac67c4 | ||
|
|
73941a159a | ||
|
|
d1fe8b203a | ||
|
|
8b8dbc1053 | ||
|
|
57e477b17c | ||
|
|
1a1924de3e | ||
|
|
3bea19c8ad | ||
|
|
cd47b62765 | ||
|
|
ffeaad324e | ||
|
|
4504dd810d | ||
|
|
60ad86f79c | ||
|
|
f63294699a | ||
|
|
650594d9ea | ||
|
|
7c22d5c774 | ||
|
|
73a501908d | ||
|
|
31836e5c9e | ||
|
|
31adab94b3 | ||
|
|
824c65eb38 | ||
|
|
4e02044eb4 | ||
|
|
f245cf2c5d | ||
|
|
1b49cc1408 | ||
|
|
bd384a9b59 | ||
|
|
48eb2ff405 | ||
|
|
dcacda984f | ||
|
|
8186e9e1d2 | ||
|
|
b5b93917d1 | ||
|
|
1ffdadbde3 | ||
|
|
4506603ea1 | ||
|
|
fdf8b85f88 | ||
|
|
340264ce41 | ||
|
|
d6187b3d63 | ||
|
|
b6577133a9 | ||
|
|
2d410eac37 | ||
|
|
e63e71f2bf | ||
|
|
ba743e0480 | ||
|
|
2f26b15524 | ||
|
|
5841ed0e70 | ||
|
|
d217dff4b9 | ||
|
|
2746606db1 | ||
|
|
2d321780d0 | ||
|
|
c26108586f | ||
|
|
7f30d9c3dc | ||
|
|
816b40bdc6 | ||
|
|
09688315cb | ||
|
|
c709535442 | ||
|
|
08e2d804fa | ||
|
|
b4fb07b435 | ||
|
|
d119ae6409 | ||
|
|
cf26fc4530 | ||
|
|
f50a7704c9 | ||
|
|
facec8393c | ||
|
|
172e8872ef | ||
|
|
b7755b844a | ||
|
|
7e77d29edb | ||
|
|
3b84ef6968 | ||
|
|
2dd8192dcb | ||
|
|
cafb499a79 | ||
|
|
f952267396 | ||
|
|
6913b71c69 | ||
|
|
c485b03b83 | ||
|
|
e1f35c86db | ||
|
|
cfbe60b731 | ||
|
|
a21020e226 | ||
|
|
28d18102f0 | ||
|
|
f5e78b7fdb | ||
|
|
d420b2dae5 | ||
|
|
3cce9107d0 | ||
|
|
a5248eb92b | ||
|
|
1acf734229 | ||
|
|
cc170ecb20 | ||
|
|
b7f40d16a4 | ||
|
|
7e6cb727bd | ||
|
|
eeaa835bef | ||
|
|
04aff8d149 | ||
|
|
e43eeeba4a | ||
|
|
e88bdd818d | ||
|
|
1a5d8ce07e | ||
|
|
9e2c7cc145 | ||
|
|
8e405bc8eb | ||
|
|
23e2a153c9 | ||
|
|
85a0949488 | ||
|
|
57b6433dc0 | ||
|
|
1b43e1be44 | ||
|
|
d6738b86c9 | ||
|
|
a5325cef44 | ||
|
|
cc917f3d83 | ||
|
|
492917ea40 | ||
|
|
78263185a1 | ||
|
|
ee7aa9d58b | ||
|
|
a7112937de | ||
|
|
a8d4572aef | ||
|
|
45c530e53a | ||
|
|
e0bcce5e6e | ||
|
|
8346ec8525 | ||
|
|
5d1673bad8 | ||
|
|
a33328e11d | ||
|
|
3efa326684 | ||
|
|
196fead1e0 | ||
|
|
b8ce04e9fe | ||
|
|
6369dfd65c | ||
|
|
f4da56adf9 | ||
|
|
0987a91bfc | ||
|
|
9f23a56cf4 | ||
|
|
34a4754767 | ||
|
|
b88de74552 | ||
|
|
45ac682c7f | ||
|
|
b753d366bf | ||
|
|
06c598886e | ||
|
|
52b0b7f8dc | ||
|
|
656b3b2ebe | ||
|
|
6bdfbde23f | ||
|
|
1b9f5eebc0 | ||
|
|
1f37da08b4 | ||
|
|
5bc44e6fe5 | ||
|
|
c70da08078 | ||
|
|
7600fb14e1 | ||
|
|
e2fdf2042e | ||
|
|
8477d6b9ed | ||
|
|
241df63334 | ||
|
|
7131de8a2a | ||
|
|
473a799f58 | ||
|
|
6c9fe85170 | ||
|
|
2c5d2db340 | ||
|
|
6cd2e6e7fb | ||
|
|
a6b094cff9 | ||
|
|
989598b9cd | ||
|
|
b024a4546c | ||
|
|
519715f8ee | ||
|
|
522de390a7 | ||
|
|
2ffe19cea1 | ||
|
|
124dc10cc3 | ||
|
|
a41338c3a2 | ||
|
|
aa979b96f2 | ||
|
|
f9b2471b32 | ||
|
|
d594f3ac88 | ||
|
|
e5190d4409 | ||
|
|
4f876c2bbc | ||
|
|
4d031ae55e | ||
|
|
89a348b154 | ||
|
|
db62d40c50 | ||
|
|
eff2ae8a73 | ||
|
|
b23d29767f | ||
|
|
7d5a3c3421 | ||
|
|
1054623d9d | ||
|
|
4eba93f47b | ||
|
|
13bcc84e8f | ||
|
|
c726ad3467 | ||
|
|
5e95ff963c | ||
|
|
1ef232e45b | ||
|
|
034654193f | ||
|
|
bddaa26d5a | ||
|
|
b42648fecb | ||
|
|
aa800bf96b | ||
|
|
6575e139b5 | ||
|
|
c5b3460006 | ||
|
|
b1e490765b | ||
|
|
c0f4a09e22 | ||
|
|
8fb5311844 | ||
|
|
12122f1eaf | ||
|
|
e83312289b | ||
|
|
d59f4113c1 | ||
|
|
8e3b70e7c8 | ||
|
|
6a41942de6 | ||
|
|
c25d95b3b6 | ||
|
|
edde95edeb | ||
|
|
066eaea45d | ||
|
|
7ae3cf5d95 | ||
|
|
2fa728d45c | ||
|
|
04cbd6a1d8 | ||
|
|
c6e658e26b | ||
|
|
0692aceda4 | ||
|
|
072bef5847 | ||
|
|
e94a689f83 | ||
|
|
c71a980f78 | ||
|
|
ef7d850dd4 | ||
|
|
1e6a71f36b | ||
|
|
f5ae4120cd | ||
|
|
82331364b7 | ||
|
|
ef3879e419 | ||
|
|
403dbf13e8 | ||
|
|
c8193c0009 | ||
|
|
9c0c69a728 | ||
|
|
4606fc3e2a | ||
|
|
c9bb3ab368 | ||
|
|
99e4b406a4 | ||
|
|
67b9424b9e | ||
|
|
5b60be5f51 | ||
|
|
d88927a6fb | ||
|
|
6616ee3607 | ||
|
|
0dbd8de335 | ||
|
|
9b406e368b | ||
|
|
4449dc43a0 | ||
|
|
554093ab3e | ||
|
|
ac3ed22ae9 | ||
|
|
2ca7b09d1e | ||
|
|
f29c2da9ce | ||
|
|
e23f6ae0fa | ||
|
|
51061273bc | ||
|
|
4a0812dfe9 | ||
|
|
efb694a6e6 | ||
|
|
1dbe2f31d0 | ||
|
|
be9525dbf2 | ||
|
|
a24afad641 | ||
|
|
abd14aa33c | ||
|
|
5b3c0685ac | ||
|
|
d263072aca | ||
|
|
2a59d9ff04 | ||
|
|
619dc73bcb | ||
|
|
02edefc158 | ||
|
|
572f5ae585 | ||
|
|
a326866cc9 | ||
|
|
17decf7b71 | ||
|
|
b9784e22ff | ||
|
|
0f600c5b70 | ||
|
|
a606e9c974 | ||
|
|
9e1938095c | ||
|
|
3491eb3881 | ||
|
|
6277340d6b | ||
|
|
0c12ee4452 | ||
|
|
4ec245a119 | ||
|
|
24fa6d17de | ||
|
|
2eedc1032c | ||
|
|
8c3b1b433f | ||
|
|
ae3f0f9a4e | ||
|
|
f4ae601f0d | ||
|
|
2104b86080 | ||
|
|
9724dceb73 | ||
|
|
4c07a4f35d | ||
|
|
6a15697957 | ||
|
|
47f880d8dc | ||
|
|
d5814f5680 | ||
|
|
345a444d73 | ||
|
|
0053ce5602 | ||
|
|
9851757a4e | ||
|
|
55fe25b8cb | ||
|
|
714f8a17c3 | ||
|
|
732e9db9af | ||
|
|
6fbc448a52 | ||
|
|
76fc241778 | ||
|
|
51cbbfdc45 | ||
|
|
279f2f503e | ||
|
|
795d95b482 | ||
|
|
78c8467bf6 | ||
|
|
5b5b95c85c | ||
|
|
8490b07c90 | ||
|
|
dee2c51c60 | ||
|
|
4149fa6ce4 | ||
|
|
7a69611f09 | ||
|
|
6692252df9 | ||
|
|
486ce1bdb0 | ||
|
|
cceff77bc2 | ||
|
|
22a9169f87 | ||
|
|
47a30763a0 | ||
|
|
73379a1bd8 | ||
|
|
7cc46629b4 | ||
|
|
67304245ba | ||
|
|
8edd3a1a34 | ||
|
|
e4bc7c8d78 | ||
|
|
a8af78d400 | ||
|
|
0afe3de818 | ||
|
|
3c81aadec6 | ||
|
|
1dfcb035da | ||
|
|
77b24882a9 | ||
|
|
1fd0673257 | ||
|
|
dbda76e0ce | ||
|
|
a9d22521ce | ||
|
|
6da1d9629f | ||
|
|
37b61a7087 | ||
|
|
9b484e6ee9 | ||
|
|
5ef67ef21c | ||
|
|
f902166643 | ||
|
|
8f91466b3d | ||
|
|
fa1621c3d1 | ||
|
|
2acd45feae | ||
|
|
f19e974b9d | ||
|
|
01598ac002 | ||
|
|
9b3906359b | ||
|
|
084908bd04 | ||
|
|
4224580d6f | ||
|
|
07d30647d8 | ||
|
|
263096fc77 | ||
|
|
b510cbce7f | ||
|
|
0b84dc3266 | ||
|
|
7ee7b95eb5 | ||
|
|
83b8bdde45 | ||
|
|
1b5dd15b90 | ||
|
|
47c224fcad | ||
|
|
39cc83c1b8 | ||
|
|
1c866f40eb | ||
|
|
1861aabaca | ||
|
|
cd8fb6eb38 | ||
|
|
21d05d3731 | ||
|
|
7c953925f9 | ||
|
|
33a4bbbe47 | ||
|
|
dfb82570ea | ||
|
|
039a775ce4 | ||
|
|
e712d6ae42 | ||
|
|
6ffc953370 | ||
|
|
63bf6a5574 | ||
|
|
1e73fc5751 | ||
|
|
65604a0b88 | ||
|
|
5a1a39f5f5 | ||
|
|
d22576c85c | ||
|
|
b7e5332c38 | ||
|
|
ed8570fb88 | ||
|
|
ce69e6634d | ||
|
|
274db20c60 | ||
|
|
3d72072f1f | ||
|
|
ed156c09d7 | ||
|
|
fda3a1a468 | ||
|
|
c261387635 | ||
|
|
7a2fa4dae8 | ||
|
|
b0c41958d9 | ||
|
|
4f1dcbfb78 | ||
|
|
dc9ed099d0 | ||
|
|
95255d44a9 | ||
|
|
5a94e8df75 | ||
|
|
015e3f8490 | ||
|
|
558601f02b | ||
|
|
461d96a079 | ||
|
|
bacfaf4a71 | ||
|
|
0678def698 | ||
|
|
07b0a0af51 | ||
|
|
f12f6cb720 | ||
|
|
4e6c1478f9 | ||
|
|
f9fd36f77e | ||
|
|
db4c7424b3 | ||
|
|
9311043190 | ||
|
|
03915ccfbd | ||
|
|
c6d59216fd | ||
|
|
dd9e80f067 | ||
|
|
a8690e41e6 | ||
|
|
cda42b9ec5 | ||
|
|
21a75fdd6d | ||
|
|
a90a1e9855 | ||
|
|
2a046e2e8b | ||
|
|
bb41656d81 | ||
|
|
a88a107718 | ||
|
|
2d21469f91 | ||
|
|
960ebe4a79 | ||
|
|
46dba0c394 | ||
|
|
ba27e8ca95 | ||
|
|
30574ea0fd | ||
|
|
c3c985c4a1 | ||
|
|
7b3d2d8812 | ||
|
|
d573a9f008 | ||
|
|
5dd1bb949c | ||
|
|
85a05f56b2 | ||
|
|
904adfb905 | ||
|
|
b2201c29fd | ||
|
|
fe01f68623 | ||
|
|
531c8ebe94 | ||
|
|
52dfb5a360 | ||
|
|
7e04e7e461 | ||
|
|
bce47f606d | ||
|
|
4dc1fdfdd8 | ||
|
|
9a852b52bc | ||
|
|
71a57b1fc0 | ||
|
|
d634598db1 | ||
|
|
6377d682a4 | ||
|
|
6e1acfdc24 | ||
|
|
30ec1dfd7c | ||
|
|
3d209024dd | ||
|
|
9ce64a037d | ||
|
|
43117bc035 | ||
|
|
2af704043e | ||
|
|
fa14ffdcba | ||
|
|
492b715ea0 | ||
|
|
d452e20b8a | ||
|
|
6b634c15d9 | ||
|
|
eeaec3369f | ||
|
|
ce1eece90d | ||
|
|
030bff6592 | ||
|
|
65de46a59e | ||
|
|
b76486e4dc | ||
|
|
974f67aefe | ||
|
|
e374ae3229 | ||
|
|
8b1058e577 | ||
|
|
aaa2eea5e6 | ||
|
|
54047e3c2c | ||
|
|
50fe94e47b | ||
|
|
6999f6641a | ||
|
|
c2b12aa65f | ||
|
|
1a731b6908 | ||
|
|
837d050628 | ||
|
|
8b00bec49c | ||
|
|
a3a2af948e | ||
|
|
9ade643af0 | ||
|
|
a29b92a886 | ||
|
|
e2c28e211f | ||
|
|
65f5b6a0a4 | ||
|
|
905e240fb9 | ||
|
|
75cea1ab78 | ||
|
|
dd3da3dd49 | ||
|
|
5ab9131629 | ||
|
|
8f1c9612b7 | ||
|
|
15a12d2518 | ||
|
|
e83734e0e4 | ||
|
|
f2a95af45c | ||
|
|
1bb61d0c1d | ||
|
|
51fb4f2296 | ||
|
|
5f0f625c0f | ||
|
|
ea7b803905 | ||
|
|
76af3921dd | ||
|
|
e2f999fc31 | ||
|
|
f63d57c4a9 | ||
|
|
ee73790127 | ||
|
|
1c3e84e9bb | ||
|
|
451a151ce0 | ||
|
|
1ac4f819ec | ||
|
|
526eba0129 | ||
|
|
8638e0a1f9 | ||
|
|
69c1093c93 | ||
|
|
74cd0a4d40 | ||
|
|
e28fc3bee6 | ||
|
|
879dfac111 | ||
|
|
b6cfcd797b | ||
|
|
2ea73888f0 | ||
|
|
f43331967c | ||
|
|
9da1249e51 | ||
|
|
2342dfe452 | ||
|
|
e24d22c348 | ||
|
|
533d9545de | ||
|
|
03c0c3c821 | ||
|
|
05be628afb | ||
|
|
cb2dc3e645 | ||
|
|
25f3d2fb9f | ||
|
|
db39a6416c | ||
|
|
48e0787344 | ||
|
|
838de2f692 | ||
|
|
1953d89e3c | ||
|
|
d0898d4c75 | ||
|
|
f01bb1aecb | ||
|
|
bbdbda4942 | ||
|
|
7741696011 | ||
|
|
2d4567bfbd | ||
|
|
8f643dae27 | ||
|
|
81e287ffe5 | ||
|
|
5543aa5e02 | ||
|
|
b5a7b4cd2c | ||
|
|
8857ce8146 | ||
|
|
bfbc5f600f | ||
|
|
a8fa42db00 | ||
|
|
4ee2bfcf32 | ||
|
|
ab98884f77 | ||
|
|
dbf443300b | ||
|
|
dbf44a7a85 | ||
|
|
2818c95795 | ||
|
|
27a13a6151 | ||
|
|
9f974786f2 | ||
|
|
2f2f41ac3c | ||
|
|
d5d30f683a | ||
|
|
56007aa4ba | ||
|
|
d489e08718 | ||
|
|
16b9356944 | ||
|
|
ba26826896 | ||
|
|
49631b6e56 | ||
|
|
ae2bffc56d | ||
|
|
47e51c4787 | ||
|
|
06ef289427 | ||
|
|
4190f39993 | ||
|
|
26a22375c8 | ||
|
|
0c174caf86 | ||
|
|
661748adc1 | ||
|
|
73f24339e3 | ||
|
|
9775d7425c | ||
|
|
3ff6c96273 | ||
|
|
f9706f10e1 | ||
|
|
e9a20c61d5 | ||
|
|
f3ee1a84dd | ||
|
|
381ca43c01 | ||
|
|
8cc16dc51b | ||
|
|
4337603e33 | ||
|
|
5c39acb745 | ||
|
|
1b584f0b88 | ||
|
|
68a28ef6d4 | ||
|
|
867df7f2c7 | ||
|
|
c18e84bb8e | ||
|
|
3fc1fd9dbc | ||
|
|
bc284c327c | ||
|
|
85961c76fb | ||
|
|
1c11a5964b | ||
|
|
4d1ba4ea3f | ||
|
|
6d3e24fce9 | ||
|
|
de37ec5704 | ||
|
|
745592432c | ||
|
|
cf47965e8c | ||
|
|
3d64872352 | ||
|
|
b89ad4204c | ||
|
|
71e9ba849d | ||
|
|
1d412175c6 | ||
|
|
b282a37a04 | ||
|
|
5f6d0bcf25 | ||
|
|
74c2d5eb06 | ||
|
|
4618d3b30e | ||
|
|
9e32e8f499 | ||
|
|
f47e2e758b | ||
|
|
9e03e30bd8 | ||
|
|
6be0e6bfca | ||
|
|
7bbdedf5f4 | ||
|
|
e942e6a2f5 | ||
|
|
6162df7013 | ||
|
|
2ce2df6390 | ||
|
|
19e5136d64 | ||
|
|
281e155480 | ||
|
|
70b2a11cb7 | ||
|
|
0bedf3ea59 | ||
|
|
a28227ad75 | ||
|
|
ed8baf3327 | ||
|
|
1ac5de96f9 | ||
|
|
15dd4c4350 | ||
|
|
c986089e77 | ||
|
|
17dc77f061 | ||
|
|
189f353de0 | ||
|
|
845e7174f0 | ||
|
|
8c6e4ad3ee | ||
|
|
5dfddc890c | ||
|
|
1ebabc23d3 | ||
|
|
1bf8c1c763 | ||
|
|
c5a59b6370 | ||
|
|
4a5a777478 | ||
|
|
4fd7dcd5b2 | ||
|
|
55920d9e3f | ||
|
|
6d0c3c9cd8 | ||
|
|
7b20c3fe03 | ||
|
|
efbe35c836 | ||
|
|
e591cd74ab | ||
|
|
669b9c73be | ||
|
|
52e1dd6d33 | ||
|
|
828e195b81 | ||
|
|
145342bb72 | ||
|
|
58abfd004d | ||
|
|
9dc8322270 | ||
|
|
4f0a6a7d57 | ||
|
|
2fb8ae00b9 | ||
|
|
63da1e384d | ||
|
|
34685ebdb2 | ||
|
|
215ae941e1 | ||
|
|
9d1211e872 | ||
|
|
cd4f2b1039 | ||
|
|
9881b7b498 | ||
|
|
28a687f6bf | ||
|
|
bd43ed0e88 | ||
|
|
17b59ce4e5 | ||
|
|
7acc1864c8 | ||
|
|
5a6fdfcbc3 | ||
|
|
23d465d4a1 | ||
|
|
27ae014fcb | ||
|
|
b4c7338b76 | ||
|
|
0d1464c5e9 | ||
|
|
f4421d362c | ||
|
|
5c8378f2d4 | ||
|
|
1775ac4803 | ||
|
|
8401e86acb | ||
|
|
e16101813c | ||
|
|
bbd3ac6451 | ||
|
|
c6a26e5260 | ||
|
|
a87fda6b84 | ||
|
|
b42c635cdb | ||
|
|
a9c6b71e19 | ||
|
|
282441e0e7 | ||
|
|
6020d5f5c2 | ||
|
|
9a395cbda0 | ||
|
|
61e41180dd | ||
|
|
26bde996ac | ||
|
|
6f78ac06c2 | ||
|
|
8e498f4fbe | ||
|
|
8105e606c9 | ||
|
|
7df6e5fe64 | ||
|
|
909c9b446b | ||
|
|
29639d59c3 | ||
|
|
a13dac6dd4 | ||
|
|
31257e588f | ||
|
|
52ab419040 | ||
|
|
7dbc35977f | ||
|
|
ce9aafadd9 | ||
|
|
13da79488f | ||
|
|
2c999e2037 | ||
|
|
c096c176e3 | ||
|
|
8fe0b62bb3 | ||
|
|
e3b53efd2c | ||
|
|
2ecb93e925 | ||
|
|
5d14d6f1aa | ||
|
|
4869bba7bb | ||
|
|
ecc12d783a | ||
|
|
54b7f811f7 | ||
|
|
ae1a615863 | ||
|
|
bb6e97992b | ||
|
|
64fac451f3 | ||
|
|
e45b33a809 | ||
|
|
eb6b72515e | ||
|
|
0550d3aea3 | ||
|
|
f6577acbff | ||
|
|
09c494f38a | ||
|
|
6c600d747e | ||
|
|
9dcfc347d9 | ||
|
|
fb40b627fc | ||
|
|
c597f96375 | ||
|
|
f1961ab614 | ||
|
|
c2c7b7b250 | ||
|
|
c20c272f8e | ||
|
|
85e4115306 | ||
|
|
10c2bc589a | ||
|
|
a30244cb4a | ||
|
|
5691fcdca4 | ||
|
|
f5848207e2 | ||
|
|
ad224161d8 | ||
|
|
5837a1ffab | ||
|
|
1cfd7cdb98 | ||
|
|
56a4aa2a3f | ||
|
|
d91d2ded77 | ||
|
|
6a48d44b14 | ||
|
|
31c5d423d0 | ||
|
|
79177b5f5b | ||
|
|
74658b2054 | ||
|
|
052fffccef | ||
|
|
bd2b558154 | ||
|
|
65ee6b62ea | ||
|
|
26266a22e8 | ||
|
|
e52ca63075 | ||
|
|
4d8b2eb5b4 | ||
|
|
2d81a1ce31 | ||
|
|
052a85fbc0 | ||
|
|
fa0e84c671 | ||
|
|
4759736571 | ||
|
|
f77686feaa | ||
|
|
a6ef1b8902 | ||
|
|
34548b93f4 | ||
|
|
f438d33f75 | ||
|
|
be1c0de4c6 | ||
|
|
ae5ea9a8aa | ||
|
|
eeb7fb1f78 | ||
|
|
3f32d5bb3b | ||
|
|
12019ca37d | ||
|
|
4d133b2f99 | ||
|
|
e733226b0c | ||
|
|
2ed583a0c3 | ||
|
|
048cee654e | ||
|
|
1293294593 | ||
|
|
a1947a3106 | ||
|
|
eff6cd6bbe | ||
|
|
d784ac5699 | ||
|
|
9acad5157b | ||
|
|
94459efa3f | ||
|
|
e88bc6a5ce | ||
|
|
55a7ab54e9 | ||
|
|
0c324c87cc | ||
|
|
31e8befa11 | ||
|
|
86ab7a6d97 | ||
|
|
14bdfb2d98 | ||
|
|
0036e585da | ||
|
|
cba2343fc0 | ||
|
|
864eebce2f | ||
|
|
156d36fb5e | ||
|
|
068718aa8a | ||
|
|
10219abfd6 | ||
|
|
2ec231a3d0 | ||
|
|
78f29b3aff | ||
|
|
7f768e81f4 | ||
|
|
aa1460eda1 | ||
|
|
85f85063ac | ||
|
|
0a7ce3c5d8 | ||
|
|
8468d0e3db | ||
|
|
059ac27f0b | ||
|
|
a96f8836b1 | ||
|
|
4018116136 | ||
|
|
aa083c8a40 | ||
|
|
8752243e9c | ||
|
|
1d028e81c4 | ||
|
|
2752d3e42c | ||
|
|
aa074ef762 | ||
|
|
bae75cd2f6 | ||
|
|
81a714b5a2 | ||
|
|
10cd44c22f | ||
|
|
a44f59c362 | ||
|
|
8d372fcab4 | ||
|
|
97d6c518b5 | ||
|
|
f331c48e1d | ||
|
|
9d0b10058d | ||
|
|
4ccd3ba71e | ||
|
|
7a6f5a868c | ||
|
|
0fae11d031 | ||
|
|
8a9725c990 | ||
|
|
d0189b0e3a | ||
|
|
c6853cc95e | ||
|
|
f28f37fb2c | ||
|
|
7dbbe9dba4 | ||
|
|
b625d9b099 | ||
|
|
a85c81a4b4 | ||
|
|
1677a4a32b | ||
|
|
776d46f5a2 | ||
|
|
6384eeaa13 | ||
|
|
fdc0befcee | ||
|
|
f2c28eb695 | ||
|
|
4095916991 | ||
|
|
551703364a | ||
|
|
4a2fae023c | ||
|
|
fca206120e | ||
|
|
65b2199065 | ||
|
|
9d03a52bf9 | ||
|
|
c8aa44dfcb | ||
|
|
7fcbe85ab9 | ||
|
|
de0dea7df8 | ||
|
|
43cf7d04b8 | ||
|
|
4d18580482 | ||
|
|
94d17b81d4 | ||
|
|
b48e007ea8 | ||
|
|
d5e8973866 | ||
|
|
a8c530f98c | ||
|
|
47769ccd62 | ||
|
|
bfc1d9a0a8 | ||
|
|
824484e608 | ||
|
|
d3f7baae4c | ||
|
|
8d961e9b71 | ||
|
|
f22855920c | ||
|
|
18728e3519 | ||
|
|
65dc2838d3 | ||
|
|
be930ce076 | ||
|
|
1ea47a008c | ||
|
|
e0169cff79 | ||
|
|
7c53ac10e2 | ||
|
|
212e0de6e9 | ||
|
|
8e74384b5a | ||
|
|
86e7e68ce1 | ||
|
|
a77999dbb6 | ||
|
|
3288fb0f06 | ||
|
|
a81b384f90 | ||
|
|
75c11d3fcc | ||
|
|
51a6cc035c | ||
|
|
ae8008d05c | ||
|
|
7f44177986 | ||
|
|
d88aaedf3f | ||
|
|
802d4ccb0b | ||
|
|
44a63d9cec | ||
|
|
76a84c7f5d | ||
|
|
40aefba203 | ||
|
|
6cdfb822b4 | ||
|
|
fdacab66f7 | ||
|
|
5cc12e71df | ||
|
|
f5e5fa2f36 | ||
|
|
6022b83b8c | ||
|
|
a01b1657cc | ||
|
|
6b785bd0e6 | ||
|
|
0beffc3083 | ||
|
|
d345d09b13 | ||
|
|
ec75b8cb8f | ||
|
|
503068b0d2 | ||
|
|
60dc9682b4 | ||
|
|
38e1eb8fc7 | ||
|
|
6490bb9258 | ||
|
|
bdac91c48c | ||
|
|
c95366281b | ||
|
|
484a31ab7e | ||
|
|
dc9546955a | ||
|
|
07b6e851cd | ||
|
|
c3a98db6ae | ||
|
|
0bb50a9742 | ||
|
|
76f96bfcf8 | ||
|
|
a2458281fc | ||
|
|
8467bdf19b | ||
|
|
7c28067922 | ||
|
|
a955db05a0 | ||
|
|
a5ab893f05 | ||
|
|
6afc94704a | ||
|
|
bd79e746ed | ||
|
|
fb58ab08cb | ||
|
|
7868925ba2 | ||
|
|
85f69af38f | ||
|
|
63c9068306 | ||
|
|
1fea3fc52d | ||
|
|
1e26e28515 | ||
|
|
8edddaa502 | ||
|
|
5a68a85317 | ||
|
|
655fde109f | ||
|
|
463a1d8c7c | ||
|
|
726ae8ac06 | ||
|
|
6f73be9a0b | ||
|
|
e2b4b5a57e | ||
|
|
c1fdddbac3 | ||
|
|
e0127d0824 | ||
|
|
9a07882e8e | ||
|
|
2416777df2 | ||
|
|
d811014b86 | ||
|
|
3134ef6392 | ||
|
|
6c3bb3480e | ||
|
|
0b7ff1dff3 | ||
|
|
9ac4efe9dc | ||
|
|
e278e1ed35 | ||
|
|
9db203d74f | ||
|
|
c6366835d2 | ||
|
|
5e8ad81ff3 | ||
|
|
ac24a353b0 | ||
|
|
8a3c681a6f | ||
|
|
2da946236d | ||
|
|
d4641c9135 | ||
|
|
cf710d7be5 | ||
|
|
e56b8928f7 | ||
|
|
66121e6cce | ||
|
|
cd824631bb | ||
|
|
115b72f2f0 | ||
|
|
8d17b35160 | ||
|
|
4c21ce2caa | ||
|
|
0057467acf | ||
|
|
7048b22df0 | ||
|
|
ddc3352b4b | ||
|
|
060a2808de | ||
|
|
d8f8a8e559 | ||
|
|
ec30aa323e | ||
|
|
c471d39ba8 | ||
|
|
55ec813f82 | ||
|
|
727f7b032c | ||
|
|
d1b613c0bb | ||
|
|
c3af65e535 | ||
|
|
d688d5cdd9 | ||
|
|
97543a43eb | ||
|
|
0e6df83961 | ||
|
|
6329d9c917 | ||
|
|
015e228304 | ||
|
|
a9f40d16f0 | ||
|
|
b8da14a32e | ||
|
|
a64b0f734a | ||
|
|
34ba2fb361 | ||
|
|
98ccb15796 | ||
|
|
6c06f7d19b | ||
|
|
86b129a25f | ||
|
|
6e8d4cd8e8 | ||
|
|
1b4622bdb2 | ||
|
|
58d51579e3 | ||
|
|
06706ea41b | ||
|
|
d634a0f784 | ||
|
|
a92159b811 | ||
|
|
7e1e37393c | ||
|
|
d2f9a2cea4 | ||
|
|
5111d83eee | ||
|
|
0dc77343c4 | ||
|
|
cec5913632 | ||
|
|
75d43a1563 | ||
|
|
95e9087c6e | ||
|
|
1ecdbd9e06 | ||
|
|
a90e3d611c | ||
|
|
d49d638253 | ||
|
|
83338a56c0 | ||
|
|
562020de70 | ||
|
|
044907edeb | ||
|
|
cfa1aa87fc | ||
|
|
0ac32ee474 | ||
|
|
de0675f850 | ||
|
|
1c529790f2 | ||
|
|
40bcc4d572 | ||
|
|
58f109e79c | ||
|
|
cb324f6269 | ||
|
|
7cafaf5cbc | ||
|
|
a394952630 | ||
|
|
68e87f20aa | ||
|
|
64ed0b3e94 | ||
|
|
fcaaee958d | ||
|
|
29e356ff86 | ||
|
|
460edc7bc7 | ||
|
|
582c7af12d | ||
|
|
db38099557 | ||
|
|
af533a7a2c | ||
|
|
acbede157f | ||
|
|
8e1db293db | ||
|
|
f63a627ff2 | ||
|
|
b1a0556c12 | ||
|
|
0097ede6ed | ||
|
|
b72774e54d | ||
|
|
08261c804f | ||
|
|
3027a9e523 | ||
|
|
c3995952b3 | ||
|
|
ff1642382c | ||
|
|
cfe35e40da | ||
|
|
c3238a9f91 | ||
|
|
58f08bf065 | ||
|
|
d3ac6ea337 | ||
|
|
6649b7955f | ||
|
|
15a53d33e0 | ||
|
|
57f09542a2 | ||
|
|
fa384b391d | ||
|
|
12b138c39f | ||
|
|
420a5f39eb | ||
|
|
12c2666bd1 | ||
|
|
1ecbc2e3f9 | ||
|
|
e1a78382c3 | ||
|
|
dcf5c72cad | ||
|
|
2ebf6be609 | ||
|
|
4ce7019ce6 | ||
|
|
3faf814162 | ||
|
|
52bd9825d8 | ||
|
|
b6028e741c | ||
|
|
4ee1693434 | ||
|
|
cbc7892b25 | ||
|
|
a4fa2ef0b3 | ||
|
|
96de90cb5f | ||
|
|
dfb22c81c3 | ||
|
|
6a70ed18d8 | ||
|
|
629c237349 | ||
|
|
cf014bca3c | ||
|
|
9323d8e17d | ||
|
|
1ba63a2175 | ||
|
|
b5551fd8ba | ||
|
|
fac0038af8 | ||
|
|
ee6685e324 | ||
|
|
0fb18f995c | ||
|
|
61e13aa7cd | ||
|
|
acb8c6c500 | ||
|
|
af838121d9 | ||
|
|
164d5cdec9 | ||
|
|
f504841a5c | ||
|
|
fb3d8e4f7d | ||
|
|
be49ba6d04 | ||
|
|
24ffed11fb | ||
|
|
73754bd104 | ||
|
|
0c6029cbe8 | ||
|
|
a643e9ae83 | ||
|
|
08ac3948c3 | ||
|
|
78d289b9c0 | ||
|
|
3473bdb527 | ||
|
|
a7f8835222 | ||
|
|
d6441955fc | ||
|
|
67d265e864 | ||
|
|
17031f1df0 | ||
|
|
234a24baa2 | ||
|
|
9a58f4688b | ||
|
|
87c1c928ba | ||
|
|
493b8297ea | ||
|
|
4d16602190 | ||
|
|
89222b23c3 | ||
|
|
89a181c7d5 | ||
|
|
c0aecf30c1 | ||
|
|
fc8ef21802 | ||
|
|
2e1aac4931 | ||
|
|
93b3eda05c | ||
|
|
740584d883 | ||
|
|
c45da4313e | ||
|
|
3a1a843747 | ||
|
|
5e6160149f | ||
|
|
be66c563a8 | ||
|
|
92c380c74b | ||
|
|
c51e7b0037 | ||
|
|
e25f161980 | ||
|
|
000d9dbcef | ||
|
|
822603128d | ||
|
|
9dbe8fbb1f | ||
|
|
26f1e228a9 | ||
|
|
0dcfd7e482 | ||
|
|
e933012a34 | ||
|
|
71db3ae6da | ||
|
|
c5f091fae8 | ||
|
|
4e61d569ac | ||
|
|
2d5c76e106 | ||
|
|
2e0abad61c | ||
|
|
3ea52a4e41 | ||
|
|
c6b1076092 | ||
|
|
c05e253b8d | ||
|
|
08b2063e45 | ||
|
|
4a8c8185c2 | ||
|
|
74ed7b3160 | ||
|
|
38e6e4345f | ||
|
|
8004982e2e | ||
|
|
e6a532a870 | ||
|
|
f90465210e | ||
|
|
4b3a71e424 | ||
|
|
5499e7294d | ||
|
|
619262aa97 | ||
|
|
693d2942aa | ||
|
|
b4cf62920c | ||
|
|
03636d6930 | ||
|
|
7c1e1c86c7 | ||
|
|
8a5eceaf05 | ||
|
|
720425d1fb | ||
|
|
1f105b9ae5 | ||
|
|
d43442be5c | ||
|
|
3360b114b4 | ||
|
|
94835b4117 | ||
|
|
e6ed0b21e5 | ||
|
|
37db021682 | ||
|
|
6014a5ccce | ||
|
|
c07207b564 | ||
|
|
fe1f78f8aa | ||
|
|
1709c6b658 | ||
|
|
d3583a2cfb | ||
|
|
634035fbc0 | ||
|
|
3c5b18411b | ||
|
|
82bb45a9ef | ||
|
|
373f3df196 | ||
|
|
6021f15bac | ||
|
|
da71fb2c23 | ||
|
|
6aebe856da | ||
|
|
8f6f35d7c1 | ||
|
|
7aa5f4d20b | ||
|
|
64b54b05a6 | ||
|
|
22b1f22df4 | ||
|
|
ae4e5539d7 | ||
|
|
dbd96329b5 | ||
|
|
c118ec7c4a | ||
|
|
7aab449502 | ||
|
|
cf166b3a57 | ||
|
|
da5910d40d | ||
|
|
8640ecf9be | ||
|
|
c4faceff30 | ||
|
|
01bd017bda | ||
|
|
d76357981b | ||
|
|
19b759e9fb | ||
|
|
df3bca6405 | ||
|
|
5cde79b5eb | ||
|
|
9b35cdbddc | ||
|
|
70ec22004a | ||
|
|
95ed77421a | ||
|
|
d64ec9817c | ||
|
|
ce01b7634f | ||
|
|
e0819f83bc | ||
|
|
f87d28c2f5 | ||
|
|
544b59744b | ||
|
|
467dfb831d | ||
|
|
4c4b4eaf55 | ||
|
|
227e5d00e5 | ||
|
|
73e9e384c8 | ||
|
|
5bebdcba68 | ||
|
|
1c2e52ae4b | ||
|
|
9377e89561 | ||
|
|
4cae05ecbe | ||
|
|
909dcfd51e | ||
|
|
2bd96a1f2a | ||
|
|
aca41080ee | ||
|
|
1c351696a9 | ||
|
|
51a8958aa6 | ||
|
|
777b8aed02 | ||
|
|
3672b90075 | ||
|
|
92c7e613db | ||
|
|
5c58b85a00 | ||
|
|
8af82daa37 | ||
|
|
4737551918 | ||
|
|
224bb18d3e | ||
|
|
aab7bdcc20 | ||
|
|
c5ca428d98 | ||
|
|
af0cc7126b | ||
|
|
a085050d27 | ||
|
|
2442f35f56 | ||
|
|
ed79ea536b | ||
|
|
b3d0aecd14 | ||
|
|
c2cb79f700 | ||
|
|
5f43e67c0b | ||
|
|
49a765a9a6 | ||
|
|
4d82bc86e8 | ||
|
|
8fe02b83b8 | ||
|
|
9c9075606b | ||
|
|
53285a0d19 | ||
|
|
9cdeaebb47 | ||
|
|
a9cb52c68b | ||
|
|
f33e950e83 | ||
|
|
9c9b5963fe | ||
|
|
1597054cc9 | ||
|
|
deba6aa845 | ||
|
|
2d8ba3b84e | ||
|
|
e56b28abad | ||
|
|
eb350c5a20 | ||
|
|
961d5ec77b | ||
|
|
fa566514aa | ||
|
|
6e97449bf7 | ||
|
|
016dafb3c3 | ||
|
|
675bcc8956 | ||
|
|
aba4c034fc | ||
|
|
d7c05984be | ||
|
|
c76d8c582f | ||
|
|
f1cb0e6f3c | ||
|
|
d296687456 | ||
|
|
5b68001c94 | ||
|
|
8b1d9bb5a9 | ||
|
|
55429e2f03 | ||
|
|
25ffe8b0e4 | ||
|
|
303a9d1110 | ||
|
|
de8c907c51 | ||
|
|
0fd1cabd60 | ||
|
|
8dd480735c | ||
|
|
676f1a1f0e | ||
|
|
ce75422126 | ||
|
|
3a097d6b15 | ||
|
|
9de1bf1020 | ||
|
|
93e5cf1c25 | ||
|
|
6e2376570b | ||
|
|
b20c4bf197 | ||
|
|
6ae1d92033 |
124
.eslintrc
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
{
|
||||||
|
"env": {
|
||||||
|
"browser": true,
|
||||||
|
"node": true,
|
||||||
|
"es2022": true
|
||||||
|
},
|
||||||
|
"parserOptions": {
|
||||||
|
"sourceType": "module"
|
||||||
|
},
|
||||||
|
"extends": "eslint:recommended",
|
||||||
|
"rules": {
|
||||||
|
"indent": "off",
|
||||||
|
"brace-style": "off",
|
||||||
|
"no-mixed-spaces-and-tabs": "off",
|
||||||
|
"no-useless-escape": "off",
|
||||||
|
"space-unary-ops": ["error", { "words": true }],
|
||||||
|
"linebreak-style": "off",
|
||||||
|
"quotes": ["off"],
|
||||||
|
"semi": "off",
|
||||||
|
"camelcase": "off",
|
||||||
|
"no-unused-vars": "off",
|
||||||
|
"no-console": ["warn"],
|
||||||
|
"no-extra-boolean-cast": ["off"],
|
||||||
|
"no-control-regex": ["off"],
|
||||||
|
},
|
||||||
|
"root": true,
|
||||||
|
"globals": {
|
||||||
|
"frappe": true,
|
||||||
|
"Vue": true,
|
||||||
|
"SetVueGlobals": true,
|
||||||
|
"__": true,
|
||||||
|
"repl": true,
|
||||||
|
"Class": true,
|
||||||
|
"locals": true,
|
||||||
|
"cint": true,
|
||||||
|
"cstr": true,
|
||||||
|
"cur_frm": true,
|
||||||
|
"cur_dialog": true,
|
||||||
|
"cur_page": true,
|
||||||
|
"cur_list": true,
|
||||||
|
"cur_tree": true,
|
||||||
|
"msg_dialog": true,
|
||||||
|
"is_null": true,
|
||||||
|
"in_list": true,
|
||||||
|
"has_common": true,
|
||||||
|
"posthog": true,
|
||||||
|
"has_words": true,
|
||||||
|
"validate_email": true,
|
||||||
|
"open_web_template_values_editor": true,
|
||||||
|
"validate_name": true,
|
||||||
|
"validate_phone": true,
|
||||||
|
"validate_url": true,
|
||||||
|
"get_number_format": true,
|
||||||
|
"format_number": true,
|
||||||
|
"format_currency": true,
|
||||||
|
"comment_when": true,
|
||||||
|
"open_url_post": true,
|
||||||
|
"toTitle": true,
|
||||||
|
"lstrip": true,
|
||||||
|
"rstrip": true,
|
||||||
|
"strip": true,
|
||||||
|
"strip_html": true,
|
||||||
|
"replace_all": true,
|
||||||
|
"flt": true,
|
||||||
|
"precision": true,
|
||||||
|
"CREATE": true,
|
||||||
|
"AMEND": true,
|
||||||
|
"CANCEL": true,
|
||||||
|
"copy_dict": true,
|
||||||
|
"get_number_format_info": true,
|
||||||
|
"strip_number_groups": true,
|
||||||
|
"print_table": true,
|
||||||
|
"Layout": true,
|
||||||
|
"web_form_settings": true,
|
||||||
|
"$c": true,
|
||||||
|
"$a": true,
|
||||||
|
"$i": true,
|
||||||
|
"$bg": true,
|
||||||
|
"$y": true,
|
||||||
|
"$c_obj": true,
|
||||||
|
"refresh_many": true,
|
||||||
|
"refresh_field": true,
|
||||||
|
"toggle_field": true,
|
||||||
|
"get_field_obj": true,
|
||||||
|
"get_query_params": true,
|
||||||
|
"unhide_field": true,
|
||||||
|
"hide_field": true,
|
||||||
|
"set_field_options": true,
|
||||||
|
"getCookie": true,
|
||||||
|
"getCookies": true,
|
||||||
|
"get_url_arg": true,
|
||||||
|
"md5": true,
|
||||||
|
"$": true,
|
||||||
|
"jQuery": true,
|
||||||
|
"moment": true,
|
||||||
|
"hljs": true,
|
||||||
|
"Awesomplete": true,
|
||||||
|
"Sortable": true,
|
||||||
|
"Showdown": true,
|
||||||
|
"Taggle": true,
|
||||||
|
"Gantt": true,
|
||||||
|
"Slick": true,
|
||||||
|
"Webcam": true,
|
||||||
|
"PhotoSwipe": true,
|
||||||
|
"PhotoSwipeUI_Default": true,
|
||||||
|
"io": true,
|
||||||
|
"JsBarcode": true,
|
||||||
|
"L": true,
|
||||||
|
"Chart": true,
|
||||||
|
"DataTable": true,
|
||||||
|
"Cypress": true,
|
||||||
|
"cy": true,
|
||||||
|
"it": true,
|
||||||
|
"describe": true,
|
||||||
|
"expect": true,
|
||||||
|
"context": true,
|
||||||
|
"before": true,
|
||||||
|
"beforeEach": true,
|
||||||
|
"after": true,
|
||||||
|
"qz": true,
|
||||||
|
"localforage": true,
|
||||||
|
"extend_cscript": true
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
.github/batch.png
vendored
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
.github/certificate.png
vendored
Normal file
|
After Width: | Height: | Size: 912 KiB |
2
.github/helper/install_dependencies.sh
vendored
@@ -5,7 +5,7 @@ echo "Setting Up System Dependencies..."
|
|||||||
|
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt remove mysql-server mysql-client
|
sudo apt remove mysql-server mysql-client
|
||||||
sudo apt install libcups2-dev redis-server mariadb-client-10.6
|
sudo apt-get install libcups2-dev redis-server mariadb-client libmariadb-dev
|
||||||
|
|
||||||
install_wkhtmltopdf() {
|
install_wkhtmltopdf() {
|
||||||
wget -q https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb
|
wget -q https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb
|
||||||
|
|||||||
BIN
.github/hero.png
vendored
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
.github/lms-logo.png
vendored
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
.github/quiz.png
vendored
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
64
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
name: Build Container Image
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
tags:
|
||||||
|
- "*"
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
arch: [amd64, arm64]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
packages: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout Entire Repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
with:
|
||||||
|
platforms: linux/${{ matrix.arch }}
|
||||||
|
- name: Login to GitHub Container Registry
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Set Branch
|
||||||
|
run: |
|
||||||
|
export APPS_JSON='[{"url": "https://github.com/frappe/lms","branch": "main"}]'
|
||||||
|
echo "APPS_JSON_BASE64=$(echo $APPS_JSON | base64 -w 0)" >> $GITHUB_ENV
|
||||||
|
echo "FRAPPE_BRANCH=version-15" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Set Image Tag
|
||||||
|
run: |
|
||||||
|
echo "IMAGE_TAG=stable" >> $GITHUB_ENV
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: frappe/frappe_docker
|
||||||
|
path: builds
|
||||||
|
|
||||||
|
- name: Build and push
|
||||||
|
uses: docker/build-push-action@v6
|
||||||
|
with:
|
||||||
|
push: true
|
||||||
|
context: builds
|
||||||
|
file: builds/images/layered/Containerfile
|
||||||
|
tags: >
|
||||||
|
ghcr.io/${{ github.repository }}:${{ github.ref_name }},
|
||||||
|
ghcr.io/${{ github.repository }}:${{ env.IMAGE_TAG }}
|
||||||
|
build-args: |
|
||||||
|
"FRAPPE_BRANCH=${{ env.FRAPPE_BRANCH }}"
|
||||||
|
"APPS_JSON_BASE64=${{ env.APPS_JSON_BASE64 }}"
|
||||||
2
.github/workflows/ci.yml
vendored
@@ -39,7 +39,7 @@ jobs:
|
|||||||
node-version: '18'
|
node-version: '18'
|
||||||
check-latest: true
|
check-latest: true
|
||||||
- name: setup cache for bench
|
- name: setup cache for bench
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: ~/bench-cache
|
path: ~/bench-cache
|
||||||
key: ${{ runner.os }}
|
key: ${{ runner.os }}
|
||||||
|
|||||||
32
.github/workflows/linters.yml
vendored
@@ -7,8 +7,27 @@ on:
|
|||||||
branches: [ main ]
|
branches: [ main ]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
commit-lint:
|
||||||
|
name: 'Semantic Commits'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 200
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
check-latest: true
|
||||||
|
|
||||||
|
- name: Check commit titles
|
||||||
|
run: |
|
||||||
|
npm install @commitlint/cli @commitlint/config-conventional
|
||||||
|
npx commitlint --verbose --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }}
|
||||||
|
|
||||||
linters:
|
linters:
|
||||||
name: Semantic Commits
|
name: Semgrep Rules
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.event_name == 'pull_request'
|
if: github.event_name == 'pull_request'
|
||||||
|
|
||||||
@@ -20,8 +39,17 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: '3.10'
|
python-version: '3.10'
|
||||||
|
|
||||||
|
- name: Cache pip
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ~/.cache/pip
|
||||||
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml', '**/setup.py') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-pip-
|
||||||
|
${{ runner.os }}-
|
||||||
|
|
||||||
- name: Install and Run Pre-commit
|
- name: Install and Run Pre-commit
|
||||||
uses: pre-commit/action@v2.0.3
|
uses: pre-commit/action@v3.0.1
|
||||||
|
|
||||||
- name: Download Semgrep rules
|
- name: Download Semgrep rules
|
||||||
run: git clone --depth 1 https://github.com/frappe/semgrep-rules.git frappe-semgrep-rules
|
run: git clone --depth 1 https://github.com/frappe/semgrep-rules.git frappe-semgrep-rules
|
||||||
|
|||||||
3
.github/workflows/make_release_pr.yml
vendored
@@ -1,8 +1,7 @@
|
|||||||
name: Create weekly release
|
name: Create weekly release
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
# 13:00 UTC -> 7pm IST on every Wednesday
|
- cron: '30 3 * * 3'
|
||||||
- cron: '30 4 * * 3'
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|||||||
11
.github/workflows/ui-tests.yml
vendored
@@ -24,7 +24,7 @@ jobs:
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
mariadb:
|
mariadb:
|
||||||
image: mariadb:10.6
|
image: mariadb:10.8
|
||||||
env:
|
env:
|
||||||
MARIADB_ROOT_PASSWORD: 123
|
MARIADB_ROOT_PASSWORD: 123
|
||||||
ports:
|
ports:
|
||||||
@@ -58,7 +58,7 @@ jobs:
|
|||||||
echo "127.0.0.1 lms.test" | sudo tee -a /etc/hosts
|
echo "127.0.0.1 lms.test" | sudo tee -a /etc/hosts
|
||||||
|
|
||||||
- name: Cache pip
|
- name: Cache pip
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: ~/.cache/pip
|
path: ~/.cache/pip
|
||||||
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml', '**/setup.py') }}
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml', '**/setup.py') }}
|
||||||
@@ -70,7 +70,7 @@ jobs:
|
|||||||
id: yarn-cache-dir-path
|
id: yarn-cache-dir-path
|
||||||
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- uses: actions/cache@v3
|
- uses: actions/cache@v4
|
||||||
id: yarn-cache
|
id: yarn-cache
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||||
@@ -79,7 +79,7 @@ jobs:
|
|||||||
${{ runner.os }}-yarn-ui-
|
${{ runner.os }}-yarn-ui-
|
||||||
|
|
||||||
- name: Cache cypress binary
|
- name: Cache cypress binary
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: ~/.cache/Cypress
|
path: ~/.cache/Cypress
|
||||||
key: ${{ runner.os }}-cypress
|
key: ${{ runner.os }}-cypress
|
||||||
@@ -100,11 +100,12 @@ jobs:
|
|||||||
bench --site lms.test execute frappe.utils.install.complete_setup_wizard
|
bench --site lms.test execute frappe.utils.install.complete_setup_wizard
|
||||||
bench --site lms.test execute frappe.tests.ui_test_helpers.create_test_user
|
bench --site lms.test execute frappe.tests.ui_test_helpers.create_test_user
|
||||||
bench --site lms.test set-password frappe@example.com admin
|
bench --site lms.test set-password frappe@example.com admin
|
||||||
|
bench --site lms.test execute lms.lms.utils.persona_captured
|
||||||
|
|
||||||
- name: cypress pre-requisites
|
- name: cypress pre-requisites
|
||||||
run: |
|
run: |
|
||||||
cd ~/frappe-bench/apps/lms
|
cd ~/frappe-bench/apps/lms
|
||||||
yarn add cypress@^10 --no-lockfile
|
yarn add cypress@^10 --no-lockfile -W
|
||||||
|
|
||||||
- name: UI Tests
|
- name: UI Tests
|
||||||
run: cd ~/frappe-bench/ && bench --site lms.test run-ui-tests lms --headless
|
run: cd ~/frappe-bench/ && bench --site lms.test run-ui-tests lms --headless
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
exclude: 'node_modules|.git'
|
exclude: 'node_modules|.git'
|
||||||
default_stages: [commit]
|
default_stages: [pre-commit]
|
||||||
fail_fast: false
|
fail_fast: false
|
||||||
|
|
||||||
repos:
|
repos:
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v4.3.0
|
rev: v5.0.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
files: "lms.*"
|
files: "lms.*"
|
||||||
@@ -16,17 +16,16 @@ repos:
|
|||||||
- id: check-toml
|
- id: check-toml
|
||||||
- id: debug-statements
|
- id: debug-statements
|
||||||
|
|
||||||
- repo: https://github.com/asottile/pyupgrade
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||||
rev: v2.34.0
|
rev: v0.8.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: pyupgrade
|
- id: ruff
|
||||||
args: ['--py310-plus']
|
name: "Run ruff import sorter"
|
||||||
|
args: ["--select=I", "--fix"]
|
||||||
- repo: https://github.com/adityahase/black
|
- id: ruff
|
||||||
rev: 9cb0a69f4d0030cdf687eddf314468b39ed54119
|
name: "Run ruff linter"
|
||||||
hooks:
|
- id: ruff-format
|
||||||
- id: black
|
name: "Run ruff formatter"
|
||||||
additional_dependencies: ['click==8.0.4']
|
|
||||||
|
|
||||||
- repo: https://github.com/pre-commit/mirrors-prettier
|
- repo: https://github.com/pre-commit/mirrors-prettier
|
||||||
rev: v2.7.1
|
rev: v2.7.1
|
||||||
@@ -44,12 +43,22 @@ repos:
|
|||||||
lms/public/js/lib/.*
|
lms/public/js/lib/.*
|
||||||
)$
|
)$
|
||||||
|
|
||||||
- repo: https://github.com/PyCQA/flake8
|
- repo: https://github.com/pre-commit/mirrors-eslint
|
||||||
rev: 5.0.4
|
rev: v8.44.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: flake8
|
- id: eslint
|
||||||
additional_dependencies: ['flake8-bugbear',]
|
types_or: [javascript]
|
||||||
args: ['--config', '.github/helper/flake8.conf']
|
args: ['--quiet']
|
||||||
|
exclude: |
|
||||||
|
(?x)^(
|
||||||
|
lms/public/dist/.*|
|
||||||
|
cypress/.*|
|
||||||
|
.*node_modules.*|
|
||||||
|
.*boilerplate.*|
|
||||||
|
lms/www/website_script.js|
|
||||||
|
lms/templates/includes/.*|
|
||||||
|
lms/public/js/lib/.*
|
||||||
|
)$
|
||||||
|
|
||||||
ci:
|
ci:
|
||||||
autoupdate_schedule: weekly
|
autoupdate_schedule: weekly
|
||||||
|
|||||||
231
README.md
@@ -1,115 +1,178 @@
|
|||||||
<p align="center">
|
<div align="center" markdown="1">
|
||||||
<a href="https://www.frappelms.com/">
|
|
||||||
<img src="https://frappe.io/files/lms.png" alt="Frappe LMS" width="50px" height="50px">
|
<img src=".github/lms-logo.png" alt="Frappe Learning logo" width="80" height="80"/>
|
||||||
</a>
|
<h1>Frappe Learning</h1>
|
||||||
<p align="center">Easy to use, open source, learning management system.</p>
|
|
||||||
</p>
|
**Easy to use, open source, Learning Management System**
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
<img src=".github/hero.png?v=5" alt="Hero Image" width="72%" />
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
<div align="center">
|
||||||
|
<a href="https://frappe.io/learning">Website</a>
|
||||||
|
-
|
||||||
|
<a href="https://docs.frappe.io/learning">Documentation</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
<p align="center">
|
## Frappe Learning
|
||||||
<a href="https://www.producthunt.com/posts/frappe-lms?utm_source=badge-top-post-topic-badge&utm_medium=badge&utm_souce=badge-frappe-lms" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-topic-badge.svg?post_id=396079&theme=dark&period=weekly&topic_id=204" alt="Frappe LMS - Easy to use, 100% open source learning management system | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
|
Frappe Learning is an easy-to-use learning system that helps you bring structure to your content.
|
||||||
</p>
|
|
||||||
|
### Motivation
|
||||||
|
In 2021, we were looking for a Learning Management System to launch [Mon.School](https://mon.school) for FOSS United. We checked out Moodle, but it didn’t feel right. The forms were unnecessarily lengthy and the UI was confusing. It shouldn't be this hard to create a course right? So I started making a learning system for Mon.School which soon became a product in itself. The aim is to have a simple platform that anyone can use to launch a course of their own and make knowledge sharing easier.
|
||||||
|
|
||||||
|
### Key Features
|
||||||
|
|
||||||
|
- **Structured Learning**: Design a course with a 3-level hierarchy, where your courses have chapters and you can group your lessons within these chapters. This ensures that the context of the lesson is set by the chapter.
|
||||||
|
|
||||||
|
- **Live Classes**: Group learners into batches based on courses and duration. You can then create Zoom live class for these batches right from the app. Learners get to see the list of live classes they have to take as a part of this batch.
|
||||||
|
|
||||||
|
- **Quizzes and Assignments**: Create quizzes where questions can have single-choice, multiple-choice options, or can be open ended. Instructors can also add assignments which learners can submit as PDF's or Documents.
|
||||||
|
|
||||||
|
- **Getting Certified**: Once a learner has completed the course or batch, you can grant them a certificate. The app provides an inbuilt certificate template. You can use this or else create a template of your own and use that instead.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>View Screenshots</summary>
|
||||||
|
|
||||||
|
|
||||||
<div align="center" style="max-height: 40px;">
|

|
||||||
<a href="https://frappecloud.com/lms/signup">
|
<div align="center">
|
||||||
<img src=".github/try-on-f-cloud.svg" height="40">
|
<sub>
|
||||||
|
Create batches to group your learners
|
||||||
|
</sub>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
<div align="center">
|
||||||
|
<sub>
|
||||||
|
Evaluate their knowledge by quizzes
|
||||||
|
</sub>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
<div align="center">
|
||||||
|
<sub>
|
||||||
|
Autenticate their work with certification
|
||||||
|
</sub>
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
### Under the Hood
|
||||||
|
|
||||||
|
- [**Frappe Framework**](https://github.com/frappe/frappe): A full-stack web application framework.
|
||||||
|
|
||||||
|
- [**Frappe UI**](https://github.com/frappe/frappe-ui): A Vue-based UI library, to provide a modern user interface.
|
||||||
|
|
||||||
|
## Production Setup
|
||||||
|
|
||||||
|
### Managed Hosting
|
||||||
|
|
||||||
|
You can try [Frappe Cloud](https://frappecloud.com), a simple, user-friendly and sophisticated [open-source](https://github.com/frappe/press) platform to host Frappe applications with peace of mind.
|
||||||
|
|
||||||
|
It takes care of installation, setup, upgrades, monitoring, maintenance and support of your Frappe deployments. It is a fully featured developer platform with an ability to manage and control multiple Frappe deployments.
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a href="https://frappecloud.com/lms/signup" target="_blank">
|
||||||
|
<picture>
|
||||||
|
<source media="(prefers-color-scheme: dark)" srcset="https://frappe.io/files/try-on-fc-white.png">
|
||||||
|
<img src="https://frappe.io/files/try-on-fc-black.png" alt="Try on Frappe Cloud" height="28" />
|
||||||
|
</picture>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
### Self Hosting
|
||||||
|
|
||||||
<p align="center">
|
Follow these steps to set up Frappe Learning in production:
|
||||||
<a href="https://dashboard.cypress.io/projects/vandxn/runs">
|
|
||||||
<img alt="cypress" src="https://img.shields.io/endpoint?url=https://dashboard.cypress.io/badge/simple/vandxn/main&style=flat&logo=cypress">
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/frappe/lms/blob/main/LICENSE">
|
|
||||||
<img alt="license" src="https://img.shields.io/badge/license-AGPLv3-blue">
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<img width="1402" alt="Lesson" src="https://frappelms.com/files/banner.png">
|
**Step 1**: Download the easy install script
|
||||||
|
|
||||||
<details>
|
```bash
|
||||||
<summary>Show more screenshots</summary>
|
wget https://frappe.io/easy-install.py
|
||||||
<img width="1520" alt="ss1" src="https://user-images.githubusercontent.com/31363128/210056046-584bc8aa-d28c-4514-b031-73817012837d.png">
|
```
|
||||||
<img width="830" alt="ss2" src="https://user-images.githubusercontent.com/31363128/210056097-36849182-6db0-43a2-8c62-5333cd2aedf4.png">
|
|
||||||
<img width="941" alt="ss3" src="https://user-images.githubusercontent.com/31363128/210056134-01a7c429-1ef4-434e-9d43-128dda35d7e5.png">
|
|
||||||
</details>
|
|
||||||
|
|
||||||
Frappe LMS is an easy-to-use, open-source learning management system. You can use it to create and share online courses. The app has a clear UI that helps students focus only on what's important and assists in distraction-free learning.
|
**Step 2**: Run the deployment command
|
||||||
|
|
||||||
You can create courses and lessons through simple forms. Lessons can be in the form of text, videos, quizzes or a combination of all these. You can keep your students engaged with quizzes to help revise and test the concepts learned. Course Instructors and Students can reach out to each other through the discussions section available for each lesson and get queries resolved.
|
```bash
|
||||||
|
python3 ./easy-install.py deploy \
|
||||||
|
--project=learning_prod_setup \
|
||||||
|
--email=your_email.example.com \
|
||||||
|
--image=ghcr.io/frappe/lms \
|
||||||
|
--version=stable \
|
||||||
|
--app=lms \
|
||||||
|
--sitename subdomain.domain.tld
|
||||||
|
```
|
||||||
|
|
||||||
## Features
|
Replace the following parameters with your values:
|
||||||
- Create online courses. 📚
|
- `your_email.example.com`: Your email address
|
||||||
- Add detailed descriptions and preview videos to the course. 🎬
|
- `subdomain.domain.tld`: Your domain name where Learning will be hosted
|
||||||
- Add videos, quizzes, and assignments to your lessons and make them interesting and interactive 📝
|
|
||||||
- Discussions section below each lesson where instructors and students can interact with each other. 💬
|
|
||||||
- Create batches to group your students based on courses and track their progress 🏛
|
|
||||||
- Statistics dashboard that provides all important numbers at a glimpse. 📈
|
|
||||||
- Job Board where users can post and look for jobs. 💼
|
|
||||||
- People directory with each person's profile page 👨👩👧👦
|
|
||||||
- Set cover image, profile photo, short bio, and other professional information. 🦹🏼♀️
|
|
||||||
- Simple layout that optimizes readability 🤓
|
|
||||||
- Delightful user experience in overall usage ✨
|
|
||||||
|
|
||||||
## Tech Stack
|
The script will set up a production-ready instance of Frappe Learning with all the necessary configurations in about 5 minutes.
|
||||||
|
|
||||||
Frappe LMS is built on [Frappe Framework](https://frappeframework.com) which is a batteries-included python web framework.
|
**Note:** To avoid a `404 Page Not Found` error:
|
||||||
These are some of the tools it's built on:
|
- If hosting on a **public server**, make sure your DNS **A record** points to your server's IP.
|
||||||
- [Python](https://www.python.org)
|
- If hosting **locally**, map your domain to `127.0.0.1` in your `/etc/hosts` file:
|
||||||
- [Redis](https://redis.io/)
|
|
||||||
- [MariaDB](https://mariadb.org/)
|
|
||||||
- [Socket.io](https://socket.io/)
|
|
||||||
|
|
||||||
## Local Setup
|
## Development Setup
|
||||||
|
|
||||||
### Docker
|
### Docker
|
||||||
You need Docker, docker-compose, and git setup on your machine. Refer to [Docker documentation](https://docs.docker.com/). After that, run the following commands:
|
|
||||||
```
|
|
||||||
git clone https://github.com/frappe/lms
|
|
||||||
cd apps/lms/docker
|
|
||||||
docker-compose up
|
|
||||||
```
|
|
||||||
|
|
||||||
Wait for some time until the setup script creates a site. After that, you can access `http://localhost:8000` in your browser and the app's login screen should appear.
|
You need Docker, docker-compose and git setup on your machine. Refer [Docker documentation](https://docs.docker.com/). After that, follow below steps:
|
||||||
You'll have to go through the setup wizard to set up the website the first time you access it. Log in using the following credentials to complete the setup wizard.
|
|
||||||
|
|
||||||
```
|
**Step 1**: Setup folder and download the required files
|
||||||
Username: Administrator
|
|
||||||
password: admin
|
|
||||||
```
|
|
||||||
|
|
||||||
### Frappe Bench
|
mkdir frappe-learning
|
||||||
|
cd frappe-learning
|
||||||
|
|
||||||
Currently, this app depends on the `develop` branch of [frappe](https://github.com/frappe/frappe).
|
# Download the docker-compose file
|
||||||
|
wget -O docker-compose.yml https://raw.githubusercontent.com/frappe/lms/develop/docker/docker-compose.yml
|
||||||
|
|
||||||
1. Setup frappe-bench by following [this guide](https://frappeframework.com/docs/v14/user/en/installation)
|
# Download the setup script
|
||||||
1. In the frappe-bench directory, run `bench start` and keep it running. Open a new terminal session and cd into the `frappe-bench` directory.
|
wget -O init.sh https://raw.githubusercontent.com/frappe/lms/develop/docker/init.sh
|
||||||
1. Run the following commands:
|
|
||||||
```sh
|
|
||||||
bench new-site lms.test
|
|
||||||
bench get-app lms
|
|
||||||
bench --site lms.test install-app lms
|
|
||||||
bench --site lms.test add-to-hosts
|
|
||||||
|
|
||||||
1. Now, you can access the site at `http://lms.test:8000`
|
**Step 2**: Run the container and daemonize it
|
||||||
|
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
## Deployment
|
**Step 3**: The site [http://lms.localhost:8000/lms](http://lms.localhost:8000/lms) should now be available. The default credentials are:
|
||||||
Frappe LMS is an app built on top of the Frappe Framework. So, you can follow any deployment guide for hosting a Frappe Framework-based site.
|
- Username: Administrator
|
||||||
|
- Password: admin
|
||||||
|
|
||||||
### Managed Hosting
|
### Local
|
||||||
Frappe LMS can be deployed in a few clicks on [Frappe Cloud](https://frappecloud.com/marketplace/apps/lms).
|
|
||||||
|
|
||||||
### Self-hosting
|
To setup the repository locally follow the steps mentioned below:
|
||||||
If you want to self-host, you can follow official [Frappe Bench Installation](https://github.com/frappe/bench#installation) instructions.
|
|
||||||
|
|
||||||
## Bugs and Feature Requests
|
1. Install bench and setup a `frappe-bench` directory by following the [Installation Steps](https://frappeframework.com/docs/user/en/installation)
|
||||||
If you find any bugs or have a feature idea for the app, feel free to report them here on [GitHub Issues](https://github.com/frappe/lms/issues). Make sure you share enough information (app screenshots, browser console screenshots, stack traces, etc) for project maintainers.
|
1. Start the server by running `bench start`
|
||||||
|
1. In a separate terminal window, create a new site by running `bench new-site learning.test`
|
||||||
|
1. Map your site to localhost with the command `bench --site learning.test add-to-hosts`
|
||||||
|
1. Get the Learning app. Run `bench get-app https://github.com/frappe/lms`
|
||||||
|
1. Run `bench --site learning.test install-app lms`.
|
||||||
|
1. Now open the URL `http://learning.test:8000/lms` in your browser, you should see the app running
|
||||||
|
|
||||||
## License
|
## Learn and connect
|
||||||
Distributed under [GNU AFFERO GENERAL PUBLIC LICENSE](license.txt)
|
|
||||||
|
- [Telegram Public Group](https://t.me/frappelms)
|
||||||
|
- [Discuss Forum](https://discuss.frappe.io/c/lms/70)
|
||||||
|
- [Documentation](https://docs.frappe.io/learning)
|
||||||
|
- [YouTube](https://www.youtube.com/channel/UCn3bV5kx77HsVwtnlCeEi_A)
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<div align="center" style="padding-top: 0.75rem;">
|
||||||
|
<a href="https://frappe.io" target="_blank">
|
||||||
|
<picture>
|
||||||
|
<source media="(prefers-color-scheme: dark)" srcset="https://frappe.io/files/Frappe-white.png">
|
||||||
|
<img src="https://frappe.io/files/Frappe-black.png" alt="Frappe Technologies" height="28"/>
|
||||||
|
</picture>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|||||||
26
commitlint.config.js
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
export default {
|
||||||
|
parserPreset: "conventional-changelog-conventionalcommits",
|
||||||
|
rules: {
|
||||||
|
"subject-empty": [2, "never"],
|
||||||
|
"type-case": [2, "always", "lower-case"],
|
||||||
|
"type-empty": [2, "never"],
|
||||||
|
"type-enum": [
|
||||||
|
2,
|
||||||
|
"always",
|
||||||
|
[
|
||||||
|
"build",
|
||||||
|
"chore",
|
||||||
|
"ci",
|
||||||
|
"docs",
|
||||||
|
"feat",
|
||||||
|
"fix",
|
||||||
|
"perf",
|
||||||
|
"refactor",
|
||||||
|
"revert",
|
||||||
|
"style",
|
||||||
|
"test",
|
||||||
|
"deprecate", // deprecation decision
|
||||||
|
],
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
const { defineConfig } = require("cypress");
|
import { defineConfig } from "cypress";
|
||||||
|
|
||||||
module.exports = defineConfig({
|
export default defineConfig({
|
||||||
projectId: "vandxn",
|
projectId: "vandxn",
|
||||||
adminPassword: "admin",
|
adminPassword: "admin",
|
||||||
testUser: "frappe@example.com",
|
testUser: "frappe@example.com",
|
||||||
@@ -13,6 +13,6 @@ module.exports = defineConfig({
|
|||||||
openMode: 0,
|
openMode: 0,
|
||||||
},
|
},
|
||||||
e2e: {
|
e2e: {
|
||||||
baseUrl: "http://test_site_ui:8000",
|
baseUrl: "http://pertest:8000",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
168
cypress/e2e/batch_creation.cy.js
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
describe("Batch Creation", () => {
|
||||||
|
it("creates a new batch", () => {
|
||||||
|
cy.login();
|
||||||
|
cy.wait(500);
|
||||||
|
cy.visit("/lms/batches");
|
||||||
|
cy.closeOnboardingModal();
|
||||||
|
|
||||||
|
// Open Settings
|
||||||
|
cy.get("span").contains("Learning").click();
|
||||||
|
cy.get("span").contains("Settings").click();
|
||||||
|
|
||||||
|
// Add a new member
|
||||||
|
cy.get("[data-dismissable-layer]")
|
||||||
|
.find("span")
|
||||||
|
.contains(/^Members$/)
|
||||||
|
.click();
|
||||||
|
cy.get("[data-dismissable-layer]")
|
||||||
|
.find("button")
|
||||||
|
.contains("New")
|
||||||
|
.click();
|
||||||
|
|
||||||
|
const dateNow = Date.now();
|
||||||
|
const randomEmail = `testuser_${dateNow}@example.com`;
|
||||||
|
const randomName = `Test User ${dateNow}`;
|
||||||
|
|
||||||
|
cy.get("input[placeholder='jane@doe.com']").type(randomEmail);
|
||||||
|
cy.get("input[placeholder='Jane']").type(randomName);
|
||||||
|
cy.get("button").contains("Add").click();
|
||||||
|
|
||||||
|
// Add evaluator
|
||||||
|
cy.get("[data-dismissable-layer]")
|
||||||
|
.find("span")
|
||||||
|
.contains(/^Evaluators$/)
|
||||||
|
.click();
|
||||||
|
|
||||||
|
cy.get("[data-dismissable-layer]")
|
||||||
|
.find("button")
|
||||||
|
.contains("New")
|
||||||
|
.click();
|
||||||
|
const randomEvaluator = `evaluator${dateNow}@example.com`;
|
||||||
|
|
||||||
|
cy.get("input[placeholder='jane@doe.com']").type(randomEvaluator);
|
||||||
|
cy.get("button").contains("Add").click();
|
||||||
|
cy.get("div").contains(randomEvaluator).should("be.visible").click();
|
||||||
|
|
||||||
|
cy.visit("/lms/batches");
|
||||||
|
cy.closeOnboardingModal();
|
||||||
|
|
||||||
|
// Create a batch
|
||||||
|
cy.get("button").contains("Create").click();
|
||||||
|
cy.wait(500);
|
||||||
|
cy.url().should("include", "/batches/new/edit");
|
||||||
|
cy.get("label").contains("Title").type("Test Batch");
|
||||||
|
|
||||||
|
cy.get("label").contains("Start Date").type("2030-10-01");
|
||||||
|
cy.get("label").contains("End Date").type("2030-10-31");
|
||||||
|
cy.get("label").contains("Start Time").type("10:00");
|
||||||
|
cy.get("label").contains("End Time").type("11:00");
|
||||||
|
cy.get("label").contains("Timezone").type("IST");
|
||||||
|
cy.get("label").contains("Seat Count").type("10");
|
||||||
|
cy.get("label").contains("Published").click();
|
||||||
|
|
||||||
|
cy.get("label")
|
||||||
|
.contains("Short Description")
|
||||||
|
.type("Test Batch Short Description to test the UI");
|
||||||
|
cy.get("div[contenteditable=true").invoke(
|
||||||
|
"text",
|
||||||
|
"Test Batch Description. I need a very big description to test the UI. This is a very big description. It contains more than once sentence. Its meant to be this long as this is a UI test. Its unbearably long and I'm not sure why I'm typing this much. I'm just going to keep typing until I feel like its long enough. I think its long enough now. I'm going to stop typing now."
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Instructor */
|
||||||
|
cy.get("label")
|
||||||
|
.contains("Instructors")
|
||||||
|
.parent()
|
||||||
|
.within(() => {
|
||||||
|
cy.get("input").click().type("evaluator");
|
||||||
|
cy.get("input")
|
||||||
|
.invoke("attr", "aria-controls")
|
||||||
|
.as("instructor_list_id");
|
||||||
|
});
|
||||||
|
cy.get("@instructor_list_id").then((instructor_list_id) => {
|
||||||
|
cy.get(`[id^=${instructor_list_id}`)
|
||||||
|
.should("be.visible")
|
||||||
|
.within(() => {
|
||||||
|
cy.get("[id^=headlessui-combobox-option-").first().click();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
cy.button("Save").click();
|
||||||
|
cy.wait(1000);
|
||||||
|
let batchName;
|
||||||
|
cy.url().then((url) => {
|
||||||
|
console.log(url);
|
||||||
|
batchName = url.split("/").pop();
|
||||||
|
cy.wrap(batchName).as("batchName");
|
||||||
|
});
|
||||||
|
cy.wait(500);
|
||||||
|
|
||||||
|
// View Batch
|
||||||
|
cy.wait(1000);
|
||||||
|
cy.visit("/lms/batches");
|
||||||
|
cy.closeOnboardingModal();
|
||||||
|
|
||||||
|
cy.url().should("include", "/lms/batches");
|
||||||
|
|
||||||
|
cy.get('[id^="headlessui-radiogroup-v-"]')
|
||||||
|
.find("span")
|
||||||
|
.contains("Upcoming")
|
||||||
|
.should("be.visible")
|
||||||
|
.click();
|
||||||
|
|
||||||
|
cy.get("@batchName").then((batchName) => {
|
||||||
|
cy.get(`a[href='/lms/batches/details/${batchName}'`).within(() => {
|
||||||
|
cy.get("div").contains("Test Batch").should("be.visible");
|
||||||
|
cy.get("div")
|
||||||
|
.contains("Test Batch Short Description to test the UI")
|
||||||
|
.should("be.visible");
|
||||||
|
cy.get("span")
|
||||||
|
.contains("01 Oct 2030 - 31 Oct 2030")
|
||||||
|
.should("be.visible");
|
||||||
|
cy.get("span")
|
||||||
|
.contains("10:00 AM - 11:00 AM")
|
||||||
|
.should("be.visible");
|
||||||
|
cy.get("span").contains("IST").should("be.visible");
|
||||||
|
cy.get("a").contains("Evaluator").should("be.visible");
|
||||||
|
cy.get("div")
|
||||||
|
.contains("10")
|
||||||
|
.should("be.visible")
|
||||||
|
.get("span")
|
||||||
|
.contains("Seats Left")
|
||||||
|
.should("be.visible");
|
||||||
|
});
|
||||||
|
cy.get(`a[href='/lms/batches/details/${batchName}'`).click();
|
||||||
|
});
|
||||||
|
|
||||||
|
cy.get("div").contains("Test Batch").should("be.visible");
|
||||||
|
cy.get("div")
|
||||||
|
.contains("Test Batch Short Description to test the UI")
|
||||||
|
.should("be.visible");
|
||||||
|
cy.get("a").contains("Evaluator").should("be.visible");
|
||||||
|
cy.get("span:visible")
|
||||||
|
.contains("01 Oct 2030 - 31 Oct 2030")
|
||||||
|
.should("be.visible");
|
||||||
|
cy.get("span:visible")
|
||||||
|
.contains("10:00 AM - 11:00 AM")
|
||||||
|
.should("be.visible");
|
||||||
|
cy.get("span:visible").contains("IST").should("be.visible");
|
||||||
|
cy.contains("div:visible", "10 Seats Left").should("be.visible");
|
||||||
|
|
||||||
|
cy.get("p")
|
||||||
|
.contains(
|
||||||
|
"Test Batch Description. I need a very big description to test the UI. This is a very big description. It contains more than once sentence. Its meant to be this long as this is a UI test. Its unbearably long and I'm not sure why I'm typing this much. I'm just going to keep typing until I feel like its long enough. I think its long enough now. I'm going to stop typing now."
|
||||||
|
)
|
||||||
|
.should("be.visible");
|
||||||
|
cy.get("button:visible").contains("Manage Batch").click();
|
||||||
|
|
||||||
|
/* Add student to batch */
|
||||||
|
cy.get("button").contains("Add").click();
|
||||||
|
cy.get('div[role="dialog"]').first().find("button").eq(1).click();
|
||||||
|
cy.get("input[id^='headlessui-combobox-input-v-']").type(randomEmail);
|
||||||
|
cy.get("div").contains(randomEmail).click();
|
||||||
|
cy.get("button").contains("Submit").click();
|
||||||
|
|
||||||
|
// Verify Seat Count
|
||||||
|
cy.get("span").contains("Details").click();
|
||||||
|
cy.contains("div:visible", "9 Seats Left").should("be.visible");
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -1,12 +1,15 @@
|
|||||||
describe("Course Creation", () => {
|
describe("Course Creation", () => {
|
||||||
it("creates a new course", () => {
|
it("creates a new course", () => {
|
||||||
cy.login();
|
cy.login();
|
||||||
cy.wait(1000);
|
cy.wait(500);
|
||||||
cy.visit("/lms/courses");
|
cy.visit("/lms/courses");
|
||||||
|
|
||||||
|
// Close onboarding modal
|
||||||
|
cy.closeOnboardingModal();
|
||||||
|
|
||||||
// Create a course
|
// Create a course
|
||||||
cy.get("a").contains("New").click();
|
cy.get("button").contains("Create").click();
|
||||||
cy.wait(1000);
|
cy.wait(500);
|
||||||
cy.url().should("include", "/courses/new/edit");
|
cy.url().should("include", "/courses/new/edit");
|
||||||
|
|
||||||
cy.get("label").contains("Title").type("Test Course");
|
cy.get("label").contains("Title").type("Test Course");
|
||||||
@@ -19,7 +22,11 @@ describe("Course Creation", () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
cy.fixture("profile.png", "base64").then((fileContent) => {
|
cy.fixture("profile.png", "base64").then((fileContent) => {
|
||||||
cy.get('input[type="file"]').attachFile({
|
cy.get("div")
|
||||||
|
.contains("Course Image")
|
||||||
|
.siblings("div")
|
||||||
|
.children('input[type="file"]')
|
||||||
|
.attachFile({
|
||||||
fileContent,
|
fileContent,
|
||||||
fileName: "profile.png",
|
fileName: "profile.png",
|
||||||
mimeType: "image/png",
|
mimeType: "image/png",
|
||||||
@@ -69,11 +76,11 @@ describe("Course Creation", () => {
|
|||||||
cy.button("Add Chapter").click();
|
cy.button("Add Chapter").click();
|
||||||
|
|
||||||
cy.wait(1000);
|
cy.wait(1000);
|
||||||
cy.get("[id^=headlessui-dialog-panel-")
|
cy.get("[data-dismissable-layer]")
|
||||||
.should("be.visible")
|
.should("be.visible")
|
||||||
.within(() => {
|
.within(() => {
|
||||||
cy.get("label").contains("Title").type("Test Chapter");
|
cy.get("label").contains("Title").type("Test Chapter");
|
||||||
cy.button("Add Chapter").click();
|
cy.button("Create").click();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Add Lesson
|
// Add Lesson
|
||||||
@@ -84,23 +91,23 @@ describe("Course Creation", () => {
|
|||||||
cy.wait(1000);
|
cy.wait(1000);
|
||||||
|
|
||||||
cy.get("label").contains("Title").type("Test Lesson");
|
cy.get("label").contains("Title").type("Test Lesson");
|
||||||
|
|
||||||
cy.get("#content .ce-block").type(
|
cy.get("#content .ce-block").type(
|
||||||
"This is an extremely big paragraph that is meant to test the UI. This is a very long paragraph. It contains more than once sentence. Its meant to be this long as this is a UI test. Its unbearably long and I'm not sure why I'm typing this much. I'm just going to keep typing until I feel like its long enough. I think its long enough now. I'm going to stop typing now."
|
"{enter}This is an extremely big paragraph that is meant to test the UI. This is a very long paragraph. It contains more than once sentence. Its meant to be this long as this is a UI test. Its unbearably long and I'm not sure why I'm typing this much. I'm just going to keep typing until I feel like its long enough. I think its long enough now. I'm going to stop typing now."
|
||||||
);
|
);
|
||||||
cy.button("Save").click();
|
cy.button("Save").click();
|
||||||
|
|
||||||
// View Course
|
// View Course
|
||||||
cy.wait(1000);
|
cy.wait(1000);
|
||||||
cy.visit("/lms");
|
cy.visit("/lms/courses");
|
||||||
cy.wait(500);
|
cy.closeOnboardingModal();
|
||||||
|
|
||||||
cy.url().should("include", "/lms/courses");
|
cy.url().should("include", "/lms/courses");
|
||||||
cy.get(".grid a:first").within(() => {
|
cy.get(".grid a:first").within(() => {
|
||||||
cy.get("div").contains("Test Course");
|
cy.get("div").contains("Test Course");
|
||||||
cy.get("div").contains(
|
cy.get("div").contains(
|
||||||
"Test Course Short Introduction to test the UI"
|
"Test Course Short Introduction to test the UI"
|
||||||
);
|
);
|
||||||
cy.get(".course-image")
|
cy.get(".bg-cover")
|
||||||
.invoke("css", "background-image")
|
.invoke("css", "background-image")
|
||||||
.should("include", "/files/profile");
|
.should("include", "/files/profile");
|
||||||
});
|
});
|
||||||
@@ -133,9 +140,10 @@ describe("Course Creation", () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Add Discussion
|
// Add Discussion
|
||||||
|
cy.get("span").contains("Community").click();
|
||||||
cy.button("New Question").click();
|
cy.button("New Question").click();
|
||||||
cy.wait(500);
|
cy.wait(500);
|
||||||
cy.get("[id^=headlessui-dialog-panel-").within(() => {
|
cy.get("[data-dismissable-layer]").within(() => {
|
||||||
cy.get("label").contains("Title").type("Test Discussion");
|
cy.get("label").contains("Title").type("Test Discussion");
|
||||||
cy.get("div[contenteditable=true]").invoke(
|
cy.get("div[contenteditable=true]").invoke(
|
||||||
"text",
|
"text",
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
|
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
|
||||||
|
|
||||||
import "cypress-file-upload";
|
import "cypress-file-upload";
|
||||||
|
import "cypress-real-events";
|
||||||
|
|
||||||
Cypress.Commands.add("login", (email, password) => {
|
Cypress.Commands.add("login", (email, password) => {
|
||||||
if (!email) {
|
if (!email) {
|
||||||
@@ -37,6 +38,9 @@ Cypress.Commands.add("login", (email, password) => {
|
|||||||
url: "/api/method/login",
|
url: "/api/method/login",
|
||||||
method: "POST",
|
method: "POST",
|
||||||
body: { usr: email, pwd: password },
|
body: { usr: email, pwd: password },
|
||||||
|
timeout: 60000,
|
||||||
|
retryOnStatusCodeFailure: true,
|
||||||
|
retryOnNetworkFailure: true,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -65,3 +69,18 @@ Cypress.Commands.add("paste", { prevSubject: true }, (subject, text) => {
|
|||||||
element.dispatchEvent(event);
|
element.dispatchEvent(event);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Cypress.Commands.add("closeOnboardingModal", () => {
|
||||||
|
cy.wait(500);
|
||||||
|
cy.get("body").then(($body) => {
|
||||||
|
// Check if any element with class including 'z-50' exists
|
||||||
|
if ($body.find('[class*="z-50"]').length > 0) {
|
||||||
|
cy.get('[class*="z-50"]')
|
||||||
|
.find('button:has(svg[class*="feather-x"])')
|
||||||
|
.realClick();
|
||||||
|
cy.wait(1000);
|
||||||
|
} else {
|
||||||
|
cy.log("Onboarding modal not found, skipping close.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ version: "3.7"
|
|||||||
name: lms
|
name: lms
|
||||||
services:
|
services:
|
||||||
mariadb:
|
mariadb:
|
||||||
image: mariadb:10.6
|
image: mariadb:10.8
|
||||||
command:
|
command:
|
||||||
- --character-set-server=utf8mb4
|
- --character-set-server=utf8mb4
|
||||||
- --collation-server=utf8mb4_unicode_ci
|
- --collation-server=utf8mb4_unicode_ci
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ cd frappe-bench
|
|||||||
|
|
||||||
# Use containers instead of localhost
|
# Use containers instead of localhost
|
||||||
bench set-mariadb-host mariadb
|
bench set-mariadb-host mariadb
|
||||||
bench set-redis-cache-host redis:6379
|
bench set-redis-cache-host redis://redis:6379
|
||||||
bench set-redis-queue-host redis:6379
|
bench set-redis-queue-host redis://redis:6379
|
||||||
bench set-redis-socketio-host redis:6379
|
bench set-redis-socketio-host redis://redis:6379
|
||||||
|
|
||||||
# Remove redis, watch from Procfile
|
# Remove redis, watch from Procfile
|
||||||
sed -i '/redis/d' ./Procfile
|
sed -i '/redis/d' ./Procfile
|
||||||
|
|||||||
1
frontend/.gitignore
vendored
@@ -2,4 +2,5 @@ node_modules
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
dist
|
dist
|
||||||
dist-ssr
|
dist-ssr
|
||||||
|
dev-dist
|
||||||
*.local
|
*.local
|
||||||
10
frontend/auto-imports.d.ts
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
/* prettier-ignore */
|
||||||
|
// @ts-nocheck
|
||||||
|
// noinspection JSUnusedGlobalSymbols
|
||||||
|
// Generated by unplugin-auto-import
|
||||||
|
// biome-ignore lint: disable
|
||||||
|
export {}
|
||||||
|
declare global {
|
||||||
|
|
||||||
|
}
|
||||||
124
frontend/components.d.ts
vendored
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
// @ts-nocheck
|
||||||
|
// Generated by unplugin-vue-components
|
||||||
|
// Read more: https://github.com/vuejs/core/pull/3399
|
||||||
|
// biome-ignore lint: disable
|
||||||
|
export {}
|
||||||
|
|
||||||
|
/* prettier-ignore */
|
||||||
|
declare module 'vue' {
|
||||||
|
export interface GlobalComponents {
|
||||||
|
Annoucements: typeof import('./src/components/Annoucements.vue')['default']
|
||||||
|
AnnouncementModal: typeof import('./src/components/Modals/AnnouncementModal.vue')['default']
|
||||||
|
AppHeader: typeof import('./src/components/AppHeader.vue')['default']
|
||||||
|
Apps: typeof import('./src/components/Apps.vue')['default']
|
||||||
|
AppSidebar: typeof import('./src/components/AppSidebar.vue')['default']
|
||||||
|
AssessmentModal: typeof import('./src/components/Modals/AssessmentModal.vue')['default']
|
||||||
|
AssessmentPlugin: typeof import('./src/components/AssessmentPlugin.vue')['default']
|
||||||
|
Assessments: typeof import('./src/components/Assessments.vue')['default']
|
||||||
|
Assignment: typeof import('./src/components/Assignment.vue')['default']
|
||||||
|
AssignmentForm: typeof import('./src/components/Modals/AssignmentForm.vue')['default']
|
||||||
|
AudioBlock: typeof import('./src/components/AudioBlock.vue')['default']
|
||||||
|
Autocomplete: typeof import('./src/components/Controls/Autocomplete.vue')['default']
|
||||||
|
BadgeAssignmentForm: typeof import('./src/components/Settings/BadgeAssignmentForm.vue')['default']
|
||||||
|
BadgeAssignments: typeof import('./src/components/Settings/BadgeAssignments.vue')['default']
|
||||||
|
BadgeForm: typeof import('./src/components/Settings/BadgeForm.vue')['default']
|
||||||
|
Badges: typeof import('./src/components/Settings/Badges.vue')['default']
|
||||||
|
BatchCard: typeof import('./src/components/BatchCard.vue')['default']
|
||||||
|
BatchCourseModal: typeof import('./src/components/Modals/BatchCourseModal.vue')['default']
|
||||||
|
BatchCourses: typeof import('./src/components/BatchCourses.vue')['default']
|
||||||
|
BatchDashboard: typeof import('./src/components/BatchDashboard.vue')['default']
|
||||||
|
BatchFeedback: typeof import('./src/components/BatchFeedback.vue')['default']
|
||||||
|
BatchOverlay: typeof import('./src/components/BatchOverlay.vue')['default']
|
||||||
|
BatchStudentProgress: typeof import('./src/components/Modals/BatchStudentProgress.vue')['default']
|
||||||
|
BatchStudents: typeof import('./src/components/BatchStudents.vue')['default']
|
||||||
|
BrandSettings: typeof import('./src/components/Settings/BrandSettings.vue')['default']
|
||||||
|
BulkCertificates: typeof import('./src/components/Modals/BulkCertificates.vue')['default']
|
||||||
|
Categories: typeof import('./src/components/Settings/Categories.vue')['default']
|
||||||
|
CertificationLinks: typeof import('./src/components/CertificationLinks.vue')['default']
|
||||||
|
ChapterModal: typeof import('./src/components/Modals/ChapterModal.vue')['default']
|
||||||
|
ChildTable: typeof import('./src/components/Controls/ChildTable.vue')['default']
|
||||||
|
Code: typeof import('./src/components/Controls/Code.vue')['default']
|
||||||
|
CodeEditor: typeof import('./src/components/Controls/CodeEditor.vue')['default']
|
||||||
|
CollapseSidebar: typeof import('./src/components/Icons/CollapseSidebar.vue')['default']
|
||||||
|
ColorSwatches: typeof import('./src/components/Controls/ColorSwatches.vue')['default']
|
||||||
|
CourseCard: typeof import('./src/components/CourseCard.vue')['default']
|
||||||
|
CourseCardOverlay: typeof import('./src/components/CourseCardOverlay.vue')['default']
|
||||||
|
CourseInstructors: typeof import('./src/components/CourseInstructors.vue')['default']
|
||||||
|
CourseOutline: typeof import('./src/components/CourseOutline.vue')['default']
|
||||||
|
CourseProgressSummary: typeof import('./src/components/Modals/CourseProgressSummary.vue')['default']
|
||||||
|
CourseReviews: typeof import('./src/components/CourseReviews.vue')['default']
|
||||||
|
CreateOutline: typeof import('./src/components/CreateOutline.vue')['default']
|
||||||
|
DateRange: typeof import('./src/components/Common/DateRange.vue')['default']
|
||||||
|
DesktopLayout: typeof import('./src/components/DesktopLayout.vue')['default']
|
||||||
|
DiscussionModal: typeof import('./src/components/Modals/DiscussionModal.vue')['default']
|
||||||
|
DiscussionReplies: typeof import('./src/components/DiscussionReplies.vue')['default']
|
||||||
|
Discussions: typeof import('./src/components/Discussions.vue')['default']
|
||||||
|
EditCoverImage: typeof import('./src/components/Modals/EditCoverImage.vue')['default']
|
||||||
|
EditProfile: typeof import('./src/components/Modals/EditProfile.vue')['default']
|
||||||
|
EmailTemplateModal: typeof import('./src/components/Modals/EmailTemplateModal.vue')['default']
|
||||||
|
EmailTemplates: typeof import('./src/components/Settings/EmailTemplates.vue')['default']
|
||||||
|
EmptyState: typeof import('./src/components/EmptyState.vue')['default']
|
||||||
|
EvaluationModal: typeof import('./src/components/Modals/EvaluationModal.vue')['default']
|
||||||
|
Evaluators: typeof import('./src/components/Settings/Evaluators.vue')['default']
|
||||||
|
Event: typeof import('./src/components/Modals/Event.vue')['default']
|
||||||
|
ExplanationVideos: typeof import('./src/components/Modals/ExplanationVideos.vue')['default']
|
||||||
|
FeedbackModal: typeof import('./src/components/Modals/FeedbackModal.vue')['default']
|
||||||
|
FrappeCloudIcon: typeof import('./src/components/Icons/FrappeCloudIcon.vue')['default']
|
||||||
|
IconPicker: typeof import('./src/components/Controls/IconPicker.vue')['default']
|
||||||
|
IndicatorIcon: typeof import('./src/components/Icons/IndicatorIcon.vue')['default']
|
||||||
|
InlineLessonMenu: typeof import('./src/components/Notes/InlineLessonMenu.vue')['default']
|
||||||
|
InstallPrompt: typeof import('./src/components/InstallPrompt.vue')['default']
|
||||||
|
InviteIcon: typeof import('./src/components/Icons/InviteIcon.vue')['default']
|
||||||
|
JobApplicationModal: typeof import('./src/components/Modals/JobApplicationModal.vue')['default']
|
||||||
|
JobCard: typeof import('./src/components/JobCard.vue')['default']
|
||||||
|
LayoutHeader: typeof import('./src/components/LayoutHeader.vue')['default']
|
||||||
|
LessonContent: typeof import('./src/components/LessonContent.vue')['default']
|
||||||
|
LessonHelp: typeof import('./src/components/LessonHelp.vue')['default']
|
||||||
|
Link: typeof import('./src/components/Controls/Link.vue')['default']
|
||||||
|
LiveClass: typeof import('./src/components/LiveClass.vue')['default']
|
||||||
|
LiveClassAttendance: typeof import('./src/components/Modals/LiveClassAttendance.vue')['default']
|
||||||
|
LiveClassModal: typeof import('./src/components/Modals/LiveClassModal.vue')['default']
|
||||||
|
LMSLogo: typeof import('./src/components/Icons/LMSLogo.vue')['default']
|
||||||
|
Members: typeof import('./src/components/Settings/Members.vue')['default']
|
||||||
|
MobileLayout: typeof import('./src/components/MobileLayout.vue')['default']
|
||||||
|
MultiSelect: typeof import('./src/components/Controls/MultiSelect.vue')['default']
|
||||||
|
NoPermission: typeof import('./src/components/NoPermission.vue')['default']
|
||||||
|
NoSidebarLayout: typeof import('./src/components/NoSidebarLayout.vue')['default']
|
||||||
|
Notes: typeof import('./src/components/Notes/Notes.vue')['default']
|
||||||
|
NotPermitted: typeof import('./src/components/NotPermitted.vue')['default']
|
||||||
|
PageModal: typeof import('./src/components/Modals/PageModal.vue')['default']
|
||||||
|
PaymentGatewayDetails: typeof import('./src/components/Settings/PaymentGatewayDetails.vue')['default']
|
||||||
|
PaymentGateways: typeof import('./src/components/Settings/PaymentGateways.vue')['default']
|
||||||
|
Play: typeof import('./src/components/Icons/Play.vue')['default']
|
||||||
|
ProgressBar: typeof import('./src/components/ProgressBar.vue')['default']
|
||||||
|
Question: typeof import('./src/components/Modals/Question.vue')['default']
|
||||||
|
Quiz: typeof import('./src/components/Quiz.vue')['default']
|
||||||
|
QuizBlock: typeof import('./src/components/QuizBlock.vue')['default']
|
||||||
|
QuizInVideo: typeof import('./src/components/Modals/QuizInVideo.vue')['default']
|
||||||
|
Rating: typeof import('./src/components/Controls/Rating.vue')['default']
|
||||||
|
RelatedCourses: typeof import('./src/components/RelatedCourses.vue')['default']
|
||||||
|
ReviewModal: typeof import('./src/components/Modals/ReviewModal.vue')['default']
|
||||||
|
RouterLink: typeof import('vue-router')['RouterLink']
|
||||||
|
RouterView: typeof import('vue-router')['RouterView']
|
||||||
|
SettingDetails: typeof import('./src/components/Settings/SettingDetails.vue')['default']
|
||||||
|
SettingFields: typeof import('./src/components/Settings/SettingFields.vue')['default']
|
||||||
|
Settings: typeof import('./src/components/Settings/Settings.vue')['default']
|
||||||
|
SidebarLink: typeof import('./src/components/SidebarLink.vue')['default']
|
||||||
|
StudentHeatmap: typeof import('./src/components/StudentHeatmap.vue')['default']
|
||||||
|
StudentModal: typeof import('./src/components/Modals/StudentModal.vue')['default']
|
||||||
|
Tags: typeof import('./src/components/Tags.vue')['default']
|
||||||
|
TransactionDetails: typeof import('./src/components/Settings/TransactionDetails.vue')['default']
|
||||||
|
Transactions: typeof import('./src/components/Settings/Transactions.vue')['default']
|
||||||
|
UnsplashImageBrowser: typeof import('./src/components/UnsplashImageBrowser.vue')['default']
|
||||||
|
UpcomingEvaluations: typeof import('./src/components/UpcomingEvaluations.vue')['default']
|
||||||
|
Uploader: typeof import('./src/components/Controls/Uploader.vue')['default']
|
||||||
|
UploadPlugin: typeof import('./src/components/UploadPlugin.vue')['default']
|
||||||
|
UserAvatar: typeof import('./src/components/UserAvatar.vue')['default']
|
||||||
|
UserDropdown: typeof import('./src/components/UserDropdown.vue')['default']
|
||||||
|
VideoBlock: typeof import('./src/components/VideoBlock.vue')['default']
|
||||||
|
VideoStatistics: typeof import('./src/components/Modals/VideoStatistics.vue')['default']
|
||||||
|
ZoomAccountModal: typeof import('./src/components/Modals/ZoomAccountModal.vue')['default']
|
||||||
|
ZoomSettings: typeof import('./src/components/Settings/ZoomSettings.vue')['default']
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,9 +2,206 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" href="/favicon.png" />
|
<link rel="icon" href="{{ favicon }}" />
|
||||||
|
<link rel="manifest" href="/api/method/lms.lms.api.get_pwa_manifest" />
|
||||||
|
<link rel="apple-touch-icon" href="public/manifest/apple-icon-180.png" />
|
||||||
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="theme-color" content="#FFFFFF" media="(prefers-color-scheme: light)" />
|
||||||
|
<meta name="theme-color" content="#0F0F0F" media="(prefers-color-scheme: dark)" />
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
||||||
|
<meta name="msapplication-navbutton-color" content="#ffffff" />
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2048-2732.jpg"
|
||||||
|
media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2732-2048.jpg"
|
||||||
|
media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1668-2388.jpg"
|
||||||
|
media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2388-1668.jpg"
|
||||||
|
media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1536-2048.jpg"
|
||||||
|
media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2048-1536.jpg"
|
||||||
|
media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1640-2360.jpg"
|
||||||
|
media="(device-width: 820px) and (device-height: 1180px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2360-1640.jpg"
|
||||||
|
media="(device-width: 820px) and (device-height: 1180px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1668-2224.jpg"
|
||||||
|
media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2224-1668.jpg"
|
||||||
|
media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1620-2160.jpg"
|
||||||
|
media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2160-1620.jpg"
|
||||||
|
media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1488-2266.jpg"
|
||||||
|
media="(device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2266-1488.jpg"
|
||||||
|
media="(device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1320-2868.jpg"
|
||||||
|
media="(device-width: 440px) and (device-height: 956px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2868-1320.jpg"
|
||||||
|
media="(device-width: 440px) and (device-height: 956px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1206-2622.jpg"
|
||||||
|
media="(device-width: 402px) and (device-height: 874px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2622-1206.jpg"
|
||||||
|
media="(device-width: 402px) and (device-height: 874px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1290-2796.jpg"
|
||||||
|
media="(device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2796-1290.jpg"
|
||||||
|
media="(device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1179-2556.jpg"
|
||||||
|
media="(device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2556-1179.jpg"
|
||||||
|
media="(device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1170-2532.jpg"
|
||||||
|
media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2532-1170.jpg"
|
||||||
|
media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1284-2778.jpg"
|
||||||
|
media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2778-1284.jpg"
|
||||||
|
media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1125-2436.jpg"
|
||||||
|
media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2436-1125.jpg"
|
||||||
|
media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1242-2688.jpg"
|
||||||
|
media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2688-1242.jpg"
|
||||||
|
media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-828-1792.jpg"
|
||||||
|
media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1792-828.jpg"
|
||||||
|
media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1242-2208.jpg"
|
||||||
|
media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-2208-1242.jpg"
|
||||||
|
media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-750-1334.jpg"
|
||||||
|
media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1334-750.jpg"
|
||||||
|
media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-640-1136.jpg"
|
||||||
|
media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-startup-image"
|
||||||
|
href="public/manifest/apple-splash-1136-640.jpg"
|
||||||
|
media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Frappe Learning</title>
|
<title>{{ title }}</title>
|
||||||
<meta name="title" content="{{ meta.title }}" />
|
<meta name="title" content="{{ meta.title }}" />
|
||||||
<meta name="image" content="{{ meta.image }}" />
|
<meta name="image" content="{{ meta.image }}" />
|
||||||
<meta name="description" content="{{ meta.description }}" />
|
<meta name="description" content="{{ meta.description }}" />
|
||||||
@@ -16,32 +213,17 @@
|
|||||||
<meta name="twitter:image" content="{{ meta.image }}" />
|
<meta name="twitter:image" content="{{ meta.image }}" />
|
||||||
<meta name="twitter:description" content="{{ meta.description }}" />
|
<meta name="twitter:description" content="{{ meta.description }}" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body class="sm:overscroll-y-none no-scrollbar">
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<div id="seo-content">
|
<div id="seo-content">
|
||||||
<h1>{{ meta.title }}</h1>
|
<h1>{{ meta.title }}</h1>
|
||||||
<p>
|
<p>
|
||||||
{{ meta.description }}
|
{{ meta.description }}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
|
||||||
The content here is just for seo purposes. The actual content will be loaded in a few seconds.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Seo checks if a page has more than 300 words. So, here are some more words to make it more than 300 words.
|
|
||||||
Page descriptions are the HTML meta tags that provide a brief summary of a web page.
|
|
||||||
Search engines use meta descriptions to help identify the page's topic - they don't use them to rank the page, but they do use them to determine whether or not to display the page in search results.
|
|
||||||
Meta descriptions are important because they're often the first thing people see when they're deciding which search result to click on.
|
|
||||||
They're also important because they can help improve your click-through rate (CTR) from search results.
|
|
||||||
A good meta description can entice people to click on your page instead of someone else's.
|
|
||||||
</p>
|
|
||||||
<a href="{{ meta.link }}">Know More</a>
|
<a href="{{ meta.link }}">Know More</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="modals"></div>
|
|
||||||
<div id="popovers"></div>
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
window.csrf_token = '{{ csrf_token }}'
|
|
||||||
document.getElementById('seo-content').style.display = 'none';
|
document.getElementById('seo-content').style.display = 'none';
|
||||||
</script>
|
</script>
|
||||||
<script type="module" src="/src/main.js"></script>
|
<script type="module" src="/src/main.js"></script>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"name": "frappe-ui-frontend",
|
"name": "frappe-ui-frontend",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"serve": "vite preview",
|
"serve": "vite preview",
|
||||||
@@ -9,6 +10,10 @@
|
|||||||
"copy-html-entry": "cp ../lms/public/frontend/index.html ../lms/www/lms.html"
|
"copy-html-entry": "cp ../lms/public/frontend/index.html ../lms/www/lms.html"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@codemirror/lang-html": "^6.4.9",
|
||||||
|
"@codemirror/lang-javascript": "^6.2.4",
|
||||||
|
"@codemirror/lang-json": "^6.0.1",
|
||||||
|
"@codemirror/lang-python": "^6.2.1",
|
||||||
"@editorjs/checklist": "^1.6.0",
|
"@editorjs/checklist": "^1.6.0",
|
||||||
"@editorjs/code": "^2.9.0",
|
"@editorjs/code": "^2.9.0",
|
||||||
"@editorjs/editorjs": "^2.29.0",
|
"@editorjs/editorjs": "^2.29.0",
|
||||||
@@ -18,26 +23,38 @@
|
|||||||
"@editorjs/nested-list": "^1.4.2",
|
"@editorjs/nested-list": "^1.4.2",
|
||||||
"@editorjs/paragraph": "^2.11.3",
|
"@editorjs/paragraph": "^2.11.3",
|
||||||
"@editorjs/simple-image": "^1.6.0",
|
"@editorjs/simple-image": "^1.6.0",
|
||||||
|
"@editorjs/table": "^2.4.2",
|
||||||
|
"@vueuse/router": "^12.7.0",
|
||||||
|
"ace-builds": "^1.36.2",
|
||||||
|
"apexcharts": "^4.3.0",
|
||||||
"chart.js": "^4.4.1",
|
"chart.js": "^4.4.1",
|
||||||
"codemirror-editor-vue3": "^2.8.0",
|
"codemirror": "^6.0.1",
|
||||||
"dayjs": "^1.11.6",
|
"dayjs": "^1.11.6",
|
||||||
|
"dompurify": "^3.2.6",
|
||||||
"feather-icons": "^4.28.0",
|
"feather-icons": "^4.28.0",
|
||||||
"frappe-ui": "^0.1.69",
|
"frappe-ui": "^0.1.200",
|
||||||
|
"highlight.js": "^11.11.1",
|
||||||
"lucide-vue-next": "^0.383.0",
|
"lucide-vue-next": "^0.383.0",
|
||||||
"markdown-it": "^14.0.0",
|
"markdown-it": "^14.0.0",
|
||||||
"pinia": "^2.0.33",
|
"pinia": "^2.0.33",
|
||||||
|
"plyr": "^3.7.8",
|
||||||
"socket.io-client": "^4.7.2",
|
"socket.io-client": "^4.7.2",
|
||||||
"tailwindcss": "^3.3.3",
|
"tailwindcss": "3.4.15",
|
||||||
|
"thememirror": "^2.0.1",
|
||||||
|
"typescript": "^5.7.2",
|
||||||
"vue": "^3.4.23",
|
"vue": "^3.4.23",
|
||||||
"vue-chartjs": "^5.3.0",
|
"vue-chartjs": "^5.3.0",
|
||||||
|
"vue-codemirror": "^6.1.1",
|
||||||
"vue-draggable-next": "^2.2.1",
|
"vue-draggable-next": "^2.2.1",
|
||||||
"vue-router": "^4.0.12",
|
"vue-router": "^4.0.12",
|
||||||
|
"vue3-apexcharts": "^1.8.0",
|
||||||
"vuedraggable": "4.1.0"
|
"vuedraggable": "4.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vitejs/plugin-vue": "^5.0.3",
|
"@vitejs/plugin-vue": "^5.0.3",
|
||||||
"autoprefixer": "^10.4.2",
|
"autoprefixer": "^10.4.2",
|
||||||
"postcss": "^8.4.5",
|
"postcss": "^8.4.5",
|
||||||
"vite": "^5.0.11"
|
"vite": "^5.0.11",
|
||||||
|
"vite-plugin-pwa": "^1.0.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
module.exports = {
|
export default {
|
||||||
plugins: {
|
plugins: {
|
||||||
tailwindcss: {},
|
tailwindcss: {},
|
||||||
autoprefixer: {},
|
autoprefixer: {},
|
||||||
|
|||||||
BIN
frontend/public/Remove.mp4
Normal file
4
frontend/public/learning.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg width="80" height="79" viewBox="0 0 80 79" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M57.1285 0.580383H22.8514C10.2309 0.580383 0 10.5649 0 22.8815V56.3332C0 68.6497 10.2309 78.6343 22.8514 78.6343H57.1285C69.749 78.6343 79.9799 68.6497 79.9799 56.3332V22.8815C79.9799 10.5649 69.749 0.580383 57.1285 0.580383Z" fill="#0E7159"/>
|
||||||
|
<path d="M62.8434 23.6906L60.7869 23.1052C53.6744 21.0702 45.9048 22.4641 39.992 26.8128C35.8502 23.7742 30.7943 22.1854 25.7099 22.2133H17.1406V27.8163H25.7099C29.6232 27.8163 33.508 29.015 36.6787 31.3845L39.992 33.8377L43.3056 31.3845C47.2475 28.4575 52.3032 27.2588 57.1306 28.0393V50.647C51.1035 49.9223 44.9051 51.4834 39.992 55.0795C35.8502 52.0688 30.8515 50.4798 25.7671 50.4798C24.7959 50.4798 23.8247 50.5355 22.8535 50.647V35.0642H17.1406V57.0588H62.8434V23.7185V23.6906Z" fill="white"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 856 B |
BIN
frontend/public/manifest/apple-icon-180.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
frontend/public/manifest/apple-splash-1125-2436.jpg
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
frontend/public/manifest/apple-splash-1136-640.jpg
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
frontend/public/manifest/apple-splash-1170-2532.jpg
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
frontend/public/manifest/apple-splash-1179-2556.jpg
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
frontend/public/manifest/apple-splash-1206-2622.jpg
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
frontend/public/manifest/apple-splash-1242-2208.jpg
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
frontend/public/manifest/apple-splash-1242-2688.jpg
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
frontend/public/manifest/apple-splash-1284-2778.jpg
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
frontend/public/manifest/apple-splash-1290-2796.jpg
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
frontend/public/manifest/apple-splash-1320-2868.jpg
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
frontend/public/manifest/apple-splash-1334-750.jpg
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
frontend/public/manifest/apple-splash-1488-2266.jpg
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
frontend/public/manifest/apple-splash-1536-2048.jpg
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
frontend/public/manifest/apple-splash-1620-2160.jpg
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
frontend/public/manifest/apple-splash-1640-2360.jpg
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
frontend/public/manifest/apple-splash-1668-2224.jpg
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
frontend/public/manifest/apple-splash-1668-2388.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
frontend/public/manifest/apple-splash-1792-828.jpg
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
frontend/public/manifest/apple-splash-2048-1536.jpg
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
frontend/public/manifest/apple-splash-2048-2732.jpg
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
frontend/public/manifest/apple-splash-2160-1620.jpg
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
frontend/public/manifest/apple-splash-2208-1242.jpg
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
frontend/public/manifest/apple-splash-2224-1668.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
frontend/public/manifest/apple-splash-2266-1488.jpg
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
frontend/public/manifest/apple-splash-2360-1640.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
frontend/public/manifest/apple-splash-2388-1668.jpg
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
frontend/public/manifest/apple-splash-2436-1125.jpg
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
frontend/public/manifest/apple-splash-2532-1170.jpg
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
frontend/public/manifest/apple-splash-2556-1179.jpg
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
frontend/public/manifest/apple-splash-2622-1206.jpg
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
frontend/public/manifest/apple-splash-2688-1242.jpg
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
frontend/public/manifest/apple-splash-2732-2048.jpg
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
frontend/public/manifest/apple-splash-2778-1284.jpg
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
frontend/public/manifest/apple-splash-2796-1290.jpg
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
frontend/public/manifest/apple-splash-2868-1320.jpg
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
frontend/public/manifest/apple-splash-640-1136.jpg
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
frontend/public/manifest/apple-splash-750-1334.jpg
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
frontend/public/manifest/apple-splash-828-1792.jpg
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
frontend/public/manifest/manifest-icon-192.maskable.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
frontend/public/manifest/manifest-icon-512.maskable.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
@@ -1,38 +1,56 @@
|
|||||||
<template>
|
<template>
|
||||||
<Layout>
|
<FrappeUIProvider>
|
||||||
|
<Layout class="isolate text-base">
|
||||||
<router-view />
|
<router-view />
|
||||||
</Layout>
|
</Layout>
|
||||||
|
<InstallPrompt v-if="isMobile" />
|
||||||
<Dialogs />
|
<Dialogs />
|
||||||
<Toasts />
|
</FrappeUIProvider>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Toasts } from 'frappe-ui'
|
import { FrappeUIProvider } from 'frappe-ui'
|
||||||
import { Dialogs } from '@/utils/dialogs'
|
import { Dialogs } from '@/utils/dialogs'
|
||||||
import { computed, onMounted, onUnmounted } from 'vue'
|
import { computed, onUnmounted, ref, watch } from 'vue'
|
||||||
import { useScreenSize } from './utils/composables'
|
import { useScreenSize } from './utils/composables'
|
||||||
|
import { usersStore } from '@/stores/user'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
import { posthogSettings } from '@/telemetry'
|
||||||
import DesktopLayout from './components/DesktopLayout.vue'
|
import DesktopLayout from './components/DesktopLayout.vue'
|
||||||
import MobileLayout from './components/MobileLayout.vue'
|
import MobileLayout from './components/MobileLayout.vue'
|
||||||
import { stopSession } from '@/telemetry'
|
import NoSidebarLayout from './components/NoSidebarLayout.vue'
|
||||||
import { init as initTelemetry } from '@/telemetry'
|
import InstallPrompt from './components/InstallPrompt.vue'
|
||||||
import { usersStore } from '@/stores/user'
|
|
||||||
|
|
||||||
const screenSize = useScreenSize()
|
const { isMobile } = useScreenSize()
|
||||||
let { userResource } = usersStore()
|
const router = useRouter()
|
||||||
|
const noSidebar = ref(false)
|
||||||
|
const { userResource } = usersStore()
|
||||||
|
|
||||||
const Layout = computed(() => {
|
router.beforeEach((to, from, next) => {
|
||||||
if (screenSize.width < 640) {
|
if (to.query.fromLesson || to.path === '/persona') {
|
||||||
return MobileLayout
|
noSidebar.value = true
|
||||||
} else {
|
} else {
|
||||||
return DesktopLayout
|
noSidebar.value = false
|
||||||
}
|
}
|
||||||
|
next()
|
||||||
})
|
})
|
||||||
|
|
||||||
onMounted(async () => {
|
const Layout = computed(() => {
|
||||||
if (!userResource.data) return
|
if (noSidebar.value) {
|
||||||
await initTelemetry()
|
return NoSidebarLayout
|
||||||
|
}
|
||||||
|
if (isMobile.value) {
|
||||||
|
return MobileLayout
|
||||||
|
}
|
||||||
|
return DesktopLayout
|
||||||
})
|
})
|
||||||
|
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
stopSession()
|
noSidebar.value = false
|
||||||
|
})
|
||||||
|
|
||||||
|
watch(userResource, () => {
|
||||||
|
if (userResource.data) {
|
||||||
|
posthogSettings.reload()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||