mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-12-16 21:40:23 +01:00
Compare commits
4110 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7e1a07245c | ||
|
|
80821da9d8 | ||
|
|
227d567d48 | ||
|
|
dca1f253e7 | ||
|
|
17931ba3f3 | ||
|
|
49ed247be3 | ||
|
|
04fe8950f0 | ||
|
|
0e20350ca7 | ||
|
|
ea6576c6f3 | ||
|
|
97d256c372 | ||
|
|
c5d9a68b4b | ||
|
|
fc00586f0e | ||
|
|
c7744d7a64 | ||
|
|
9efc341772 | ||
|
|
240932dd80 | ||
|
|
3c7b433e3a | ||
|
|
a121ec716a | ||
|
|
b1257f6291 | ||
|
|
41c5a90914 | ||
|
|
2bd15e155f | ||
|
|
1a9ab9d1d2 | ||
|
|
78ccca4f63 | ||
|
|
f2a692add7 | ||
|
|
c3e4c7dea1 | ||
|
|
2b4da7ebcd | ||
|
|
d311995c16 | ||
|
|
f618a9405e | ||
|
|
e64c1bfec3 | ||
|
|
bab140c396 | ||
|
|
4e0ccbf0c6 | ||
|
|
65dd79c84e | ||
|
|
f65998f4c2 | ||
|
|
2649e6a385 | ||
|
|
f7fe0aa680 | ||
|
|
74aabb9c60 | ||
|
|
db27a30005 | ||
|
|
d0be73a4d4 | ||
|
|
ab2c0cfa9f | ||
|
|
8ee866fc9d | ||
|
|
4c28de659c | ||
|
|
274acc8eec | ||
|
|
643dd74e43 | ||
|
|
99b34d5990 | ||
|
|
025db831f4 | ||
|
|
a5537cb8ae | ||
|
|
43bbc00be8 | ||
|
|
f876ba91b8 | ||
|
|
d304bab4f1 | ||
|
|
c2fb4700de | ||
|
|
2dd2d7a269 | ||
|
|
66abd20647 | ||
|
|
e22e0c7503 | ||
|
|
2ba2ef5320 | ||
|
|
d1079c00bc | ||
|
|
a0fcdfe629 | ||
|
|
10716c37d3 | ||
|
|
7280567d21 | ||
|
|
ed57edde3b | ||
|
|
4f5b3cc934 | ||
|
|
933aa5dfcb | ||
|
|
efaa1e62c1 | ||
|
|
672bde7066 | ||
|
|
62d487e0a8 | ||
|
|
f714c713f3 | ||
|
|
b56df975e0 | ||
|
|
883978007d | ||
|
|
678f0f436e | ||
|
|
1f7fd51b40 | ||
|
|
57f0ee8a38 | ||
|
|
7a25f0bb36 | ||
|
|
14db999684 | ||
|
|
f697b5a2b8 | ||
|
|
3b7d222ec3 | ||
|
|
f89afd92b9 | ||
|
|
89225c80ca | ||
|
|
08cf6bc5e6 | ||
|
|
7f6ae6df9f | ||
|
|
b3940cd7cd | ||
|
|
967b486ce1 | ||
|
|
590082709f | ||
|
|
dfe010d97d | ||
|
|
14431f7913 | ||
|
|
8fc818e07c | ||
|
|
7033fa7563 | ||
|
|
38a3ab6365 | ||
|
|
a51b357e67 | ||
|
|
3934f2ec88 | ||
|
|
be16f0dae7 | ||
|
|
d272a87c8a | ||
|
|
8afcf44732 | ||
|
|
2832265677 | ||
|
|
ac9bd0859f | ||
|
|
6f40393b99 | ||
|
|
c4606e7009 | ||
|
|
cbef92bb62 | ||
|
|
c23df60e1b | ||
|
|
aea8d50200 | ||
|
|
d43d363a7a | ||
|
|
ec399d8b3b | ||
|
|
3c96857123 | ||
|
|
5df0ebf895 | ||
|
|
0bc8b20f70 | ||
|
|
436a97129f | ||
|
|
6f064a4f15 | ||
|
|
4f127e2001 | ||
|
|
ab15dba0de | ||
|
|
111898ab0f | ||
|
|
f3d0d70867 | ||
|
|
681d9c95ab | ||
|
|
d112d62a3f | ||
|
|
6f0e749b60 | ||
|
|
1ed9d4a9c9 | ||
|
|
936530dc48 | ||
|
|
849db3b858 | ||
|
|
dea4b78cb9 | ||
|
|
fe739aac71 | ||
|
|
531ad4dec1 | ||
|
|
90269ad9b8 | ||
|
|
f4d5c93b78 | ||
|
|
727ac0d534 | ||
|
|
7f54cb2452 | ||
|
|
b858193753 | ||
|
|
a5410f7ae7 | ||
|
|
b1b2a03747 | ||
|
|
970b259e06 | ||
|
|
3e296a42f7 | ||
|
|
65565e187b | ||
|
|
75baf28530 | ||
|
|
a14ce9d0c6 | ||
|
|
271843d417 | ||
|
|
882589acae | ||
|
|
3ecd523799 | ||
|
|
4da8121827 | ||
|
|
d76ba519d4 | ||
|
|
e0a83728d6 | ||
|
|
63d88957a8 | ||
|
|
c8efeb7d7c | ||
|
|
8fa3baf32d | ||
|
|
4961becd1d | ||
|
|
e5d33a57d9 | ||
|
|
809db61b8a | ||
|
|
48d3e884ea | ||
|
|
af6a40e23c | ||
|
|
4b18403fa6 | ||
|
|
775e6ec8ce | ||
|
|
090ecaffd1 | ||
|
|
75824c0d81 | ||
|
|
bb12ebac48 | ||
|
|
b88df6420d | ||
|
|
5538cb22b0 | ||
|
|
f72fd302dc | ||
|
|
1baf2286c2 | ||
|
|
b049bd466c | ||
|
|
e65896351a | ||
|
|
3552678645 | ||
|
|
dde872d6d5 | ||
|
|
a329fcadaa | ||
|
|
fdfd421e1c | ||
|
|
45195aa59a | ||
|
|
5f7ed289de | ||
|
|
8e3f1e66e9 | ||
|
|
76d60be60a | ||
|
|
320909d5fb | ||
|
|
1d6623dd1c | ||
|
|
ca365118d3 | ||
|
|
35e202a64e | ||
|
|
56da48b222 | ||
|
|
c41a8872d3 | ||
|
|
245bb6e7b0 | ||
|
|
1e9439b9b4 | ||
|
|
f86a0eab64 | ||
|
|
a8ad38816b | ||
|
|
23f39fd13e | ||
|
|
eddf1a6436 | ||
|
|
96ddd024b5 | ||
|
|
6640b4b899 | ||
|
|
7e46d3de5e | ||
|
|
e64ab5fa82 | ||
|
|
66182b881a | ||
|
|
68e250ed02 | ||
|
|
d4fa056569 | ||
|
|
f3cc98b2c0 | ||
|
|
8bb225d8c0 | ||
|
|
f3fcae0711 | ||
|
|
db31072f91 | ||
|
|
eae4fa59e3 | ||
|
|
be2ed6b7d7 | ||
|
|
11a64f3789 | ||
|
|
ee63ecbe3e | ||
|
|
7ac3f82c5e | ||
|
|
7e63d61ef0 | ||
|
|
aada6c3b6e | ||
|
|
be28f7b378 | ||
|
|
054f534108 | ||
|
|
119da68310 | ||
|
|
c41f983df9 | ||
|
|
e7fb82dbe3 | ||
|
|
a7a70accad | ||
|
|
0e13c585d6 | ||
|
|
ce4d0b366f | ||
|
|
f3695cf2da | ||
|
|
cc106d1251 | ||
|
|
df6fdf6f09 | ||
|
|
e23750ac49 | ||
|
|
87fee232bc | ||
|
|
6d48acfd37 | ||
|
|
1bea6e4ee5 | ||
|
|
d84182cb9b | ||
|
|
ca2743eb07 | ||
|
|
39befcb65b | ||
|
|
85312da334 | ||
|
|
c60da18bd6 | ||
|
|
ed51a739ea | ||
|
|
80ef7e5085 | ||
|
|
1996c8ad49 | ||
|
|
807f81bc9f | ||
|
|
64a1eab980 | ||
|
|
ee12b4fd3e | ||
|
|
8ce3e44d7b | ||
|
|
53021d31b0 | ||
|
|
fa8cdce748 | ||
|
|
1d1d677b56 | ||
|
|
a32fd3f6f9 | ||
|
|
8f67252547 | ||
|
|
cd3bb77a7f | ||
|
|
efdb511c2c | ||
|
|
c9551abc5d | ||
|
|
066b1c0d64 | ||
|
|
eac0044dd1 | ||
|
|
32a5334402 | ||
|
|
056b39709f | ||
|
|
65ff72b0e3 | ||
|
|
c7bd27fb3f | ||
|
|
fa7db423c6 | ||
|
|
caa0c45a11 | ||
|
|
f8d57aae09 | ||
|
|
4c4689474f | ||
|
|
614210f08e | ||
|
|
4c9670208b | ||
|
|
d05920ec78 | ||
|
|
68fd997efd | ||
|
|
fa221437dc | ||
|
|
7339cb5d61 | ||
|
|
6f2ea3eafc | ||
|
|
adf6f34e42 | ||
|
|
06632f05e0 | ||
|
|
f9291ced2d | ||
|
|
cf94a71499 | ||
|
|
3ca45fa061 | ||
|
|
2b9b888aee | ||
|
|
4ca7eaf1fc | ||
|
|
ef03af9614 | ||
|
|
2627ed0fcd | ||
|
|
0079964d68 | ||
|
|
5f5906860e | ||
|
|
46c281db3d | ||
|
|
a796940064 | ||
|
|
33bba9b596 | ||
|
|
5bb02d62e7 | ||
|
|
a1e6a3616c | ||
|
|
e97a705f5c | ||
|
|
90f5683cc2 | ||
|
|
dd53fb9b6a | ||
|
|
1000df09ff | ||
|
|
2d48f670c7 | ||
|
|
3c11030929 | ||
|
|
4144abf6e3 | ||
|
|
3a32f6161a | ||
|
|
93b02e8591 | ||
|
|
3ed90cda91 | ||
|
|
21e30cc0c7 | ||
|
|
844923d538 | ||
|
|
2ad715ead3 | ||
|
|
e86d2d72c6 | ||
|
|
a8a38522c1 | ||
|
|
bca2755c3e | ||
|
|
eb0f18c586 | ||
|
|
590604b288 | ||
|
|
1ed5145738 | ||
|
|
1e3577afe5 | ||
|
|
c64da01080 | ||
|
|
ad8239aa31 | ||
|
|
9a75a55500 | ||
|
|
8d3f72b5a1 | ||
|
|
090c4e2aa9 | ||
|
|
da4113e1f1 | ||
|
|
f85678e938 | ||
|
|
1f9bdd840f | ||
|
|
af54d9fa64 | ||
|
|
ae9f675b80 | ||
|
|
bf7de0d051 | ||
|
|
7b453edb2d | ||
|
|
7fb5db76d3 | ||
|
|
016ea8dc32 | ||
|
|
e1ad061fdc | ||
|
|
82fd8d79a0 | ||
|
|
254267e577 | ||
|
|
d431c94ed8 | ||
|
|
9d61a1bae3 | ||
|
|
6cac3c176e | ||
|
|
255115745f | ||
|
|
0a727a4af9 | ||
|
|
f3993aca4d | ||
|
|
6a1fa82b8b | ||
|
|
758a7f109e | ||
|
|
28bad893e5 | ||
|
|
8934ac1a2d | ||
|
|
b4dc2eebe9 | ||
|
|
770bf2bc44 | ||
|
|
87fc70d90d | ||
|
|
7aa785b205 | ||
|
|
ef342b9d40 | ||
|
|
e12beccc09 | ||
|
|
45e9b53f10 | ||
|
|
a5e304cc0a | ||
|
|
6f1a795f0e | ||
|
|
51a7d163be | ||
|
|
5b38c3b9ee | ||
|
|
d95398f808 | ||
|
|
20d1723e84 | ||
|
|
a73588c764 | ||
|
|
c03099ce90 | ||
|
|
bd59134cf0 | ||
|
|
0be414dab9 | ||
|
|
126260a027 | ||
|
|
7c00bce63c | ||
|
|
8aea4ad7fa | ||
|
|
7487a92953 | ||
|
|
ef52d47f41 | ||
|
|
c9f82d26ff | ||
|
|
dc051b9060 | ||
|
|
e7a415246e | ||
|
|
15bf804fa7 | ||
|
|
20a3c1612c | ||
|
|
7c08831aaf | ||
|
|
92db112367 | ||
|
|
f0428f5f1f | ||
|
|
f9897daad1 | ||
|
|
e00f49ae8c | ||
|
|
84a34933fe | ||
|
|
8cb2b9b97a | ||
|
|
9dbe479d11 | ||
|
|
01555cbb5c | ||
|
|
5b8fcbe27e | ||
|
|
c3a4bcb116 | ||
|
|
d027355ae9 | ||
|
|
63dfc38dea | ||
|
|
f9572cc5c7 | ||
|
|
a6c84ac1a8 | ||
|
|
f895ae6ce4 | ||
|
|
35c87a17bb | ||
|
|
889c90673d | ||
|
|
85b96bb2d7 | ||
|
|
04488a9a14 | ||
|
|
549f87132d | ||
|
|
79d5142693 | ||
|
|
5782a382be | ||
|
|
4f7810090a | ||
|
|
cbca9a4faf | ||
|
|
7a823283e4 | ||
|
|
0851102800 | ||
|
|
cac69c3d63 | ||
|
|
a8801feabe | ||
|
|
da665853e4 | ||
|
|
78dea8ea40 | ||
|
|
5ffeb3319b | ||
|
|
aaa2dbe757 | ||
|
|
9e24ccc976 | ||
|
|
2fc6bfaa72 | ||
|
|
3f22027007 | ||
|
|
3c0c3a9649 | ||
|
|
4c9ea62c0d | ||
|
|
f892a6793a | ||
|
|
d832a6f805 | ||
|
|
3c711d72fb | ||
|
|
e5486db1ae | ||
|
|
3ea49a8f90 | ||
|
|
268be5f35c | ||
|
|
71d33c0a79 | ||
|
|
3e60451ce4 | ||
|
|
98b112bb36 | ||
|
|
8496bdcff6 | ||
|
|
8a1f6eb43e | ||
|
|
290e348851 | ||
|
|
ae1ecb490f | ||
|
|
7df7df09dd | ||
|
|
75f19262ef | ||
|
|
0a94cf7c95 | ||
|
|
be83157de2 | ||
|
|
f3fe79ab60 | ||
|
|
bba3df6802 | ||
|
|
df5f3d185a | ||
|
|
d5b5dd6fa5 | ||
|
|
ffe9afc3c4 | ||
|
|
98270bf500 | ||
|
|
8f71a4ebfe | ||
|
|
901a64ae14 | ||
|
|
4353adb914 | ||
|
|
74674c8494 | ||
|
|
5950b162b9 | ||
|
|
beb7313138 | ||
|
|
9125292b0e | ||
|
|
8aa4f053e8 | ||
|
|
fb43282a9c | ||
|
|
ef4972f66b | ||
|
|
d69b0953a2 | ||
|
|
78538ddb28 | ||
|
|
557426c1c9 | ||
|
|
90540f64cf | ||
|
|
fc8e97448c | ||
|
|
5e279e067f | ||
|
|
df8728c785 | ||
|
|
c9a2724bfd | ||
|
|
f8a6ab5cf4 | ||
|
|
29ec14efa0 | ||
|
|
49bbbe3682 | ||
|
|
4d429aa6d6 | ||
|
|
a091e06fe3 | ||
|
|
06dddccf8e | ||
|
|
4877e4a9d1 | ||
|
|
a7582e2cca | ||
|
|
252e757185 | ||
|
|
46b6a93e98 | ||
|
|
9ad7ce9ca8 | ||
|
|
2ba767b499 | ||
|
|
e09b156d13 | ||
|
|
e442fed40a | ||
|
|
b12b2f13ea | ||
|
|
828fd6b978 | ||
|
|
c28308ee97 | ||
|
|
c86635b4ce | ||
|
|
136542f8dd | ||
|
|
f5716de06e | ||
|
|
2acdcd9ba2 | ||
|
|
4d65a51ede | ||
|
|
5bac03a37b | ||
|
|
cbec5cd3a1 | ||
|
|
e5674dd5cc | ||
|
|
c506a2ce1d | ||
|
|
4892fc81a2 | ||
|
|
21cb2c384e | ||
|
|
7545d55b22 | ||
|
|
1e3b88a7f0 | ||
|
|
9d405812cb | ||
|
|
8da45b72a9 | ||
|
|
78e1e4fbac | ||
|
|
74ff579412 | ||
|
|
b28b837d72 | ||
|
|
9dc0a4b115 | ||
|
|
3e82cab398 | ||
|
|
66d1f2505f | ||
|
|
85cab3aec8 | ||
|
|
e860b0dd4c | ||
|
|
6e4639496e | ||
|
|
11b6794946 | ||
|
|
0bbd29ac42 | ||
|
|
01013f5c9d | ||
|
|
5f6d5cd9a5 | ||
|
|
2c2e5de911 | ||
|
|
14d0081fdf | ||
|
|
129019777f | ||
|
|
e79284e75f | ||
|
|
a345302454 | ||
|
|
b731d6af3b | ||
|
|
1f77df794a | ||
|
|
0ac58dbee6 | ||
|
|
fdeaf3a16e | ||
|
|
eaf4be4979 | ||
|
|
b07efb0085 | ||
|
|
7b992e7a20 | ||
|
|
197e61a5d0 | ||
|
|
d366be7967 | ||
|
|
95972209f4 | ||
|
|
e7f16e2b17 | ||
|
|
296d5127c9 | ||
|
|
34b73e15e6 | ||
|
|
d61e632c59 | ||
|
|
3dc1b87f01 | ||
|
|
a75baef450 | ||
|
|
d1a64798b9 | ||
|
|
bd2a1a3efa | ||
|
|
45c62da51c | ||
|
|
e2d0d4db5c | ||
|
|
d8df9ab3ed | ||
|
|
81dfbba0ec | ||
|
|
0a35195fc7 | ||
|
|
95bd153446 | ||
|
|
f2c0175b5c | ||
|
|
2c5876779f | ||
|
|
f88d7e6170 | ||
|
|
13b4aa2282 | ||
|
|
995fb22600 | ||
|
|
53908d347e | ||
|
|
f279515d36 | ||
|
|
2627240d80 | ||
|
|
e579db8bf3 | ||
|
|
5db18e307c | ||
|
|
8e0d33144c | ||
|
|
70c1beb6d2 | ||
|
|
cf362f64a3 | ||
|
|
3ac9425669 | ||
|
|
49a686af78 | ||
|
|
8432d8827e | ||
|
|
d5baaacb72 | ||
|
|
ff43a619c5 | ||
|
|
7a6f7d3e49 | ||
|
|
1cc15a71d6 | ||
|
|
3378717562 | ||
|
|
2288da4daf | ||
|
|
ba1e04741b | ||
|
|
1e96c21cae | ||
|
|
21a4651a64 | ||
|
|
c52583ae28 | ||
|
|
c0145ad301 | ||
|
|
c5cae312d7 | ||
|
|
61478caa3d | ||
|
|
2195b20385 | ||
|
|
015ee701c4 | ||
|
|
5423434b3f | ||
|
|
ee44128c8c | ||
|
|
ba16f95d1f | ||
|
|
67f9c8670a | ||
|
|
a150b2c6f7 | ||
|
|
d2033abf96 | ||
|
|
54ba2d2ac3 | ||
|
|
d1ec101248 | ||
|
|
42c9185c7d | ||
|
|
4e71c8328c | ||
|
|
962b141e85 | ||
|
|
e5cf44d398 | ||
|
|
47d21eb008 | ||
|
|
e383524334 | ||
|
|
b464099cca | ||
|
|
591fb41c08 | ||
|
|
b616ba7304 | ||
|
|
cb692c27e5 | ||
|
|
bb629c1815 | ||
|
|
a93357168c | ||
|
|
cbd58bd5b9 | ||
|
|
d74aee97cf | ||
|
|
6afd0fd9de | ||
|
|
2bc4de4545 | ||
|
|
14b9c03199 | ||
|
|
d8a2681e2b | ||
|
|
993b745f1c | ||
|
|
320f187829 | ||
|
|
57dd44a871 | ||
|
|
5ddf70a671 | ||
|
|
3c5dd6a5e7 | ||
|
|
c352b4c06d | ||
|
|
770e0a67c1 | ||
|
|
f235c86a0a | ||
|
|
04b60f4f99 | ||
|
|
c1f0d47cd4 | ||
|
|
0cd13b7b66 | ||
|
|
640686f031 | ||
|
|
b9aa0d2121 | ||
|
|
a7c5a5e819 | ||
|
|
cc3150ff09 | ||
|
|
421a25eb56 | ||
|
|
5de430deb5 | ||
|
|
b2c663925b | ||
|
|
7a993eb2ca | ||
|
|
f3eb30b674 | ||
|
|
ef2221d677 | ||
|
|
6b7049cdae | ||
|
|
5209c614fc | ||
|
|
f3a78c2b6f | ||
|
|
212768ee86 | ||
|
|
f16d98fcab | ||
|
|
3840a9e67e | ||
|
|
a316927b2e | ||
|
|
3a5048a6cd | ||
|
|
41d5d16bac | ||
|
|
1edd2649fc | ||
|
|
4bc3f54468 | ||
|
|
3f44f4bb3a | ||
|
|
4498f6e410 | ||
|
|
27fddb0b48 | ||
|
|
82fabad364 | ||
|
|
bdefebeea0 | ||
|
|
682fa1f874 | ||
|
|
90616c6e7b | ||
|
|
77a4c871f6 | ||
|
|
ef47fc78eb | ||
|
|
fa6d6816e4 | ||
|
|
e1c9bd7229 | ||
|
|
eabbc81b40 | ||
|
|
ec062533a0 | ||
|
|
fdf9deb7aa | ||
|
|
339d0e5495 | ||
|
|
bc29f832fe | ||
|
|
1abba25f83 | ||
|
|
10f56faf9d | ||
|
|
e29aa5abf8 | ||
|
|
ac88b5fc25 | ||
|
|
cde7168f9c | ||
|
|
f12b641d11 | ||
|
|
2c1978218c | ||
|
|
5daf89f263 | ||
|
|
4693f64bef | ||
|
|
15c2e4d968 | ||
|
|
488e31df64 | ||
|
|
b5f4503e9f | ||
|
|
e886e232c5 | ||
|
|
e32adf9477 | ||
|
|
99e6223bf0 | ||
|
|
f185e13175 | ||
|
|
3aa4ae4b99 | ||
|
|
d1495102f2 | ||
|
|
260579b525 | ||
|
|
b82b5794bc | ||
|
|
10fc991a7b | ||
|
|
3ff588415c | ||
|
|
bb4d4eaec7 | ||
|
|
d6682048a1 | ||
|
|
83156701df | ||
|
|
175da41131 | ||
|
|
4a1bd2fe93 | ||
|
|
b23a6fecc3 | ||
|
|
c199aca4e8 | ||
|
|
c4f436283e | ||
|
|
5305bc0138 | ||
|
|
7926514c95 | ||
|
|
e7a791ab74 | ||
|
|
273f499cc2 | ||
|
|
1d3c25fdcc | ||
|
|
b1a6d394e3 | ||
|
|
f01cb88c57 | ||
|
|
0f20352fbb | ||
|
|
924388d96f | ||
|
|
375c2c2ce1 | ||
|
|
576246c315 | ||
|
|
ed3a1b47bd | ||
|
|
0b6817b9a7 | ||
|
|
4161f138f3 | ||
|
|
b3e8b1a152 | ||
|
|
35eebbf20a | ||
|
|
3f1df52773 | ||
|
|
2430b970f3 | ||
|
|
4b45a4b168 | ||
|
|
0ba7c4891c | ||
|
|
7678eaf528 | ||
|
|
5ce069fdd3 | ||
|
|
ab20880332 | ||
|
|
31d8f13f7b | ||
|
|
70f415446b | ||
|
|
500ca33675 | ||
|
|
d27eb17b32 | ||
|
|
d89c0d698e | ||
|
|
15773f28f2 | ||
|
|
c76a073482 | ||
|
|
365c889dbd | ||
|
|
bcae47bb1e | ||
|
|
d89f280c73 | ||
|
|
7c8d5614c6 | ||
|
|
219c0d75c4 | ||
|
|
ed87d40f71 | ||
|
|
40cc21fad8 | ||
|
|
baadd0f2ed | ||
|
|
dab91d6ce9 | ||
|
|
3ae8aa1c55 | ||
|
|
eab0ca7463 | ||
|
|
fb7e0bb7c2 | ||
|
|
f913c58925 | ||
|
|
0c8c246be4 | ||
|
|
4f04bd82a6 | ||
|
|
4d02600820 | ||
|
|
b023ef01af | ||
|
|
0dd7339bec | ||
|
|
1b206a6ae8 | ||
|
|
67b1dd546c | ||
|
|
dbb75f181d | ||
|
|
e4f136c208 | ||
|
|
2ae0b3905d | ||
|
|
7e11d29f06 | ||
|
|
339eafd6be | ||
|
|
7217954078 | ||
|
|
113eb38f9a | ||
|
|
608a1ce6d0 | ||
|
|
3a69a191ff | ||
|
|
131b71f361 | ||
|
|
fdf0076f37 | ||
|
|
1eab829dec | ||
|
|
0e5c65199d | ||
|
|
824d849a52 | ||
|
|
a3842d2c61 | ||
|
|
e5a5b8e8bf | ||
|
|
be45ad163a | ||
|
|
585eb9e1be | ||
|
|
4f88e9cf2c | ||
|
|
d6ad100ed5 | ||
|
|
68db8c04f7 | ||
|
|
5fe5e3d893 | ||
|
|
2507d6c853 | ||
|
|
e4fbb31e68 | ||
|
|
61ae01543c | ||
|
|
a400e5de81 | ||
|
|
e8265efc20 | ||
|
|
038a833125 | ||
|
|
3493be4ef0 | ||
|
|
6fc3103aef | ||
|
|
fc1cb76444 | ||
|
|
abc7fd54f3 | ||
|
|
48ed540801 | ||
|
|
22ba104930 | ||
|
|
31606578f5 | ||
|
|
1487545fd2 | ||
|
|
0c744a947e | ||
|
|
17dd113a94 | ||
|
|
c2f6717e88 | ||
|
|
8c7b474e8b | ||
|
|
980cf2ccf9 | ||
|
|
1664d179b9 | ||
|
|
0ef2be61b1 | ||
|
|
6fb69e6c19 | ||
|
|
9f5893bc83 | ||
|
|
642b9e4d69 | ||
|
|
0741b162cb | ||
|
|
f247c2195e | ||
|
|
94a589e0e4 | ||
|
|
bcc464a196 | ||
|
|
a3404d3d4f | ||
|
|
36dc086470 | ||
|
|
fdc6b004c5 | ||
|
|
04e0c58b84 | ||
|
|
4e10ee473c | ||
|
|
28f186d4a7 | ||
|
|
1f2d5abbb7 | ||
|
|
6ca5a42936 | ||
|
|
2b2e83992e | ||
|
|
0cfd05d839 | ||
|
|
d6223406e9 | ||
|
|
ca0dbf84be | ||
|
|
a695c6134b | ||
|
|
db3632557e | ||
|
|
7a1037dc11 | ||
|
|
38733ef94b | ||
|
|
478429af3a | ||
|
|
bac3cf03cb | ||
|
|
ec63ba4b17 | ||
|
|
8b6f701246 | ||
|
|
b470a9b264 | ||
|
|
7f193041a8 | ||
|
|
8abaa812ec | ||
|
|
880c393b6d | ||
|
|
6f78d29498 | ||
|
|
1e3b9b7cf6 | ||
|
|
d33253bc3a | ||
|
|
96d58288c9 | ||
|
|
4701eb1cee | ||
|
|
ce867aec53 | ||
|
|
4206c17da3 | ||
|
|
1dcac09e53 | ||
|
|
0e44eb8629 | ||
|
|
26d67257fe | ||
|
|
ef0740049a | ||
|
|
b2a837d283 | ||
|
|
301008b9cb | ||
|
|
7b4f596aba | ||
|
|
c7c3bc1c8e | ||
|
|
fa98da6978 | ||
|
|
befaa56ad0 | ||
|
|
c893effcb9 | ||
|
|
2f8ecc00d8 | ||
|
|
d6b6e39f2a | ||
|
|
85a5c123af | ||
|
|
c070808209 | ||
|
|
cabc3e5e3d | ||
|
|
9b63facf6f | ||
|
|
9dd0f3c9b9 | ||
|
|
363e7c23bd | ||
|
|
8ffaecaa4c | ||
|
|
3bd93a40fc | ||
|
|
c709b7ed5b | ||
|
|
4239c376c8 | ||
|
|
3c5fc72e20 | ||
|
|
567d867b1e | ||
|
|
ab5ec68f2f | ||
|
|
da1a1d5930 | ||
|
|
e86eb8667e | ||
|
|
f61ca4327d | ||
|
|
cc0fabc619 | ||
|
|
7d382b2900 | ||
|
|
d2af4a6b69 | ||
|
|
0f66e80a5a | ||
|
|
36e949acea | ||
|
|
3308da64cb | ||
|
|
45f0021503 | ||
|
|
98745ae0c4 | ||
|
|
2b8a7c73ac | ||
|
|
64676b66c8 | ||
|
|
6774f0f52f | ||
|
|
6a4dd5cc05 | ||
|
|
e11efad0b7 | ||
|
|
2badb76fc2 | ||
|
|
61afee98c3 | ||
|
|
e67e9aee42 | ||
|
|
3f23821580 | ||
|
|
f83b7ee972 | ||
|
|
8efc33d6a1 | ||
|
|
ef97f627f4 | ||
|
|
39b22058b7 | ||
|
|
3cb2ac166b | ||
|
|
af997061aa | ||
|
|
10d8eed7b9 | ||
|
|
f0a19b06c2 | ||
|
|
c6a89b504f | ||
|
|
6262312747 | ||
|
|
012480c2e1 | ||
|
|
43e0c726fa | ||
|
|
e49d445422 | ||
|
|
da7d6a3137 | ||
|
|
11dddc9c6f | ||
|
|
653007b72e | ||
|
|
76d8f19e73 | ||
|
|
cd4a204f99 | ||
|
|
99108c750a | ||
|
|
197b34461f | ||
|
|
e60b2f7716 | ||
|
|
1804373322 | ||
|
|
0627734fc0 | ||
|
|
d30acee9d3 | ||
|
|
0459e242fc | ||
|
|
6e64712fd3 | ||
|
|
941c3b2d7e | ||
|
|
16f1db4f5d | ||
|
|
14a0b45ae8 | ||
|
|
c1ccc81400 | ||
|
|
eeb3bdc7f7 | ||
|
|
4cadd8da7a | ||
|
|
367a9aa022 | ||
|
|
ecd3f15381 | ||
|
|
17903adace | ||
|
|
b4af4c72cc | ||
|
|
da8c2896d7 | ||
|
|
38d4fd1a59 | ||
|
|
46a475fdde | ||
|
|
ea4931fa1d | ||
|
|
19c2a85bf1 | ||
|
|
37e8856861 | ||
|
|
1eafc6ba3d | ||
|
|
f942c03a58 | ||
|
|
611c16b5a6 | ||
|
|
d233e7927d | ||
|
|
7873b90caf | ||
|
|
3d6cce44c7 | ||
|
|
42f42adfaf | ||
|
|
1354739d19 | ||
|
|
0ea14324ac | ||
|
|
ebe61450a1 | ||
|
|
6d03f713c5 | ||
|
|
a0e784a612 | ||
|
|
6011399063 | ||
|
|
d2bef79888 | ||
|
|
97a64122b4 | ||
|
|
66fd13be97 | ||
|
|
9c3c536ae8 | ||
|
|
ccc717b339 | ||
|
|
401bd02748 | ||
|
|
553cabdcfa | ||
|
|
bddc270033 | ||
|
|
e0911c1fff | ||
|
|
9223865c80 | ||
|
|
9de21995c4 | ||
|
|
9685cb7fe0 | ||
|
|
161c7f1875 | ||
|
|
175230e337 | ||
|
|
2bb5918b6c | ||
|
|
e3df487173 | ||
|
|
79bacfe164 | ||
|
|
6563a72b5b | ||
|
|
7668b95c66 | ||
|
|
d8e00f95a2 | ||
|
|
383b68e7fc | ||
|
|
cc0ac29b36 | ||
|
|
970639274e | ||
|
|
90e398e5c9 | ||
|
|
67ef155c60 | ||
|
|
b2986f2a4e | ||
|
|
bdfe12f365 | ||
|
|
35ac0bb793 | ||
|
|
dd7433bab6 | ||
|
|
3f5c51174d | ||
|
|
f47f146320 | ||
|
|
641ec3ef82 | ||
|
|
0bbff06cfa | ||
|
|
01cda60704 | ||
|
|
01077cb35b | ||
|
|
0d625761be | ||
|
|
0f19578523 | ||
|
|
bdc7a19bd7 | ||
|
|
58fe16e15c | ||
|
|
7fc2e627c5 | ||
|
|
e611a8174e | ||
|
|
0a293be823 | ||
|
|
d183e58771 | ||
|
|
6ea760d636 | ||
|
|
2d65a746e4 | ||
|
|
81de895c0e | ||
|
|
b515995432 | ||
|
|
4da1a2da97 | ||
|
|
1e0ec5dd47 | ||
|
|
8e4c23149c | ||
|
|
e9fb2f4135 | ||
|
|
44a91fe9ea | ||
|
|
2220483915 | ||
|
|
5647354421 | ||
|
|
ca2e9d7d9e | ||
|
|
bff722925f | ||
|
|
c1a580c51d | ||
|
|
738ada9b16 | ||
|
|
816d9e5d12 | ||
|
|
fdb9b889ec | ||
|
|
fb1ddc3d9b | ||
|
|
b525d95915 | ||
|
|
6aa8df1d24 | ||
|
|
da0355ef79 | ||
|
|
dc99701d42 | ||
|
|
2826381b20 | ||
|
|
7b409c095c | ||
|
|
4f72513f19 | ||
|
|
da0793c011 | ||
|
|
da05330ded | ||
|
|
6eff7d4c51 | ||
|
|
c320051a1e | ||
|
|
e757183cec | ||
|
|
89ba0840e6 | ||
|
|
0668556d4f | ||
|
|
c000a8c5ba | ||
|
|
a0222b69bb | ||
|
|
e9ab9dcce2 | ||
|
|
33e34ca864 | ||
|
|
caa9c17bc2 | ||
|
|
5e5c6014ac | ||
|
|
9bf1d345e2 | ||
|
|
67f1251ba3 | ||
|
|
3f12e51045 | ||
|
|
6e6c5688d9 | ||
|
|
2befa06a33 | ||
|
|
92267de9d8 | ||
|
|
313c51cfb1 | ||
|
|
392075eb27 | ||
|
|
3a42200e24 | ||
|
|
bf8f91f0d9 | ||
|
|
82a3415ab1 | ||
|
|
f28c690f2f | ||
|
|
08b2106e0f | ||
|
|
7111adb3c2 | ||
|
|
d4556d4da3 | ||
|
|
a500899fdf | ||
|
|
4343f240d0 | ||
|
|
2f1707e772 | ||
|
|
813b3d6fcc | ||
|
|
1e9850b6b9 | ||
|
|
df29410c08 | ||
|
|
5dc5eb41df | ||
|
|
e451a145dd | ||
|
|
c8bf617f4b | ||
|
|
3dc4fd9fd9 | ||
|
|
4cb9f34253 | ||
|
|
f65a7f96ff | ||
|
|
cb304d7d54 | ||
|
|
41116bc0b2 | ||
|
|
4bb6d89e83 | ||
|
|
b259c3d422 | ||
|
|
82a82afe99 | ||
|
|
350070339b | ||
|
|
a5f4135c62 | ||
|
|
5abc96399e | ||
|
|
5f7f5a37c1 | ||
|
|
76037a5f14 | ||
|
|
29ad8d2582 | ||
|
|
21d28b0f58 | ||
|
|
de6f58842b | ||
|
|
88c4b90fc8 | ||
|
|
037e8943a8 | ||
|
|
9564b6fda2 | ||
|
|
3d68c7c6b6 | ||
|
|
8873963946 | ||
|
|
88b4516ef8 | ||
|
|
ffa42ffea3 | ||
|
|
c41ef10572 | ||
|
|
661dff2f9b | ||
|
|
326eddf39e | ||
|
|
4e3819603b | ||
|
|
900c0d838d | ||
|
|
e83ad1ab4a | ||
|
|
974333dbc3 | ||
|
|
efb933f102 | ||
|
|
19c9f1bb19 | ||
|
|
a7f310b49a | ||
|
|
65b49d5de8 | ||
|
|
116dad2858 | ||
|
|
656ec227e9 | ||
|
|
78f9c25c9c | ||
|
|
337b3a2aa7 | ||
|
|
d61a75a5c2 | ||
|
|
2cde4508b0 | ||
|
|
23983c4c80 | ||
|
|
71f84655ca | ||
|
|
b413f06b72 | ||
|
|
a68ba044c3 | ||
|
|
30cfddda68 | ||
|
|
16d2e65ea0 | ||
|
|
857df86726 | ||
|
|
6ea4d89edc | ||
|
|
875c8ed66c | ||
|
|
62afe65ccf | ||
|
|
712c382a28 | ||
|
|
4e54d500c0 | ||
|
|
4793b6b4f9 | ||
|
|
a99be8e7be | ||
|
|
faf3de7e27 | ||
|
|
1b3f089804 | ||
|
|
6acdc66470 | ||
|
|
464c2f42c3 | ||
|
|
37840d35f0 | ||
|
|
68b41083ad | ||
|
|
475ac1e772 | ||
|
|
73c89010cb | ||
|
|
57f9f8bc57 | ||
|
|
1ef95bd09e | ||
|
|
281c482f1c | ||
|
|
6496b91c29 | ||
|
|
4309fe3192 | ||
|
|
820cdf8a47 | ||
|
|
ec86aafb48 | ||
|
|
b4b9ed1841 | ||
|
|
1568c50906 | ||
|
|
23e1cc010c | ||
|
|
6fb393de78 | ||
|
|
f00f7c8818 | ||
|
|
d9d04a3982 | ||
|
|
5a8a3627d2 | ||
|
|
7fa8f5ef36 | ||
|
|
284276cbb6 | ||
|
|
f99c1f9921 | ||
|
|
e84dd4fd94 | ||
|
|
c9642cecd2 | ||
|
|
e51016ee66 | ||
|
|
30130b2d62 | ||
|
|
90b29031fe | ||
|
|
6a31bd9af6 | ||
|
|
552a63367d | ||
|
|
6a824a2e10 | ||
|
|
7dfdab0a2d | ||
|
|
5880590425 | ||
|
|
23e4eb7cd9 | ||
|
|
7183fda2eb | ||
|
|
bcd8137d0e | ||
|
|
55a7838725 | ||
|
|
958e85a31f | ||
|
|
4add89cea4 | ||
|
|
1f23642ab4 | ||
|
|
b2bc1d4555 | ||
|
|
e9e53ad95e | ||
|
|
d34e68ca25 | ||
|
|
acd4771012 | ||
|
|
da0e1a8eb9 | ||
|
|
4986c8ed3a | ||
|
|
8c8055fbae | ||
|
|
178edd150a | ||
|
|
a9cccc9b9c | ||
|
|
7135e9424c | ||
|
|
3fe9bdc24c | ||
|
|
a9046b926d | ||
|
|
90a80ad83d | ||
|
|
c054ae121b | ||
|
|
4a1513eabf | ||
|
|
b79169a765 | ||
|
|
21b1bc1729 | ||
|
|
6f8ed7f073 | ||
|
|
d9ca95a5a3 | ||
|
|
f20a2a2047 | ||
|
|
8a05eee1f5 | ||
|
|
096f352c82 | ||
|
|
e956c19587 | ||
|
|
e0dcf95138 | ||
|
|
38145abae1 | ||
|
|
58cb51bb02 | ||
|
|
b404b0197f | ||
|
|
5f52ef5f01 | ||
|
|
64aa89f5ee | ||
|
|
34552f7fb0 | ||
|
|
542f937589 | ||
|
|
b9e119241e | ||
|
|
8f7a7fec7d | ||
|
|
c0cd6148f4 | ||
|
|
c028761857 | ||
|
|
1dbc47b890 | ||
|
|
73d637096c | ||
|
|
3efca794fd | ||
|
|
6f806d80c2 | ||
|
|
c9c25bd174 | ||
|
|
6192af18ab | ||
|
|
67517c58e3 | ||
|
|
d442e10037 | ||
|
|
33a5a2177e | ||
|
|
976744480f | ||
|
|
c25835c63e | ||
|
|
3614211f0e | ||
|
|
552eb78db8 | ||
|
|
88e5ddac76 | ||
|
|
c67182204f | ||
|
|
444956d517 | ||
|
|
68d526b762 | ||
|
|
d471ea2d5b | ||
|
|
da331a1e6b | ||
|
|
fe147bfb67 | ||
|
|
f73fd1eeae | ||
|
|
76d8d09f9b | ||
|
|
1dc63caf77 | ||
|
|
d4f453cde3 | ||
|
|
a3a0aabd22 | ||
|
|
66ef8c8284 | ||
|
|
d100a41ce7 | ||
|
|
6e8c618fb1 | ||
|
|
cd336006fc | ||
|
|
8c11299197 | ||
|
|
10f4fa004e | ||
|
|
48df0cf889 | ||
|
|
81378e071b | ||
|
|
9b53dd1014 | ||
|
|
76b53478ce | ||
|
|
b28e4846a4 | ||
|
|
3c97ef6829 | ||
|
|
dbb814fe4e | ||
|
|
7bb3766ebd | ||
|
|
814db2e1d8 | ||
|
|
4b64b9dcdc | ||
|
|
1f7a717bf0 | ||
|
|
50f83abf75 | ||
|
|
c24c2a5422 | ||
|
|
8802fc5a33 | ||
|
|
d3aead7c13 | ||
|
|
57d0273c13 | ||
|
|
48b9289002 | ||
|
|
7ef6f9bbf5 | ||
|
|
8846f7fb9b | ||
|
|
37aeda14c4 | ||
|
|
be70b3de57 | ||
|
|
529cd60dd2 | ||
|
|
70299ea5c2 | ||
|
|
c26af77a24 | ||
|
|
d360320441 | ||
|
|
eed97648b1 | ||
|
|
e588762aa0 | ||
|
|
209bcaba8c | ||
|
|
9c55b202e7 | ||
|
|
dc8839b63c | ||
|
|
f943a194b6 | ||
|
|
f785f7f6e3 | ||
|
|
94aeb3ab22 | ||
|
|
5b8e8e4b67 | ||
|
|
188aeabba8 | ||
|
|
7bef58deb1 | ||
|
|
138b12e815 | ||
|
|
d18ce28de0 | ||
|
|
64ee792013 | ||
|
|
5a8fa9b1f7 | ||
|
|
c5066ed100 | ||
|
|
30e83fdabe | ||
|
|
31d576e9ed | ||
|
|
fe9d4efa98 | ||
|
|
d75bc9578b | ||
|
|
5b25e21606 | ||
|
|
8ad24818df | ||
|
|
71675d0aa0 | ||
|
|
88ca3733a7 | ||
|
|
d20501b29d | ||
|
|
cdf92c5cda | ||
|
|
c44934cc0d | ||
|
|
52a50a80ba | ||
|
|
b9264dea76 | ||
|
|
fc53385ede | ||
|
|
fa2b5d1ee6 | ||
|
|
3eb9f65c2e | ||
|
|
8df33e65ac | ||
|
|
044347ebca | ||
|
|
aadde85e1b | ||
|
|
28832a2540 | ||
|
|
f5ec24e925 | ||
|
|
016642bc16 | ||
|
|
34336a1069 | ||
|
|
1837a8443c | ||
|
|
98fa8c419d | ||
|
|
55b5d0c209 | ||
|
|
e4b6d0e1ff | ||
|
|
a8d2b46911 | ||
|
|
e70bc9f163 | ||
|
|
5553e07bbd | ||
|
|
4c2a6953f1 | ||
|
|
dbbbe21883 | ||
|
|
6820e9e662 | ||
|
|
f0dfee5402 | ||
|
|
6c3c669e31 | ||
|
|
936e52a43f | ||
|
|
3860abdc24 | ||
|
|
4d598dcd63 | ||
|
|
ee5596fad5 | ||
|
|
14d7453a23 | ||
|
|
033c5d5726 | ||
|
|
5732994097 | ||
|
|
feeb220514 | ||
|
|
1b7f8cc5cb | ||
|
|
fb691b23b4 | ||
|
|
77f5d6ff7d | ||
|
|
1c324f45cf | ||
|
|
c6ff8e1042 | ||
|
|
079ed10631 | ||
|
|
2b178ff76d | ||
|
|
2966cc4a49 | ||
|
|
b2f9184562 | ||
|
|
b6d97281d3 | ||
|
|
a9b78d2600 | ||
|
|
68fb6ec09a | ||
|
|
42a7c037e6 | ||
|
|
f46e563b8a | ||
|
|
f2ffc2b533 | ||
|
|
08a9ce4950 | ||
|
|
8cda88790e | ||
|
|
3c6e4ebda1 | ||
|
|
fcb44ae256 | ||
|
|
d012d237bf | ||
|
|
c4d1c8feff | ||
|
|
87f337f2fb | ||
|
|
7ef84e0daa | ||
|
|
7ff9fa1a44 | ||
|
|
b3d7ae1c86 | ||
|
|
0c9ab5e93f | ||
|
|
804da0d8de | ||
|
|
fff3ba5bec | ||
|
|
26853d024e | ||
|
|
97cb11628d | ||
|
|
ea222a4295 | ||
|
|
0fecbf7cbf | ||
|
|
8eca195530 | ||
|
|
6bc759748f | ||
|
|
1f136c6a72 | ||
|
|
24b669bd39 | ||
|
|
1c19ae48bd | ||
|
|
5540313b7f | ||
|
|
5e2460e17e | ||
|
|
ac915c1190 | ||
|
|
d63ff461f3 | ||
|
|
84dc012198 | ||
|
|
e75c303b89 | ||
|
|
7081c7dcc4 | ||
|
|
e73f8d6f37 | ||
|
|
4b2f5cbfab | ||
|
|
0211b4484b | ||
|
|
6f21547a8d | ||
|
|
9069f9aedc | ||
|
|
6bf36a0468 | ||
|
|
6a649f9b9a | ||
|
|
561b42d0f9 | ||
|
|
6827dbc9c4 | ||
|
|
eea677655f | ||
|
|
23c283f06c | ||
|
|
49997639e9 | ||
|
|
584347848b | ||
|
|
f35c14ee07 | ||
|
|
eac201cae9 | ||
|
|
7eae79cee9 | ||
|
|
fa103b2d6e | ||
|
|
08d3d9feb3 | ||
|
|
ccd29bfd61 | ||
|
|
e67f6d2169 | ||
|
|
607bc8545b | ||
|
|
cb15655c9c | ||
|
|
bfcb61f37d | ||
|
|
d072ad60de | ||
|
|
7c873c4314 | ||
|
|
e64d87cb1d | ||
|
|
db0ad5b57c | ||
|
|
a2a9c8fd8a | ||
|
|
8064f7f0db | ||
|
|
9b4ca12dc1 | ||
|
|
8c6af7ef59 | ||
|
|
091723a8c5 | ||
|
|
ed0a17b94a | ||
|
|
20b5d577dd | ||
|
|
00df660fa5 | ||
|
|
942d16a3b4 | ||
|
|
dae7b06f4d | ||
|
|
e193d58112 | ||
|
|
08c0a7fa5e | ||
|
|
beafc881c4 | ||
|
|
062e35c89e | ||
|
|
0682b5c5ea | ||
|
|
389fc787a3 | ||
|
|
c49c3e3550 | ||
|
|
4435a20d90 | ||
|
|
96d6b96ce4 | ||
|
|
c084529597 | ||
|
|
ad222dce2a | ||
|
|
233e49fd34 | ||
|
|
62a4b419e3 | ||
|
|
27b99d5c56 | ||
|
|
1db0651bff | ||
|
|
4a33b41464 | ||
|
|
e2fb3dacca | ||
|
|
dfd13fac0d | ||
|
|
44ac7ec262 | ||
|
|
30eb85f96e | ||
|
|
44d40fba35 | ||
|
|
0ca6c58ded | ||
|
|
1a85d45567 | ||
|
|
a7c53519b6 | ||
|
|
c7274e11d0 | ||
|
|
4567e5fbd0 | ||
|
|
5b301772bb | ||
|
|
38e4a6c8b0 | ||
|
|
b8c089cfaa | ||
|
|
fb1313ec90 | ||
|
|
dcd3975933 | ||
|
|
2209a55afc | ||
|
|
0070e1158e | ||
|
|
72aa22d824 | ||
|
|
3f1d5c6656 | ||
|
|
87ccfdf5eb | ||
|
|
d87034b131 | ||
|
|
1b207d8276 | ||
|
|
b59c10a1e9 | ||
|
|
ef2dbe8df6 | ||
|
|
04b2887d88 | ||
|
|
81f4767687 | ||
|
|
6a962655e4 | ||
|
|
f1f7b59d58 | ||
|
|
d398d4c613 | ||
|
|
99bf882a1c | ||
|
|
1ca1ace053 | ||
|
|
ad37715972 | ||
|
|
d5268f5497 | ||
|
|
56bbeb9950 | ||
|
|
2247a8b21f | ||
|
|
aee2b2ecd0 | ||
|
|
7f2d70d7f6 | ||
|
|
a83d4a9dd5 | ||
|
|
ea6cf3bbd5 | ||
|
|
87baeebc3f | ||
|
|
5145ba1aac | ||
|
|
d149622f0b | ||
|
|
8da7a6f2f3 | ||
|
|
74d6392bec | ||
|
|
c38e328377 | ||
|
|
1397890dd8 | ||
|
|
7b46d66e68 | ||
|
|
8a2266816d | ||
|
|
3f7e458866 | ||
|
|
947836f815 | ||
|
|
36bc2967c2 | ||
|
|
815e78339f | ||
|
|
101a6ab812 | ||
|
|
1ba3acfd03 | ||
|
|
de3bc84fde | ||
|
|
ebdfd16e48 | ||
|
|
cc8ac2c026 | ||
|
|
6545357969 | ||
|
|
f5d1ba4231 | ||
|
|
ee44778e2b | ||
|
|
309dcaee06 | ||
|
|
9683dc27db | ||
|
|
8913de4ea8 | ||
|
|
656131be39 | ||
|
|
12e3e45398 | ||
|
|
3c53ebb02e | ||
|
|
23c20a2821 | ||
|
|
b658c68736 | ||
|
|
4c21b23ea2 | ||
|
|
bc1c419722 | ||
|
|
a3855a47e5 | ||
|
|
e050c15474 | ||
|
|
5567378234 | ||
|
|
7f11d78b82 | ||
|
|
e3ec4e938a | ||
|
|
4b1c8150d3 | ||
|
|
7c1a46f25d | ||
|
|
14b298eda8 | ||
|
|
f39248c83b | ||
|
|
53f1e4d3d4 | ||
|
|
fd8e7327f0 | ||
|
|
7e5a7c53bd | ||
|
|
156c0302c9 | ||
|
|
037ac9180b | ||
|
|
0777c96a55 | ||
|
|
17f2ff0ed9 | ||
|
|
0da2839943 | ||
|
|
c48d81379b | ||
|
|
aa71f1e088 | ||
|
|
1710b97df5 | ||
|
|
2597c4fc37 | ||
|
|
3ed2d21eb6 | ||
|
|
21685f8c84 | ||
|
|
8557c56c45 | ||
|
|
bbc2df11e1 | ||
|
|
8feac114c3 | ||
|
|
f7cdc8c68c | ||
|
|
ed8e76ebce | ||
|
|
9216b29b69 | ||
|
|
0f8ee3a671 | ||
|
|
7c49c32ad3 | ||
|
|
cd9bd91ab2 | ||
|
|
acafa9095f | ||
|
|
71ea01edb7 | ||
|
|
a79ca2b135 | ||
|
|
1052165373 | ||
|
|
2baa381917 | ||
|
|
c797d6251d | ||
|
|
059c5452ea | ||
|
|
4ef1d83acd | ||
|
|
1fa3880ffc | ||
|
|
216ff0f3f9 | ||
|
|
8fe9e5ab46 | ||
|
|
fd41d93bdb | ||
|
|
c96d85911f | ||
|
|
e3d01df6a2 | ||
|
|
590fb2e68a | ||
|
|
b8b83c2ec2 | ||
|
|
f967407805 | ||
|
|
649bcf49b4 | ||
|
|
b5c8158ad5 | ||
|
|
403de08d60 | ||
|
|
122d1ad82a | ||
|
|
2088903358 | ||
|
|
c1e3d95a84 | ||
|
|
e35a54bea4 | ||
|
|
6c6c57f45f | ||
|
|
a9f20a7791 | ||
|
|
8111b9e91f | ||
|
|
8ef59adb4a | ||
|
|
a29ea27596 | ||
|
|
6e5a6b8784 | ||
|
|
d6d9776cde | ||
|
|
81555671da | ||
|
|
60905b2e21 | ||
|
|
7bd972355e | ||
|
|
d4084b1586 | ||
|
|
6bc6c88e89 | ||
|
|
ca4b9346f3 | ||
|
|
7760a6b207 | ||
|
|
b64e5870b7 | ||
|
|
a8c7b32a04 | ||
|
|
3f43ca0925 | ||
|
|
d6a1fad527 | ||
|
|
f57e293abb | ||
|
|
64c4dd7e63 | ||
|
|
cfe5b6aa4a | ||
|
|
bae76ebd70 | ||
|
|
ef63d816fe | ||
|
|
f4d23fe5df | ||
|
|
3958ee4120 | ||
|
|
dfe25d4bc0 | ||
|
|
02b602f587 | ||
|
|
63dba688ff | ||
|
|
29ba015d69 | ||
|
|
acb935bbc5 | ||
|
|
002e149f42 | ||
|
|
b7ccc12525 | ||
|
|
f862d856fc | ||
|
|
027398f5ba | ||
|
|
6890d319ec | ||
|
|
0c54afe576 | ||
|
|
3a30db59c2 | ||
|
|
dab71d04bd | ||
|
|
a0b6d15b2e | ||
|
|
9eb4945415 | ||
|
|
de34beaf6d | ||
|
|
2ec6dd1d14 | ||
|
|
6f7243f42f | ||
|
|
32ac3d94d2 | ||
|
|
e9c7de951b | ||
|
|
b63fe44da4 | ||
|
|
c7fb34c23f | ||
|
|
eb3b240b04 | ||
|
|
31f877ccee | ||
|
|
ae93c372ff | ||
|
|
ea826ce487 | ||
|
|
f6ea278b09 | ||
|
|
790b0f98d4 | ||
|
|
d3ba03ceae | ||
|
|
15f19653c5 | ||
|
|
7e767da73e | ||
|
|
a2942e22cc | ||
|
|
5179fec986 | ||
|
|
a3191227de | ||
|
|
f10bda49dc | ||
|
|
bba3b76108 | ||
|
|
8cfa6e9d83 | ||
|
|
ef0b610c3c | ||
|
|
86dd01154e | ||
|
|
5aed1208c0 | ||
|
|
2ba11dce15 | ||
|
|
0e26fdf1da | ||
|
|
f83cd7c133 | ||
|
|
251fef9c27 | ||
|
|
74b0da78f4 | ||
|
|
a92fb07f02 | ||
|
|
fffbb1db34 | ||
|
|
8059a83870 | ||
|
|
d140fa33dd | ||
|
|
5de6ea0d97 | ||
|
|
fc866e4746 | ||
|
|
9a5be0b334 | ||
|
|
596a622197 | ||
|
|
52781bb539 | ||
|
|
e28589bea8 | ||
|
|
2131506d59 | ||
|
|
ccf529ccca | ||
|
|
8543d2d437 | ||
|
|
7e825c61bd | ||
|
|
68b9e36218 | ||
|
|
80ce4db764 | ||
|
|
ef65f510a5 | ||
|
|
5acf296ada | ||
|
|
b82a5461ce | ||
|
|
1b557d4141 | ||
|
|
905a99e638 | ||
|
|
b821dc70cf | ||
|
|
3896cbd732 | ||
|
|
c39a951727 | ||
|
|
068402c8ac | ||
|
|
ae009e04bd | ||
|
|
0b3fa0c838 | ||
|
|
cec718de26 | ||
|
|
020a70ecb6 | ||
|
|
ac116bc9d0 | ||
|
|
94f67f518e | ||
|
|
3be0ad5bce | ||
|
|
93130b27d5 | ||
|
|
34bf839751 | ||
|
|
b4a46339f3 | ||
|
|
502886c3b9 | ||
|
|
86556989f4 | ||
|
|
63c9269240 | ||
|
|
25207852e8 | ||
|
|
bc10080c49 | ||
|
|
813ff95146 | ||
|
|
42d33f8338 | ||
|
|
7937ecb6b4 | ||
|
|
599027f2d3 | ||
|
|
18369fae7e | ||
|
|
fa4555e26e | ||
|
|
305ec0da28 | ||
|
|
835b4d61a2 | ||
|
|
cb986186a1 | ||
|
|
fdd2dc322b | ||
|
|
1827c8390b | ||
|
|
eda7455be2 | ||
|
|
37bd88d1b2 | ||
|
|
aea7329871 | ||
|
|
f4ad1ac2dc | ||
|
|
ba657aec4e | ||
|
|
163b0f964e | ||
|
|
0963e62acb | ||
|
|
f50d77bca0 | ||
|
|
c0df95b2dc | ||
|
|
c4121f6ee6 | ||
|
|
79e9819b7f | ||
|
|
b3978d53bb | ||
|
|
37d673028a | ||
|
|
ea222c4f8a | ||
|
|
4e1b3506e8 | ||
|
|
f4ad1bdeae | ||
|
|
fd3efd59f9 | ||
|
|
495fded6dd | ||
|
|
3107e43b64 | ||
|
|
26b0db3bea | ||
|
|
86a8103c15 | ||
|
|
0d7e47ded7 | ||
|
|
7c7f66c08b | ||
|
|
3fdd0c1bff | ||
|
|
031e8128c7 | ||
|
|
7e2823bf30 | ||
|
|
ab60da30da | ||
|
|
520b349c17 | ||
|
|
9f8f78f6d4 | ||
|
|
447cff1995 | ||
|
|
fa5f528fb5 | ||
|
|
8f972d8cdc | ||
|
|
6496ad95e8 | ||
|
|
bbe1a00d34 | ||
|
|
f33256d628 | ||
|
|
b5496b5680 | ||
|
|
bc7eb501c8 | ||
|
|
0b0b74a559 | ||
|
|
b71f1a410e | ||
|
|
e912ce038b | ||
|
|
9a02f85620 | ||
|
|
8518f26adb | ||
|
|
6140d76f76 | ||
|
|
17cee2cb99 | ||
|
|
e1f016c075 | ||
|
|
3993259336 | ||
|
|
172b617cbc | ||
|
|
3b4985efe5 | ||
|
|
1712fcc9fe | ||
|
|
229fe2f80f | ||
|
|
7aa38adb52 | ||
|
|
83ad454c3e | ||
|
|
d69835e115 | ||
|
|
1e47953efd | ||
|
|
9d1a295b85 | ||
|
|
9b88dcdc14 | ||
|
|
92ebf2975a | ||
|
|
a620a85d85 | ||
|
|
21367a1847 | ||
|
|
ed4b0461b9 | ||
|
|
7918a23835 | ||
|
|
1da75866f4 | ||
|
|
e4812fab87 | ||
|
|
e665b79293 | ||
|
|
93257a8597 | ||
|
|
560fa6ffe8 | ||
|
|
8e4c126e3c | ||
|
|
d3f5f9571a | ||
|
|
0ec9f3835f | ||
|
|
1a962c03f4 | ||
|
|
0756410684 | ||
|
|
d75cdf8b9f | ||
|
|
c6ce42968d | ||
|
|
74049dccb1 | ||
|
|
0672c7276d | ||
|
|
8eeb962ebc | ||
|
|
43e8016dd1 | ||
|
|
30cc992f5e | ||
|
|
9e64f4e303 | ||
|
|
ef45ae9ba3 | ||
|
|
07bd4d68d6 | ||
|
|
aba1b95cac | ||
|
|
17ae56e555 | ||
|
|
32b0b1f9fc | ||
|
|
ce7c8c9495 | ||
|
|
d230b17517 | ||
|
|
0c3b3c288f | ||
|
|
bea44ddd18 | ||
|
|
8b8fbfa113 | ||
|
|
fec1b75030 | ||
|
|
791a50a01b | ||
|
|
884d42a363 | ||
|
|
0c093c2aaa | ||
|
|
01f2e7dccd | ||
|
|
893efa5f2a | ||
|
|
8c14a59f93 | ||
|
|
4663e0b8be | ||
|
|
1e44ca3a0f | ||
|
|
8506819a7d | ||
|
|
6ddf977166 | ||
|
|
c0e0da0f1d | ||
|
|
8af5e089ff | ||
|
|
ee0f9d2bbe | ||
|
|
55aef372e8 | ||
|
|
15e1b7e571 | ||
|
|
e5727af959 | ||
|
|
d933e81b37 | ||
|
|
734d8f96e8 | ||
|
|
d0d3160fc7 | ||
|
|
8bd6f85478 | ||
|
|
28731e2dbd | ||
|
|
f698166395 | ||
|
|
9d8aff5e63 | ||
|
|
b6b795dbc6 | ||
|
|
a857d4cab0 | ||
|
|
8866de8b30 | ||
|
|
ceffd2e1e0 | ||
|
|
691fde0a27 | ||
|
|
20c95731ae | ||
|
|
bbdcd5d460 | ||
|
|
a909a25393 | ||
|
|
695891ffd7 | ||
|
|
bdc93409a7 | ||
|
|
075c6c01f2 | ||
|
|
fe2e86da81 | ||
|
|
1f8f65308b | ||
|
|
843cb1b35b | ||
|
|
cb012ffa7a | ||
|
|
750ce1f7f8 | ||
|
|
e2c6eca36e | ||
|
|
99a212d141 | ||
|
|
ce4896f2c5 | ||
|
|
3e3250ccde | ||
|
|
9f663411db | ||
|
|
d4bc6904fb | ||
|
|
53af836bdb | ||
|
|
7f4a1cd685 | ||
|
|
1c14bcd1ed | ||
|
|
b912dcb2f0 | ||
|
|
896af72a25 | ||
|
|
ab9ff94713 | ||
|
|
860aabe0d3 | ||
|
|
7b4f098cb4 | ||
|
|
ccfa5bd618 | ||
|
|
a4fd972b2b | ||
|
|
c703dba3dd | ||
|
|
d0100176ef | ||
|
|
7f298c596f | ||
|
|
a106211956 | ||
|
|
bc1df3b10c | ||
|
|
2a41c3a312 | ||
|
|
639ebe9b71 | ||
|
|
475f9bea04 | ||
|
|
dcebb0cc4c | ||
|
|
4c6fb72db0 | ||
|
|
b5d31dd889 | ||
|
|
400af61e12 | ||
|
|
9f1e0187ee | ||
|
|
a813b3639e | ||
|
|
c560f8fb75 | ||
|
|
8456025f28 | ||
|
|
5e0435677b | ||
|
|
a8e5c7d149 | ||
|
|
1b5e44a763 | ||
|
|
521b3f02be | ||
|
|
bb59158bbc | ||
|
|
1861273d45 | ||
|
|
a274a8cc12 | ||
|
|
859ca8dd18 | ||
|
|
d27ba5239e | ||
|
|
ecb1fa928c | ||
|
|
ef9965832a | ||
|
|
53ef9c1b9f | ||
|
|
ad9209ec38 | ||
|
|
225e8c012b | ||
|
|
85d4bc7232 | ||
|
|
8ca3b667c7 | ||
|
|
4ff62f4e30 | ||
|
|
2781153640 | ||
|
|
4f1f812062 | ||
|
|
39ec9e9ecb | ||
|
|
02048e551f | ||
|
|
8dfd8c3bbb | ||
|
|
804997862b | ||
|
|
666cb4c927 | ||
|
|
2c7ec620d0 | ||
|
|
2f84a0a130 | ||
|
|
daa1154797 | ||
|
|
ec21ea5df4 | ||
|
|
a05f17b702 | ||
|
|
11b0f44ae9 | ||
|
|
20dd194171 | ||
|
|
01f7caa3af | ||
|
|
6d1ec8c7fe | ||
|
|
d0452dcc80 | ||
|
|
bc7fd3a724 | ||
|
|
cacde313cd | ||
|
|
fba16fdfce | ||
|
|
55951fec6f | ||
|
|
e8d30da006 | ||
|
|
4429014d2f | ||
|
|
97e52fd169 | ||
|
|
84446e255d | ||
|
|
2f764dcbb5 | ||
|
|
34338c3265 | ||
|
|
b75877d61f | ||
|
|
8e756b5b26 | ||
|
|
242927d702 | ||
|
|
8c2611aeb5 | ||
|
|
83a201acce | ||
|
|
e231a52369 | ||
|
|
f24e6bdace | ||
|
|
55b39f1eff | ||
|
|
d02a1ef40a | ||
|
|
e9852a804c | ||
|
|
5f8bfaa871 | ||
|
|
8f369d9dbc | ||
|
|
37a1fbd9cd | ||
|
|
b6e96541e7 | ||
|
|
93f5f320fe | ||
|
|
02483b34bf | ||
|
|
3bdbd28532 | ||
|
|
5b8585fafb | ||
|
|
92d029f072 | ||
|
|
ff9d7c6c24 | ||
|
|
ca8f86c4ee | ||
|
|
8fad323d80 | ||
|
|
6ab5f42ef0 | ||
|
|
33607e0cd9 | ||
|
|
fdfe796fe3 | ||
|
|
8cd1005a03 | ||
|
|
83b22a357c | ||
|
|
03a30c8583 | ||
|
|
6d8a1eb1f4 | ||
|
|
49254f268e | ||
|
|
654f53f142 | ||
|
|
d063d4eac1 | ||
|
|
59e56f0e28 | ||
|
|
ffe798b494 | ||
|
|
a3bb9f4e3d | ||
|
|
12b52e5320 | ||
|
|
cfaa0b3754 | ||
|
|
5b16223923 | ||
|
|
b0bd015389 | ||
|
|
88fe989fa2 | ||
|
|
e578b76b49 | ||
|
|
c619301735 | ||
|
|
e18d9dc1b4 | ||
|
|
2c18bbddbe | ||
|
|
daa76e821c | ||
|
|
2075049ae0 | ||
|
|
042df13611 | ||
|
|
253c19abeb | ||
|
|
62f1b8b8f4 | ||
|
|
7d736f9352 | ||
|
|
90cd46815a | ||
|
|
7644ae1c21 | ||
|
|
194c404857 | ||
|
|
0719baf8b2 | ||
|
|
cbe13b6069 | ||
|
|
1c058658e6 | ||
|
|
20ec8ca768 | ||
|
|
26849ba2b7 | ||
|
|
e163282995 | ||
|
|
1fc4568333 | ||
|
|
378ccc3cb7 | ||
|
|
94588e15f2 | ||
|
|
0f2e7fa8bd | ||
|
|
b5e8c6aeae | ||
|
|
c78942b7a4 | ||
|
|
2630a72f81 | ||
|
|
64687fef6a | ||
|
|
c219935633 | ||
|
|
5a1046f15f | ||
|
|
7ea379d4f1 | ||
|
|
27381bfc35 | ||
|
|
3b1c26eae6 | ||
|
|
7dd2412655 | ||
|
|
d5938e4024 | ||
|
|
0c4f0dff6f | ||
|
|
917458d48d | ||
|
|
e06a7a343a | ||
|
|
7531d9dd2c | ||
|
|
1d5239b9a5 | ||
|
|
d4c2a47c8e | ||
|
|
e4c92880ea | ||
|
|
b2d3578eac | ||
|
|
0670382992 | ||
|
|
8da065d8fd | ||
|
|
9b147edb36 | ||
|
|
69f90c0766 | ||
|
|
f8ea87b003 | ||
|
|
d6780652ad | ||
|
|
8efea65e87 | ||
|
|
72c35db6fd | ||
|
|
e176abae50 | ||
|
|
d2bed7791c | ||
|
|
a142789c25 | ||
|
|
3c863feac2 | ||
|
|
a1807f3e12 | ||
|
|
11e8fa31ab | ||
|
|
720644b964 | ||
|
|
d360a9bcac | ||
|
|
1bde667245 | ||
|
|
f05dc95aa5 | ||
|
|
a9fbd5be8a | ||
|
|
d9f61385ca | ||
|
|
2c81d1f2d9 | ||
|
|
37affe2489 | ||
|
|
1b1bdd7912 | ||
|
|
1e955b769b | ||
|
|
25a6302c01 | ||
|
|
af805d3ca4 | ||
|
|
d35dc2d89b | ||
|
|
6ffab73784 | ||
|
|
ef1fdbed71 | ||
|
|
cf3f72feb9 | ||
|
|
113e5a381b | ||
|
|
60ec23b200 | ||
|
|
71c64de8bb | ||
|
|
493ea79a0b | ||
|
|
56cdc86a37 | ||
|
|
4e776cad96 | ||
|
|
b7cb0d02f8 | ||
|
|
1e7adda054 | ||
|
|
f3b2771802 | ||
|
|
054fd46924 | ||
|
|
0fd9a88a3e | ||
|
|
f949af70ad | ||
|
|
9fede2cb05 | ||
|
|
dc592853fc | ||
|
|
183f27b167 | ||
|
|
dedf4add53 | ||
|
|
a0195ffa32 | ||
|
|
3e92644104 | ||
|
|
6d866ccc86 | ||
|
|
8ef9d787f5 | ||
|
|
01cb67d1f3 | ||
|
|
a01008cf7d | ||
|
|
d83b45a427 | ||
|
|
388532eedc | ||
|
|
9823ff0960 | ||
|
|
c17b8ae9a1 | ||
|
|
574e981de9 | ||
|
|
3c63b135c7 | ||
|
|
cecd3fe969 | ||
|
|
5c957e8f8b | ||
|
|
c8208f2a3e | ||
|
|
15728e90f6 | ||
|
|
2b9106b5ce | ||
|
|
db00b01c4a | ||
|
|
bd4bce0e3f | ||
|
|
a3cf42c072 | ||
|
|
25b48c43eb | ||
|
|
f7d1738a8e | ||
|
|
de56107c2b | ||
|
|
c7195290c8 | ||
|
|
8ad8a60987 | ||
|
|
d53480015b | ||
|
|
e8dd8db010 | ||
|
|
5bed729682 | ||
|
|
d0592412e6 | ||
|
|
c2652f908a | ||
|
|
8bba4889d2 | ||
|
|
a53c35f071 | ||
|
|
3955ca560f | ||
|
|
3d61a1b15b | ||
|
|
6bd79a2fa0 | ||
|
|
4abeed3802 | ||
|
|
60b13cd2f7 | ||
|
|
d788ad7cdf | ||
|
|
609821029b | ||
|
|
1c1c5da8f2 | ||
|
|
214b74abc9 | ||
|
|
148438f7a0 | ||
|
|
3f0f2bc956 | ||
|
|
ecc1c315cc | ||
|
|
d1eba104d2 | ||
|
|
3d40cb095f | ||
|
|
79af442306 | ||
|
|
0afd4ffdda | ||
|
|
94ae80010b | ||
|
|
ca06a24df2 | ||
|
|
a942f4086c | ||
|
|
53285d70a9 | ||
|
|
29de88456b | ||
|
|
8ac7ccb4f8 | ||
|
|
825c568bc1 | ||
|
|
15479a31c2 | ||
|
|
d9feaf6abc | ||
|
|
0517a63068 | ||
|
|
5aa80619c8 | ||
|
|
0a8db4e4a7 | ||
|
|
23f3111173 | ||
|
|
3c55672f62 | ||
|
|
cb5baec4eb | ||
|
|
d7b44789fc | ||
|
|
cb6116c6cf | ||
|
|
db309ce8a1 | ||
|
|
c0ec0b2800 | ||
|
|
2cdddd2637 | ||
|
|
9e22b7c8fd | ||
|
|
63a3bfd51d | ||
|
|
6c2a74bd38 | ||
|
|
27f0c0c910 | ||
|
|
1eb7ff9ff3 | ||
|
|
2e407b1f78 | ||
|
|
30f90fee31 | ||
|
|
384834328c | ||
|
|
c2746b3bb1 | ||
|
|
252af4e8cc | ||
|
|
feaea6dcea | ||
|
|
52962a7e9b | ||
|
|
b288edfb6b | ||
|
|
9e8addee81 | ||
|
|
700876fe58 | ||
|
|
97e0e48b07 | ||
|
|
c9bb65133a | ||
|
|
37f7d1d08a | ||
|
|
1fa88b9475 | ||
|
|
22bc3e9571 | ||
|
|
7fe5c33048 | ||
|
|
29c6b789a2 | ||
|
|
6fbed193f7 | ||
|
|
aa856e2f5c | ||
|
|
77cacda0fa | ||
|
|
748055ac52 | ||
|
|
c122492470 | ||
|
|
14b2fd050e | ||
|
|
bdd4bb0003 | ||
|
|
59d1a90820 | ||
|
|
1b794f00bd | ||
|
|
5b3862f58e | ||
|
|
4647b88071 | ||
|
|
267e7a3d5b | ||
|
|
c042d4253b | ||
|
|
347d402f48 | ||
|
|
e91ab5c660 | ||
|
|
4d23b46916 | ||
|
|
f95725369a | ||
|
|
c89bc3b9d5 | ||
|
|
b71607ea7d | ||
|
|
bb316bd949 | ||
|
|
eff99ffabe | ||
|
|
63437571b8 | ||
|
|
ec61d62c63 | ||
|
|
3f1582e053 | ||
|
|
a137fb76ed | ||
|
|
a940915e48 | ||
|
|
ab2b0e6560 | ||
|
|
817546c6cf | ||
|
|
a86ddc9934 | ||
|
|
39842b5ea9 | ||
|
|
18051435e5 | ||
|
|
45e2f7f7f5 | ||
|
|
36ae568349 | ||
|
|
e48014ba61 | ||
|
|
0f5b3ae859 | ||
|
|
55b67ed735 | ||
|
|
0376e3d574 | ||
|
|
9fbd5ed596 | ||
|
|
23c711947b | ||
|
|
0cca8e0bcf | ||
|
|
efa45ad907 | ||
|
|
89e554b333 | ||
|
|
112a9cb532 | ||
|
|
68105c6289 | ||
|
|
303a32dce6 | ||
|
|
fa910bac20 | ||
|
|
1291f31f3c | ||
|
|
c253760737 | ||
|
|
9afef92763 | ||
|
|
8607ea9a84 | ||
|
|
c673cf84c2 | ||
|
|
92725ee3df | ||
|
|
a7d9944cc1 | ||
|
|
24d2ac270c | ||
|
|
d8eec5dd2e | ||
|
|
b954668636 | ||
|
|
de751ed623 | ||
|
|
fb2b54b314 | ||
|
|
1a55f9217d | ||
|
|
06ca569554 | ||
|
|
d0702f663b | ||
|
|
3c273f4a66 | ||
|
|
6a78221261 | ||
|
|
fe8156793a | ||
|
|
3f876fec80 | ||
|
|
024cfc17c5 | ||
|
|
95d671281a | ||
|
|
38ee3fd5a3 | ||
|
|
52ee5096af | ||
|
|
4f4fef3832 | ||
|
|
ec72818988 | ||
|
|
8fad39725b | ||
|
|
b3718a1605 | ||
|
|
8784961e1e | ||
|
|
133188f14c | ||
|
|
cccaf642a6 | ||
|
|
38886f6b58 | ||
|
|
ed401de169 | ||
|
|
5759b1b1a2 | ||
|
|
f68b692ce4 | ||
|
|
c06320e28b | ||
|
|
c0184ba350 | ||
|
|
4e659cfeee | ||
|
|
50c4a707e5 | ||
|
|
1cef31e47b | ||
|
|
744b6517bf | ||
|
|
4ae8824faf | ||
|
|
7edf041747 | ||
|
|
db62e10673 | ||
|
|
f51d525d9c | ||
|
|
d924d01677 | ||
|
|
aa81b25fe6 | ||
|
|
2d72956591 | ||
|
|
fac55160fa | ||
|
|
e69f5fff3b | ||
|
|
5482146bc4 | ||
|
|
208fe454bb | ||
|
|
9a876f7003 | ||
|
|
6514504ddd | ||
|
|
98c4b08f15 | ||
|
|
90352cd858 | ||
|
|
71ccd0854d | ||
|
|
f874059fe9 | ||
|
|
9cb232c198 | ||
|
|
8e1137b5dd | ||
|
|
ef39c128c2 | ||
|
|
c18788fbc9 | ||
|
|
31a57cf0dd | ||
|
|
8e4236a3a9 | ||
|
|
e4d60b7a55 | ||
|
|
f8be072b99 | ||
|
|
d54e2fba9e | ||
|
|
4f495e2b46 | ||
|
|
fb8fbb2372 | ||
|
|
c0e818afc6 | ||
|
|
26673d3ada | ||
|
|
7e3c46db61 | ||
|
|
e7eab83d8f | ||
|
|
25c4648e2e | ||
|
|
8770284661 | ||
|
|
8d0b880e5a | ||
|
|
25442a89ca | ||
|
|
6ab08e91a2 | ||
|
|
45a5b88824 | ||
|
|
fac2cd9464 | ||
|
|
da626a4035 | ||
|
|
0c71707fb5 | ||
|
|
0869765e2b | ||
|
|
22354227be | ||
|
|
2560704839 | ||
|
|
c6d48f477c | ||
|
|
96b2a15290 | ||
|
|
d7d4290099 | ||
|
|
14e68bc9e2 | ||
|
|
bd0b5f4cdb | ||
|
|
810095d287 | ||
|
|
2988230b07 | ||
|
|
5fde1eb3e7 | ||
|
|
d42beda3da | ||
|
|
bf81159558 | ||
|
|
dcefad1427 | ||
|
|
1afd7ae332 | ||
|
|
197b7f2a6c | ||
|
|
a240fc81ce | ||
|
|
6628db89af | ||
|
|
b4ea8e58fa | ||
|
|
6ff11c5243 | ||
|
|
75f178636b | ||
|
|
1084523c92 | ||
|
|
869f9e0d86 | ||
|
|
8744013013 | ||
|
|
2e786cc4d1 | ||
|
|
393bb7245c | ||
|
|
d718eca935 | ||
|
|
46e29dfb2b | ||
|
|
d67ae5c2be | ||
|
|
b23960e8d7 | ||
|
|
ef6fd35e85 | ||
|
|
aa73a10fc4 | ||
|
|
0580d0c8a3 | ||
|
|
5f0c6e508d | ||
|
|
606367701f | ||
|
|
1cce38cae6 | ||
|
|
d5534cf545 | ||
|
|
0a749023cb | ||
|
|
8d007e7029 | ||
|
|
cf39c66017 | ||
|
|
e09132350d | ||
|
|
503e59b12b | ||
|
|
26848641cd | ||
|
|
a3fe390810 | ||
|
|
be86f84ef8 | ||
|
|
ab85ef6b7b | ||
|
|
620ff65cbe | ||
|
|
7f23f848fe | ||
|
|
459d5ddccd | ||
|
|
43808c01ec | ||
|
|
b587d7b5ad | ||
|
|
ef450edfea | ||
|
|
dc7cd95f6d | ||
|
|
c91ae0c4c4 | ||
|
|
f3bdc55348 | ||
|
|
1d666bf7f0 | ||
|
|
3ea7d4d217 | ||
|
|
3793ddc2e8 | ||
|
|
3fa9e3f31b | ||
|
|
dcc6ec797e | ||
|
|
b0ef974590 | ||
|
|
f62c82c797 | ||
|
|
6da12d1a39 | ||
|
|
bc1cde38da | ||
|
|
2af14e47b1 | ||
|
|
d380f69310 | ||
|
|
824c5072e8 | ||
|
|
a0e9e52e70 | ||
|
|
47c32738a6 | ||
|
|
f02cd9df82 | ||
|
|
4cfd970d5f | ||
|
|
659817b4f1 | ||
|
|
7e3d8d65f5 | ||
|
|
b717c74a81 | ||
|
|
042174290f | ||
|
|
8aebb7f84d | ||
|
|
b325212182 | ||
|
|
1e99945515 | ||
|
|
f0e47e43bc | ||
|
|
7b150ab407 | ||
|
|
044382047d | ||
|
|
46fb6377ee | ||
|
|
79803d2b3d | ||
|
|
d63ced8a5c | ||
|
|
03d92eb5cd | ||
|
|
da317b5a85 | ||
|
|
c0e2e9d011 | ||
|
|
69b54337bb | ||
|
|
b945dfc71d | ||
|
|
b887b76c29 | ||
|
|
45d2affdfb | ||
|
|
baa74958c5 | ||
|
|
eac6b23811 | ||
|
|
c709fae251 | ||
|
|
d959aad41f | ||
|
|
4c01fc4c0e | ||
|
|
7db231ca54 | ||
|
|
18075b85c7 | ||
|
|
e997c63480 | ||
|
|
9393a39452 | ||
|
|
74786a32ac | ||
|
|
308110db49 | ||
|
|
3b4f0a8f4e | ||
|
|
4c211b7110 | ||
|
|
21f6b10023 | ||
|
|
f9e6fab3ea | ||
|
|
53a1474785 | ||
|
|
bafc8caaf5 | ||
|
|
55b0270b34 | ||
|
|
4c36083354 | ||
|
|
a91e464787 | ||
|
|
bac1a5ec3e | ||
|
|
397861c3cc | ||
|
|
0020f278a5 | ||
|
|
56c789ed61 | ||
|
|
aa2978976c | ||
|
|
73d9d6e1d3 | ||
|
|
92706a6550 | ||
|
|
74ccfd1e4d | ||
|
|
8f8ea4de92 | ||
|
|
104ec7de6e | ||
|
|
a1149b8f8d | ||
|
|
f107803550 | ||
|
|
039f02456d | ||
|
|
9400e5bcc9 | ||
|
|
4cae491438 | ||
|
|
93534832b9 | ||
|
|
9cd2b36c97 | ||
|
|
a0b80e4061 | ||
|
|
ccc62a202b | ||
|
|
0a1d45b0b9 | ||
|
|
56fcae1cb2 | ||
|
|
7c16a8be31 | ||
|
|
cc236c1f72 | ||
|
|
39d9dd76dc | ||
|
|
f282dcd677 | ||
|
|
55d4a5fe3a | ||
|
|
affa51856b | ||
|
|
12a5b6b4c6 | ||
|
|
da647d105b | ||
|
|
74f23497dc | ||
|
|
4fad334e18 | ||
|
|
94f38d0622 | ||
|
|
f7a290d0b3 | ||
|
|
a86ff15f7b | ||
|
|
030cfbffa4 | ||
|
|
ed1c276739 | ||
|
|
f14ad11dd0 | ||
|
|
9c9fadb5a1 | ||
|
|
663aff4b24 | ||
|
|
a13c321de8 | ||
|
|
ba85ffb292 | ||
|
|
2654a8e86a | ||
|
|
cef54fbf6d | ||
|
|
f9e8178d25 | ||
|
|
71888adb09 | ||
|
|
f74f01ca77 | ||
|
|
e2960e3ed6 | ||
|
|
e4d8ddcf1b | ||
|
|
d6ae91312e | ||
|
|
e1a9fe9691 | ||
|
|
33c84d4684 | ||
|
|
95355f9036 | ||
|
|
938b78786e | ||
|
|
895bff9b62 | ||
|
|
cf69b9fcb3 | ||
|
|
58525bd09c | ||
|
|
5a069f1076 | ||
|
|
84aa1ab527 | ||
|
|
2cfe59f124 | ||
|
|
ee6ac77f8b | ||
|
|
b6aa31b245 | ||
|
|
e542da1f52 | ||
|
|
f7aa808fa7 | ||
|
|
050ab738e4 | ||
|
|
483ad87c1d | ||
|
|
cfe46f38ee | ||
|
|
d1ccc692ae | ||
|
|
0c0ae6560a | ||
|
|
c9f43a60b9 | ||
|
|
3d30c0bd87 | ||
|
|
3624717d84 | ||
|
|
07b286650c | ||
|
|
4273fc4d23 | ||
|
|
32adbc8c77 | ||
|
|
7310fe82d3 | ||
|
|
189e69284e | ||
|
|
0ccb8a77ba | ||
|
|
e8d6df22cb | ||
|
|
5861630dec | ||
|
|
c1fea52a93 | ||
|
|
1980e945da | ||
|
|
16a42619b5 | ||
|
|
54c05f9027 | ||
|
|
9879f645f6 | ||
|
|
bbac361670 | ||
|
|
84cbcc5a97 | ||
|
|
8c1c844007 | ||
|
|
1dddd77ae1 | ||
|
|
72447c9b9c | ||
|
|
025e1293fa | ||
|
|
df53d836e5 | ||
|
|
e83e7870ce | ||
|
|
d8e14acbbf | ||
|
|
4ef5ffe7fd | ||
|
|
5072b9c8a5 | ||
|
|
959e6e83ea | ||
|
|
1528c70a30 | ||
|
|
6af143900a | ||
|
|
43cc975ff7 | ||
|
|
0397773b22 | ||
|
|
5ed77b032e | ||
|
|
b5ed7b8b72 | ||
|
|
a2165403a7 | ||
|
|
324bec41c4 | ||
|
|
0db6423c26 | ||
|
|
dc27638ca8 | ||
|
|
c00bd0b8d0 | ||
|
|
22e1b0f22e | ||
|
|
e6a9f5a704 | ||
|
|
fd92d7b02a | ||
|
|
25b50323fa | ||
|
|
7752d24b21 | ||
|
|
00c6fc17ac | ||
|
|
4e5dfbc1c9 | ||
|
|
24ceb0f083 | ||
|
|
48eb6a3f22 | ||
|
|
123f92ca1e | ||
|
|
917dfe74e6 | ||
|
|
d8c4609ee0 | ||
|
|
962955f06a | ||
|
|
51abf60b3a | ||
|
|
48c22567c2 | ||
|
|
17f98804c6 | ||
|
|
e884ff1f59 | ||
|
|
a34775a6c2 | ||
|
|
c0712583f2 | ||
|
|
d72926a5bb | ||
|
|
a802dc4b68 | ||
|
|
af6eb5359e | ||
|
|
727ad4b651 | ||
|
|
5e695d3222 | ||
|
|
55c296a229 | ||
|
|
27762c2ab9 | ||
|
|
f63ab0faeb | ||
|
|
cfbbc238f6 | ||
|
|
2b32ede4d8 | ||
|
|
04da0447b5 | ||
|
|
45ce0566e7 | ||
|
|
14b31cf4c8 | ||
|
|
c1c9438220 | ||
|
|
13ae2e9401 | ||
|
|
beec96416f | ||
|
|
253913f8d9 | ||
|
|
7e9d344487 | ||
|
|
cfaa6556d6 | ||
|
|
b062af2c4b | ||
|
|
b7f0c90bf7 | ||
|
|
b3816b98a1 | ||
|
|
9e6f7fa960 | ||
|
|
31d353ab0e | ||
|
|
3a57c3b6d8 | ||
|
|
8740cc0fc7 | ||
|
|
ae76bb3928 | ||
|
|
111776d878 | ||
|
|
e95da77fe8 | ||
|
|
bc48ba874d | ||
|
|
ced37044ca | ||
|
|
426d3e871f | ||
|
|
cbb630fd6b | ||
|
|
8041bee9fd | ||
|
|
6da6baa213 | ||
|
|
ba8e98520c | ||
|
|
ddb9a4a60e | ||
|
|
4366c11ec0 | ||
|
|
39b631a3a8 | ||
|
|
e061978bd5 | ||
|
|
2515ba9455 | ||
|
|
afe97233aa | ||
|
|
8b1ed1297b | ||
|
|
765402a2a0 | ||
|
|
e5c8caf5ff | ||
|
|
1ec21c2bfd | ||
|
|
7470c1bbd9 | ||
|
|
2893693d17 | ||
|
|
0b132cadcf | ||
|
|
3177fdfa74 | ||
|
|
08f97efcd4 | ||
|
|
71f1f7137a | ||
|
|
220b40ff9c | ||
|
|
97eff9c8a1 | ||
|
|
adf4a5c407 | ||
|
|
42d6880ac4 | ||
|
|
35aa06c230 | ||
|
|
be3284e05e | ||
|
|
8bb24fa034 | ||
|
|
2235dbd2a0 | ||
|
|
f6bd52014e | ||
|
|
accde93fff | ||
|
|
69a9570186 | ||
|
|
c215e61541 | ||
|
|
67799eac95 | ||
|
|
4184574164 | ||
|
|
d234dbdca2 | ||
|
|
dfd2df99e6 | ||
|
|
b32887f2ce | ||
|
|
a48a7acd51 | ||
|
|
8f9f5b2849 | ||
|
|
72fd78ac26 | ||
|
|
16aeb2d09d | ||
|
|
2d87ba534c | ||
|
|
e671f0343e | ||
|
|
e16c3f3f80 | ||
|
|
b303fdcfd7 | ||
|
|
b78dc3eca8 | ||
|
|
1bf3d33765 | ||
|
|
cd4cb240c8 | ||
|
|
82bc0aec6b | ||
|
|
c94da47ae8 | ||
|
|
7de540dc74 | ||
|
|
b3f23d41d3 | ||
|
|
466c02a886 | ||
|
|
265d1f6331 | ||
|
|
dcf47f558e | ||
|
|
facacc65aa | ||
|
|
442c543d27 | ||
|
|
8c5a458798 | ||
|
|
98d42b0ade | ||
|
|
75850bd315 | ||
|
|
5efc1e5de8 | ||
|
|
d48e749d54 | ||
|
|
6f129d9c68 | ||
|
|
acc390f6ef | ||
|
|
c8a514aa37 | ||
|
|
0ea09972b4 | ||
|
|
3837841882 | ||
|
|
a05d2d44e9 | ||
|
|
ebcf8eb03b | ||
|
|
bc407ee59c | ||
|
|
a32aee60c2 | ||
|
|
0266c5516c | ||
|
|
32470efb22 | ||
|
|
bbcc2312db | ||
|
|
07085f1ff2 | ||
|
|
0198024db0 | ||
|
|
bc835f59d4 | ||
|
|
a97ee201d8 | ||
|
|
c07bf466b2 | ||
|
|
3475ed59c8 | ||
|
|
93292e701d | ||
|
|
243cb5af61 | ||
|
|
26274bd75a | ||
|
|
97cc6cde67 | ||
|
|
619fe74fc0 | ||
|
|
4453d055ea | ||
|
|
aa689a7a29 | ||
|
|
3fb44d7693 | ||
|
|
5db9ff11d5 | ||
|
|
5e538ef051 | ||
|
|
2078fa25f8 | ||
|
|
b86ae3f7f0 | ||
|
|
e36f92b18e | ||
|
|
dea43ee008 | ||
|
|
6053a8caa5 | ||
|
|
bf96903d6e | ||
|
|
e8c7860f12 | ||
|
|
2b63b2c52a | ||
|
|
0ad1f1576b | ||
|
|
5febb3dc23 | ||
|
|
a885444740 | ||
|
|
d60151a6cc | ||
|
|
3ccc11d53c | ||
|
|
cfda0a93c4 | ||
|
|
92894277a9 | ||
|
|
1580226757 | ||
|
|
ffa1f1703d | ||
|
|
99dc989c39 | ||
|
|
8d71098a0f | ||
|
|
bd0d09584b | ||
|
|
1e59147d64 | ||
|
|
3da96faa12 | ||
|
|
98e4257939 | ||
|
|
eb974ec1d8 | ||
|
|
30ad852492 | ||
|
|
8bc0096b00 | ||
|
|
f73c81d6c3 | ||
|
|
ee963e0c2a | ||
|
|
99af660e48 | ||
|
|
6d300e1110 | ||
|
|
b61614f87b | ||
|
|
fd83769bde | ||
|
|
eabe3ada6f | ||
|
|
3264658269 | ||
|
|
73cbde4098 | ||
|
|
e5fc0819b4 | ||
|
|
97ec312c72 | ||
|
|
05edfdc9c1 | ||
|
|
067a7a544b | ||
|
|
a150691b5e | ||
|
|
b8d858ccca | ||
|
|
ee1ac1b2c3 | ||
|
|
a2329980c8 | ||
|
|
ea8aa3fff2 | ||
|
|
c5d8a5a6b2 | ||
|
|
ef01717562 | ||
|
|
8dd8412ae3 | ||
|
|
5a589c885a | ||
|
|
dfa9f203e6 | ||
|
|
adb8f80b86 | ||
|
|
92ca739002 | ||
|
|
c19d3e8063 | ||
|
|
30624d4ad8 | ||
|
|
9c60182da4 | ||
|
|
1caaa8c20a | ||
|
|
c2a1cd94d0 | ||
|
|
df4c6ca1c8 | ||
|
|
cd6af45afb | ||
|
|
119079ace5 | ||
|
|
dff10045da | ||
|
|
dda4586a2f | ||
|
|
dabd2f29af | ||
|
|
029b91a323 | ||
|
|
ac04e04016 | ||
|
|
3a6db04be5 | ||
|
|
eb65c5ad1b | ||
|
|
c2c1632c0e | ||
|
|
2495b5b89b | ||
|
|
176ac54cdf | ||
|
|
e07c848da7 | ||
|
|
6b8f7dba4f | ||
|
|
825e4cca5a | ||
|
|
ab16b1184d | ||
|
|
127261100e | ||
|
|
67f8af7e3e | ||
|
|
d2c0aa9949 | ||
|
|
0d26b21a2c | ||
|
|
2d384a68d2 | ||
|
|
414eaea413 | ||
|
|
a4ae9c70df | ||
|
|
6f94acd0f2 | ||
|
|
8e6606fb5a | ||
|
|
cfa4256df5 | ||
|
|
4912b8a893 | ||
|
|
f75e55aa11 | ||
|
|
88305b3350 | ||
|
|
d6333a3969 | ||
|
|
538bb3e871 | ||
|
|
649d8af36b | ||
|
|
faf5ea2122 | ||
|
|
291aa872c4 | ||
|
|
2e575bb2d8 | ||
|
|
7c8c735e05 | ||
|
|
b21a202142 | ||
|
|
032d46465d | ||
|
|
6f120ff34a | ||
|
|
0e5358a701 | ||
|
|
7be16eab06 | ||
|
|
58580bd866 | ||
|
|
be316ff602 | ||
|
|
dfc8aacbae | ||
|
|
8c04e8e56c | ||
|
|
cd6750a38d | ||
|
|
71681b936f | ||
|
|
4923c79496 | ||
|
|
3f0f5a09a0 | ||
|
|
f7b7af3004 | ||
|
|
5a88a5ca60 | ||
|
|
6567819294 | ||
|
|
e69611fa22 | ||
|
|
48074ea93b | ||
|
|
4dc8f2c2e1 | ||
|
|
b131dacf39 | ||
|
|
32f17d5e13 | ||
|
|
bee3c06a07 | ||
|
|
8aa227b052 | ||
|
|
eaf25c4a5f | ||
|
|
f90beca449 | ||
|
|
724dcb88c0 | ||
|
|
e5ec5242c6 | ||
|
|
c3f7faffd3 | ||
|
|
43a1ce66a1 | ||
|
|
9da165c1a7 | ||
|
|
02e550d3ad | ||
|
|
680fac0674 | ||
|
|
ea49295774 | ||
|
|
0edb895c2c | ||
|
|
981719dee1 | ||
|
|
1466e68aa1 | ||
|
|
f1412193ef | ||
|
|
b6fdc5595d | ||
|
|
fda68bc5dd | ||
|
|
487281cc7a | ||
|
|
751dc73ebe | ||
|
|
7f8836daa4 | ||
|
|
5c048ac20a | ||
|
|
11ed9e8c85 | ||
|
|
0ac9ec6001 | ||
|
|
ecb64a0aa2 | ||
|
|
8626122679 | ||
|
|
8ab539b518 | ||
|
|
9078c2a536 | ||
|
|
fd20e4a400 | ||
|
|
1a64e40b21 | ||
|
|
cbfba4b45b | ||
|
|
f21a98f37f | ||
|
|
0edd6985ec | ||
|
|
98a646fa62 | ||
|
|
1d69436b44 | ||
|
|
d6c7551120 | ||
|
|
fb53e89023 | ||
|
|
d28beaa4dc | ||
|
|
ac06567617 | ||
|
|
d0a2c077ff | ||
|
|
ebf07626de | ||
|
|
9ef8bb4cdc | ||
|
|
bc8a53aadd | ||
|
|
03c4a1bc73 | ||
|
|
d93163896f | ||
|
|
08bdbc0bcc | ||
|
|
35d6a99775 | ||
|
|
cdb0b4b49e | ||
|
|
e45e86fcc1 | ||
|
|
24944762d7 | ||
|
|
9589d340b9 | ||
|
|
91afbf106e | ||
|
|
aff11359ae | ||
|
|
aff8cef5f3 | ||
|
|
d6e0625fc8 | ||
|
|
879855744d | ||
|
|
b5ab0c9097 | ||
|
|
2c398f81d2 | ||
|
|
520fcadd3f | ||
|
|
e8eb9f91b9 | ||
|
|
8bfb338eee | ||
|
|
bbb655abdd | ||
|
|
095e5527e3 | ||
|
|
4eb8c34855 | ||
|
|
e3185b9560 | ||
|
|
449adfae59 | ||
|
|
714e61b137 | ||
|
|
d0e4689907 | ||
|
|
1996e64c9b | ||
|
|
e2fb617cc0 | ||
|
|
fd88aff195 | ||
|
|
f7a1cca861 | ||
|
|
e3fb996a80 | ||
|
|
fe53037e53 | ||
|
|
438f90d859 | ||
|
|
339ed4e47b | ||
|
|
5a527de287 | ||
|
|
3ff550914f | ||
|
|
742c8fb43c | ||
|
|
d43f3cebc6 | ||
|
|
9d452241ad | ||
|
|
c19a51e1b6 | ||
|
|
1b41a8f467 | ||
|
|
f933fc0167 | ||
|
|
8cfb239aac | ||
|
|
a974c6fa99 | ||
|
|
998f780fd2 | ||
|
|
b022d46d47 | ||
|
|
f7793e54b1 | ||
|
|
1e61033667 | ||
|
|
53caa5e422 | ||
|
|
dd72e73284 | ||
|
|
40d20846d8 | ||
|
|
204913c63d | ||
|
|
6c30437c47 | ||
|
|
dd7fe47dfd | ||
|
|
50323c3d23 | ||
|
|
69e0aa338d | ||
|
|
6dcd06b63c | ||
|
|
42d77080f3 | ||
|
|
fbb4998999 | ||
|
|
e4e57ce31f | ||
|
|
14744a854f | ||
|
|
2c6afb4244 | ||
|
|
24907e456d | ||
|
|
2039885d96 | ||
|
|
daacdb50f3 | ||
|
|
21155b1b80 | ||
|
|
5d69167a64 | ||
|
|
5db27a835f | ||
|
|
c8e423e9cf | ||
|
|
be3465c5ca | ||
|
|
637e037e27 | ||
|
|
3e6bcd83cc | ||
|
|
dc4aeca427 | ||
|
|
9eb09f14cb | ||
|
|
a55fc364a0 | ||
|
|
2f90949560 | ||
|
|
a940219321 | ||
|
|
aaf6b11dc9 | ||
|
|
0f0913bfe5 | ||
|
|
5569337c40 | ||
|
|
ba2f47ead6 | ||
|
|
b52782deb8 | ||
|
|
2c6bf93eb5 | ||
|
|
4a11307b24 | ||
|
|
d8183c056c | ||
|
|
6ad28dadd4 | ||
|
|
2c489c600c | ||
|
|
abc782f5e6 | ||
|
|
a18e366493 | ||
|
|
12e95df068 | ||
|
|
a078f73e84 | ||
|
|
8f879cd3eb | ||
|
|
8385ceef79 | ||
|
|
83cc8f3ba8 | ||
|
|
cab6ab8e17 | ||
|
|
e9fbed71ae | ||
|
|
b4121f262d | ||
|
|
256a2fa9c6 | ||
|
|
0f362b7fac | ||
|
|
b504e2cd11 | ||
|
|
ea84fd70af | ||
|
|
09efb83ef3 | ||
|
|
b2aeb14094 | ||
|
|
0ed8fd6cbd | ||
|
|
2f1a3b9789 | ||
|
|
d068139d81 | ||
|
|
764e937c43 | ||
|
|
f72cf35348 | ||
|
|
fe1a75d1fd | ||
|
|
3dc9e2f4fa | ||
|
|
3bd8cf69a1 | ||
|
|
2c8725558e | ||
|
|
f68f02d346 | ||
|
|
8fd78199e2 | ||
|
|
1bde86a33f | ||
|
|
b6d4ae2732 | ||
|
|
680dbf138a | ||
|
|
3752a1c691 | ||
|
|
3a00c177d3 | ||
|
|
845e5e7986 | ||
|
|
57d2db36e6 | ||
|
|
8bfea656c4 | ||
|
|
ea2c03e28b | ||
|
|
f29b375ed4 | ||
|
|
07f1e0bcb5 | ||
|
|
0b94297c64 | ||
|
|
8655c2d2a6 | ||
|
|
da9c673ec4 | ||
|
|
1e6863ee19 | ||
|
|
00eb6b4efc | ||
|
|
002826d84f | ||
|
|
289e081e2e | ||
|
|
a717e9626e | ||
|
|
83f20c1cdb | ||
|
|
bc8adff70a | ||
|
|
c4623e2447 | ||
|
|
99fba3b83a | ||
|
|
2580caf864 | ||
|
|
f2d631e42d | ||
|
|
d86aefb518 | ||
|
|
3782ae1647 | ||
|
|
36e1a121ed | ||
|
|
2e52dd59ee | ||
|
|
d7a444d9ab | ||
|
|
f9e2b50826 | ||
|
|
32a32fcf5c | ||
|
|
9435acfa71 | ||
|
|
35ad3be969 | ||
|
|
9cb20c3886 | ||
|
|
a2c9867902 | ||
|
|
58a3f33200 | ||
|
|
25bac03bab | ||
|
|
770cea9329 | ||
|
|
30c11a8b42 | ||
|
|
27a01f6c61 | ||
|
|
bf27ade251 | ||
|
|
9d88b9eed3 | ||
|
|
04ea573caa | ||
|
|
d9eefd667c | ||
|
|
3ad98f3783 | ||
|
|
b89cf6f480 | ||
|
|
4397da144f | ||
|
|
cf8f0ca225 | ||
|
|
885242018f | ||
|
|
1abfe5de63 | ||
|
|
04dd1f9dac | ||
|
|
114294e24a | ||
|
|
dfa4cd4ae3 | ||
|
|
65d5a6cb81 | ||
|
|
64e87b761f | ||
|
|
1021615848 | ||
|
|
69c1ec97c9 | ||
|
|
45e7d64aeb | ||
|
|
b86a01ded1 | ||
|
|
e67af67180 | ||
|
|
9d03147f4e | ||
|
|
c313c4501b | ||
|
|
538356846d | ||
|
|
55d008d71f | ||
|
|
401a30e02c | ||
|
|
9816272b7b | ||
|
|
d72d2decd5 | ||
|
|
43c05d1d85 | ||
|
|
14f35a8c6b | ||
|
|
ffe1549cad | ||
|
|
3ca58a438d | ||
|
|
5da4cead67 | ||
|
|
0000a7f0b9 | ||
|
|
27ac24b1e3 | ||
|
|
95495926fc | ||
|
|
0f254c0b6c | ||
|
|
b27478876e | ||
|
|
a3734f2e15 | ||
|
|
1b843fba9c | ||
|
|
35f17db141 | ||
|
|
bcb364c4d4 | ||
|
|
6e16cb4b30 | ||
|
|
40e71299a1 | ||
|
|
0148cf06d0 | ||
|
|
ffa31ca0e7 | ||
|
|
ba3b8a21ae | ||
|
|
05209b01b9 | ||
|
|
4e0d0c2c20 | ||
|
|
225284073f | ||
|
|
ccef51095a | ||
|
|
cd77a1a457 | ||
|
|
6aeca98cd4 | ||
|
|
07a3b3f00b | ||
|
|
77e0cdcc3e | ||
|
|
e316dd3330 | ||
|
|
b511653e74 | ||
|
|
b5e37a6ce8 | ||
|
|
a34ed92fac | ||
|
|
4ff8509a0e | ||
|
|
e76936abfc | ||
|
|
9471fd8e46 | ||
|
|
2d4ceb8f9f | ||
|
|
4c40ee8e6e | ||
|
|
ddcf46fc73 | ||
|
|
7db234f958 | ||
|
|
f6f7959d28 | ||
|
|
7fa2f474fe | ||
|
|
d5e8044575 | ||
|
|
c0721e105f | ||
|
|
a475e38078 | ||
|
|
932b960aa9 | ||
|
|
24b12e23ea | ||
|
|
2a5d6e04fc | ||
|
|
4459d9d4e0 | ||
|
|
2be3158aff | ||
|
|
f1ad469861 | ||
|
|
0c05ee82b1 | ||
|
|
4f97275d24 | ||
|
|
4b9bfca767 | ||
|
|
202a4c4105 | ||
|
|
090bc2ad10 | ||
|
|
000c7efb1a | ||
|
|
90ad08a00d | ||
|
|
90e1e2436c | ||
|
|
21f5dad1d2 | ||
|
|
bc8bb352a8 | ||
|
|
274310e35a | ||
|
|
0bcc1642c7 | ||
|
|
d1d6605dcf | ||
|
|
da94d6214b | ||
|
|
67e49db797 | ||
|
|
de9100c489 | ||
|
|
4348e1efa4 | ||
|
|
6de3dba239 | ||
|
|
021cf9b8f6 | ||
|
|
ca087e6fa7 | ||
|
|
6c9e28232f | ||
|
|
ceac8e2dc9 | ||
|
|
98cf6eec71 | ||
|
|
5a00767370 | ||
|
|
4c90d22e43 | ||
|
|
e0e153eafb | ||
|
|
5c3c2623f2 | ||
|
|
34fc326a37 | ||
|
|
36745608bf | ||
|
|
090d35f306 | ||
|
|
347f5c132e | ||
|
|
d6f8162f17 | ||
|
|
b0b0f3640c | ||
|
|
4fd08332cc | ||
|
|
aaaffb823f | ||
|
|
76636b64db | ||
|
|
be6ed43223 | ||
|
|
9f2196abfb | ||
|
|
90a75ee045 | ||
|
|
2a21b4855e | ||
|
|
8f769d53a3 | ||
|
|
9ee250b597 | ||
|
|
074d7e7c8d | ||
|
|
870d48dc81 | ||
|
|
9ca10c25d4 | ||
|
|
8e2cc1c883 | ||
|
|
af09f4aca8 | ||
|
|
ab63ca6d92 | ||
|
|
400845ce6c | ||
|
|
351b07bb34 | ||
|
|
f861d44d55 | ||
|
|
2b7e4cbdf4 | ||
|
|
df10bde2db | ||
|
|
0da141e7bc | ||
|
|
6313a5eeb1 | ||
|
|
26de85c1de | ||
|
|
a54f464a13 | ||
|
|
bfbc596348 | ||
|
|
7508bd216e | ||
|
|
8cfc5dda37 | ||
|
|
b81737bc0f | ||
|
|
1c23be8911 | ||
|
|
5f86e31d1e | ||
|
|
746119bd45 | ||
|
|
385aa6df92 | ||
|
|
097810a057 | ||
|
|
3a7fcc2d3d | ||
|
|
95bb838699 | ||
|
|
81055523a0 | ||
|
|
e9fbab0f26 | ||
|
|
53ca7a1143 | ||
|
|
6c70d37f1c | ||
|
|
447073560f | ||
|
|
2c131f172a | ||
|
|
1564e3d530 | ||
|
|
3d9a732c4a | ||
|
|
4819bea378 | ||
|
|
030ce95dea | ||
|
|
2a1671ba9b | ||
|
|
a65c79cb02 | ||
|
|
dcbe4ffd4a | ||
|
|
215b919362 | ||
|
|
58df656c65 | ||
|
|
a8c91e2452 | ||
|
|
806a454b05 | ||
|
|
705754e823 | ||
|
|
fe527ff2a9 | ||
|
|
041e77f688 | ||
|
|
b927f6ce29 | ||
|
|
519d376071 | ||
|
|
d9ee9bf5e3 | ||
|
|
67d5ea83e7 | ||
|
|
7875138c08 | ||
|
|
43b012b32e | ||
|
|
c096656eff | ||
|
|
2dd295118c | ||
|
|
567997ef3c | ||
|
|
c698af17ae | ||
|
|
39b70a9e09 | ||
|
|
9b557cafd8 | ||
|
|
fe4aee177d | ||
|
|
7c4347736c | ||
|
|
16e07d475f | ||
|
|
2125bb2223 | ||
|
|
72a3ab1d6c | ||
|
|
639247a8b0 | ||
|
|
f0caac242c | ||
|
|
e066fbf36a | ||
|
|
b215dbde19 | ||
|
|
1325e4c501 | ||
|
|
2e2938616d | ||
|
|
53a7eab3e8 | ||
|
|
6bd4a34e69 | ||
|
|
d27f2eb214 | ||
|
|
b547d3577b | ||
|
|
4b5988c269 | ||
|
|
cfd3a7d126 | ||
|
|
0471a192ab | ||
|
|
5c6a7d4b94 | ||
|
|
ca01fb9f7d | ||
|
|
b176629b44 | ||
|
|
113cb85c46 | ||
|
|
5b6f5ebf9d | ||
|
|
21bbe68c97 | ||
|
|
28c75e09a9 | ||
|
|
69f453c73c | ||
|
|
dab0435d9b | ||
|
|
b5770be71f | ||
|
|
bf3822e8a5 | ||
|
|
cb6c42ea44 | ||
|
|
3dc3769088 | ||
|
|
3d18c4015a | ||
|
|
610d45bb32 | ||
|
|
66bc4184d8 | ||
|
|
b024d10185 | ||
|
|
e847c015a5 | ||
|
|
10474f8e2a | ||
|
|
8a99eef4fb | ||
|
|
da66efe7a5 | ||
|
|
1bd94b4e41 | ||
|
|
e862a1c4cc | ||
|
|
8b55920acf | ||
|
|
32df811765 | ||
|
|
91d6f83de4 | ||
|
|
7c8f857aaf | ||
|
|
1f970c3bdb | ||
|
|
700cab686b | ||
|
|
af06e0335a | ||
|
|
4a8dc82bd2 | ||
|
|
8a4e2b1ea0 | ||
|
|
1f52717f1e | ||
|
|
304285e874 | ||
|
|
d4eddc6e2c | ||
|
|
6d79521922 | ||
|
|
95db5f93cb | ||
|
|
b900bc9cce | ||
|
|
fc066c21bf | ||
|
|
32d5118266 | ||
|
|
3775c8e50a | ||
|
|
99fbc0dfd5 | ||
|
|
e32d230974 | ||
|
|
c9308efbec | ||
|
|
636551d2e9 | ||
|
|
347d6c2768 | ||
|
|
4f654fb489 | ||
|
|
80e7fd93c6 | ||
|
|
95efb2ae5e | ||
|
|
8d3a647d16 | ||
|
|
53afe6cb68 | ||
|
|
391b8098a3 | ||
|
|
190948336a | ||
|
|
fcda27e251 | ||
|
|
a48a07603c | ||
|
|
d930e2a1be | ||
|
|
7e2166903f | ||
|
|
d5c0ca4a9d | ||
|
|
7695e76494 | ||
|
|
78af47362c | ||
|
|
18a890ed51 | ||
|
|
5f731dd1f6 | ||
|
|
51990142d5 | ||
|
|
b840169a8c | ||
|
|
94fdeb2378 | ||
|
|
68e7ee7f07 | ||
|
|
77d5ecc82a | ||
|
|
437379413e | ||
|
|
ddb7896df1 | ||
|
|
66cdb9a067 | ||
|
|
f5741fd48b | ||
|
|
f405dec4e9 | ||
|
|
cc242ca667 | ||
|
|
2733198f9e | ||
|
|
52700fbe16 | ||
|
|
0f53749e70 | ||
|
|
1aa1ddb4ec | ||
|
|
71125fd1e2 | ||
|
|
5621fb8622 | ||
|
|
b9f1176ec1 | ||
|
|
b3b4d3c37d | ||
|
|
cdbca7d262 | ||
|
|
140f90f7f3 | ||
|
|
a905c6a084 | ||
|
|
bfe081f672 | ||
|
|
46a14715e3 | ||
|
|
c1da56ce45 | ||
|
|
ee63fae803 | ||
|
|
720711756f | ||
|
|
90a12c3253 | ||
|
|
6a00ab3782 | ||
|
|
9ccfa3f18c | ||
|
|
1660d75205 | ||
|
|
f6d57a241d | ||
|
|
bcfb4ca0e4 | ||
|
|
0159a43a20 | ||
|
|
86b019ec89 | ||
|
|
98a12cd1e1 | ||
|
|
e6452cbd4d | ||
|
|
cd44ead595 | ||
|
|
652fda1a6f | ||
|
|
30a7f1a816 | ||
|
|
6ca3d0c4af | ||
|
|
b2074c6dda | ||
|
|
d7c0e1c62e | ||
|
|
56ef05a0bf | ||
|
|
dd36cce329 | ||
|
|
2b2799dae9 | ||
|
|
293c176053 | ||
|
|
3cef5fce2b | ||
|
|
7d0f160c4c | ||
|
|
c5f9f896b2 | ||
|
|
db98b3db55 | ||
|
|
dba47e4bef | ||
|
|
2a46ead29f | ||
|
|
707179edf3 | ||
|
|
53164e96ab | ||
|
|
9702e28a07 | ||
|
|
fa56eca962 | ||
|
|
684839f04a | ||
|
|
0188ea9a3b | ||
|
|
85aa587749 | ||
|
|
48e36e3c31 | ||
|
|
0b6d018f8d | ||
|
|
f2bf65252d | ||
|
|
4335f8c5c6 | ||
|
|
ae82f57c67 | ||
|
|
168052bf45 | ||
|
|
a87ebb64d8 | ||
|
|
38da65ee58 | ||
|
|
e3e1a556cd | ||
|
|
56b618c915 | ||
|
|
7198110b57 | ||
|
|
b7aea63c53 | ||
|
|
78b65c0b12 | ||
|
|
0742590c0c | ||
|
|
c16f04bbcf | ||
|
|
51b38c4c55 | ||
|
|
79eddc9b06 | ||
|
|
21f63ac17f | ||
|
|
fdf5227c35 | ||
|
|
98f03a723e | ||
|
|
69427fa10e | ||
|
|
670986f7ef | ||
|
|
8b62041d28 | ||
|
|
89c5d01efa | ||
|
|
0a06f1ac7d | ||
|
|
df2e9b4b47 | ||
|
|
aed4e2792d | ||
|
|
c860df7975 | ||
|
|
2148f6ff95 | ||
|
|
2d05a06e37 | ||
|
|
e3da005780 | ||
|
|
f0e8633dcc | ||
|
|
590208f0c7 | ||
|
|
7d7ead3f47 | ||
|
|
974629ce85 | ||
|
|
72ef8c839f | ||
|
|
5ee5c8179a | ||
|
|
46d6d7637e | ||
|
|
62e2aa67d7 | ||
|
|
182659d0e1 | ||
|
|
4855131652 | ||
|
|
4d2469b4ce | ||
|
|
4e2326fc84 | ||
|
|
3a8dca6fb9 | ||
|
|
31635b92f3 | ||
|
|
a0c3de0273 | ||
|
|
32b191fa62 | ||
|
|
f616125d02 | ||
|
|
e1f6e064a9 | ||
|
|
633be7ff3c | ||
|
|
6b3863bfbf | ||
|
|
b66ca703b8 | ||
|
|
48a7f9058f | ||
|
|
8f80733563 | ||
|
|
aa1451cfbc | ||
|
|
13ef28118d | ||
|
|
34459e7cf1 | ||
|
|
798e17a954 | ||
|
|
5ad80218a2 | ||
|
|
e90e54cec1 | ||
|
|
bca1fde69c | ||
|
|
d70c688b65 | ||
|
|
541993c80a | ||
|
|
529c8acf6c | ||
|
|
e98d05b1a5 | ||
|
|
0afc7c9761 | ||
|
|
e5c1edd5f5 | ||
|
|
a5e78aab08 | ||
|
|
cec69c2be0 | ||
|
|
bc8815cb94 | ||
|
|
efac6272bb | ||
|
|
bdb30976b5 | ||
|
|
1d4ae8fe4d | ||
|
|
abdb4c34ef | ||
|
|
08d130893c | ||
|
|
b2fb9aa99f | ||
|
|
561ee9e4f1 | ||
|
|
3f70d45f3d | ||
|
|
c07783fa2c | ||
|
|
d4d0e8cd9b | ||
|
|
4be5ac2c23 | ||
|
|
070c95d8de | ||
|
|
8d12ecb758 | ||
|
|
81560c4698 | ||
|
|
390937a20b | ||
|
|
2a8a38b742 | ||
|
|
5a5c3c8c60 | ||
|
|
905e451455 | ||
|
|
69b8b47b15 | ||
|
|
b16e1a0113 | ||
|
|
0b39968a9c | ||
|
|
d8b3abb611 | ||
|
|
7fb0a616a1 | ||
|
|
d987e51a8b | ||
|
|
0f7f6cd0a3 | ||
|
|
0e8b33aa79 | ||
|
|
353b3047cd | ||
|
|
377de06eeb | ||
|
|
4013e27a8b | ||
|
|
181c6eb2e6 | ||
|
|
7955a5d53a | ||
|
|
c261babf17 | ||
|
|
b90eef6d19 | ||
|
|
5c597ca218 | ||
|
|
3dbcf8112d | ||
|
|
5357ad61db | ||
|
|
ff50917c29 | ||
|
|
48835d8c44 | ||
|
|
e9c66bb35a | ||
|
|
23eb7824ac | ||
|
|
494b9d23ac | ||
|
|
64ae9ac033 | ||
|
|
a72fc69997 | ||
|
|
a16f93cbd5 | ||
|
|
81e5cf0cf3 | ||
|
|
01102d5982 | ||
|
|
2174aec0e1 | ||
|
|
46bad118de | ||
|
|
2d7228fa40 | ||
|
|
a1839d90fd | ||
|
|
0cc136c3f6 | ||
|
|
cd1e26418d | ||
|
|
dab4f07258 | ||
|
|
501dc56fd3 | ||
|
|
253271127d | ||
|
|
f2da892b38 | ||
|
|
6dd72f480c | ||
|
|
3caf8b4a67 | ||
|
|
39f2efbef8 | ||
|
|
288341945d | ||
|
|
d02bd72764 | ||
|
|
7d3adb9275 | ||
|
|
156950ac2f | ||
|
|
83f18c1915 | ||
|
|
332730575f | ||
|
|
08ef67e824 | ||
|
|
7e71fb218c | ||
|
|
a7216caa3b | ||
|
|
87309601ce | ||
|
|
53db9db50f | ||
|
|
23628668b7 | ||
|
|
6ac685b194 | ||
|
|
db8c43ca97 | ||
|
|
bff0c8fdaf | ||
|
|
6f2b809385 | ||
|
|
455479bd54 | ||
|
|
03b34a449d | ||
|
|
08e51c8942 | ||
|
|
4aef5bfb72 | ||
|
|
34c74770ce | ||
|
|
da8d198676 | ||
|
|
33868804fd | ||
|
|
22a3794c51 | ||
|
|
1058d54c52 | ||
|
|
90ce539683 | ||
|
|
99c2fbd947 | ||
|
|
866d813218 | ||
|
|
f1df8c2479 | ||
|
|
6f1523c279 | ||
|
|
163cdaf70c | ||
|
|
a9ce8393e4 | ||
|
|
f04e30c4d4 | ||
|
|
9d0f8b4543 | ||
|
|
d631a4b2e5 | ||
|
|
2cf55dcf9f | ||
|
|
9fbb139e67 | ||
|
|
11e3b0da7d | ||
|
|
0b922d3f60 | ||
|
|
7e4faa3270 | ||
|
|
635fba1e45 | ||
|
|
7c950cc350 | ||
|
|
cc0fe66e3e | ||
|
|
b2d6ce59cf | ||
|
|
586a181e0a | ||
|
|
33150943df | ||
|
|
28dab60232 | ||
|
|
71ef76b108 | ||
|
|
64008ef5d8 | ||
|
|
1859154370 | ||
|
|
fa4067e885 | ||
|
|
c8c355b319 | ||
|
|
51355a53d9 | ||
|
|
1f3f672d3f | ||
|
|
7c3fa30c13 | ||
|
|
cbbb7a7c8e | ||
|
|
6893bd8b04 | ||
|
|
22eabf6620 | ||
|
|
a827888ee3 | ||
|
|
54d94f5988 | ||
|
|
7c1b6d6ad2 | ||
|
|
8c4f776122 | ||
|
|
84fa704b25 | ||
|
|
535379d9d7 | ||
|
|
d2927e2be2 | ||
|
|
bd04b2f921 | ||
|
|
27fce2363d | ||
|
|
01340c87bd | ||
|
|
77c2f551d3 | ||
|
|
18009ebb39 | ||
|
|
e6bb66705d | ||
|
|
88154c3ebf | ||
|
|
1c80a1bad5 | ||
|
|
79c52dfe84 | ||
|
|
411ba3542c | ||
|
|
fa9636a62a | ||
|
|
69fefc0625 | ||
|
|
e598ffa993 | ||
|
|
d99577ffb2 | ||
|
|
40108f92c9 | ||
|
|
a42b30fd40 | ||
|
|
37497fc5a0 | ||
|
|
9bea23bbfe | ||
|
|
4e39c50144 | ||
|
|
7e50bcba0c | ||
|
|
f81c583d86 | ||
|
|
5647d55147 | ||
|
|
4ce6ac5af9 | ||
|
|
d770963b69 | ||
|
|
625b96ba73 | ||
|
|
37877ed531 | ||
|
|
1f2ef2a7e4 | ||
|
|
885eec79c3 | ||
|
|
aa1994be67 | ||
|
|
4552e6286e | ||
|
|
d7856bcd4f | ||
|
|
7ea852fae3 | ||
|
|
c67c37bb20 | ||
|
|
7d1aa02fd1 | ||
|
|
2309ab2002 | ||
|
|
b87840d4c9 | ||
|
|
b5c22c7ff7 | ||
|
|
3b3e8348e4 | ||
|
|
259ad42b31 | ||
|
|
51cb33bccc | ||
|
|
2a8a62a253 | ||
|
|
82ae80090e | ||
|
|
1d6135150f | ||
|
|
41f98d29b7 | ||
|
|
7b5a6bd3c9 | ||
|
|
fe15366524 | ||
|
|
1cbbb3873f | ||
|
|
5e1ab7989a | ||
|
|
0e5724cd2c | ||
|
|
89e9d56dee | ||
|
|
58f9c2c18d | ||
|
|
1ec6726459 | ||
|
|
6b4520e526 | ||
|
|
98f20564de | ||
|
|
4da819b02b | ||
|
|
dc90db74c0 | ||
|
|
c5bc2dd64f | ||
|
|
bbb045698d | ||
|
|
d9e364cd86 | ||
|
|
b179991be4 | ||
|
|
05de4870b0 | ||
|
|
01f0131f5d | ||
|
|
d69847c54e | ||
|
|
cc78f6f155 | ||
|
|
1e2100902c | ||
|
|
4353a9da25 | ||
|
|
e480b1bace | ||
|
|
5a96f5f64b | ||
|
|
7296b701fa | ||
|
|
a21d91d870 | ||
|
|
6931695e64 | ||
|
|
e12d02f29c | ||
|
|
404865c32e | ||
|
|
75879c47c5 | ||
|
|
f946918176 | ||
|
|
6ca3df2431 | ||
|
|
c8ec095d99 | ||
|
|
0179a55ee4 | ||
|
|
04ed1df0ef | ||
|
|
de66ee1a89 | ||
|
|
e8c4bda984 | ||
|
|
7074b75b9d | ||
|
|
857756f636 | ||
|
|
e4c62200de | ||
|
|
89ec677d54 | ||
|
|
8ff656430d | ||
|
|
db22394976 | ||
|
|
ef5548a749 | ||
|
|
14c3bb7d63 | ||
|
|
1a415b60be | ||
|
|
85fa68bd92 | ||
|
|
e41ca491ff | ||
|
|
bb5962cda0 | ||
|
|
2de878821b | ||
|
|
5bea2999ef | ||
|
|
67e9bf74a7 | ||
|
|
ed42012058 | ||
|
|
9b7c9e4a81 | ||
|
|
85daacdf7a | ||
|
|
17ea41fdae | ||
|
|
ffd2a18837 | ||
|
|
5d7f38f99f | ||
|
|
e762267e03 | ||
|
|
a71870de28 | ||
|
|
7eba0b85f4 | ||
|
|
30a45ee78e | ||
|
|
ca9cd36067 | ||
|
|
1d5a208896 | ||
|
|
60e2938b58 | ||
|
|
89540172b2 | ||
|
|
bbb716723f | ||
|
|
842cd17979 | ||
|
|
e0e32efd26 | ||
|
|
a127fcd056 | ||
|
|
c614af2cd9 | ||
|
|
c2abff6e6d | ||
|
|
4444d2ee6a | ||
|
|
463bc1374c | ||
|
|
d9a60fc2ef | ||
|
|
22a3b227a3 | ||
|
|
12f3f1a45c | ||
|
|
84d4c2944c | ||
|
|
0a9b918c75 | ||
|
|
8ddf200ce7 | ||
|
|
207ff98211 | ||
|
|
1fb09a9c8c | ||
|
|
67f9b22c86 | ||
|
|
8b5cf0c696 | ||
|
|
26d9cc56d3 | ||
|
|
930a9c8bca | ||
|
|
51a9bd9e56 | ||
|
|
ac12bd0b8f | ||
|
|
d7651d1504 | ||
|
|
7e1f996079 | ||
|
|
1af4a9abb4 | ||
|
|
ed7c9348b7 | ||
|
|
ccf4ed1235 | ||
|
|
b22ee67612 | ||
|
|
b5a953b16c | ||
|
|
7613f02eff | ||
|
|
78a3dd68ea | ||
|
|
afc0e25b26 | ||
|
|
82e14eef35 | ||
|
|
81e9c9807f | ||
|
|
02e2b53a1d | ||
|
|
babe9b6f54 | ||
|
|
52f198481b | ||
|
|
252187f1fe | ||
|
|
99812c33e7 | ||
|
|
97c5f6009d | ||
|
|
5e15f8683e | ||
|
|
fba1f7ae05 | ||
|
|
865e5ae3a3 | ||
|
|
1af98835b1 | ||
|
|
6eadf67add | ||
|
|
f3f280d008 | ||
|
|
aecbe6d316 | ||
|
|
63419d7ca9 | ||
|
|
3480a1d60e | ||
|
|
190712e250 | ||
|
|
a662330b1b | ||
|
|
04ee1d137d | ||
|
|
27f421587e | ||
|
|
f9f0bd8685 | ||
|
|
53b12f50a7 | ||
|
|
63d49463da | ||
|
|
549017d035 | ||
|
|
45feef5884 | ||
|
|
24592cc696 | ||
|
|
c640c550fd | ||
|
|
0565b7b8c8 | ||
|
|
1691c74727 | ||
|
|
f6be3eacfc | ||
|
|
790df903ac | ||
|
|
25e6f72921 | ||
|
|
ab1015b11e | ||
|
|
55e990f71d | ||
|
|
40a8150519 | ||
|
|
87744302ba | ||
|
|
17083dc5e6 | ||
|
|
b29616fbd8 | ||
|
|
468688615f | ||
|
|
f4faee4283 | ||
|
|
62c85274a3 | ||
|
|
db2917193e | ||
|
|
705571de8c | ||
|
|
2ee29683a7 | ||
|
|
51395dda91 | ||
|
|
9babef0095 | ||
|
|
e9545c9a7f | ||
|
|
619214e462 | ||
|
|
31b600686a | ||
|
|
bccc4e8019 | ||
|
|
7039a4d762 | ||
|
|
7b7f0115e5 | ||
|
|
24e79b3f4e | ||
|
|
5c70b2b307 | ||
|
|
65a8de7845 | ||
|
|
44d2297546 | ||
|
|
a41280707e | ||
|
|
a8f2fd66ae | ||
|
|
7e8ddbadfb | ||
|
|
80aeb3677d | ||
|
|
f92bbdaefa | ||
|
|
fc73f16425 | ||
|
|
c1f47f536d | ||
|
|
9166c82dc2 | ||
|
|
3decc8b9b1 | ||
|
|
bac5da30e7 | ||
|
|
baf379c6d7 | ||
|
|
e9b6cdb37a | ||
|
|
9d36d2c749 | ||
|
|
5945ab1a0a | ||
|
|
40319a66ff | ||
|
|
754aef8a84 | ||
|
|
0613b530e8 | ||
|
|
5e9819b96f | ||
|
|
b46e334a40 | ||
|
|
af49845ae6 | ||
|
|
4cb8241334 | ||
|
|
530e6cb20e | ||
|
|
e0adc03588 | ||
|
|
e48f6e6d9b | ||
|
|
04ff4df5d7 | ||
|
|
d789e96d79 | ||
|
|
45761fd48b | ||
|
|
cb6a47a5d9 | ||
|
|
67dbdfd80d | ||
|
|
dee99c1752 | ||
|
|
a0c7e187f5 | ||
|
|
938503bd56 | ||
|
|
33bda6fd16 | ||
|
|
929336cb57 | ||
|
|
883aca038b | ||
|
|
77e03dc18d | ||
|
|
230ed1ab11 | ||
|
|
b31fa856d0 | ||
|
|
98b97b9898 | ||
|
|
41cf7c6814 | ||
|
|
da3a2f436c | ||
|
|
569a7178d7 | ||
|
|
7e7497c3bd | ||
|
|
905c78d5a3 | ||
|
|
37b1cb009a | ||
|
|
56586e1fda | ||
|
|
2040fcdba4 | ||
|
|
d24b57ae86 | ||
|
|
db72102de7 | ||
|
|
e8801a75f3 | ||
|
|
918826ff48 | ||
|
|
fa2fe5c941 | ||
|
|
8ef2761f53 | ||
|
|
9375369b88 | ||
|
|
ce77c82b0c | ||
|
|
1e39ae2f1e | ||
|
|
c143894547 | ||
|
|
37450ff00c | ||
|
|
ca9c468edd | ||
|
|
d6570d1496 | ||
|
|
bf677522a9 | ||
|
|
fd89f71fc0 | ||
|
|
83477ece18 | ||
|
|
32990794ce | ||
|
|
4b5bae4f9b | ||
|
|
2b07917020 | ||
|
|
338acb8fc2 | ||
|
|
2a4b228e19 | ||
|
|
c6c3ab94b1 | ||
|
|
8671516b95 | ||
|
|
5710ab47ae | ||
|
|
e3b0eb29f1 | ||
|
|
795594b6a6 | ||
|
|
e91da53d9e | ||
|
|
f807df84d8 | ||
|
|
7f32d5741d | ||
|
|
30c7113bd8 | ||
|
|
a63732027f | ||
|
|
13d8f51f6a | ||
|
|
5d48ed5fb4 | ||
|
|
4b89b3e2ed | ||
|
|
1ee24517e3 | ||
|
|
64e35c734e | ||
|
|
08130e8088 | ||
|
|
0c5937805b | ||
|
|
d315829eaf | ||
|
|
6dad1c3bbb | ||
|
|
3577c11c89 | ||
|
|
8326c223ab | ||
|
|
73de5f78fe | ||
|
|
4e59b85073 | ||
|
|
9af26db57a | ||
|
|
8e4ca8e474 | ||
|
|
79de3976bf | ||
|
|
4b80f13373 | ||
|
|
6210c6dbf4 | ||
|
|
97592eede6 | ||
|
|
73dafa6aff | ||
|
|
6c3e121b6c | ||
|
|
95ee7fb49f | ||
|
|
b3f73eace1 | ||
|
|
07a497362a | ||
|
|
afa078d00c | ||
|
|
3fd7d9a604 | ||
|
|
80a0d2d8d8 | ||
|
|
27f4fdd179 | ||
|
|
d1a94a91c2 | ||
|
|
69a31dcdd9 | ||
|
|
a2a6bf87f7 | ||
|
|
bd1e95b655 | ||
|
|
278f9bfc03 | ||
|
|
a3a8950afd | ||
|
|
f95913e623 | ||
|
|
8e4b51fba4 | ||
|
|
84915a1843 | ||
|
|
4b0e915698 | ||
|
|
b2e81b5d17 | ||
|
|
ef47f3fd15 | ||
|
|
f88f72abd2 | ||
|
|
715c14b78d | ||
|
|
4af7da3451 | ||
|
|
63ff572076 | ||
|
|
129af904f6 | ||
|
|
8cc71d2b47 | ||
|
|
0b299b2fe7 | ||
|
|
b1cef5f73d | ||
|
|
42067ce53c | ||
|
|
2bdf12fb67 | ||
|
|
c00b138bf2 | ||
|
|
1155eaf1f1 | ||
|
|
52f2e193d6 | ||
|
|
f5619a9b29 | ||
|
|
057608bac0 | ||
|
|
57465eb277 | ||
|
|
01e04d60a9 | ||
|
|
be8d9be832 | ||
|
|
07d07020f0 | ||
|
|
7c1f7e7a23 | ||
|
|
a3f6fee41f | ||
|
|
0414ec7f83 | ||
|
|
12af2a7ff6 | ||
|
|
4d6881fa65 | ||
|
|
019e8e0d14 | ||
|
|
763bd775c4 | ||
|
|
585e07bc79 | ||
|
|
b911d8d075 | ||
|
|
d583122c64 | ||
|
|
3968877b1e | ||
|
|
46f03de9f6 | ||
|
|
0e18ec022c | ||
|
|
64117ab613 | ||
|
|
038e04dee6 | ||
|
|
b49c7b8609 | ||
|
|
948949c571 | ||
|
|
f173a79a0d | ||
|
|
994791add6 | ||
|
|
d177e71b46 | ||
|
|
fcab1501f8 | ||
|
|
eb022220f4 | ||
|
|
f48687528e | ||
|
|
9007f9de9e | ||
|
|
55d84d0f9b | ||
|
|
90b4d688f8 | ||
|
|
aacd42f4bc | ||
|
|
51d7dda5a7 | ||
|
|
1c32acf7b6 | ||
|
|
22c73f3c12 | ||
|
|
9613ea9018 | ||
|
|
3d4802ac68 | ||
|
|
59c9bdb3a5 | ||
|
|
d7953eb779 | ||
|
|
48a7c48f7b | ||
|
|
7a919fbac4 | ||
|
|
181220621e | ||
|
|
249c45dfe2 | ||
|
|
b19d84f1a7 | ||
|
|
865edb70c2 | ||
|
|
e78369f0fa | ||
|
|
d40a6a5c3f | ||
|
|
cb7768d095 | ||
|
|
4290516d29 | ||
|
|
6a7a2301ee | ||
|
|
9a79c58e33 | ||
|
|
4c39c1ec30 | ||
|
|
571cb8b44f | ||
|
|
4207792ffd | ||
|
|
f5c4f98834 | ||
|
|
9f67282a79 | ||
|
|
ee71c1cf0d | ||
|
|
06f2284bcd | ||
|
|
8cbe79655a | ||
|
|
a4c1d733b7 | ||
|
|
839649d42f | ||
|
|
504e2aac4a | ||
|
|
eafb41602c | ||
|
|
2dcc4172c4 | ||
|
|
f96a711298 | ||
|
|
ad28b9b339 | ||
|
|
8dd8536f6b | ||
|
|
7bf5b2ec57 | ||
|
|
aa731aa894 | ||
|
|
c58cb257dc | ||
|
|
06f59cf853 | ||
|
|
83b4b5434f | ||
|
|
9de5214a2f | ||
|
|
f08067bab2 | ||
|
|
1160f39cb0 | ||
|
|
d633ecd160 | ||
|
|
4cea313060 | ||
|
|
9b7f8076eb | ||
|
|
571259f241 | ||
|
|
607ee8bbc1 | ||
|
|
36d2f74887 | ||
|
|
cdaf409a99 | ||
|
|
fba487d8a2 | ||
|
|
3ab7306199 | ||
|
|
2e4e94d5f8 | ||
|
|
3348ed3524 | ||
|
|
942a21b4be | ||
|
|
9c14618d55 | ||
|
|
7d50551392 | ||
|
|
f2c1a92513 | ||
|
|
fe6595cd2a | ||
|
|
c2aac916aa | ||
|
|
e161b5387b | ||
|
|
585e5cd88f | ||
|
|
1637ffc5dc | ||
|
|
a28797ee03 | ||
|
|
49e28f9d1e | ||
|
|
4a7cd664fd | ||
|
|
253e11d55b | ||
|
|
eb1c1c78d4 | ||
|
|
0b0d64b52e | ||
|
|
1ae51ef5ea | ||
|
|
de1e3230f5 | ||
|
|
1fbc038e64 | ||
|
|
cd63dd429b | ||
|
|
fbfdf561fc | ||
|
|
83d5a84edd | ||
|
|
5abf02c6d1 | ||
|
|
b8037845d6 | ||
|
|
c80e2552b2 | ||
|
|
1a1fea535b | ||
|
|
5c7da4b686 | ||
|
|
b6ee89a6d8 | ||
|
|
2d8e6bd980 | ||
|
|
a173d61464 | ||
|
|
8f04a136c8 | ||
|
|
b7675e1ec7 | ||
|
|
964fbfe2bb | ||
|
|
8fb8956c0d | ||
|
|
c11920ac08 | ||
|
|
9a4eb26246 | ||
|
|
0d9958afe7 | ||
|
|
d6dd74b50a | ||
|
|
d5437ca8fa | ||
|
|
14720057c2 | ||
|
|
170ed8cc01 | ||
|
|
25576eb35a | ||
|
|
66cb1fb6ad | ||
|
|
bcc65fd879 | ||
|
|
99440585e6 | ||
|
|
290d69d14a | ||
|
|
4fce06677f | ||
|
|
f53cd8b5b6 | ||
|
|
da59f47624 | ||
|
|
521586f08f | ||
|
|
f39a7ada7c | ||
|
|
bae9f46d8b | ||
|
|
d7ea24e218 | ||
|
|
e621d7e601 | ||
|
|
aa6eff4c54 | ||
|
|
f36583e676 | ||
|
|
0a0a91d4b2 | ||
|
|
6c70f9e308 | ||
|
|
b25c3d8b67 | ||
|
|
bade99d069 | ||
|
|
776b51fef7 | ||
|
|
da2d014f00 | ||
|
|
7fdf83089d | ||
|
|
043aafd7b7 | ||
|
|
3254979568 | ||
|
|
6fd202fe36 | ||
|
|
5f00f1e18e | ||
|
|
c940ce3329 | ||
|
|
2366e2b209 | ||
|
|
2b7fd3c9d1 | ||
|
|
d3e37d1716 | ||
|
|
d2b858c997 | ||
|
|
de34c7580f | ||
|
|
bcb492751c | ||
|
|
e26cc79819 | ||
|
|
98cb2d4c17 | ||
|
|
2fc569715c | ||
|
|
3eb594df43 | ||
|
|
8243019a60 | ||
|
|
5a10f7fcfe | ||
|
|
5e89caf358 | ||
|
|
35b40ef650 | ||
|
|
56b7d6cb7c | ||
|
|
8b8a890ac9 | ||
|
|
5645bcee2d | ||
|
|
a631707db4 | ||
|
|
451ffafb9e | ||
|
|
b5274a0d91 | ||
|
|
db4dc03abc | ||
|
|
6be5bcc4c8 | ||
|
|
21efda4a84 | ||
|
|
082375f129 | ||
|
|
1204859263 | ||
|
|
c8b5d1561e | ||
|
|
6912e77d25 | ||
|
|
d84d096e7e | ||
|
|
29c17fd32e | ||
|
|
d721320af5 | ||
|
|
efef9c864c | ||
|
|
27cb837b08 | ||
|
|
047fcbe63f | ||
|
|
dbe0b1551b | ||
|
|
8f7b047b7a | ||
|
|
a38ace0df9 | ||
|
|
0b0b06e8b9 | ||
|
|
f83b61903a | ||
|
|
881fa41bb7 | ||
|
|
f9442db96f | ||
|
|
64521494ce | ||
|
|
e75e3399ab | ||
|
|
e5ef498164 | ||
|
|
24e4be77d8 | ||
|
|
0d55f2ef32 | ||
|
|
8ec3371139 | ||
|
|
ccca4d2914 | ||
|
|
28704a6164 | ||
|
|
cf4ba9d1d3 | ||
|
|
c69e30c146 | ||
|
|
fd32d75d3b | ||
|
|
afa228fd91 | ||
|
|
a01a7ae5fc | ||
|
|
64b071f277 | ||
|
|
af246ad0d7 | ||
|
|
56a87329ec | ||
|
|
eddddc694d | ||
|
|
ce61138351 | ||
|
|
564662ee00 | ||
|
|
678db837fd | ||
|
|
c789f4230d | ||
|
|
1b9e451a6f | ||
|
|
1780b343b4 | ||
|
|
aea3181d27 | ||
|
|
c44461e33f | ||
|
|
221b9bc149 | ||
|
|
dc41c6bc0d | ||
|
|
828d937dec | ||
|
|
cf889cfe25 | ||
|
|
6bab2523d5 | ||
|
|
d714b5c592 | ||
|
|
08316496cd | ||
|
|
d5fd985f0d | ||
|
|
eab7839195 | ||
|
|
18717dd6f5 | ||
|
|
d249f411f8 | ||
|
|
b85e2545d6 | ||
|
|
79280b195e | ||
|
|
4a18728e19 | ||
|
|
b7498416fa | ||
|
|
49b201db0f | ||
|
|
be4d6761b1 | ||
|
|
c01ba1a3cb | ||
|
|
af59ff3209 | ||
|
|
b0a37c6ac5 | ||
|
|
8b3fd9d1e9 | ||
|
|
95b16690e0 | ||
|
|
f6b865a052 | ||
|
|
d1c756306a | ||
|
|
ad5af8e123 | ||
|
|
ba89285c74 | ||
|
|
43c0c2ec2a | ||
|
|
a277104ad5 | ||
|
|
84afffc761 | ||
|
|
5e5680fd13 | ||
|
|
727da38fb6 | ||
|
|
79096cfdce | ||
|
|
a848f82b8f | ||
|
|
71bdd4608b | ||
|
|
f04a948152 | ||
|
|
15be3e52ae | ||
|
|
b1003e954e | ||
|
|
f2b9a7ff0c | ||
|
|
19ad9ab224 | ||
|
|
8eae8a4fb5 | ||
|
|
85fbe38e71 | ||
|
|
e896fd1fd6 | ||
|
|
916150de01 | ||
|
|
732204f11b | ||
|
|
1df50ff855 | ||
|
|
11042858b8 | ||
|
|
89ca2319f5 | ||
|
|
2f4fd310bd | ||
|
|
6d7919ad85 | ||
|
|
59467c906d | ||
|
|
def871ac89 | ||
|
|
6fe5a93a73 | ||
|
|
7796c9269c | ||
|
|
ec150d4a4c | ||
|
|
49abff1609 | ||
|
|
be59c16aad | ||
|
|
f1144f3a7e | ||
|
|
9ebff816dc | ||
|
|
4c3eacd745 | ||
|
|
325e402d0f | ||
|
|
251587cb86 | ||
|
|
9fb1f8acf8 | ||
|
|
cffbc76da1 | ||
|
|
be51025048 | ||
|
|
ae6f9fc87c | ||
|
|
e61a7bff65 | ||
|
|
bb14881b63 | ||
|
|
a7f1bfa7c9 | ||
|
|
7b3384a6be | ||
|
|
efa8717fc5 | ||
|
|
9e42cee87c | ||
|
|
9fe30b905b | ||
|
|
2fc9afa4f4 | ||
|
|
732c8b1f7f | ||
|
|
19be3bc55c | ||
|
|
8a7e2577aa | ||
|
|
e32494879c | ||
|
|
ac4803961a | ||
|
|
de8d6d3c8c | ||
|
|
392b80fe14 | ||
|
|
9fa75a8b45 | ||
|
|
b19097ab8f | ||
|
|
31624b32e9 | ||
|
|
b8b6558f53 | ||
|
|
a53e75aeaa | ||
|
|
7798004568 | ||
|
|
63873575a5 | ||
|
|
9845df4d1b | ||
|
|
462d5f5d05 | ||
|
|
1d860923d0 | ||
|
|
c9a3fac654 | ||
|
|
a1c9685b49 | ||
|
|
c16c4aac44 | ||
|
|
e80ff9c551 | ||
|
|
3176ccc6e3 | ||
|
|
b24196be36 | ||
|
|
52365a9755 | ||
|
|
41bea9f50c | ||
|
|
3416c7bb3c | ||
|
|
ce126b11fb | ||
|
|
99db8fc3fe | ||
|
|
780cec2596 | ||
|
|
d3b4cb71c0 | ||
|
|
1758c3e3f2 | ||
|
|
995fa7d6fd | ||
|
|
87abe426d8 | ||
|
|
bec0b46a2c | ||
|
|
a88ddc2a4d | ||
|
|
1f60578a63 | ||
|
|
2f70489e22 | ||
|
|
3b75734672 | ||
|
|
ff4b35d6f1 | ||
|
|
e5b26fdad0 | ||
|
|
bcbcf40eae | ||
|
|
661fdfb43e | ||
|
|
31f08c49e7 | ||
|
|
2999d61ac9 | ||
|
|
ca72a4b0fc | ||
|
|
164977972e | ||
|
|
b6fbfcc814 | ||
|
|
418700ce3f | ||
|
|
1d52557562 | ||
|
|
45e24c54ce | ||
|
|
abd909d23b | ||
|
|
f39932ece7 | ||
|
|
03fb649274 | ||
|
|
54e9e95076 | ||
|
|
201fb4d73e | ||
|
|
e0cc35ba66 | ||
|
|
d3818e888e | ||
|
|
a2af4a3e91 | ||
|
|
02a02fa64c | ||
|
|
9fae0d2505 | ||
|
|
e23198bbcc | ||
|
|
0a8c43901d | ||
|
|
e9054301d1 | ||
|
|
caaede7e84 | ||
|
|
3ed9e1dd51 | ||
|
|
207eccc505 | ||
|
|
45d5524df7 | ||
|
|
1f08e407d1 | ||
|
|
2c215afe33 | ||
|
|
d1d2b03dfd | ||
|
|
c1a41c6605 | ||
|
|
d1a17b39ea | ||
|
|
bf365bedfd | ||
|
|
6a1ab47a08 | ||
|
|
5fdaa6b0ee | ||
|
|
a6b0c2638a | ||
|
|
a671d08f0b | ||
|
|
5e869a5e5c | ||
|
|
0e6109ff2b | ||
|
|
0bff6ee504 | ||
|
|
7cbe429be9 | ||
|
|
09b578522f | ||
|
|
40897d0be6 | ||
|
|
f49bc088fc | ||
|
|
7795a9ead2 | ||
|
|
2c238f49e0 | ||
|
|
599789634a | ||
|
|
77359f7b83 | ||
|
|
7cff55a160 | ||
|
|
8d26eb4e07 | ||
|
|
ad5e3ebce3 | ||
|
|
2deb0e1708 | ||
|
|
b2f383f095 | ||
|
|
22ababd87a | ||
|
|
167c1fa348 | ||
|
|
3b1bf67436 | ||
|
|
d2eb73df96 | ||
|
|
4d075efcd3 | ||
|
|
8a53c56a46 | ||
|
|
73d4152d1d | ||
|
|
c0a90bd677 | ||
|
|
106157a951 | ||
|
|
ab9cf6d036 | ||
|
|
54ba6efc93 | ||
|
|
85ac4aac94 | ||
|
|
691b6611d0 | ||
|
|
1b33b4425b | ||
|
|
41defbcf9c | ||
|
|
928594fc7c | ||
|
|
cc1f668308 | ||
|
|
f2b8813fb9 | ||
|
|
5ed7c31278 | ||
|
|
13b456bffd | ||
|
|
938dee481b | ||
|
|
a69140faa9 | ||
|
|
6a5ebdb1ef | ||
|
|
ece4d083a5 | ||
|
|
96688a8ffe | ||
|
|
e9b0aa537f | ||
|
|
4052c3e817 | ||
|
|
4a6e838b18 | ||
|
|
3773f6b44f | ||
|
|
a19e836d63 | ||
|
|
aa5e5f9cc0 | ||
|
|
6647e75c77 | ||
|
|
f85a514ee3 | ||
|
|
619dd84d81 | ||
|
|
f9fdfab19e | ||
|
|
ca46d0f8e1 | ||
|
|
bb8f75b4be | ||
|
|
0db599a478 | ||
|
|
902e60fab2 | ||
|
|
87f48e2cc9 | ||
|
|
cc55073107 | ||
|
|
96c43b4607 | ||
|
|
f1b4367168 | ||
|
|
4416f8530d | ||
|
|
4e48ab2363 | ||
|
|
b5a26696f8 | ||
|
|
4307229ae0 | ||
|
|
b681f01be9 | ||
|
|
c262027728 | ||
|
|
6a08fedf18 | ||
|
|
e471b4edf5 | ||
|
|
dd86812822 | ||
|
|
ac311ab75d | ||
|
|
c9387313e2 | ||
|
|
97641dbcda | ||
|
|
54fdbcd947 | ||
|
|
7636e09284 | ||
|
|
7666ed3010 | ||
|
|
e82a9ec37a | ||
|
|
770d9e5b7c | ||
|
|
5f0e0c993e | ||
|
|
7be69b0b54 | ||
|
|
251beb7f9b | ||
|
|
1c27cbd90a | ||
|
|
4b4b26651a | ||
|
|
1a6ba8c230 | ||
|
|
06904506d4 | ||
|
|
62a28825f8 | ||
|
|
c6c693acd2 | ||
|
|
8d04454457 | ||
|
|
aeb831eeff | ||
|
|
67db78ad66 | ||
|
|
06809ab5fc | ||
|
|
08ba911738 | ||
|
|
59f4b6788a | ||
|
|
a317a4d689 | ||
|
|
6e164e61aa | ||
|
|
2098bf84a1 | ||
|
|
860a83ba90 | ||
|
|
abce5fd120 | ||
|
|
0243e9c5be | ||
|
|
8a4a0154f6 | ||
|
|
469a5221ed | ||
|
|
f251b9c6c5 | ||
|
|
c4228be86c | ||
|
|
94e565aa00 | ||
|
|
cc6e028b1d | ||
|
|
33a69abece | ||
|
|
6a4947533f | ||
|
|
879a31f51e | ||
|
|
49fc87e295 | ||
|
|
fe89f1f096 | ||
|
|
346681ba27 | ||
|
|
13e13cd5a8 | ||
|
|
0f8aad52b2 | ||
|
|
b6a5cbf956 | ||
|
|
a482d4db5f | ||
|
|
df15dceaef | ||
|
|
9f2e192993 | ||
|
|
d62f36c6a0 | ||
|
|
2427724868 | ||
|
|
9b35d8f8e1 | ||
|
|
a859f4524c | ||
|
|
8be896aebb | ||
|
|
a008cf971d | ||
|
|
316077fffb | ||
|
|
4373037071 | ||
|
|
24e81c873c | ||
|
|
9e4a3905a0 | ||
|
|
b54b4a6580 | ||
|
|
f33a9c3941 | ||
|
|
d792798963 | ||
|
|
e5af4f6299 | ||
|
|
ef5bd9dc61 | ||
|
|
8834feac65 | ||
|
|
2f70dd732d |
4
.editorconfig
Normal file
4
.editorconfig
Normal file
@@ -0,0 +1,4 @@
|
||||
root = true
|
||||
|
||||
[*.js, *.css, *.tpl]
|
||||
indent_style = tab
|
||||
27
.gitignore
vendored
27
.gitignore
vendored
@@ -1,15 +1,28 @@
|
||||
#################
|
||||
## npm
|
||||
#################
|
||||
|
||||
npm-debug.log
|
||||
node_modules/
|
||||
sftp-config.json
|
||||
config.json
|
||||
public/src/nodebb.min.js
|
||||
public/config.json
|
||||
public/css/*.css
|
||||
public/themes/*
|
||||
*.sublime-project
|
||||
*.sublime-workspace
|
||||
plugins/*
|
||||
.project
|
||||
.project
|
||||
.idea
|
||||
*.swp
|
||||
Vagrantfile
|
||||
.vagrant
|
||||
provision.sh
|
||||
*.komodoproject
|
||||
.DS_Store
|
||||
feeds/recent.rss
|
||||
|
||||
# winston?
|
||||
error.log
|
||||
events.log
|
||||
|
||||
pidfile
|
||||
|
||||
# templates
|
||||
/public/templates
|
||||
/public/sounds
|
||||
|
||||
17
.jsbeautifyrc
Normal file
17
.jsbeautifyrc
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"indent_size": 4,
|
||||
"indent_char": " ",
|
||||
"indent_level": 0,
|
||||
"indent_with_tabs": true,
|
||||
"preserve_newlines": true,
|
||||
"max_preserve_newlines": 10,
|
||||
"jslint_happy": true,
|
||||
"brace_style": "collapse",
|
||||
"keep_array_indentation": false,
|
||||
"keep_function_indentation": false,
|
||||
"space_before_conditional": true,
|
||||
"break_chained_methods": false,
|
||||
"eval_code": false,
|
||||
"unescape_strings": false,
|
||||
"wrap_line_length": 0
|
||||
}
|
||||
86
.jshintrc
Normal file
86
.jshintrc
Normal file
@@ -0,0 +1,86 @@
|
||||
{
|
||||
// JSHint Default Configuration File (as on JSHint website)
|
||||
// See http://jshint.com/docs/ for more details
|
||||
|
||||
"maxerr" : 50, // {int} Maximum error before stopping
|
||||
|
||||
// Enforcing
|
||||
"bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.)
|
||||
"camelcase" : false, // true: Identifiers must be in camelCase
|
||||
"curly" : true, // true: Require {} for every new block or scope
|
||||
"eqeqeq" : true, // true: Require triple equals (===) for comparison
|
||||
"forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty()
|
||||
"immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());`
|
||||
"indent" : 4, // {int} Number of spaces to use for indentation
|
||||
"latedef" : false, // true: Require variables/functions to be defined before being used
|
||||
"newcap" : false, // true: Require capitalization of all constructor functions e.g. `new F()`
|
||||
"noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee`
|
||||
"noempty" : true, // true: Prohibit use of empty blocks
|
||||
"nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment)
|
||||
"plusplus" : false, // true: Prohibit use of `++` & `--`
|
||||
"quotmark" : false, // Quotation mark consistency:
|
||||
// false : do nothing (default)
|
||||
// true : ensure whatever is used is consistent
|
||||
// "single" : require single quotes
|
||||
// "double" : require double quotes
|
||||
"undef" : true, // true: Require all non-global variables to be declared (prevents global leaks)
|
||||
"unused" : false, // true: Require all defined variables be used TODO: Set this to true, update codebase.
|
||||
"strict" : true, // true: Requires all functions run in ES5 Strict Mode
|
||||
"trailing" : false, // true: Prohibit trailing whitespaces
|
||||
"maxparams" : false, // {int} Max number of formal params allowed per function
|
||||
"maxdepth" : false, // {int} Max depth of nested blocks (within functions)
|
||||
"maxstatements" : false, // {int} Max number statements per function
|
||||
"maxcomplexity" : false, // {int} Max cyclomatic complexity per function
|
||||
"maxlen" : false, // {int} Max number of characters per line
|
||||
|
||||
// Relaxing
|
||||
"asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons)
|
||||
"boss" : false, // true: Tolerate assignments where comparisons would be expected
|
||||
"debug" : false, // true: Allow debugger statements e.g. browser breakpoints.
|
||||
"eqnull" : false, // true: Tolerate use of `== null`
|
||||
"es5" : false, // true: Allow ES5 syntax (ex: getters and setters)
|
||||
"esnext" : false, // true: Allow ES.next (ES6) syntax (ex: `const`)
|
||||
"moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features)
|
||||
// (ex: `for each`, multiple try/catch, function expression…)
|
||||
"evil" : false, // true: Tolerate use of `eval` and `new Function()`
|
||||
"expr" : false, // true: Tolerate `ExpressionStatement` as Programs
|
||||
"funcscope" : false, // true: Tolerate defining variables inside control statements"
|
||||
"globalstrict" : false, // true: Allow global "use strict" (also enables 'strict')
|
||||
"iterator" : false, // true: Tolerate using the `__iterator__` property
|
||||
"lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block
|
||||
"laxbreak" : false, // true: Tolerate possibly unsafe line breakings
|
||||
"laxcomma" : false, // true: Tolerate comma-first style coding
|
||||
"loopfunc" : false, // true: Tolerate functions being defined in loops
|
||||
"multistr" : false, // true: Tolerate multi-line strings
|
||||
"proto" : false, // true: Tolerate using the `__proto__` property
|
||||
"scripturl" : false, // true: Tolerate script-targeted URLs
|
||||
"smarttabs" : false, // true: Tolerate mixed tabs/spaces when used for alignment
|
||||
"shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;`
|
||||
"sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation
|
||||
"supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;`
|
||||
"validthis" : false, // true: Tolerate using this in a non-constructor function
|
||||
|
||||
// Environments
|
||||
"browser" : true, // Web Browser (window, document, etc)
|
||||
"couch" : false, // CouchDB
|
||||
"devel" : true, // Development/debugging (alert, confirm, etc)
|
||||
"dojo" : false, // Dojo Toolkit
|
||||
"jquery" : true, // jQuery
|
||||
"mootools" : false, // MooTools
|
||||
"node" : true, // Node.js
|
||||
"nonstandard" : false, // Widely adopted globals (escape, unescape, etc)
|
||||
"prototypejs" : false, // Prototype and Scriptaculous
|
||||
"rhino" : false, // Rhino
|
||||
"worker" : false, // Web Workers
|
||||
"wsh" : false, // Windows Scripting Host
|
||||
"yui" : false, // Yahoo User Interface
|
||||
|
||||
// Legacy
|
||||
"nomen" : false, // true: Prohibit dangling `_` in variables
|
||||
"onevar" : false, // true: Allow only one `var` statement per function
|
||||
"passfail" : false, // true: Stop on first error
|
||||
"white" : false, // true: Check against strict whitespace and indentation rules
|
||||
|
||||
// Custom Globals
|
||||
"globals" : {} // additional predefined global variables
|
||||
}
|
||||
12
.travis.yml
Normal file
12
.travis.yml
Normal file
@@ -0,0 +1,12 @@
|
||||
services:
|
||||
- redis-server
|
||||
before_install:
|
||||
- npm i --production
|
||||
- node app --setup="{\"base_url\":\"http://127.0.0.1\",\"port\":4567,\"use_port\":false,\"secret\":\"abcdef\",\"bind_address\":\"0.0.0.0\",\"database\":\"redis\",\"redis:host\":\"127.0.0.1\",\"redis:port\":6379,\"redis:password\":\"\",\"redis:database\":0,\"admin:username\":\"admin\",\"admin:email\":\"test@example.org\",\"admin:password\":\"abcdef\",\"admin:password:confirm\":\"abcdef\"}" --ci="{\"host\":\"127.0.0.1\",\"port\":6379,\"database\":0}"
|
||||
language: node_js
|
||||
node_js:
|
||||
- "0.11"
|
||||
- "0.10"
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
548
.tx/config
Normal file
548
.tx/config
Normal file
@@ -0,0 +1,548 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[nodebb.category]
|
||||
file_filter = public/language/<lang>/category.json
|
||||
source_file = public/language/en_GB/category.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/category.json
|
||||
trans.cs = public/language/cs/category.json
|
||||
trans.de = public/language/de/category.json
|
||||
trans.en_US = public/language/en_US/category.json
|
||||
trans.en@pirate = public/language/en@pirate/category.json
|
||||
trans.es = public/language/es/category.json
|
||||
trans.et = public/language/et/category.json
|
||||
trans.fa_IR = public/language/fa_IR/category.json
|
||||
trans.fi = public/language/fi/category.json
|
||||
trans.fr = public/language/fr/category.json
|
||||
trans.he = public/language/he/category.json
|
||||
trans.hu = public/language/hu/category.json
|
||||
trans.it = public/language/it/category.json
|
||||
trans.ja = public/language/ja/category.json
|
||||
trans.lt = public/language/lt/category.json
|
||||
trans.ms = public/language/ms/category.json
|
||||
trans.nb = public/language/nb/category.json
|
||||
trans.nl = public/language/nl/category.json
|
||||
trans.pl = public/language/pl/category.json
|
||||
trans.pt_BR = public/language/pt_BR/category.json
|
||||
trans.ru = public/language/ru/category.json
|
||||
trans.sc = public/language/sc/category.json
|
||||
trans.sk = public/language/sk/category.json
|
||||
trans.sv = public/language/sv/category.json
|
||||
trans.th = public/language/th/category.json
|
||||
trans.tr = public/language/tr/category.json
|
||||
trans.vi = public/language/vi/category.json
|
||||
trans.zh_CN = public/language/zh_CN/category.json
|
||||
trans.zh_TW = public/language/zh_TW/category.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.login]
|
||||
file_filter = public/language/<lang>/login.json
|
||||
source_file = public/language/en_GB/login.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/login.json
|
||||
trans.cs = public/language/cs/login.json
|
||||
trans.de = public/language/de/login.json
|
||||
trans.en_US = public/language/en_US/login.json
|
||||
trans.en@pirate = public/language/en@pirate/login.json
|
||||
trans.es = public/language/es/login.json
|
||||
trans.et = public/language/et/login.json
|
||||
trans.fa_IR = public/language/fa_IR/login.json
|
||||
trans.fi = public/language/fi/login.json
|
||||
trans.fr = public/language/fr/login.json
|
||||
trans.he = public/language/he/login.json
|
||||
trans.hu = public/language/hu/login.json
|
||||
trans.it = public/language/it/login.json
|
||||
trans.ja = public/language/ja/login.json
|
||||
trans.lt = public/language/lt/login.json
|
||||
trans.ms = public/language/ms/login.json
|
||||
trans.nb = public/language/nb/login.json
|
||||
trans.nl = public/language/nl/login.json
|
||||
trans.pl = public/language/pl/login.json
|
||||
trans.pt_BR = public/language/pt_BR/login.json
|
||||
trans.ru = public/language/ru/login.json
|
||||
trans.sc = public/language/sc/login.json
|
||||
trans.sk = public/language/sk/login.json
|
||||
trans.sv = public/language/sv/login.json
|
||||
trans.th = public/language/th/login.json
|
||||
trans.tr = public/language/tr/login.json
|
||||
trans.vi = public/language/vi/login.json
|
||||
trans.zh_CN = public/language/zh_CN/login.json
|
||||
trans.zh_TW = public/language/zh_TW/login.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.recent]
|
||||
source_file = public/language/en_GB/recent.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/recent.json
|
||||
trans.cs = public/language/cs/recent.json
|
||||
trans.de = public/language/de/recent.json
|
||||
trans.en_US = public/language/en_US/recent.json
|
||||
trans.en@pirate = public/language/en@pirate/recent.json
|
||||
trans.es = public/language/es/recent.json
|
||||
trans.et = public/language/et/recent.json
|
||||
trans.fa_IR = public/language/fa_IR/recent.json
|
||||
trans.fi = public/language/fi/recent.json
|
||||
trans.fr = public/language/fr/recent.json
|
||||
trans.he = public/language/he/recent.json
|
||||
trans.hu = public/language/hu/recent.json
|
||||
trans.it = public/language/it/recent.json
|
||||
trans.ja = public/language/ja/recent.json
|
||||
trans.lt = public/language/lt/recent.json
|
||||
trans.ms = public/language/ms/recent.json
|
||||
trans.nb = public/language/nb/recent.json
|
||||
trans.nl = public/language/nl/recent.json
|
||||
trans.pl = public/language/pl/recent.json
|
||||
trans.pt_BR = public/language/pt_BR/recent.json
|
||||
trans.ru = public/language/ru/recent.json
|
||||
trans.sc = public/language/sc/recent.json
|
||||
trans.sk = public/language/sk/recent.json
|
||||
trans.sv = public/language/sv/recent.json
|
||||
trans.th = public/language/th/recent.json
|
||||
trans.tr = public/language/tr/recent.json
|
||||
trans.vi = public/language/vi/recent.json
|
||||
trans.zh_CN = public/language/zh_CN/recent.json
|
||||
trans.zh_TW = public/language/zh_TW/recent.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.unread]
|
||||
source_file = public/language/en_GB/unread.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/unread.json
|
||||
trans.cs = public/language/cs/unread.json
|
||||
trans.de = public/language/de/unread.json
|
||||
trans.en_US = public/language/en_US/unread.json
|
||||
trans.en@pirate = public/language/en@pirate/unread.json
|
||||
trans.es = public/language/es/unread.json
|
||||
trans.et = public/language/et/unread.json
|
||||
trans.fa_IR = public/language/fa_IR/unread.json
|
||||
trans.fi = public/language/fi/unread.json
|
||||
trans.fr = public/language/fr/unread.json
|
||||
trans.he = public/language/he/unread.json
|
||||
trans.hu = public/language/hu/unread.json
|
||||
trans.it = public/language/it/unread.json
|
||||
trans.ja = public/language/ja/unread.json
|
||||
trans.lt = public/language/lt/unread.json
|
||||
trans.ms = public/language/ms/unread.json
|
||||
trans.nb = public/language/nb/unread.json
|
||||
trans.nl = public/language/nl/unread.json
|
||||
trans.pl = public/language/pl/unread.json
|
||||
trans.pt_BR = public/language/pt_BR/unread.json
|
||||
trans.ru = public/language/ru/unread.json
|
||||
trans.sc = public/language/sc/unread.json
|
||||
trans.sk = public/language/sk/unread.json
|
||||
trans.sv = public/language/sv/unread.json
|
||||
trans.th = public/language/th/unread.json
|
||||
trans.tr = public/language/tr/unread.json
|
||||
trans.vi = public/language/vi/unread.json
|
||||
trans.zh_CN = public/language/zh_CN/unread.json
|
||||
trans.zh_TW = public/language/zh_TW/unread.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.modules]
|
||||
source_file = public/language/en_GB/modules.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/modules.json
|
||||
trans.cs = public/language/cs/modules.json
|
||||
trans.de = public/language/de/modules.json
|
||||
trans.en_US = public/language/en_US/modules.json
|
||||
trans.en@pirate = public/language/en@pirate/modules.json
|
||||
trans.es = public/language/es/modules.json
|
||||
trans.et = public/language/et/modules.json
|
||||
trans.fa_IR = public/language/fa_IR/modules.json
|
||||
trans.fi = public/language/fi/modules.json
|
||||
trans.fr = public/language/fr/modules.json
|
||||
trans.he = public/language/he/modules.json
|
||||
trans.hu = public/language/hu/modules.json
|
||||
trans.it = public/language/it/modules.json
|
||||
trans.ja = public/language/ja/modules.json
|
||||
trans.lt = public/language/lt/modules.json
|
||||
trans.ms = public/language/ms/modules.json
|
||||
trans.nb = public/language/nb/modules.json
|
||||
trans.nl = public/language/nl/modules.json
|
||||
trans.pl = public/language/pl/modules.json
|
||||
trans.pt_BR = public/language/pt_BR/modules.json
|
||||
trans.ru = public/language/ru/modules.json
|
||||
trans.sc = public/language/sc/modules.json
|
||||
trans.sk = public/language/sk/modules.json
|
||||
trans.sv = public/language/sv/modules.json
|
||||
trans.th = public/language/th/modules.json
|
||||
trans.tr = public/language/tr/modules.json
|
||||
trans.vi = public/language/vi/modules.json
|
||||
trans.zh_CN = public/language/zh_CN/modules.json
|
||||
trans.zh_TW = public/language/zh_TW/modules.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.register]
|
||||
source_file = public/language/en_GB/register.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/register.json
|
||||
trans.cs = public/language/cs/register.json
|
||||
trans.de = public/language/de/register.json
|
||||
trans.en_US = public/language/en_US/register.json
|
||||
trans.en@pirate = public/language/en@pirate/register.json
|
||||
trans.es = public/language/es/register.json
|
||||
trans.et = public/language/et/register.json
|
||||
trans.fa_IR = public/language/fa_IR/register.json
|
||||
trans.fi = public/language/fi/register.json
|
||||
trans.fr = public/language/fr/register.json
|
||||
trans.he = public/language/he/register.json
|
||||
trans.hu = public/language/hu/register.json
|
||||
trans.it = public/language/it/register.json
|
||||
trans.ja = public/language/ja/register.json
|
||||
trans.lt = public/language/lt/register.json
|
||||
trans.ms = public/language/ms/register.json
|
||||
trans.nb = public/language/nb/register.json
|
||||
trans.nl = public/language/nl/register.json
|
||||
trans.pl = public/language/pl/register.json
|
||||
trans.pt_BR = public/language/pt_BR/register.json
|
||||
trans.ru = public/language/ru/register.json
|
||||
trans.sc = public/language/sc/register.json
|
||||
trans.sk = public/language/sk/register.json
|
||||
trans.sv = public/language/sv/register.json
|
||||
trans.th = public/language/th/register.json
|
||||
trans.tr = public/language/tr/register.json
|
||||
trans.vi = public/language/vi/register.json
|
||||
trans.zh_CN = public/language/zh_CN/register.json
|
||||
trans.zh_TW = public/language/zh_TW/register.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.user]
|
||||
source_file = public/language/en_GB/user.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/user.json
|
||||
trans.cs = public/language/cs/user.json
|
||||
trans.de = public/language/de/user.json
|
||||
trans.en_US = public/language/en_US/user.json
|
||||
trans.en@pirate = public/language/en@pirate/user.json
|
||||
trans.es = public/language/es/user.json
|
||||
trans.et = public/language/et/user.json
|
||||
trans.fa_IR = public/language/fa_IR/user.json
|
||||
trans.fi = public/language/fi/user.json
|
||||
trans.fr = public/language/fr/user.json
|
||||
trans.he = public/language/he/user.json
|
||||
trans.hu = public/language/hu/user.json
|
||||
trans.it = public/language/it/user.json
|
||||
trans.ja = public/language/ja/user.json
|
||||
trans.lt = public/language/lt/user.json
|
||||
trans.ms = public/language/ms/user.json
|
||||
trans.nb = public/language/nb/user.json
|
||||
trans.nl = public/language/nl/user.json
|
||||
trans.pl = public/language/pl/user.json
|
||||
trans.pt_BR = public/language/pt_BR/user.json
|
||||
trans.ru = public/language/ru/user.json
|
||||
trans.sc = public/language/sc/user.json
|
||||
trans.sk = public/language/sk/user.json
|
||||
trans.sv = public/language/sv/user.json
|
||||
trans.th = public/language/th/user.json
|
||||
trans.tr = public/language/tr/user.json
|
||||
trans.vi = public/language/vi/user.json
|
||||
trans.zh_CN = public/language/zh_CN/user.json
|
||||
trans.zh_TW = public/language/zh_TW/user.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.global]
|
||||
source_file = public/language/en_GB/global.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/global.json
|
||||
trans.cs = public/language/cs/global.json
|
||||
trans.de = public/language/de/global.json
|
||||
trans.en_US = public/language/en_US/global.json
|
||||
trans.en@pirate = public/language/en@pirate/global.json
|
||||
trans.es = public/language/es/global.json
|
||||
trans.et = public/language/et/global.json
|
||||
trans.fa_IR = public/language/fa_IR/global.json
|
||||
trans.fi = public/language/fi/global.json
|
||||
trans.fr = public/language/fr/global.json
|
||||
trans.he = public/language/he/global.json
|
||||
trans.hu = public/language/hu/global.json
|
||||
trans.it = public/language/it/global.json
|
||||
trans.ja = public/language/ja/global.json
|
||||
trans.lt = public/language/lt/global.json
|
||||
trans.ms = public/language/ms/global.json
|
||||
trans.nb = public/language/nb/global.json
|
||||
trans.nl = public/language/nl/global.json
|
||||
trans.pl = public/language/pl/global.json
|
||||
trans.pt_BR = public/language/pt_BR/global.json
|
||||
trans.ru = public/language/ru/global.json
|
||||
trans.sc = public/language/sc/global.json
|
||||
trans.sk = public/language/sk/global.json
|
||||
trans.sv = public/language/sv/global.json
|
||||
trans.th = public/language/th/global.json
|
||||
trans.tr = public/language/tr/global.json
|
||||
trans.vi = public/language/vi/global.json
|
||||
trans.zh_CN = public/language/zh_CN/global.json
|
||||
trans.zh_TW = public/language/zh_TW/global.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.notifications]
|
||||
source_file = public/language/en_GB/notifications.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/notifications.json
|
||||
trans.cs = public/language/cs/notifications.json
|
||||
trans.de = public/language/de/notifications.json
|
||||
trans.en_US = public/language/en_US/notifications.json
|
||||
trans.en@pirate = public/language/en@pirate/notifications.json
|
||||
trans.es = public/language/es/notifications.json
|
||||
trans.et = public/language/et/notifications.json
|
||||
trans.fa_IR = public/language/fa_IR/notifications.json
|
||||
trans.fi = public/language/fi/notifications.json
|
||||
trans.fr = public/language/fr/notifications.json
|
||||
trans.he = public/language/he/notifications.json
|
||||
trans.hu = public/language/hu/notifications.json
|
||||
trans.it = public/language/it/notifications.json
|
||||
trans.ja = public/language/ja/notifications.json
|
||||
trans.lt = public/language/lt/notifications.json
|
||||
trans.ms = public/language/ms/notifications.json
|
||||
trans.nb = public/language/nb/notifications.json
|
||||
trans.nl = public/language/nl/notifications.json
|
||||
trans.pl = public/language/pl/notifications.json
|
||||
trans.pt_BR = public/language/pt_BR/notifications.json
|
||||
trans.ru = public/language/ru/notifications.json
|
||||
trans.sc = public/language/sc/notifications.json
|
||||
trans.sk = public/language/sk/notifications.json
|
||||
trans.sv = public/language/sv/notifications.json
|
||||
trans.th = public/language/th/notifications.json
|
||||
trans.tr = public/language/tr/notifications.json
|
||||
trans.vi = public/language/vi/notifications.json
|
||||
trans.zh_CN = public/language/zh_CN/notifications.json
|
||||
trans.zh_TW = public/language/zh_TW/notifications.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.reset_password]
|
||||
source_file = public/language/en_GB/reset_password.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/reset_password.json
|
||||
trans.cs = public/language/cs/reset_password.json
|
||||
trans.de = public/language/de/reset_password.json
|
||||
trans.en_US = public/language/en_US/reset_password.json
|
||||
trans.en@pirate = public/language/en@pirate/reset_password.json
|
||||
trans.es = public/language/es/reset_password.json
|
||||
trans.et = public/language/et/reset_password.json
|
||||
trans.fa_IR = public/language/fa_IR/reset_password.json
|
||||
trans.fi = public/language/fi/reset_password.json
|
||||
trans.fr = public/language/fr/reset_password.json
|
||||
trans.he = public/language/he/reset_password.json
|
||||
trans.hu = public/language/hu/reset_password.json
|
||||
trans.it = public/language/it/reset_password.json
|
||||
trans.ja = public/language/ja/reset_password.json
|
||||
trans.lt = public/language/lt/reset_password.json
|
||||
trans.ms = public/language/ms/reset_password.json
|
||||
trans.nb = public/language/nb/reset_password.json
|
||||
trans.nl = public/language/nl/reset_password.json
|
||||
trans.pl = public/language/pl/reset_password.json
|
||||
trans.pt_BR = public/language/pt_BR/reset_password.json
|
||||
trans.ru = public/language/ru/reset_password.json
|
||||
trans.sc = public/language/sc/reset_password.json
|
||||
trans.sk = public/language/sk/reset_password.json
|
||||
trans.sv = public/language/sv/reset_password.json
|
||||
trans.th = public/language/th/reset_password.json
|
||||
trans.tr = public/language/tr/reset_password.json
|
||||
trans.vi = public/language/vi/reset_password.json
|
||||
trans.zh_CN = public/language/zh_CN/reset_password.json
|
||||
trans.zh_TW = public/language/zh_TW/reset_password.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.users]
|
||||
source_file = public/language/en_GB/users.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/users.json
|
||||
trans.cs = public/language/cs/users.json
|
||||
trans.de = public/language/de/users.json
|
||||
trans.en_US = public/language/en_US/users.json
|
||||
trans.en@pirate = public/language/en@pirate/users.json
|
||||
trans.es = public/language/es/users.json
|
||||
trans.et = public/language/et/users.json
|
||||
trans.fa_IR = public/language/fa_IR/users.json
|
||||
trans.fi = public/language/fi/users.json
|
||||
trans.fr = public/language/fr/users.json
|
||||
trans.he = public/language/he/users.json
|
||||
trans.hu = public/language/hu/users.json
|
||||
trans.it = public/language/it/users.json
|
||||
trans.ja = public/language/ja/users.json
|
||||
trans.lt = public/language/lt/users.json
|
||||
trans.ms = public/language/ms/users.json
|
||||
trans.nb = public/language/nb/users.json
|
||||
trans.nl = public/language/nl/users.json
|
||||
trans.pl = public/language/pl/users.json
|
||||
trans.pt_BR = public/language/pt_BR/users.json
|
||||
trans.ru = public/language/ru/users.json
|
||||
trans.sc = public/language/sc/users.json
|
||||
trans.sk = public/language/sk/users.json
|
||||
trans.sv = public/language/sv/users.json
|
||||
trans.th = public/language/th/users.json
|
||||
trans.tr = public/language/tr/users.json
|
||||
trans.vi = public/language/vi/users.json
|
||||
trans.zh_CN = public/language/zh_CN/users.json
|
||||
trans.zh_TW = public/language/zh_TW/users.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.language]
|
||||
source_file = public/language/en_GB/language.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/language.json
|
||||
trans.cs = public/language/cs/language.json
|
||||
trans.de = public/language/de/language.json
|
||||
trans.en_US = public/language/en_US/language.json
|
||||
trans.en@pirate = public/language/en@pirate/language.json
|
||||
trans.es = public/language/es/language.json
|
||||
trans.et = public/language/et/language.json
|
||||
trans.fa_IR = public/language/fa_IR/language.json
|
||||
trans.fi = public/language/fi/language.json
|
||||
trans.fr = public/language/fr/language.json
|
||||
trans.he = public/language/he/language.json
|
||||
trans.hu = public/language/hu/language.json
|
||||
trans.it = public/language/it/language.json
|
||||
trans.ja = public/language/ja/language.json
|
||||
trans.lt = public/language/lt/language.json
|
||||
trans.ms = public/language/ms/language.json
|
||||
trans.nb = public/language/nb/language.json
|
||||
trans.nl = public/language/nl/language.json
|
||||
trans.pl = public/language/pl/language.json
|
||||
trans.pt_BR = public/language/pt_BR/language.json
|
||||
trans.ru = public/language/ru/language.json
|
||||
trans.sc = public/language/sc/language.json
|
||||
trans.sk = public/language/sk/language.json
|
||||
trans.sv = public/language/sv/language.json
|
||||
trans.th = public/language/th/language.json
|
||||
trans.tr = public/language/tr/language.json
|
||||
trans.vi = public/language/vi/language.json
|
||||
trans.zh_CN = public/language/zh_CN/language.json
|
||||
trans.zh_TW = public/language/zh_TW/language.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.pages]
|
||||
source_file = public/language/en_GB/pages.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/pages.json
|
||||
trans.cs = public/language/cs/pages.json
|
||||
trans.de = public/language/de/pages.json
|
||||
trans.en_US = public/language/en_US/pages.json
|
||||
trans.en@pirate = public/language/en@pirate/pages.json
|
||||
trans.es = public/language/es/pages.json
|
||||
trans.et = public/language/et/pages.json
|
||||
trans.fa_IR = public/language/fa_IR/pages.json
|
||||
trans.fi = public/language/fi/pages.json
|
||||
trans.fr = public/language/fr/pages.json
|
||||
trans.he = public/language/he/pages.json
|
||||
trans.hu = public/language/hu/pages.json
|
||||
trans.it = public/language/it/pages.json
|
||||
trans.ja = public/language/ja/pages.json
|
||||
trans.lt = public/language/lt/pages.json
|
||||
trans.ms = public/language/ms/pages.json
|
||||
trans.nb = public/language/nb/pages.json
|
||||
trans.nl = public/language/nl/pages.json
|
||||
trans.pl = public/language/pl/pages.json
|
||||
trans.pt_BR = public/language/pt_BR/pages.json
|
||||
trans.ru = public/language/ru/pages.json
|
||||
trans.sc = public/language/sc/pages.json
|
||||
trans.sk = public/language/sk/pages.json
|
||||
trans.sv = public/language/sv/pages.json
|
||||
trans.th = public/language/th/pages.json
|
||||
trans.tr = public/language/tr/pages.json
|
||||
trans.vi = public/language/vi/pages.json
|
||||
trans.zh_CN = public/language/zh_CN/pages.json
|
||||
trans.zh_TW = public/language/zh_TW/pages.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.topic]
|
||||
source_file = public/language/en_GB/topic.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/topic.json
|
||||
trans.cs = public/language/cs/topic.json
|
||||
trans.de = public/language/de/topic.json
|
||||
trans.en_US = public/language/en_US/topic.json
|
||||
trans.en@pirate = public/language/en@pirate/topic.json
|
||||
trans.es = public/language/es/topic.json
|
||||
trans.et = public/language/et/topic.json
|
||||
trans.fa_IR = public/language/fa_IR/topic.json
|
||||
trans.fi = public/language/fi/topic.json
|
||||
trans.fr = public/language/fr/topic.json
|
||||
trans.he = public/language/he/topic.json
|
||||
trans.hu = public/language/hu/topic.json
|
||||
trans.it = public/language/it/topic.json
|
||||
trans.ja = public/language/ja/topic.json
|
||||
trans.lt = public/language/lt/topic.json
|
||||
trans.ms = public/language/ms/topic.json
|
||||
trans.nb = public/language/nb/topic.json
|
||||
trans.nl = public/language/nl/topic.json
|
||||
trans.pl = public/language/pl/topic.json
|
||||
trans.pt_BR = public/language/pt_BR/topic.json
|
||||
trans.ru = public/language/ru/topic.json
|
||||
trans.sc = public/language/sc/topic.json
|
||||
trans.sk = public/language/sk/topic.json
|
||||
trans.sv = public/language/sv/topic.json
|
||||
trans.th = public/language/th/topic.json
|
||||
trans.tr = public/language/tr/topic.json
|
||||
trans.vi = public/language/vi/topic.json
|
||||
trans.zh_CN = public/language/zh_CN/topic.json
|
||||
trans.zh_TW = public/language/zh_TW/topic.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.success]
|
||||
source_file = public/language/en_GB/success.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/success.json
|
||||
trans.cs = public/language/cs/success.json
|
||||
trans.de = public/language/de/success.json
|
||||
trans.en_US = public/language/en_US/success.json
|
||||
trans.en@pirate = public/language/en@pirate/success.json
|
||||
trans.es = public/language/es/success.json
|
||||
trans.et = public/language/et/success.json
|
||||
trans.fa_IR = public/language/fa_IR/success.json
|
||||
trans.fi = public/language/fi/success.json
|
||||
trans.fr = public/language/fr/success.json
|
||||
trans.he = public/language/he/success.json
|
||||
trans.hu = public/language/hu/success.json
|
||||
trans.it = public/language/it/success.json
|
||||
trans.ja = public/language/ja/success.json
|
||||
trans.lt = public/language/lt/success.json
|
||||
trans.ms = public/language/ms/success.json
|
||||
trans.nb = public/language/nb/success.json
|
||||
trans.nl = public/language/nl/success.json
|
||||
trans.pl = public/language/pl/success.json
|
||||
trans.pt_BR = public/language/pt_BR/success.json
|
||||
trans.ru = public/language/ru/success.json
|
||||
trans.sc = public/language/sc/success.json
|
||||
trans.sk = public/language/sk/success.json
|
||||
trans.sv = public/language/sv/success.json
|
||||
trans.th = public/language/th/success.json
|
||||
trans.tr = public/language/tr/success.json
|
||||
trans.vi = public/language/vi/success.json
|
||||
trans.zh_CN = public/language/zh_CN/success.json
|
||||
trans.zh_TW = public/language/zh_TW/success.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.error]
|
||||
source_file = public/language/en_GB/error.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/error.json
|
||||
trans.cs = public/language/cs/error.json
|
||||
trans.de = public/language/de/error.json
|
||||
trans.en_US = public/language/en_US/error.json
|
||||
trans.en@pirate = public/language/en@pirate/error.json
|
||||
trans.es = public/language/es/error.json
|
||||
trans.et = public/language/et/error.json
|
||||
trans.fa_IR = public/language/fa_IR/error.json
|
||||
trans.fi = public/language/fi/error.json
|
||||
trans.fr = public/language/fr/error.json
|
||||
trans.he = public/language/he/error.json
|
||||
trans.hu = public/language/hu/error.json
|
||||
trans.it = public/language/it/error.json
|
||||
trans.ja = public/language/ja/error.json
|
||||
trans.lt = public/language/lt/error.json
|
||||
trans.ms = public/language/ms/error.json
|
||||
trans.nb = public/language/nb/error.json
|
||||
trans.nl = public/language/nl/error.json
|
||||
trans.pl = public/language/pl/error.json
|
||||
trans.pt_BR = public/language/pt_BR/error.json
|
||||
trans.ru = public/language/ru/error.json
|
||||
trans.sc = public/language/sc/error.json
|
||||
trans.sk = public/language/sk/error.json
|
||||
trans.sv = public/language/sv/error.json
|
||||
trans.th = public/language/th/error.json
|
||||
trans.tr = public/language/tr/error.json
|
||||
trans.vi = public/language/vi/error.json
|
||||
trans.zh_CN = public/language/zh_CN/error.json
|
||||
trans.zh_TW = public/language/zh_TW/error.json
|
||||
type = KEYVALUEJSON
|
||||
15
NOTES.md
Normal file
15
NOTES.md
Normal file
@@ -0,0 +1,15 @@
|
||||
## 0.4x Refactor Notes
|
||||
|
||||
Please remove this file after 0.4x (or perhaps organize it so that we can see the history of breaking changes)
|
||||
|
||||
### Immediate Deprecation Notices
|
||||
|
||||
* `action:ajaxifying` is no longer triggered on body but on window instead, in line with other similar hooks.
|
||||
* `filter:server.create_routes` and `filter:admin.create_routes` will have limited support (ajaxify works, but first-load will not). Please have a look at [this plugin](https://github.com/psychobunny/nodebb-plugin-kitchen-sink/blob/master/library.js#L16-L22) for an example on how to create routes in plugins from now on.
|
||||
|
||||
### Upcoming Deprecation Warnings
|
||||
|
||||
* `filter:footer.build` will be deprecated for 0.4x in favour of the widget system (WIP)
|
||||
* templates.setGlobal (server-side only) deprecated in favour of using res.locals
|
||||
* `plugins/fireHook` route will be deprecated for 0.4x
|
||||
* synchronous hooks will be deprecated for 0.4x - we're reducing complexity by removing the `callbacked: true` property in `plugin.json` - just use callbacks.
|
||||
79
README.md
79
README.md
@@ -1,56 +1,59 @@
|
||||
Please support NodeBB development! Check out our IndieGoGo campaign and like, share, and follow us :)
|
||||
[NodeBB Homepage](http://www.nodebb.org/ "NodeBB") # [Follow on Twitter](http://www.twitter.com/NodeBB/ "NodeBB Twitter") # [Like us on Facebook](http://www.facebook.com/NodeBB/ "NodeBB Facebook")
|
||||
# <img alt="NodeBB" src="http://i.imgur.com/3yj1n6N.png" />
|
||||
[](https://travis-ci.org/designcreateplay/NodeBB)
|
||||
[](https://david-dm.org/designcreateplay/nodebb)
|
||||
[](https://codeclimate.com/github/designcreateplay/NodeBB)
|
||||
|
||||
# NodeBB
|
||||
**NodeBB** is a robust Node.js driven forum built on a redis database. It is powered by web sockets, and is compatible down to IE8.
|
||||
**NodeBB Forum Software** is powered by Node.js and built on a Redis database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB is compatible down to IE8 and has many modern features out of the box such as social network integration and streaming discussions.
|
||||
|
||||

|
||||
* [Get NodeBB](http://www.nodebb.org/ "NodeBB")
|
||||
* [Demo & Meta Discussion](http://community.nodebb.org)
|
||||
* [NodeBB Blog](http://blog.nodebb.org)
|
||||
* [Documentation](http://docs.nodebb.org) - includes setup instructions for other platforms
|
||||
* [Join us on IRC](https://kiwiirc.com/client/irc.freenode.net/nodebb) - #nodebb on Freenode
|
||||
* [Follow us on Twitter](http://www.twitter.com/NodeBB/ "NodeBB Twitter")
|
||||
* [Like us on Facebook](http://www.facebook.com/NodeBB/ "NodeBB Facebook")
|
||||
* [Get Plugins](http://community.nodebb.org/category/7/nodebb-plugins "NodeBB Plugins")
|
||||
* [Get Themes](http://community.nodebb.org/category/10/nodebb-themes "NodeBB Themes")
|
||||
* [Help translate NodeBB](https://www.transifex.com/projects/p/nodebb/)
|
||||
|
||||
## Screenshots
|
||||
|
||||
[<img src="http://i.imgur.com/FLOUuIqb.png" />](http://i.imgur.com/FLOUuIq.png) [<img src="http://i.imgur.com/Ud1LrfIb.png" />](http://i.imgur.com/Ud1LrfI.png) [<img src="http://i.imgur.com/ZC8W39ab.png" />](http://i.imgur.com/ZC8W39a.png) [<img src="http://i.imgur.com/o90kVPib.png" />](http://i.imgur.com/o90kVPi.png) [<img src="http://i.imgur.com/AaRRrU2b.png" />](http://i.imgur.com/AaRRrU2.png) [<img src="http://i.imgur.com/LmHtPhob.png" />](http://i.imgur.com/LmHtPho.png) [<img src="http://i.imgur.com/paiJPJkb.jpg" />](http://i.imgur.com/paiJPJk.jpg) [<img src="http://i.imgur.com/ZfavPHDb.png" />](http://i.imgur.com/ZfavPHD.png) [<img src="http://i.imgur.com/8vc1Ytc.png" />](http://i.imgur.com/8vc1Ytc.png)
|
||||
|
||||
|
||||
Credit: [Convoe](http://www.convoe.com), [Kano](http://www.kano.me), [Manchester United Forum](http://manutdforums.com/).
|
||||
|
||||

|
||||
|
||||
## How can I follow along/contribute?
|
||||
|
||||
* Our feature roadmap is hosted on the project wiki's [Version History / Roadmap](https://github.com/designcreateplay/NodeBB/wiki/Version-History-%26-Roadmap)
|
||||
* If you are a developer, feel free to check out the source and submit pull requests.
|
||||
* If you are a designer, NodeBB needs themes! NodeBB will accept any LESS or CSS file and use it in place of the default Twitter Bootstrap theme. Consider extending Bootstrap themes by extending the base bootstrap LESS file.
|
||||
* If you are a developer, feel free to check out the source and submit pull requests. We also have a wide array of [plugins](http://community.nodebb.org/category/7/nodebb-plugins) which would be a great starting point for learning the codebase.
|
||||
* If you are a designer, [NodeBB needs themes](http://community.nodebb.org/category/10/nodebb-themes)! NodeBB's theming system allows extention of the base templates as well as styling via LESS or CSS. NodeBB's base theme utilizes [Bootstrap 3](http://getbootstrap.com/) but themes can choose to use a different framework altogether.
|
||||
* Please don't forget to **like**, **follow**, and **star our repo**! Join our growing [community](http://community.nodebb.org) to keep up to date with the latest NodeBB development.
|
||||
|
||||
## Requirements
|
||||
|
||||
NodeBB requires a version of Node.js at least 0.8 or greater, and a Redis version 2.6 or greater.
|
||||
NodeBB requires the following software to be installed:
|
||||
|
||||
* A version of Node.js at least 0.10 or greater
|
||||
* Redis, version 2.6 or greater **or** MongoDB, version 2.4 or greater
|
||||
* nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB)
|
||||
|
||||
## Installation
|
||||
|
||||
First, we install our base software stack:
|
||||
[Please refer to platform-specific installation documentation](http://docs.nodebb.org/en/latest/installing/os.html)
|
||||
|
||||
# apt-get install git nodejs redis-server npm build-essential imagemagick
|
||||
## Securing NodeBB
|
||||
|
||||
**If your package manager only installed a version of Node.js that is less than 0.8 (e.g. Ubuntu 12.10, 13.04):**
|
||||
It is important to ensure that your NodeBB and database servers are secured. Bear these points in mind:
|
||||
|
||||
# add-apt-repository ppa:chris-lea/node.js
|
||||
# apt-get update && apt-get dist-upgrade
|
||||
1. While some distributions set up Redis with a more restrictive configuration, Redis by default listens to all interfaces, which is especially dangerous when a server is open to the public. Some suggestions:
|
||||
* Set `bind_address` to `127.0.0.1` so as to restrict access to the local machine only
|
||||
* Use `requirepass` to secure Redis behind a password (preferably a long one)
|
||||
* Familiarise yourself with [Redis Security](http://redis.io/topics/security)
|
||||
2. Use `iptables` to secure your server from unintended open ports. In Ubuntu, `ufw` provides a friendlier interface to working with `iptables`.
|
||||
* e.g. If your NodeBB is proxied, no ports should be open except 80 (and possibly 22, for SSH access)
|
||||
|
||||
Next, clone this repository:
|
||||
## Upgrading NodeBB
|
||||
|
||||
$ cd /path/to/nodebb/install/location
|
||||
$ git clone git://github.com/designcreateplay/NodeBB.git nodebb
|
||||
|
||||
Obtain all of the dependencies required by NodeBB:
|
||||
|
||||
$ cd nodebb
|
||||
$ npm install
|
||||
|
||||
Initiate the setup script by running the app with the `--setup` flag:
|
||||
|
||||
$ node app --setup
|
||||
|
||||
The default settings are for a local server running on the default port, with a redis store on the same machine/port.
|
||||
|
||||
Lastly, we run the forum.
|
||||
|
||||
$ node app
|
||||
|
||||
NodeBB can also be started with helper programs, such as `supervisor` and `forever`. [Take a look at the options here](https://github.com/designcreateplay/NodeBB/wiki/How-to-run-NodeBB).
|
||||
|
||||
*(Optional)* Some server configurations may install the node binary as `nodejs` instead of `node`. You can re-map it (so as to not break compatibility with `node-supervisor`) by running the following command:
|
||||
|
||||
# update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10
|
||||
Detailed upgrade instructions are listed in [Upgrading NodeBB](https://github.com/designcreateplay/NodeBB/wiki/Upgrading-NodeBB)
|
||||
|
||||
375
app.js
375
app.js
@@ -16,145 +16,302 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// Configuration setup
|
||||
nconf = require('nconf');
|
||||
nconf.argv().file({ file: __dirname + '/config.json'});
|
||||
|
||||
"use strict";
|
||||
/*global require, global, process*/
|
||||
|
||||
var nconf = require('nconf');
|
||||
nconf.argv().env();
|
||||
|
||||
var fs = require('fs'),
|
||||
os = require('os'),
|
||||
semver = require('semver'),
|
||||
winston = require('winston'),
|
||||
path = require('path'),
|
||||
pkg = require('./package.json'),
|
||||
url = require('url'),
|
||||
meta = require('./src/meta.js');
|
||||
|
||||
// Runtime environment
|
||||
global.env = process.env.NODE_ENV || 'production',
|
||||
utils = require('./public/src/utils.js');
|
||||
|
||||
|
||||
global.env = process.env.NODE_ENV || 'production';
|
||||
|
||||
winston.remove(winston.transports.Console);
|
||||
winston.add(winston.transports.Console, {
|
||||
colorize:true
|
||||
colorize: true
|
||||
});
|
||||
|
||||
winston.add(winston.transports.File, {
|
||||
filename:'error.log',
|
||||
level:'error'
|
||||
})
|
||||
filename: 'logs/error.log',
|
||||
level: 'error'
|
||||
});
|
||||
|
||||
// TODO: remove once https://github.com/flatiron/winston/issues/280 is fixed
|
||||
winston.err = function(err) {
|
||||
winston.err = function (err) {
|
||||
winston.error(err.stack);
|
||||
};
|
||||
|
||||
if(os.platform() === 'linux') {
|
||||
require('child_process').exec('/usr/bin/which convert', function(err, stdout, stderr) {
|
||||
if(err || !stdout) {
|
||||
winston.warn('Couldn\'t find convert. Did you install imagemagick?');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Log GNU copyright info along with server info
|
||||
winston.info('NodeBB v' + pkg.version + ' Copyright (C) 2013 DesignCreatePlay Inc.');
|
||||
winston.info('NodeBB v' + pkg.version + ' Copyright (C) 2013-2014 DesignCreatePlay Inc.');
|
||||
winston.info('This program comes with ABSOLUTELY NO WARRANTY.');
|
||||
winston.info('This is free software, and you are welcome to redistribute it under certain conditions.');
|
||||
winston.info('===');
|
||||
winston.info('');
|
||||
|
||||
// Alternate configuration file support
|
||||
var configFile = __dirname + '/config.json',
|
||||
configExists;
|
||||
if (nconf.get('config')) {
|
||||
configFile = path.resolve(__dirname, nconf.get('config'));
|
||||
}
|
||||
configExists = fs.existsSync(configFile);
|
||||
|
||||
|
||||
if(nconf.get('upgrade')) {
|
||||
meta.configs.init(function() {
|
||||
require('./src/upgrade').upgrade();
|
||||
});
|
||||
} else if (!nconf.get('setup') && nconf.get('base_url')) {
|
||||
nconf.set('url', nconf.get('base_url') + (nconf.get('use_port') ? ':' + nconf.get('port') : '') + nconf.get('relative_path') + '/');
|
||||
nconf.set('upload_url', nconf.get('url') + 'uploads/');
|
||||
|
||||
winston.info('Initializing NodeBB v' + pkg.version + ', on port ' + nconf.get('port') + ', using Redis store at ' + nconf.get('redis:host') + ':' + nconf.get('redis:port') + '.');
|
||||
winston.info('Base Configuration OK.');
|
||||
|
||||
meta.configs.init(function() {
|
||||
// Initial setup for Redis & Reds
|
||||
var reds = require('reds');
|
||||
RDB = require('./src/redis.js');
|
||||
reds.createClient = function() {
|
||||
return reds.client || (reds.client = RDB);
|
||||
}
|
||||
|
||||
var categories = require('./src/categories.js'),
|
||||
templates = require('./public/src/templates.js'),
|
||||
webserver = require('./src/webserver.js'),
|
||||
websockets = require('./src/websockets.js'),
|
||||
plugins = require('./src/plugins'),
|
||||
admin = {
|
||||
'categories': require('./src/admin/categories.js')
|
||||
};
|
||||
|
||||
DEVELOPMENT = true;
|
||||
|
||||
global.configuration = {};
|
||||
global.templates = {};
|
||||
|
||||
(function(config) {
|
||||
config['ROOT_DIRECTORY'] = __dirname;
|
||||
|
||||
templates.init([
|
||||
'header', 'footer', 'logout', 'outgoing', 'admin/header', 'admin/footer', 'admin/index',
|
||||
'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext',
|
||||
'emails/header', 'emails/footer',
|
||||
|
||||
'noscript/header', 'noscript/home', 'noscript/category', 'noscript/topic'
|
||||
]);
|
||||
|
||||
templates.ready(webserver.init);
|
||||
|
||||
//setup scripts to be moved outside of the app in future.
|
||||
function setup_categories() {
|
||||
winston.info('Checking categories...');
|
||||
categories.getAllCategories(function(data) {
|
||||
if (data.categories.length === 0) {
|
||||
winston.info('Setting up default categories...');
|
||||
|
||||
fs.readFile(config.ROOT_DIRECTORY + '/install/data/categories.json', function(err, default_categories) {
|
||||
default_categories = JSON.parse(default_categories);
|
||||
|
||||
for (var category in default_categories) {
|
||||
admin.categories.create(default_categories[category]);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
winston.info('Hardcoding uid 1 as an admin');
|
||||
var user = require('./src/user.js');
|
||||
user.makeAdministrator(1);
|
||||
|
||||
|
||||
} else {
|
||||
winston.info('Categories OK. Found ' + data.categories.length + ' categories.');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
setup_categories();
|
||||
}(global.configuration));
|
||||
});
|
||||
|
||||
if (!nconf.get('help') && !nconf.get('setup') && !nconf.get('install') && !nconf.get('upgrade') && !nconf.get('reset') && configExists) {
|
||||
start();
|
||||
} else if (nconf.get('setup') || nconf.get('install') || !configExists) {
|
||||
setup();
|
||||
} else if (nconf.get('upgrade')) {
|
||||
upgrade();
|
||||
} else if (nconf.get('reset')) {
|
||||
reset();
|
||||
} else {
|
||||
// New install, ask setup questions
|
||||
if (nconf.get('setup')) winston.info('NodeBB Setup Triggered via Command Line');
|
||||
else winston.info('Configuration not found, starting NodeBB setup');
|
||||
displayHelp();
|
||||
}
|
||||
|
||||
var install = require('./src/install');
|
||||
function loadConfig() {
|
||||
nconf.file({
|
||||
file: configFile
|
||||
});
|
||||
|
||||
process.stdout.write(
|
||||
"\nWelcome to NodeBB!\nThis looks like a new installation, so you'll have to answer a " +
|
||||
"few questions about your environment before we can proceed.\n\n" +
|
||||
"Press enter to accept the default setting (shown in brackets).\n\n\n"
|
||||
);
|
||||
nconf.defaults({
|
||||
base_dir: __dirname,
|
||||
themes_path: path.join(__dirname, 'node_modules'),
|
||||
upload_url: '/uploads/',
|
||||
views_dir: path.join(__dirname, 'public/templates')
|
||||
});
|
||||
|
||||
install.setup(function(err) {
|
||||
// Ensure themes_path is a full filepath
|
||||
nconf.set('themes_path', path.resolve(__dirname, nconf.get('themes_path')));
|
||||
nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-vanilla/templates'));
|
||||
}
|
||||
|
||||
function start() {
|
||||
loadConfig();
|
||||
|
||||
winston.info('Time: ' + new Date());
|
||||
winston.info('Initializing NodeBB v' + pkg.version);
|
||||
winston.info('* using configuration stored in: ' + configFile);
|
||||
var host = nconf.get(nconf.get('database') + ':host'),
|
||||
storeLocation = host ? 'at ' + host + (host.indexOf('/') === -1 ? ':' + nconf.get(nconf.get('database') + ':port') : '') : '';
|
||||
|
||||
winston.info('* using ' + nconf.get('database') +' store ' + storeLocation);
|
||||
winston.info('* using themes stored in: ' + nconf.get('themes_path'));
|
||||
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
winston.info('Base Configuration OK.');
|
||||
}
|
||||
|
||||
var meta = require('./src/meta');
|
||||
|
||||
require('./src/database').init(function(err) {
|
||||
meta.configs.init(function () {
|
||||
var templates = require('./public/src/templates'),
|
||||
webserver = require('./src/webserver'),
|
||||
sockets = require('./src/socket.io'),
|
||||
plugins = require('./src/plugins'),
|
||||
upgrade = require('./src/upgrade')
|
||||
meta = require('./src/meta');
|
||||
|
||||
templates.setGlobal('relative_path', nconf.get('relative_path'));
|
||||
|
||||
upgrade.check(function(schema_ok) {
|
||||
if (schema_ok || nconf.get('check-schema') === false) {
|
||||
sockets.init(webserver.server);
|
||||
plugins.init();
|
||||
|
||||
nconf.set('url', nconf.get('base_url') + (nconf.get('use_port') ? ':' + nconf.get('port') : '') + nconf.get('relative_path'));
|
||||
|
||||
plugins.ready(function() {
|
||||
webserver.init();
|
||||
});
|
||||
|
||||
process.on('SIGTERM', shutdown);
|
||||
process.on('SIGINT', shutdown);
|
||||
process.on('SIGHUP', restart);
|
||||
process.on('uncaughtException', function(err) {
|
||||
winston.error(err.message);
|
||||
console.log(err.stack);
|
||||
|
||||
meta.js.killMinifier();
|
||||
shutdown(1);
|
||||
})
|
||||
} else {
|
||||
winston.warn('Your NodeBB schema is out-of-date. Please run the following command to bring your dataset up to spec:');
|
||||
winston.warn(' node app --upgrade');
|
||||
winston.warn('To ignore this error (not recommended):');
|
||||
winston.warn(' node app --no-check-schema');
|
||||
process.exit();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function setup() {
|
||||
loadConfig();
|
||||
|
||||
if (nconf.get('setup')) {
|
||||
winston.info('NodeBB Setup Triggered via Command Line');
|
||||
} else {
|
||||
winston.warn('Configuration not found, starting NodeBB setup');
|
||||
}
|
||||
|
||||
var install = require('./src/install');
|
||||
|
||||
winston.info('Welcome to NodeBB!');
|
||||
winston.info('This looks like a new installation, so you\'ll have to answer a few questions about your environment before we can proceed.');
|
||||
winston.info('Press enter to accept the default setting (shown in brackets).');
|
||||
|
||||
install.setup(function (err) {
|
||||
if (err) {
|
||||
winston.error('There was a problem completing NodeBB setup: ', err.message);
|
||||
} else {
|
||||
if (!nconf.get('setup')) {
|
||||
process.stdout.write(
|
||||
"Please start NodeBB again and register a new user. This user will automatically become an administrator.\n\n"
|
||||
);
|
||||
}
|
||||
winston.info('NodeBB Setup Completed. Run \'./nodebb start\' to manually start your NodeBB server.');
|
||||
}
|
||||
|
||||
process.exit();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function upgrade() {
|
||||
loadConfig();
|
||||
|
||||
var meta = require('./src/meta');
|
||||
|
||||
require('./src/database').init(function(err) {
|
||||
meta.configs.init(function () {
|
||||
require('./src/upgrade').upgrade();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function reset() {
|
||||
loadConfig();
|
||||
|
||||
require('./src/database').init(function(err) {
|
||||
if (err) {
|
||||
winston.error(err.message);
|
||||
process.exit();
|
||||
}
|
||||
|
||||
if (nconf.get('themes')) {
|
||||
resetThemes();
|
||||
} else if (nconf.get('plugins')) {
|
||||
resetPlugins();
|
||||
} else if (nconf.get('widgets')) {
|
||||
resetWidgets();
|
||||
} else if (nconf.get('settings')) {
|
||||
resetSettings();
|
||||
} else if (nconf.get('all')) {
|
||||
require('async').series([resetWidgets, resetThemes, resetPlugins, resetSettings], function(err) {
|
||||
if (!err) {
|
||||
winston.info('[reset] Reset complete.');
|
||||
} else {
|
||||
winston.error('[reset] Errors were encountered while resetting your forum settings: ' + err.message);
|
||||
}
|
||||
process.exit();
|
||||
});
|
||||
} else {
|
||||
console.log('no match');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resetSettings(callback) {
|
||||
var meta = require('./src/meta');
|
||||
meta.configs.set('allowLocalLogin', 1, function(err) {
|
||||
winston.info('[reset] Settings reset to default');
|
||||
if (typeof callback === 'function') {
|
||||
callback(err);
|
||||
} else {
|
||||
process.exit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resetThemes(callback) {
|
||||
var meta = require('./src/meta');
|
||||
|
||||
meta.themes.set({
|
||||
type: 'local',
|
||||
id: 'nodebb-theme-vanilla'
|
||||
}, function(err) {
|
||||
winston.info('[reset] Theme reset to Vanilla');
|
||||
if (typeof callback === 'function') {
|
||||
callback(err);
|
||||
} else {
|
||||
process.exit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resetPlugins(callback) {
|
||||
var db = require('./src/database');
|
||||
db.delete('plugins:active', function(err) {
|
||||
winston.info('[reset] All Plugins De-activated');
|
||||
if (typeof callback === 'function') {
|
||||
callback(err);
|
||||
} else {
|
||||
process.exit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resetWidgets(callback) {
|
||||
require('./src/widgets').reset(function(err) {
|
||||
winston.info('[reset] All Widgets moved to Draft Zone');
|
||||
if (typeof callback === 'function') {
|
||||
callback(err);
|
||||
} else {
|
||||
process.exit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function shutdown(code) {
|
||||
winston.info('[app] Shutdown (SIGTERM/SIGINT) Initialised.');
|
||||
require('./src/database').close();
|
||||
winston.info('[app] Database connection closed.');
|
||||
|
||||
winston.info('[app] Shutdown complete.');
|
||||
process.exit(code || 0);
|
||||
}
|
||||
|
||||
function restart() {
|
||||
if (process.send) {
|
||||
winston.info('[app] Restarting...');
|
||||
process.send({
|
||||
action: 'restart'
|
||||
});
|
||||
} else {
|
||||
winston.error('[app] Could not restart server. Shutting down.');
|
||||
shutdown(1);
|
||||
}
|
||||
}
|
||||
|
||||
function displayHelp() {
|
||||
winston.info('Usage: node app [options] [arguments]');
|
||||
winston.info(' [NODE_ENV=development | NODE_ENV=production] node app [--start] [arguments]');
|
||||
winston.info('');
|
||||
winston.info('Options:');
|
||||
winston.info(' --help displays this usage information');
|
||||
winston.info(' --setup configure your environment and setup NodeBB');
|
||||
winston.info(' --upgrade upgrade NodeBB, first read: github.com/designcreateplay/NodeBB/wiki/Upgrading-NodeBB');
|
||||
winston.info(' --reset soft resets NodeBB; disables all plugins and restores selected theme to Vanilla');
|
||||
winston.info(' --start manually start NodeBB (default when no options are given)');
|
||||
}
|
||||
|
||||
4
docs/.gitignore
vendored
Normal file
4
docs/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
*.sublime-build*
|
||||
_build
|
||||
_static
|
||||
_templates
|
||||
177
docs/Makefile
Normal file
177
docs/Makefile
Normal file
@@ -0,0 +1,177 @@
|
||||
# Makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
PAPER =
|
||||
BUILDDIR = _build
|
||||
|
||||
# User-friendly check for sphinx-build
|
||||
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
|
||||
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
|
||||
endif
|
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
PAPEROPT_letter = -D latex_paper_size=letter
|
||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
# the i18n builder cannot share the environment and doctrees with the others
|
||||
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||
|
||||
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
|
||||
|
||||
help:
|
||||
@echo "Please use \`make <target>' where <target> is one of"
|
||||
@echo " html to make standalone HTML files"
|
||||
@echo " dirhtml to make HTML files named index.html in directories"
|
||||
@echo " singlehtml to make a single large HTML file"
|
||||
@echo " pickle to make pickle files"
|
||||
@echo " json to make JSON files"
|
||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||
@echo " qthelp to make HTML files and a qthelp project"
|
||||
@echo " devhelp to make HTML files and a Devhelp project"
|
||||
@echo " epub to make an epub"
|
||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
|
||||
@echo " text to make text files"
|
||||
@echo " man to make manual pages"
|
||||
@echo " texinfo to make Texinfo files"
|
||||
@echo " info to make Texinfo files and run them through makeinfo"
|
||||
@echo " gettext to make PO message catalogs"
|
||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||
@echo " xml to make Docutils-native XML files"
|
||||
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
|
||||
@echo " linkcheck to check all external links for integrity"
|
||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||
|
||||
clean:
|
||||
rm -rf $(BUILDDIR)/*
|
||||
|
||||
html:
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
dirhtml:
|
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||
|
||||
singlehtml:
|
||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||
|
||||
pickle:
|
||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||
@echo
|
||||
@echo "Build finished; now you can process the pickle files."
|
||||
|
||||
json:
|
||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||
@echo
|
||||
@echo "Build finished; now you can process the JSON files."
|
||||
|
||||
htmlhelp:
|
||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||
|
||||
qthelp:
|
||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/NodeBB.qhcp"
|
||||
@echo "To view the help file:"
|
||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/NodeBB.qhc"
|
||||
|
||||
devhelp:
|
||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||
@echo
|
||||
@echo "Build finished."
|
||||
@echo "To view the help file:"
|
||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/NodeBB"
|
||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/NodeBB"
|
||||
@echo "# devhelp"
|
||||
|
||||
epub:
|
||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||
@echo
|
||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||
|
||||
latex:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||
"(use \`make latexpdf' here to do that automatically)."
|
||||
|
||||
latexpdf:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through pdflatex..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
latexpdfja:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through platex and dvipdfmx..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
text:
|
||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||
@echo
|
||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||
|
||||
man:
|
||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||
@echo
|
||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||
|
||||
texinfo:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo
|
||||
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||
"(use \`make info' here to do that automatically)."
|
||||
|
||||
info:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo "Running Texinfo files through makeinfo..."
|
||||
make -C $(BUILDDIR)/texinfo info
|
||||
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||
|
||||
gettext:
|
||||
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||
@echo
|
||||
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||
|
||||
changes:
|
||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||
@echo
|
||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||
|
||||
linkcheck:
|
||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
||||
doctest:
|
||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||
@echo "Testing of doctests in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/doctest/output.txt."
|
||||
|
||||
xml:
|
||||
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
||||
@echo
|
||||
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
||||
|
||||
pseudoxml:
|
||||
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
||||
@echo
|
||||
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
||||
17
docs/_themes/sphinx_rtd_theme/__init__.py
vendored
Normal file
17
docs/_themes/sphinx_rtd_theme/__init__.py
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
"""Sphinx ReadTheDocs theme.
|
||||
|
||||
From https://github.com/ryan-roemer/sphinx-bootstrap-theme.
|
||||
|
||||
"""
|
||||
import os
|
||||
|
||||
VERSION = (0, 1, 5)
|
||||
|
||||
__version__ = ".".join(str(v) for v in VERSION)
|
||||
__version_full__ = __version__
|
||||
|
||||
|
||||
def get_html_theme_path():
|
||||
"""Return list of HTML theme paths."""
|
||||
cur_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
|
||||
return cur_dir
|
||||
19
docs/_themes/sphinx_rtd_theme/breadcrumbs.html
vendored
Normal file
19
docs/_themes/sphinx_rtd_theme/breadcrumbs.html
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||
<ul class="wy-breadcrumbs">
|
||||
<li><a href="{{ pathto(master_doc) }}">Docs</a> »</li>
|
||||
{% for doc in parents %}
|
||||
<li><a href="{{ doc.link|e }}">{{ doc.title }}</a> »</li>
|
||||
{% endfor %}
|
||||
<li>{{ title }}</li>
|
||||
<li class="wy-breadcrumbs-aside">
|
||||
{% if display_github %}
|
||||
<a href="https://github.com/{{ github_user }}/{{ github_repo }}/blob/{{ github_version }}{{ conf_py_path }}{{ pagename }}{{ source_suffix }}" class="fa fa-github"> Edit on GitHub</a>
|
||||
{% elif display_bitbucket %}
|
||||
<a href="https://bitbucket.org/{{ bitbucket_user }}/{{ bitbucket_repo }}/src/{{ bitbucket_version}}{{ conf_py_path }}{{ pagename }}{{ source_suffix }}" class="fa fa-bitbucket"> Edit on Bitbucket</a>
|
||||
{% elif show_source and has_source and sourcename %}
|
||||
<a href="{{ pathto('_sources/' + sourcename, true)|e }}" rel="nofollow"> View page source</a>
|
||||
{% endif %}
|
||||
</li>
|
||||
</ul>
|
||||
<hr/>
|
||||
</div>
|
||||
32
docs/_themes/sphinx_rtd_theme/footer.html
vendored
Normal file
32
docs/_themes/sphinx_rtd_theme/footer.html
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<footer>
|
||||
{% if next or prev %}
|
||||
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
||||
{% if next %}
|
||||
<a href="{{ next.link|e }}" class="btn btn-neutral float-right" title="{{ next.title|striptags|e }}">Next <span class="fa fa-arrow-circle-right"></span></a>
|
||||
{% endif %}
|
||||
{% if prev %}
|
||||
<a href="{{ prev.link|e }}" class="btn btn-neutral" title="{{ prev.title|striptags|e }}"><span class="fa fa-arrow-circle-left"></span> Previous</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<hr/>
|
||||
|
||||
<div role="contentinfo">
|
||||
<p>
|
||||
{%- if show_copyright %}
|
||||
{%- if hasdoc('copyright') %}
|
||||
{% trans path=pathto('copyright'), copyright=copyright|e %}© <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
|
||||
{%- else %}
|
||||
{% trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
|
||||
{%- if last_updated %}
|
||||
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{% trans %}<a href="https://github.com/snide/sphinx_rtd_theme">Sphinx theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>{% endtrans %}
|
||||
</footer>
|
||||
160
docs/_themes/sphinx_rtd_theme/layout.html
vendored
Normal file
160
docs/_themes/sphinx_rtd_theme/layout.html
vendored
Normal file
@@ -0,0 +1,160 @@
|
||||
{# TEMPLATE VAR SETTINGS #}
|
||||
{%- set url_root = pathto('', 1) %}
|
||||
{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
|
||||
{%- if not embedded and docstitle %}
|
||||
{%- set titlesuffix = " — "|safe + docstitle|e %}
|
||||
{%- else %}
|
||||
{%- set titlesuffix = "" %}
|
||||
{%- endif %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||||
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
{% block htmltitle %}
|
||||
<title>{{ title|striptags|e }}{{ titlesuffix }}</title>
|
||||
{% endblock %}
|
||||
|
||||
{# FAVICON #}
|
||||
{% if favicon %}
|
||||
<link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
|
||||
{% endif %}
|
||||
|
||||
{# CSS #}
|
||||
<link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
|
||||
|
||||
{# OPENSEARCH #}
|
||||
{% if not embedded %}
|
||||
{% if use_opensearch %}
|
||||
<link rel="search" type="application/opensearchdescription+xml" title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}" href="{{ pathto('_static/opensearch.xml', 1) }}"/>
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{# RTD hosts this file, so just load on non RTD builds #}
|
||||
{% if not READTHEDOCS %}
|
||||
<link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
|
||||
{% endif %}
|
||||
|
||||
{% for cssfile in css_files %}
|
||||
<link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
|
||||
{% endfor %}
|
||||
|
||||
{%- block linktags %}
|
||||
{%- if hasdoc('about') %}
|
||||
<link rel="author" title="{{ _('About these documents') }}"
|
||||
href="{{ pathto('about') }}"/>
|
||||
{%- endif %}
|
||||
{%- if hasdoc('genindex') %}
|
||||
<link rel="index" title="{{ _('Index') }}"
|
||||
href="{{ pathto('genindex') }}"/>
|
||||
{%- endif %}
|
||||
{%- if hasdoc('search') %}
|
||||
<link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}"/>
|
||||
{%- endif %}
|
||||
{%- if hasdoc('copyright') %}
|
||||
<link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}"/>
|
||||
{%- endif %}
|
||||
<link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}"/>
|
||||
{%- if parents %}
|
||||
<link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}"/>
|
||||
{%- endif %}
|
||||
{%- if next %}
|
||||
<link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}"/>
|
||||
{%- endif %}
|
||||
{%- if prev %}
|
||||
<link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}"/>
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
{%- block extrahead %} {% endblock %}
|
||||
|
||||
{# Keep modernizr in head - http://modernizr.com/docs/#installing #}
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="wy-body-for-nav" role="document">
|
||||
|
||||
<div class="wy-grid-for-nav">
|
||||
|
||||
{# SIDE NAV, TOGGLES ON MOBILE #}
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||
<div class="wy-side-nav-search">
|
||||
<a href="{{ pathto(master_doc) }}" class="fa fa-home"> {{ project }}</a>
|
||||
{% include "searchbox.html" %}
|
||||
</div>
|
||||
|
||||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||
{% set toctree = toctree(maxdepth=2, collapse=False, includehidden=True) %}
|
||||
{% if toctree %}
|
||||
{{ toctree }}
|
||||
{% else %}
|
||||
<!-- Local TOC -->
|
||||
<div class="local-toc">{{ toc }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||
|
||||
{# MOBILE NAV, TRIGGLES SIDE NAV ON TOGGLE #}
|
||||
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||
<a href="{{ pathto(master_doc) }}">{{ project }}</a>
|
||||
</nav>
|
||||
|
||||
|
||||
{# PAGE CONTENT #}
|
||||
<div class="wy-nav-content">
|
||||
<div class="rst-content">
|
||||
{% include "breadcrumbs.html" %}
|
||||
<div role="main">
|
||||
{% block body %}{% endblock %}
|
||||
</div>
|
||||
{% include "footer.html" %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
</div>
|
||||
{% include "versions.html" %}
|
||||
|
||||
{% if not embedded %}
|
||||
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT:'{{ url_root }}',
|
||||
VERSION:'{{ release|e }}',
|
||||
COLLAPSE_INDEX:false,
|
||||
FILE_SUFFIX:'{{ '' if no_search_suffix else file_suffix }}',
|
||||
HAS_SOURCE: {{ has_source|lower }}
|
||||
};
|
||||
</script>
|
||||
{%- for scriptfile in script_files %}
|
||||
<script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
|
||||
{%- endfor %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{# RTD hosts this file, so just load on non RTD builds #}
|
||||
{% if not READTHEDOCS %}
|
||||
<script type="text/javascript" src="{{ pathto('_static/js/theme.js', 1) }}"></script>
|
||||
{% endif %}
|
||||
|
||||
{# STICKY NAVIGATION #}
|
||||
{% if theme_sticky_navigation %}
|
||||
<script type="text/javascript">
|
||||
jQuery(function () {
|
||||
SphinxRtdTheme.StickyNav.enable();
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
{%- block footer %} {% endblock %}
|
||||
|
||||
</body>
|
||||
</html>
|
||||
205
docs/_themes/sphinx_rtd_theme/layout_old.html
vendored
Normal file
205
docs/_themes/sphinx_rtd_theme/layout_old.html
vendored
Normal file
@@ -0,0 +1,205 @@
|
||||
{#
|
||||
basic/layout.html
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
Master layout template for Sphinx themes.
|
||||
|
||||
:copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
|
||||
:license: BSD, see LICENSE for details.
|
||||
#}
|
||||
{%- block doctype -%}
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
{%- endblock %}
|
||||
{%- set reldelim1 = reldelim1 is not defined and ' »' or reldelim1 %}
|
||||
{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
|
||||
{%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and
|
||||
(sidebars != []) %}
|
||||
{%- set url_root = pathto('', 1) %}
|
||||
{# XXX necessary? #}
|
||||
{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
|
||||
{%- if not embedded and docstitle %}
|
||||
{%- set titlesuffix = " — "|safe + docstitle|e %}
|
||||
{%- else %}
|
||||
{%- set titlesuffix = "" %}
|
||||
{%- endif %}
|
||||
|
||||
{%- macro relbar() %}
|
||||
<div class="related">
|
||||
<h3>{{ _('Navigation') }}</h3>
|
||||
<ul>
|
||||
{%- for rellink in rellinks %}
|
||||
<li class="right" {% if loop.first %}style="margin-right: 10px"{% endif %}>
|
||||
<a href="{{ pathto(rellink[0]) }}" title="{{ rellink[1]|striptags|e }}"
|
||||
{{ accesskey(rellink[2]) }}>{{ rellink[3] }}</a>
|
||||
{%- if not loop.first %}{{ reldelim2 }}{% endif %}</li>
|
||||
{%- endfor %}
|
||||
{%- block rootrellink %}
|
||||
<li><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a>{{ reldelim1 }}</li>
|
||||
{%- endblock %}
|
||||
{%- for parent in parents %}
|
||||
<li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a>{{ reldelim1 }}</li>
|
||||
{%- endfor %}
|
||||
{%- block relbaritems %} {% endblock %}
|
||||
</ul>
|
||||
</div>
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro sidebar() %}
|
||||
{%- if render_sidebar %}
|
||||
<div class="sphinxsidebar">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
{%- block sidebarlogo %}
|
||||
{%- if logo %}
|
||||
<p class="logo"><a href="{{ pathto(master_doc) }}">
|
||||
<img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/>
|
||||
</a></p>
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
{%- if sidebars != None %}
|
||||
{#- new style sidebar: explicitly include/exclude templates #}
|
||||
{%- for sidebartemplate in sidebars %}
|
||||
{%- include sidebartemplate %}
|
||||
{%- endfor %}
|
||||
{%- else %}
|
||||
{#- old style sidebars: using blocks -- should be deprecated #}
|
||||
{%- block sidebartoc %}
|
||||
{%- include "localtoc.html" %}
|
||||
{%- endblock %}
|
||||
{%- block sidebarrel %}
|
||||
{%- include "relations.html" %}
|
||||
{%- endblock %}
|
||||
{%- block sidebarsourcelink %}
|
||||
{%- include "sourcelink.html" %}
|
||||
{%- endblock %}
|
||||
{%- if customsidebar %}
|
||||
{%- include customsidebar %}
|
||||
{%- endif %}
|
||||
{%- block sidebarsearch %}
|
||||
{%- include "searchbox.html" %}
|
||||
{%- endblock %}
|
||||
{%- endif %}
|
||||
</div>
|
||||
</div>
|
||||
{%- endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro script() %}
|
||||
<script type="text/javascript">
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: '{{ url_root }}',
|
||||
VERSION: '{{ release|e }}',
|
||||
COLLAPSE_INDEX: false,
|
||||
FILE_SUFFIX: '{{ '' if no_search_suffix else file_suffix }}',
|
||||
HAS_SOURCE: {{ has_source|lower }}
|
||||
};
|
||||
</script>
|
||||
{%- for scriptfile in script_files %}
|
||||
<script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
|
||||
{%- endfor %}
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro css() %}
|
||||
<link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
|
||||
<link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
|
||||
{%- for cssfile in css_files %}
|
||||
<link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
|
||||
{%- endfor %}
|
||||
{%- endmacro %}
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" />
|
||||
{{ metatags }}
|
||||
{%- block htmltitle %}
|
||||
<title>{{ title|striptags|e }}{{ titlesuffix }}</title>
|
||||
{%- endblock %}
|
||||
{{ css() }}
|
||||
{%- if not embedded %}
|
||||
{{ script() }}
|
||||
{%- if use_opensearch %}
|
||||
<link rel="search" type="application/opensearchdescription+xml"
|
||||
title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
|
||||
href="{{ pathto('_static/opensearch.xml', 1) }}"/>
|
||||
{%- endif %}
|
||||
{%- if favicon %}
|
||||
<link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
{%- block linktags %}
|
||||
{%- if hasdoc('about') %}
|
||||
<link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
|
||||
{%- endif %}
|
||||
{%- if hasdoc('genindex') %}
|
||||
<link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
|
||||
{%- endif %}
|
||||
{%- if hasdoc('search') %}
|
||||
<link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
|
||||
{%- endif %}
|
||||
{%- if hasdoc('copyright') %}
|
||||
<link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
|
||||
{%- endif %}
|
||||
<link rel="top" title="{{ docstitle|e }}" href="{{ pathto('index') }}" />
|
||||
{%- if parents %}
|
||||
<link rel="up" title="{{ parents[-1].title|striptags|e }}" href="{{ parents[-1].link|e }}" />
|
||||
{%- endif %}
|
||||
{%- if next %}
|
||||
<link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
|
||||
{%- endif %}
|
||||
{%- if prev %}
|
||||
<link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
|
||||
{%- endif %}
|
||||
{%- endblock %}
|
||||
{%- block extrahead %} {% endblock %}
|
||||
</head>
|
||||
<body>
|
||||
{%- block header %}{% endblock %}
|
||||
|
||||
{%- block relbar1 %}{{ relbar() }}{% endblock %}
|
||||
|
||||
{%- block content %}
|
||||
{%- block sidebar1 %} {# possible location for sidebar #} {% endblock %}
|
||||
|
||||
<div class="document">
|
||||
{%- block document %}
|
||||
<div class="documentwrapper">
|
||||
{%- if render_sidebar %}
|
||||
<div class="bodywrapper">
|
||||
{%- endif %}
|
||||
<div class="body">
|
||||
{% block body %} {% endblock %}
|
||||
</div>
|
||||
{%- if render_sidebar %}
|
||||
</div>
|
||||
{%- endif %}
|
||||
</div>
|
||||
{%- endblock %}
|
||||
|
||||
{%- block sidebar2 %}{{ sidebar() }}{% endblock %}
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
{%- endblock %}
|
||||
|
||||
{%- block relbar2 %}{{ relbar() }}{% endblock %}
|
||||
|
||||
{%- block footer %}
|
||||
<div class="footer">
|
||||
{%- if show_copyright %}
|
||||
{%- if hasdoc('copyright') %}
|
||||
{% trans path=pathto('copyright'), copyright=copyright|e %}© <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
|
||||
{%- else %}
|
||||
{% trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
{%- if last_updated %}
|
||||
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
{%- if show_sphinx %}
|
||||
{% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx-doc.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
</div>
|
||||
<p>asdf asdf asdf asdf 22</p>
|
||||
{%- endblock %}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
50
docs/_themes/sphinx_rtd_theme/search.html
vendored
Normal file
50
docs/_themes/sphinx_rtd_theme/search.html
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
{#
|
||||
basic/search.html
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
Template for the search page.
|
||||
|
||||
:copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
|
||||
:license: BSD, see LICENSE for details.
|
||||
#}
|
||||
{%- extends "layout.html" %}
|
||||
{% set title = _('Search') %}
|
||||
{% set script_files = script_files + ['_static/searchtools.js'] %}
|
||||
{% block footer %}
|
||||
<script type="text/javascript">
|
||||
jQuery(function() { Search.loadIndex("{{ pathto('searchindex.js', 1) }}"); });
|
||||
</script>
|
||||
{# this is used when loading the search index using $.ajax fails,
|
||||
such as on Chrome for documents on localhost #}
|
||||
<script type="text/javascript" id="searchindexloader"></script>
|
||||
{{ super() }}
|
||||
{% endblock %}
|
||||
{% block body %}
|
||||
<noscript>
|
||||
<div id="fallback" class="admonition warning">
|
||||
<p class="last">
|
||||
{% trans %}Please activate JavaScript to enable the search
|
||||
functionality.{% endtrans %}
|
||||
</p>
|
||||
</div>
|
||||
</noscript>
|
||||
|
||||
{% if search_performed %}
|
||||
<h2>{{ _('Search Results') }}</h2>
|
||||
{% if not search_results %}
|
||||
<p>{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.') }}</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<div id="search-results">
|
||||
{% if search_results %}
|
||||
<ul>
|
||||
{% for href, caption, context in search_results %}
|
||||
<li>
|
||||
<a href="{{ pathto(item.href) }}">{{ caption }}</a>
|
||||
<p class="context">{{ context|e }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
7
docs/_themes/sphinx_rtd_theme/searchbox.html
vendored
Normal file
7
docs/_themes/sphinx_rtd_theme/searchbox.html
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
<div role="search">
|
||||
<form id ="rtd-search-form" class="wy-form" action="{{ pathto('search') }}" method="get">
|
||||
<input type="text" name="q" placeholder="Search docs" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</div>
|
||||
1
docs/_themes/sphinx_rtd_theme/static/css/badge_only.css
vendored
Normal file
1
docs/_themes/sphinx_rtd_theme/static/css/badge_only.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../font/fontawesome_webfont.eot");src:url("../font/fontawesome_webfont.eot?#iefix") format("embedded-opentype"),url("../font/fontawesome_webfont.woff") format("woff"),url("../font/fontawesome_webfont.ttf") format("truetype"),url("../font/fontawesome_webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:0.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:"\f02d"}.icon-book:before{content:"\f02d"}.fa-caret-down:before{content:"\f0d7"}.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}}
|
||||
4
docs/_themes/sphinx_rtd_theme/static/css/theme.css
vendored
Normal file
4
docs/_themes/sphinx_rtd_theme/static/css/theme.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
docs/_themes/sphinx_rtd_theme/static/fonts/FontAwesome.otf
vendored
Normal file
BIN
docs/_themes/sphinx_rtd_theme/static/fonts/FontAwesome.otf
vendored
Normal file
Binary file not shown.
BIN
docs/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.eot
vendored
Normal file
BIN
docs/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.eot
vendored
Normal file
Binary file not shown.
@@ -280,8 +280,8 @@
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M896 608v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h224q14 0 23 -9t9 -23zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28 t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68zM1152 928v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704q93 0 158.5 -65.5t65.5 -158.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M928 1152q93 0 158.5 -65.5t65.5 -158.5v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68z M864 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
@@ -310,7 +310,7 @@
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1708 881l-188 -881h-304l181 849q4 21 1 43q-4 20 -16 35q-10 14 -28 24q-18 9 -40 9h-197l-205 -960h-303l204 960h-304l-205 -960h-304l272 1280h1139q157 0 245 -118q86 -116 52 -281z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
|
||||
<glyph unicode="" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
@@ -342,7 +342,7 @@
|
||||
<glyph unicode="" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
|
||||
<glyph unicode="" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1664 352v-32q0 -132 -94 -226t-226 -94h-128q-132 0 -226 94t-94 226v480h-224q-2 -102 -14.5 -190.5t-30.5 -156t-48.5 -126.5t-57 -99.5t-67.5 -77.5t-69.5 -58.5t-74 -44t-69 -32t-65.5 -25.5q-4 -2 -32 -13q-8 -2 -12 -2q-22 0 -30 20l-71 178q-5 13 0 25t17 17 q7 3 20 7.5t18 6.5q31 12 46.5 18.5t44.5 20t45.5 26t42 32.5t40.5 42.5t34.5 53.5t30.5 68.5t22.5 83.5t17 103t6.5 123h-256q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h1216q14 0 23 -9t9 -23v-160q0 -14 -9 -23t-23 -9h-224v-512q0 -26 19 -45t45 -19h128q26 0 45 19t19 45 v64q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1280 1376v-160q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h960q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
|
||||
@@ -390,10 +390,25 @@
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1920" d="M805 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM453 1176v-344q0 -179 -89.5 -326t-234.5 -217q-129 152 -129 351q0 200 129.5 352t323.5 184zM958 991q-128 -152 -128 -351q0 -201 128 -351q-145 70 -234.5 218t-89.5 328 v341q196 -33 324 -185zM1638 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM1286 1176v-344q0 -179 -91 -326t-237 -217v0q133 154 133 351q0 195 -133 351q129 151 328 185zM1920 640q0 -201 -129 -351q-145 70 -234.5 218 t-89.5 328v341q194 -32 323.5 -184t129.5 -352z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
|
||||
<glyph unicode="" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
|
||||
<glyph unicode="" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
|
||||
<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
<glyph unicode="" horiz-adv-x="1792" />
|
||||
</font>
|
||||
</defs></svg>
|
||||
|
Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 197 KiB |
Binary file not shown.
BIN
docs/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.woff
vendored
Normal file
BIN
docs/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.woff
vendored
Normal file
Binary file not shown.
47
docs/_themes/sphinx_rtd_theme/static/js/theme.js
vendored
Normal file
47
docs/_themes/sphinx_rtd_theme/static/js/theme.js
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
$( document ).ready(function() {
|
||||
// Shift nav in mobile when clicking the menu.
|
||||
$(document).on('click', "[data-toggle='wy-nav-top']", function() {
|
||||
$("[data-toggle='wy-nav-shift']").toggleClass("shift");
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||
});
|
||||
// Close menu when you click a link.
|
||||
$(document).on('click', ".wy-menu-vertical .current ul li a", function() {
|
||||
$("[data-toggle='wy-nav-shift']").removeClass("shift");
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift");
|
||||
});
|
||||
$(document).on('click', "[data-toggle='rst-current-version']", function() {
|
||||
$("[data-toggle='rst-versions']").toggleClass("shift-up");
|
||||
});
|
||||
// Make tables responsive
|
||||
$("table.docutils:not(.field-list)").wrap("<div class='wy-table-responsive'></div>");
|
||||
});
|
||||
|
||||
window.SphinxRtdTheme = (function (jquery) {
|
||||
var stickyNav = (function () {
|
||||
var navBar,
|
||||
win,
|
||||
stickyNavCssClass = 'stickynav',
|
||||
applyStickNav = function () {
|
||||
if (navBar.height() <= win.height()) {
|
||||
navBar.addClass(stickyNavCssClass);
|
||||
} else {
|
||||
navBar.removeClass(stickyNavCssClass);
|
||||
}
|
||||
},
|
||||
enable = function () {
|
||||
applyStickNav();
|
||||
win.on('resize', applyStickNav);
|
||||
},
|
||||
init = function () {
|
||||
navBar = jquery('nav.wy-nav-side:first');
|
||||
win = jquery(window);
|
||||
};
|
||||
jquery(init);
|
||||
return {
|
||||
enable : enable
|
||||
};
|
||||
}());
|
||||
return {
|
||||
StickyNav : stickyNav
|
||||
};
|
||||
}($));
|
||||
8
docs/_themes/sphinx_rtd_theme/theme.conf
vendored
Normal file
8
docs/_themes/sphinx_rtd_theme/theme.conf
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
[theme]
|
||||
inherit = basic
|
||||
stylesheet = css/theme.css
|
||||
|
||||
[options]
|
||||
typekit_id = hiw1hhg
|
||||
analytics_id =
|
||||
sticky_navigation = False
|
||||
37
docs/_themes/sphinx_rtd_theme/versions.html
vendored
Normal file
37
docs/_themes/sphinx_rtd_theme/versions.html
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
{% if READTHEDOCS %}
|
||||
{# Add rst-badge after rst-versions for small badge style. #}
|
||||
<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
|
||||
<span class="rst-current-version" data-toggle="rst-current-version">
|
||||
<span class="fa fa-book"> Read the Docs</span>
|
||||
v: {{ current_version }}
|
||||
<span class="fa fa-caret-down"></span>
|
||||
</span>
|
||||
<div class="rst-other-versions">
|
||||
<dl>
|
||||
<dt>Versions</dt>
|
||||
{% for slug, url in versions %}
|
||||
<dd><a href="{{ url }}">{{ slug }}</a></dd>
|
||||
{% endfor %}
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>Downloads</dt>
|
||||
{% for type, url in downloads %}
|
||||
<dd><a href="{{ url }}">{{ type }}</a></dd>
|
||||
{% endfor %}
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>On Read the Docs</dt>
|
||||
<dd>
|
||||
<a href="//{{ PRODUCTION_DOMAIN }}/projects/{{ slug }}/?fromdocs={{ slug }}">Project Home</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="//{{ PRODUCTION_DOMAIN }}/builds/{{ slug }}/?fromdocs={{ slug }}">Builds</a>
|
||||
</dd>
|
||||
</dl>
|
||||
<hr/>
|
||||
Free document hosting provided by <a href="http://www.readthedocs.org">Read the Docs</a>.
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
140
docs/admin/outline.rst
Normal file
140
docs/admin/outline.rst
Normal file
@@ -0,0 +1,140 @@
|
||||
Administrative Functions
|
||||
========================
|
||||
|
||||
.. note::
|
||||
|
||||
These docs are out of date. If you are interested in updating these (preferably with screenshots) let us know on the `community forum <https://community.nodebb.org>`_ because we are planning on a design overhaul of the ACP soon.
|
||||
|
||||
|
||||
**To view the admin panel** (if you are an admin): `http://your_nodebb_domain.com/admin`
|
||||
|
||||
**Top Menu** (all can be easily reached by other means)
|
||||
* NodeBB ACP (Administrator Control Panel: this view)
|
||||
* `http://your_nodebb_domain.com/admin/index` (see Home below)
|
||||
* Forum
|
||||
* `http://your_nodebb_domain.com` (your main forum)
|
||||
* Home
|
||||
* `http://your_nodebb_domain.com/admin/index` (see Home below)
|
||||
* Settings
|
||||
* `http://your_nodebb_domain.com/admin/settings` (see Settings below)
|
||||
|
||||
**Side Menu: NodeBB**
|
||||
* Home
|
||||
* `http://your_nodebb_domain.com/admin/index`
|
||||
* Links all go to nodebb.com homepage
|
||||
* NOTE: should all the links go to same place?
|
||||
* Message reminder of what version this is and to check for updates (See :doc:`Upgrading NodeBB <../upgrading/index>`)
|
||||
* NOTE: would a link to where the latest stable version is help?
|
||||
* Active Users
|
||||
* lists number users per page-path (?)
|
||||
* NOTE: not clear exactly what the paths mean or how to visit that path
|
||||
|
||||
|
||||
* Categories
|
||||
* `http://your_nodebb_domain.com/admin/categories`
|
||||
* Filters: Active, Disabled, Unit Tests
|
||||
* List of Categories:
|
||||
* Icon, Name, Desc, Action: Disable
|
||||
* Actions: Save, Add New
|
||||
|
||||
* Users
|
||||
* `http://your_nodebb_domain.com/admin/users`
|
||||
* Filters: Latest Users, Top Posters, Most Reputation, Action: Search
|
||||
* List of Users:
|
||||
* Icon, Link: Name, Reputation(star), Number Posts(pencil), Action: Ban
|
||||
* Action: Load More
|
||||
|
||||
* Groups
|
||||
* `http://your_nodebb_domain.com/admin/groups`
|
||||
* List of Groups
|
||||
* Name, Desc, Icon
|
||||
* Action: Delete Group
|
||||
* NOTE: What exactly can Groups be set up to do, besides Admin?
|
||||
|
||||
* Topics
|
||||
* `http://your_nodebb_domain.com/admin/topics`
|
||||
* List of Topics
|
||||
* Name [link to topic], Posted When and By, Number posts (Topic+Replies), Thread Actions: Pin(pushpin), Lock(lock), Delete(trashcan)
|
||||
* Action: Load More Topics
|
||||
|
||||
* Topic [from List of Topics link]
|
||||
* Normal View of Topic+Reply Posts but with:
|
||||
* Link, Edit, Delete Actions all enabled for each Post
|
||||
* Thread Tools:
|
||||
* Pin, Lock, Move, Delete
|
||||
|
||||
* Themes (See :doc:`Theming NodeBB <../themes/create>`)
|
||||
* `http://your_nodebb_domain.com/admin/themes`
|
||||
* List of (Custom | Bootswatch) Themes
|
||||
* Actions: Use, Preview
|
||||
* Action: Revert (to base)
|
||||
|
||||
* Plugins (See :doc:`Writing Plugins for NodeBB <../plugins/create>`)
|
||||
* `http://your_nodebb_domain.com/admin/plugins`
|
||||
* List of Plugins
|
||||
* Action: De/activate
|
||||
* Info on making plugins
|
||||
|
||||
* Settings
|
||||
* `http://your_nodebb_domain.com/admin/settings`
|
||||
|
||||
* General Settings
|
||||
* (textbox) Site Title
|
||||
* (textbox) Site Description
|
||||
* (textbox) Site Keywords
|
||||
* (textbox) Imgur Client ID
|
||||
* NOTE: How does this function?
|
||||
* (textbox) Maximum User Image Size
|
||||
|
||||
* Privilege Thresholds (Use privilege thresholds to manage how much reputation a user must gain to receive moderator access.)
|
||||
* (textbox) Manage Thread
|
||||
* (textbox) Moderate Users
|
||||
* (textbox) Create Pinned Topics
|
||||
|
||||
* Email Settings
|
||||
* (textbox) Email Address (The following email address refers to the email that the recipient will see in the "From" and "Reply To" fields.)
|
||||
* (textbox) SMTP Server Host (Default: 127.0.0.1)
|
||||
* (textbox) SMTP Server Port
|
||||
|
||||
* User Settings
|
||||
* (textbox) Minimum Username Length
|
||||
* (textbox) Maximum Username Length
|
||||
* (textbox) Minimum Password Length
|
||||
|
||||
* Post Settings
|
||||
* (textbox) Post Delay
|
||||
* (textbox) Minimum Title Length
|
||||
* (textbox) Minimum Post Length
|
||||
* (checkbox) Use Outgoing Links Warning Page
|
||||
|
||||
* Action: Save
|
||||
|
||||
* Redis
|
||||
* `http://your_nodebb_domain.com/admin/redis`
|
||||
* Redis data storage stats
|
||||
|
||||
* Logger
|
||||
* `http://your_nodebb_domain.com/admin/logger`
|
||||
* (checkbox) Enable HTTP logging
|
||||
* (checkbox) Enable socket.io event logging
|
||||
* (textbox) Path to log file
|
||||
|
||||
* MOTD (Message of the Day)
|
||||
* `http://your_nodebb_domain.com/admin/motd`
|
||||
* (textarea) You can enter either full HTML or Markdown text.
|
||||
* (checkbox) Show the Message of the Day
|
||||
|
||||
**Side Menu: Social Authentication** (See :doc:`Enabling Social Network Logins <../admin/sso>`)
|
||||
|
||||
* Twitter
|
||||
* `http://your_nodebb_domain.com/admin/twitter`
|
||||
|
||||
* Facebook
|
||||
* `http://your_nodebb_domain.com/admin/facebook`
|
||||
|
||||
* Google+
|
||||
* `http://your_nodebb_domain.com/admin/gplus`
|
||||
|
||||
**Side Menu: Plugins** (Shows installed plugins)
|
||||
|
||||
**Side Menu: Unit Tests** (Will run qunit tests)
|
||||
45
docs/admin/sso.rst
Normal file
45
docs/admin/sso.rst
Normal file
@@ -0,0 +1,45 @@
|
||||
Social Network SSOs
|
||||
==================
|
||||
|
||||
NodeBB supports integration for Facebook, Twitter, and Google through third party plugins:
|
||||
|
||||
* `npm install nodebb-plugin-sso-facebook`
|
||||
* `npm install nodebb-plugin-sso-twitter`
|
||||
* `npm install nodebb-plugin-sso-google`
|
||||
|
||||
Other SSO vendors are available, such as GitHub. Please check the `plugin directory <http://community.nodebb.org/category/7/nodebb-plugins>`_ for a list of all SSO vendors.
|
||||
|
||||
After installing and activating them, they require an API key in order to function:
|
||||
|
||||
Facebook
|
||||
---------
|
||||
|
||||
Register an application via the `Facebook Developers <https://developers.facebook.com/>`_ page. A credit card or mobile phone number may be required in order to create a Developer account.
|
||||
|
||||
Create a new application, and obtain an Application Key and Application Secret:
|
||||
|
||||
.. image:: http://i.imgur.com/hfy0eVo.png
|
||||
|
||||
Ensure that "Website with Facebook Login" is checked, and that the URL to your NodeBB instance is specified in the "Site URL" box. Add that site's domain to the "App Domains" field.
|
||||
|
||||
Paste this key and secret into the appropriate boxes in the NodeBB Administration Panel (accessible via /admin on your NodeBB install)
|
||||
|
||||
Twitter
|
||||
---------
|
||||
|
||||
Register an application at the `Twitter Developers <https://dev.twitter.com/>`_ page. Create a new Application, and obtain the Access Token and Secret:
|
||||
|
||||
.. image:: http://i.imgur.com/ksrHkgN.png
|
||||
|
||||
**Important**: While setting up your application, be sure to specify a Callback URL. It does not have to correspond to your installation, it just cannot be blank.
|
||||
|
||||
Paste this token and secret into the appropriate boxes in the NodeBB Administration Panel (accessible via /admin on your NodeBB install)
|
||||
|
||||
Google
|
||||
---------
|
||||
|
||||
Register an application at the `Google API Console <https://code.google.com/apis/console/>`_, and obtain a Client ID and Secret.
|
||||
|
||||
.. image:: http://i.imgur.com/xutDs1R.png
|
||||
|
||||
Paste this ID and secret into the appropriate boxes in the NodeBB Administration Panel (accessible via /admin on your NodeBB install)
|
||||
33
docs/admin/uploads.rst
Normal file
33
docs/admin/uploads.rst
Normal file
@@ -0,0 +1,33 @@
|
||||
Image Hosting APIs
|
||||
======================
|
||||
|
||||
|
||||
Enabling Imgur Image Uploads
|
||||
----------------------------
|
||||
|
||||
To enable post image attachments, first create an imgur app from :
|
||||
|
||||
https://api.imgur.com/oauth2/addclient
|
||||
|
||||
You can use : "Anonymous usage without user authorization"
|
||||
|
||||
After that you will get a "Client ID".
|
||||
|
||||
Then install nodebb-plugin-imgur:
|
||||
|
||||
.. code::
|
||||
|
||||
npm install nodebb-plugin-imgur
|
||||
|
||||
Activate the plugin from the control panel and restart NodeBB.
|
||||
|
||||
You should see a Imgur menu item in the control panel. Paste the Client ID to the "Imgur Client ID" in the plugin page. Save and you should be able to upload images by dragging them into the composer window.
|
||||
|
||||
|
||||
|
||||
Uploading to Amazon S3
|
||||
-----------------------
|
||||
|
||||
.. note::
|
||||
|
||||
No documentation for this yet! See `the plugin thread <https://community.nodebb.org/topic/796/nodebb-plugin-s3-uploads-store-your-uploads-in-aws-s3>`_ for more information.
|
||||
258
docs/conf.py
Normal file
258
docs/conf.py
Normal file
@@ -0,0 +1,258 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# NodeBB documentation build configuration file, created by
|
||||
# sphinx-quickstart on Thu Apr 24 15:55:18 2014.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its
|
||||
# containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
#sys.path.insert(0, os.path.abspath('.'))
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = []
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix of source filenames.
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The encoding of source files.
|
||||
#source_encoding = 'utf-8-sig'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'NodeBB'
|
||||
copyright = u'2014, NodeBB'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '0.4.1'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '0.4.1'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#language = None
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
#today = ''
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
#today_fmt = '%B %d, %Y'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
exclude_patterns = ['_build']
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all
|
||||
# documents.
|
||||
#default_role = None
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
#add_function_parentheses = True
|
||||
|
||||
# If true, the current module name will be prepended to all description
|
||||
# unit titles (such as .. function::).
|
||||
#add_module_names = True
|
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||
# output. They are ignored by default.
|
||||
#show_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
#modindex_common_prefix = []
|
||||
|
||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||
#keep_warnings = False
|
||||
|
||||
|
||||
# -- Options for HTML output ----------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
html_theme = "sphinx_rtd_theme"
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
html_theme_path = ["_themes", ]
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
#html_title = None
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
#html_short_title = None
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#html_logo = None
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
#html_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
|
||||
# Add any extra paths that contain custom files (such as robots.txt or
|
||||
# .htaccess) here, relative to this directory. These files are copied
|
||||
# directly to the root of the documentation.
|
||||
#html_extra_path = []
|
||||
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
#html_last_updated_fmt = '%b %d, %Y'
|
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||
# typographically correct entities.
|
||||
#html_use_smartypants = True
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
#html_sidebars = {}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
#html_additional_pages = {}
|
||||
|
||||
# If false, no module index is generated.
|
||||
#html_domain_indices = True
|
||||
|
||||
# If false, no index is generated.
|
||||
#html_use_index = True
|
||||
|
||||
# If true, the index is split into individual pages for each letter.
|
||||
#html_split_index = False
|
||||
|
||||
# If true, links to the reST sources are added to the pages.
|
||||
#html_show_sourcelink = True
|
||||
|
||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||
#html_show_sphinx = True
|
||||
|
||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||
#html_show_copyright = True
|
||||
|
||||
# If true, an OpenSearch description file will be output, and all pages will
|
||||
# contain a <link> tag referring to it. The value of this option must be the
|
||||
# base URL from which the finished HTML is served.
|
||||
#html_use_opensearch = ''
|
||||
|
||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||
#html_file_suffix = None
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'NodeBBdoc'
|
||||
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#'preamble': '',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
('index', 'NodeBB.tex', u'NodeBB Documentation',
|
||||
u'psychobunny, julianlam, barisusakli', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
# the title page.
|
||||
#latex_logo = None
|
||||
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||
# not chapters.
|
||||
#latex_use_parts = False
|
||||
|
||||
# If true, show page references after internal links.
|
||||
#latex_show_pagerefs = False
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#latex_show_urls = False
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#latex_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#latex_domain_indices = True
|
||||
|
||||
|
||||
# -- Options for manual page output ---------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
('index', 'nodebb', u'NodeBB Documentation',
|
||||
[u'psychobunny, julianlam, barisusakli'], 1)
|
||||
]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#man_show_urls = False
|
||||
|
||||
|
||||
# -- Options for Texinfo output -------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
('index', 'NodeBB', u'NodeBB Documentation',
|
||||
u'psychobunny, julianlam, barisusakli', 'NodeBB', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#texinfo_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#texinfo_domain_indices = True
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
#texinfo_show_urls = 'footnote'
|
||||
|
||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||
#texinfo_no_detailmenu = False
|
||||
39
docs/configuring/databases.rst
Normal file
39
docs/configuring/databases.rst
Normal file
@@ -0,0 +1,39 @@
|
||||
Configuring Databases
|
||||
=====================
|
||||
|
||||
NodeBB has a Database Abstraction Layer (DBAL) that allows one to write drivers for their database of choice. Currently we have the following options:
|
||||
|
||||
.. toctree::
|
||||
:hidden:
|
||||
:maxdepth: 0
|
||||
|
||||
MongoDB <databases/mongo>
|
||||
LevelDB <databases/level>
|
||||
|
||||
* Redis (default, see :doc:`installation guides <../installing/os>`)
|
||||
* :doc:`Mongo <databases/mongo>`
|
||||
* :doc:`Level <databases/level>`
|
||||
|
||||
.. note::
|
||||
|
||||
If you would like to write your own database driver for NodeBB, please visit our `community forum <https://community.nodebb.org>`_ and we can point you in the right direction.
|
||||
|
||||
|
||||
Running a Secondary Database
|
||||
----------------------------
|
||||
|
||||
|
||||
.. warning::
|
||||
|
||||
**This option is experimental and should not be used on a production environment.**
|
||||
|
||||
|
||||
Both databases **must** be flushed before beginning - there isn't a mechanism yet that detects an existing installation on one database but not another. Until fail-safe's such as these are implemented this option is hidden under the ``--advanced`` setup flag.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
node app --setup --advanced
|
||||
|
||||
Consult the other database guides for instructions on how to set up each specific database. Once you select a secondary database's modules, there's no turning back - until somebody writes an exporter/importer.
|
||||
|
||||
Currently this setup is being tested with Redis as the primary store (sets, lists, and sorted sets, because Redis is super fast with these), and Mongo as the hash store (post and user data, because ideally we wouldn't want this in RAM).
|
||||
19
docs/configuring/databases/level.rst
Normal file
19
docs/configuring/databases/level.rst
Normal file
@@ -0,0 +1,19 @@
|
||||
LevelDB
|
||||
=======
|
||||
|
||||
Follow the :doc:`installation instructions <../../installing/os>` for your particular OS but feel free to omit the Redis installation.
|
||||
|
||||
After cloning NodeBB, ensure that you run:
|
||||
|
||||
.. code::
|
||||
|
||||
npm install levelup leveldown
|
||||
|
||||
|
||||
Finally, set up a directory to store your LevelDB database, for example:
|
||||
|
||||
.. code::
|
||||
|
||||
mkdir /var/level/
|
||||
|
||||
Run the NodeBB install, select ``level`` when it prompts you for your database. If you created the folder as above, you can leave the rest of the questions as default.
|
||||
126
docs/configuring/databases/mongo.rst
Normal file
126
docs/configuring/databases/mongo.rst
Normal file
@@ -0,0 +1,126 @@
|
||||
MongoDB
|
||||
=======
|
||||
|
||||
If you're afraid of running out of memory by using Redis, or want your forum to be more easily scalable, you can install NodeBB with MongoDB. This tutorial assumes you know how to SSH into your server and have root access.
|
||||
|
||||
**These instructions are for Ubuntu. Adjust them accordingly for your distro.**
|
||||
|
||||
**Note:** If you have to add ``sudo`` to any command, do so. No one is going to hold it against you ;)
|
||||
|
||||
Step 1: Install MongoDB
|
||||
-------------------------
|
||||
|
||||
The latest and greatest MongoDB is required (or at least greater than the package manager). The instructions to install it can be found on the `MongoDB manual <http://docs.mongodb.org/manual/administration/install-on-linux/>`_).
|
||||
|
||||
Step 2: Install node.js
|
||||
-------------------------
|
||||
|
||||
Like MongoDB, the latest and greatest node.js is required (or at least greater than the package manager), so I'm leaving this to the official wiki. The instructions to install can be found on `Joyent <https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager>`_.
|
||||
|
||||
**Note: NPM is installed along with node.js, so there is no need to install it separately**
|
||||
|
||||
Step 3: Install the Base Software Stack
|
||||
-------------------------
|
||||
|
||||
Enter the following into the terminal to install the base software required to run NodeBB:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# apt-get install git build-essential imagemagick
|
||||
|
||||
Step 4: Clone the Repository
|
||||
-------------------------
|
||||
|
||||
Enter the following into the terminal, replacing `/path/to/nodebb/install/location` to where you would like NodeBB to be installed.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ cd /path/to/nodebb/install/location
|
||||
$ git clone git://github.com/designcreateplay/NodeBB.git nodebb
|
||||
|
||||
Step 5: Install The Required NodeBB Dependencies
|
||||
-------------------------
|
||||
|
||||
Go into the newly created `nodebb` directory and install the required dependencies by entering the following.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ cd nodebb
|
||||
$ npm install
|
||||
|
||||
Step 6: Adding a New Database With Users
|
||||
-------------------------
|
||||
|
||||
To go into the MongoDB command line, type:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ mongo
|
||||
|
||||
To add a new database called `nodebb`, type:
|
||||
|
||||
.. code::
|
||||
|
||||
> use nodebb
|
||||
|
||||
To add a user to access the `nodebb` database, type:
|
||||
|
||||
.. code::
|
||||
|
||||
> db.addUser( { user: "nodebb",
|
||||
... pwd: "<Enter in a secure password>",
|
||||
... roles: [ "userAdmin" ] } )
|
||||
|
||||
**Note:** The role ``userAdmin`` gives all permissions to the user for that specific database.
|
||||
|
||||
Step 7: Configure MongoDB
|
||||
-------------------------
|
||||
|
||||
MongoDB needs text search enabled. Modify ``/etc/mongodb.conf``.
|
||||
|
||||
.. code::
|
||||
|
||||
# nano /etc/mongodb.conf
|
||||
|
||||
Add ``setParameter=textSearchEnabled=true`` to the end. Also, to enable authentication, uncomment ``auth = true``. Restart MongoDB.
|
||||
|
||||
.. code::
|
||||
|
||||
# service mongodb restart
|
||||
|
||||
Step 8: Configuring NodeBB
|
||||
-------------------------
|
||||
|
||||
Make sure you are in your NodeBB root folder. If not, just type:
|
||||
|
||||
.. code::
|
||||
|
||||
$ cd /path/to/nodebb
|
||||
|
||||
To setup the app, type:
|
||||
|
||||
.. code::
|
||||
|
||||
$ node app --setup
|
||||
|
||||
* Change the hostname to your domain name.
|
||||
* Accept the defaults by pressing enter until it asks you what database you want to use. Type ``mongo`` in that field.
|
||||
* Accept the default port, unless you changed it in the previous steps.
|
||||
* Change your username to ``nodebb``, unless you set it to another username.
|
||||
* Enter in the password you made in step 5.
|
||||
* Change the database to ``nodebb``, unless you named it something else.
|
||||
|
||||
Continue with the installation, following the instructions the installer provides you.
|
||||
|
||||
Step 9: Starting the App
|
||||
-------------------------
|
||||
|
||||
To start the app, run:
|
||||
|
||||
.. code::
|
||||
|
||||
$ node app
|
||||
|
||||
Now visit ``yourdomainorip.com:4567`` and your NodeBB installation should be running.
|
||||
|
||||
NodeBB can also be started with helper programs, such as :doc:`supervisor or forever <../../running/index>`. You can also use ``nginx`` as a :doc:`reverse proxy <../../configuring/proxies>`).
|
||||
9
docs/configuring/databases/secondary.rst
Normal file
9
docs/configuring/databases/secondary.rst
Normal file
@@ -0,0 +1,9 @@
|
||||
**This option is experimental and should not be used on a production environment.**
|
||||
|
||||
Both databases **must** be flushed before beginning - there isn't a mechanism yet that detects an existing installation on one database but not another. Until fail-safe's such as these are implemented this option is hidden under the `--advanced` setup flag.
|
||||
|
||||
node app --setup --advanced
|
||||
|
||||
Consult the other database guides for instructions on how to set up each specific database. Once you select a secondary database's modules, there's no turning back - until somebody writes an exporter/importer.
|
||||
|
||||
Currently this setup is being tested with Redis as the primary store (sets, lists, and sorted sets, because Redis is super fast with these), and Mongo as the hash store (post and user data, because ideally we wouldn't want this in RAM).
|
||||
16
docs/configuring/proxies.rst
Normal file
16
docs/configuring/proxies.rst
Normal file
@@ -0,0 +1,16 @@
|
||||
Configuring Web Server / Proxies
|
||||
================================
|
||||
|
||||
Here a few options that you can use to proxy your NodeBB forum.
|
||||
|
||||
.. toctree::
|
||||
:hidden:
|
||||
:maxdepth: 0
|
||||
|
||||
Nginx <proxies/nginx>
|
||||
Apache <proxies/apache>
|
||||
Varnish Cache <proxies/varnish>
|
||||
|
||||
* :doc:`Nginx <proxies/nginx>`
|
||||
* :doc:`Apache <proxies/apache>`
|
||||
* :doc:`Varnish Cache <proxies/varnish>`
|
||||
84
docs/configuring/proxies/apache.rst
Normal file
84
docs/configuring/proxies/apache.rst
Normal file
@@ -0,0 +1,84 @@
|
||||
Configuring apache as a proxy
|
||||
=============================
|
||||
|
||||
**Prerequisites to making this work:**
|
||||
Apache 2.4.x
|
||||
|
||||
What if I'm on 2.2.x (Debian/Ubuntu)?
|
||||
------------------------------------
|
||||
|
||||
you need to manually compile and add the module "mod_proxy_wstunnel" to the Apache 2.2 branch. If you're running Ubuntu or Debian, you're likely on the 2.2 branch of code.
|
||||
|
||||
The following guide will assist with that if you're on Debian or Ubuntu. This is what I used to backport the mod_proxy_wstunnel module to the 2.2 code base of Apache;
|
||||
|
||||
http://www.amoss.me.uk/2013/06/apache-2-2-websocket-proxying-ubuntu-mod_proxy_wstunnel/
|
||||
|
||||
NOTE: On ubuntu, if you’re missing the ./configure file
|
||||
------------------------------------
|
||||
You need to first run ./buildconf. After this is complete, you will then be able to use ./configure.
|
||||
|
||||
**automake & libtool package was needed too.**
|
||||
|
||||
.. code::
|
||||
|
||||
apt-get install automake libtool
|
||||
|
||||
|
||||
Enable the necessary modules
|
||||
-----------------------------
|
||||
|
||||
1. sudo a2enmod proxy
|
||||
2. sudo a2enmod proxy_html
|
||||
3. sudo a2enmod proxy_wstunnel
|
||||
|
||||
Add the config to Apache
|
||||
-----------------------------
|
||||
|
||||
The next step is adding the configuration to your virtualhost.conf file, typically located in /etc/apache2/sites-available/. The below configuration assumes you've used 4567 (default) port for NobeBB installation. It also assumes you have the bind address set to 127.0.0.1.
|
||||
|
||||
.. code::
|
||||
|
||||
ProxyRequests off
|
||||
|
||||
<Proxy *>
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
</Proxy>
|
||||
ProxyPass /socket.io/1/websocket ws://127.0.0.1:4567/socket.io/1/websocket
|
||||
ProxyPassReverse /socket.io/1/websocket ws://127.0.0.1:4567/socket.io/1/websocket
|
||||
|
||||
ProxyPass /socket.io/ http://127.0.0.1:4567/socket.io/
|
||||
ProxyPassReverse /socket.io/ http://127.0.0.1:4567/socket.io/
|
||||
|
||||
ProxyPass / http://127.0.0.1:4567/
|
||||
ProxyPassReverse / http://127.0.0.1:4567/
|
||||
|
||||
|
||||
The last thing you need to be sure of is that the config.json in the NodeBB folder has use_port: false. Otherwise some functionality will not work properly.
|
||||
|
||||
|
||||
Example nodebb/config.json
|
||||
-----------------------------
|
||||
|
||||
.. code:: json
|
||||
|
||||
{
|
||||
"base_url": "http://www.yoursite.com",
|
||||
"port": "4567",
|
||||
"use_port": false,
|
||||
"secret": "55sb254c-62e3-4e23-9407-8655147562763",
|
||||
"bind_address": "127.0.0.1",
|
||||
"database": "redis",
|
||||
"redis": {
|
||||
"host": "127.0.0.1",
|
||||
"port": "6379",
|
||||
"password": "",
|
||||
"database": "0"
|
||||
},
|
||||
"bcrypt_rounds": 12,
|
||||
"upload_path": "/public/uploads",
|
||||
"relative_path": ""
|
||||
}
|
||||
|
||||
|
||||
**Change the domain and dont use the secret in the example above.**
|
||||
59
docs/configuring/proxies/nginx.rst
Normal file
59
docs/configuring/proxies/nginx.rst
Normal file
@@ -0,0 +1,59 @@
|
||||
Configuring nginx as a proxy
|
||||
============================
|
||||
|
||||
NodeBB by default runs on port ``4567``, meaning that builds are usually accessed using a port number in addition to their hostname:
|
||||
|
||||
.. code::
|
||||
|
||||
http://example.org:4567
|
||||
|
||||
In order to allow NodeBB to be served without a port, nginx can be set up to proxy all requests to a particular hostname (or subdomain) to an upstream NodeBB build running on any port.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
* NGINX version v1.3.13 or greater
|
||||
* Package managers may not provide a new enough version. To get the latest version, `compile it yourself <http://nginx.org/en/download.html>`_, or if on Ubuntu, use the `NGINX Stable <https://launchpad.net/~nginx/+archive/stable>`_ or `NGINX Development <https://launchpad.net/~nginx/+archive/development>`_ PPA builds, if you are on Debian, use `DotDeb repository <http://www.dotdeb.org/instructions/>`_ to get the latest version of Nginx.
|
||||
* To determine your nginx version, execute ``nginx -V`` in a shell
|
||||
|
||||
Configuration
|
||||
------------
|
||||
|
||||
NGINX-served sites are contained in a ``server`` block. This block of options goes in a specific place based on how nginx was installed and configured:
|
||||
|
||||
* ``/path/to/nginx/sites-available/*`` -- files here must be aliased to ``../sites-enabled``
|
||||
* ``/path/to/nginx/conf.d/*.conf`` -- filenames must end in ``.conf``
|
||||
* ``/path/to/nginx/httpd.conf`` -- if all else fails
|
||||
|
||||
Below is the basic nginx configuration for a NodeBB build running on port ``4567``:
|
||||
|
||||
.. code:: nginx
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
|
||||
server_name forum.example.org;
|
||||
|
||||
location / {
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header X-NginX-Proxy true;
|
||||
|
||||
proxy_pass http://127.0.0.1:4567/;
|
||||
proxy_redirect off;
|
||||
|
||||
# Socket.IO Support
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Notes
|
||||
------------
|
||||
|
||||
* nginx must be on version 1.4.x to properly support websockets. Debian/Ubuntu use 1.2, although it will work there will be a reduction in functionality.
|
||||
* The ``proxy_pass`` IP should be ``127.0.0.1`` if your NodeBB is hosted on the same physical server as your nginx server. Update the port to match your NodeBB, if necessary.
|
||||
* This config sets up your nginx server to listen to requests for ``forum.example.org``. It doesn't magically route the internet to it, though, so you also have to update your DNS server to send requests for ``forum.example.org`` to the machine with nginx on it!
|
||||
37
docs/configuring/proxies/varnish.rst
Normal file
37
docs/configuring/proxies/varnish.rst
Normal file
@@ -0,0 +1,37 @@
|
||||
Configuring Varnish Cache
|
||||
==========================
|
||||
|
||||
To be sure Varnish will work properly with NodeBB check that your configuration ``/etc/varnish/default.vcl`` is optimized for **websockets**.
|
||||
|
||||
.. code::
|
||||
|
||||
backend nodebb {
|
||||
.host = "127.0.0.1"; # your nodebb host
|
||||
.port = "4567"; # your nodebb port
|
||||
}
|
||||
|
||||
sub vcl_recv {
|
||||
|
||||
# Pipe websocket connections directly to Node.js
|
||||
if (req.http.Upgrade ~ "(?i)websocket") {
|
||||
set req.backend = nodebb;
|
||||
return (pipe);
|
||||
}
|
||||
|
||||
# NodeBB
|
||||
if (req.http.host == "forum.yourwebsite.com") { # change this to match your host
|
||||
if (req.url ~ "^/socket.io/") {
|
||||
set req.backend = nodebb;
|
||||
return (pipe); # return pass seems not working for websockets
|
||||
}
|
||||
return (pass); # don't cache
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sub vcl_pipe {
|
||||
# Need to copy the upgrade header
|
||||
if (req.http.upgrade) {
|
||||
set bereq.http.upgrade = req.http.upgrade;
|
||||
}
|
||||
}
|
||||
76
docs/contributing/style-guide.rst
Normal file
76
docs/contributing/style-guide.rst
Normal file
@@ -0,0 +1,76 @@
|
||||
NodeBB Style Guide
|
||||
==================
|
||||
|
||||
For the most part, NodeBB follows the `Google Javascript Style Guide <http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml>`_.
|
||||
|
||||
Code Formatting
|
||||
-------------------
|
||||
|
||||
.. note::
|
||||
|
||||
The existing codebase as of July 2013 does not adhere to this style guide 100%. If you see instances where the style guide is not adhered to, feel free to restyle and send off a pull request.
|
||||
|
||||
Indentation & Bracing
|
||||
-------------------
|
||||
|
||||
NodeBB uses tabbed indentation. Bracing should follow the `One True Brace Style <http://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS>`_:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
if (condition) {
|
||||
// code here ...
|
||||
} else {
|
||||
// otherwise ...
|
||||
}
|
||||
|
||||
Put conditionals and statements on separate lines and wrap with curly braces even if it's just one line:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
if (leTired) {
|
||||
haveANap();
|
||||
}
|
||||
|
||||
Errors
|
||||
-------------------
|
||||
|
||||
Most callbacks return an error as the first parameter. Handle this error first before processing further.
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
someFunction(parameters, function(err, data) {
|
||||
if(err) {
|
||||
return callback(err); // or handle error
|
||||
}
|
||||
// proceed as usual
|
||||
});
|
||||
|
||||
Variables
|
||||
-------------------
|
||||
|
||||
Variables should always be prefaced with the `var` keyword:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
var foo = 'bar';
|
||||
|
||||
Multiple declarations are to be included in the same `var` statement:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
var foo = 'bar',
|
||||
bar = 'baz';
|
||||
|
||||
Semicolons
|
||||
-------------------
|
||||
|
||||
Use semicolons if at all possible
|
||||
|
||||
Nomenclature
|
||||
-------------------
|
||||
|
||||
CamelCase if at all possible:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
functionNamesLikeThis, variableNamesLikeThis, ClassNamesLikeThis, EnumNamesLikeThis, methodNamesLikeThis, CONSTANT_VALUES_LIKE_THIS, foo.namespaceNamesLikeThis.bar, and filenameslikethis.js.
|
||||
11
docs/help/faq.rst
Normal file
11
docs/help/faq.rst
Normal file
@@ -0,0 +1,11 @@
|
||||
Frequently Asked Questions
|
||||
==========================
|
||||
|
||||
|
||||
testing
|
||||
|
||||
|
||||
testing
|
||||
-------
|
||||
|
||||
testing
|
||||
50
docs/help/help.rst
Normal file
50
docs/help/help.rst
Normal file
@@ -0,0 +1,50 @@
|
||||
Need Help?
|
||||
==========
|
||||
|
||||
|
||||
Frequently Asked Questions
|
||||
--------------------------
|
||||
|
||||
If you experience difficulties setting up a NodeBB instance, perhaps one of the following may help.
|
||||
|
||||
Is it possible to install NodeBB via FTP?
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
It is possible to transfer the files to your remote server using FTP, but you do require shell access to the server in order to actually "start" NodeBB. Here is `a handy guide for installing NodeBB on DigitalOcean <http://burnaftercompiling.com/nodebb/setting-up-a-nodebb-forum-for-dummies/>`_
|
||||
|
||||
I'm getting an "npm ERR!" error
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
For the most part, errors involving ``npm`` are due to Node.js being outdated. If you see an error similar to this one while running ``npm install``:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
npm ERR! Unsupported
|
||||
npm ERR! Not compatible with your version of node/npm: connect@2.7.11
|
||||
|
||||
You'll need to update your Node.js version to 0.8 or higher.
|
||||
|
||||
To do this on Ubuntu:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
# add-apt-repository ppa:chris-lea/node.js
|
||||
# apt-get update && apt-get dist-upgrade -y
|
||||
# apt-cache policy nodejs // should show a version higher than 0.8
|
||||
|
||||
I upgraded NodeBB and now X isn't working properly!
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Please consult [[Upgrading NodeBB]]
|
||||
|
||||
|
||||
Submit Bugs on our Issue Tracker
|
||||
--------------------------------
|
||||
|
||||
Before reporting bugs, please ensure that the issue has not already been filed on our `tracker <https://github.com/designcreateplay/NodeBB/issues?state=closed>`_, or has already been resolved on our `support forum <http://community.nodebb.org/category/6/bug-reports>`_. If it has not been filed, feel free to create an account on GitHub and `create a new issue <https://github.com/designcreateplay/NodeBB/issues>`_.
|
||||
|
||||
|
||||
Ask the NodeBB Community
|
||||
------------------------
|
||||
|
||||
Having trouble installing NodeBB? Or did something break? Don't hesitate to `join our forum <community.nodebb.org/register>`_ and ask for help. Hopefully one day you'll be able to help others too :)
|
||||
34
docs/helping/index.rst
Normal file
34
docs/helping/index.rst
Normal file
@@ -0,0 +1,34 @@
|
||||
Helping out the NodeBB Project
|
||||
==============================
|
||||
|
||||
NodeBB is an open source project, and will forever remain free. Here's a number of ways you can help us, even if you aren't a programmer.
|
||||
|
||||
* `Like and share our content on Facebook <http://www.facebook.com/NodeBB>`_
|
||||
* `Follow us on Twitter <http://www.twitter.com/NodeBB>`_ and perhaps tweet **#NodeBB is most awesome forum software @NodeBB**
|
||||
* Update our wiki! ;) We need everything from development/design tutorials to user friendly how-to guides.
|
||||
* Tell everybody about NodeBB, including your grandma and her cats.
|
||||
* `Submit a pull request, or two, or three.. <http://www.github.com/designcreateplay/NodeBB>`_
|
||||
* Build a new theme
|
||||
* Write a plugin
|
||||
* Keep the link back to us on the footer of your own NodeBB :)
|
||||
* Blog about us! Give the gift of SEO juice this Christmas
|
||||
* `Help Translate NodeBB <https://www.transifex.com/projects/p/nodebb/>`_ - It's a really simple translation tool and you don't need to know how to code.
|
||||
* Join our `community <http://community.nodebb.org>`_ and give us a hard time about bugs and missing features
|
||||
|
||||
|
||||
Translating NodeBB to another language
|
||||
------------------------------------
|
||||
|
||||
NodeBB uses Transifex, which is a user friendly visual tool which allows any individual to translate text into a language of their choice. You don't need to be a programmer to do this, so what are you waiting for? `Join the translation team <https://www.transifex.com/projects/p/nodebb/>`_ now :)
|
||||
|
||||
|
||||
Writing Documentation
|
||||
---------------------
|
||||
|
||||
These docs were written using `Sphinx <http://sphinx-doc.org/>`_ and published using `rtfd.org <http://readthedocs.org/>`_.
|
||||
|
||||
You can edit these docs `directly on GitHub <https://github.com/designcreateplay/NodeBB/tree/master/docs>`_, or by clicking on "View page source" on the top right of any page.
|
||||
|
||||
If you wish, you can clone the repository and compile the documentation yourself. Check out the `Getting Started <https://read-the-docs.readthedocs.org/en/latest/getting_started.html>`_ section for more info on how to accomplish the latter.
|
||||
|
||||
Documentation are auto-compiled and pushed to rtfd.org after every commit.
|
||||
127
docs/index.rst
Normal file
127
docs/index.rst
Normal file
@@ -0,0 +1,127 @@
|
||||
.. image:: https://i.imgur.com/3yj1n6N.png
|
||||
|
||||
|
|
||||
**NodeBB** is a next-generation discussion platform that utilizes web sockets for instant interactions and real-time notifications. NodeBB forums have many modern features out of the box such as social network integration and streaming discussions.
|
||||
|
||||
NodeBB is an open source project which can be forked on `GitHub <https://github.com/designcreateplay/NodeBB/>`_. Don't forget to check out the ways that you can help contribute to this project, from translations, pull requests, and telling your friends.
|
||||
|
||||
Table of Contents
|
||||
=================
|
||||
|
||||
.. _installing:
|
||||
|
||||
Installing NodeBB
|
||||
-----------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
installing/os
|
||||
installing/cloud
|
||||
|
||||
|
||||
.. _configuring:
|
||||
|
||||
Configuring NodeBB
|
||||
------------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
configuring/databases
|
||||
configuring/proxies
|
||||
|
||||
Running NodeBB
|
||||
------------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
running/index
|
||||
|
||||
Upgrading NodeBB
|
||||
------------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
upgrading/index
|
||||
|
||||
Administrating NodeBB
|
||||
---------------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
admin/outline
|
||||
admin/sso
|
||||
admin/uploads
|
||||
|
||||
Contributing to NodeBB
|
||||
----------------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
contributing/style-guide
|
||||
modules/index
|
||||
|
||||
Plugin System
|
||||
-------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
plugins/create
|
||||
plugins/hooks
|
||||
plugins/settings
|
||||
|
||||
Widgets System
|
||||
--------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
widgets/create
|
||||
|
||||
Theming Engine
|
||||
--------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
themes/create
|
||||
themes/templates
|
||||
|
||||
|
||||
Developer's Resources
|
||||
---------------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
resources
|
||||
|
||||
Helping out the NodeBB Project
|
||||
------------------------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
helping/index
|
||||
|
||||
Troubleshooting / Help
|
||||
----------------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
help/help
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
||||
|
||||
21
docs/installing/cloud.rst
Normal file
21
docs/installing/cloud.rst
Normal file
@@ -0,0 +1,21 @@
|
||||
Installing NodeBB on the Cloud
|
||||
==============================
|
||||
|
||||
The following are step-by-step guides to help you get up and running on the cloud using popular PaaS solutions.
|
||||
|
||||
.. note::
|
||||
|
||||
If the PaaS solution of your choice is not listed here, please feel free to request a guide on our `community <https://community.nodebb.org>`_ or even better yet, submit one here.
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:hidden:
|
||||
:maxdepth: 0
|
||||
|
||||
Heroku <cloud/heroku>
|
||||
Cloud9 <cloud/cloud9>
|
||||
|
||||
* :doc:`Heroku <cloud/heroku>`
|
||||
* :doc:`Cloud9 <cloud/cloud9>`
|
||||
* `Digital Ocean <http://burnaftercompiling.com/nodebb/setting-up-a-nodebb-forum-for-dummies/>`_ (external)
|
||||
75
docs/installing/cloud/cloud9.rst
Normal file
75
docs/installing/cloud/cloud9.rst
Normal file
@@ -0,0 +1,75 @@
|
||||
Cloud 9 IDE
|
||||
===========
|
||||
|
||||
The following are installation instructions for the `Cloud 9 <https://c9.io/>`_ web based IDE.
|
||||
|
||||
**Step 1:** Clone NodeBB into a new workspace from GitHub. You can use the following command from the terminal:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
git clone git://github.com/designcreateplay/NodeBB.git nodebb
|
||||
|
||||
The nodebb command after the git url will create a file called nodebb so you have to CD into the file after you have cloned NodeBB.
|
||||
|
||||
**Step 2:** Install redis with Cloud9's package manager
|
||||
|
||||
.. code:: bash
|
||||
|
||||
nada-nix install redis
|
||||
|
||||
**Step 3:** Run your redis server on port 16379 - port 6379 tends to be already used on Cloud 9. The "&" makes the command run in the background. You can always terminate the process later. $IP is a Cloud 9 system variable containing the global ip of your server instance.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
redis-server --port 16379 --bind $IP &
|
||||
|
||||
**Step 4:** Find out your instance's ip address so NodeBB can bind to it correctly. This is one of Cloud 9's demands and seems to be the only way it will work. You can't use $IP in your config.json either (which means you can't enter $IP in the node app --setup).
|
||||
|
||||
.. code:: bash
|
||||
|
||||
echo $IP
|
||||
|
||||
**Step 5:** Install NodeBB and it's dependencies:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
npm install
|
||||
|
||||
**Step 6:** Run the nodebb setup utility:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
node app --setup
|
||||
|
||||
URL of this installation should be set to 'http://workspace_name-c9-username.c9.io', replacing workspace_name with your workspace name and username with your username. Note that as NodeBB is currently using unsecure http for loading jQuery you will find it much easier using http:// instead of https:// for your base url. Otherwise jQuery won't load and NodeBB will break.
|
||||
|
||||
Port number isn't so important - Cloud9 may force you to use port 80 anyway. Just set it to 80. If this is another port, like 4567, that is also fine.
|
||||
|
||||
Use a port number to access NodeBB? Again, this doesn't seem to make a big difference. Set this to no. Either will work.
|
||||
|
||||
Host IP or address of your Redis instance: localhost (the output of the $IP Command is also acceptable)
|
||||
|
||||
IP or Hostname to bind to: Enter what your $IP value holds here found in step 4. It should look something like: 123.4.567.8
|
||||
|
||||
Host port of your Redis instance: 16379
|
||||
|
||||
Redis Password: Unless you have set one manually, Redis will be configured without a password. Leave this blank and press enter
|
||||
|
||||
First-time set-up will also require an Admin name, email address and password to be set.
|
||||
|
||||
And you're good to go! Don't use the Run button at the top if the IDE, it has been a little buggy for me. Besides, you're better off using the command line anyway. Run:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
node app
|
||||
|
||||
And then open http://workspace_name-c9-username.c9.io in your browser.
|
||||
|
||||
Troubleshooting
|
||||
---------------
|
||||
|
||||
A common problem is that the database hasn't been started. Make sure you have set Redis up correctly and ran
|
||||
|
||||
.. code:: bash
|
||||
|
||||
redis-server --port 16379 --bind $IP
|
||||
61
docs/installing/cloud/heroku.rst
Normal file
61
docs/installing/cloud/heroku.rst
Normal file
@@ -0,0 +1,61 @@
|
||||
Heroku
|
||||
======
|
||||
|
||||
**Note**: Installations to Heroku require a local machine with some flavour of unix, as NodeBB does not run on Windows.
|
||||
|
||||
1. Download and install `Heroku Toolbelt <https://toolbelt.heroku.com/>`_ for your operating system
|
||||
2. Log into your Heroku account: ``heroku login``
|
||||
3. Verify your Heroku account by adding a credit card (at http://heroku.com/verify)
|
||||
4. Clone the repository: ``git clone https://github.com/designcreateplay/NodeBB.git /path/to/repo/clone``
|
||||
5. ``cd /path/to/repo/clone``
|
||||
6. Install dependencies locally ``npm install``
|
||||
7. Create the heroku app: ``heroku create``
|
||||
8. Enable WebSocket support (beta): ``heroku labs:enable websockets -a {APP_NAME}``, where ``{APP_NAME}`` is provided by Heroku, and looks something like ``adjective-noun-wxyz.herokuapp.com`` (NOTE: `See this doc <https://discussion.heroku.com/t/application-error/160>`_): drop the `.herokuapp.com` when entering ``{APP_NAME}`` above.
|
||||
9. Enable `Redis To Go <https://addons.heroku.com/redistogo>`_ for your heroku account: ``heroku addons:add redistogo:nano``
|
||||
10. Run the NodeBB setup script: ``node app --setup`` (information for your Heroku server and Redis to Go instance can be found in your account page)
|
||||
|
||||
* Your server name is found in your Heroku app's "settings" page, and looks something like ``adjective-noun-wxyz.herokuapp.com``
|
||||
* Use any port number. It will be ignored.
|
||||
* Specify "n" when asked if a port will be used. Heroku transparently proxies all requests.
|
||||
* Your redis server can be found as part of the redis url. For example, for the url: ``redis://redistogo:h28h3wgh37fns7@crestfish.redistogo.com:12345/``
|
||||
* The server is ``fishyfish.redistogo.com``
|
||||
* The port is ``12345``
|
||||
* The password is ``h28h3wgh37fns7``
|
||||
|
||||
12. Add the following two packages to the ``dependencies`` section of your ``package.json``:
|
||||
|
||||
.. code:: json
|
||||
|
||||
"dependencies": {
|
||||
...
|
||||
"nodebb-plugin-dbsearch": "0.0.9",
|
||||
"redis": "~0.10.1",
|
||||
"connect-redis": "~1.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
13. Create a Procfile for Heroku: ``echo "web: node app.js" > Procfile``
|
||||
14. Commit the Procfile:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
git add -f Procfile config.json package.json && git commit -am "adding Procfile and configs for Heroku"
|
||||
|
||||
15. Push to heroku: ``git push heroku master``
|
||||
* Ensure that a proper SSH key was added to your account, otherwise the push will not succeed!
|
||||
16. Initialise a single dyno: ``heroku ps:scale web=1``
|
||||
17. Visit your app!
|
||||
|
||||
If these instructions are unclear or if you run into trouble, please let us know by `filing an issue <https://github.com/designcreateplay/NodeBB/issues>`_.
|
||||
|
||||
Keeping it up to date
|
||||
---------------------
|
||||
|
||||
If you wish to pull the latest changes from the git repository to your Heroku app:
|
||||
|
||||
1. Navigate to your repository at ``/path/to/nodebb``
|
||||
2. ``git pull``
|
||||
3. ``npm install``
|
||||
4. ``node app --upgrade``
|
||||
5. ``git commit -am "upgrading to latest nodebb"``
|
||||
6. ``git push heroku master``
|
||||
75
docs/installing/cloud9.rst
Normal file
75
docs/installing/cloud9.rst
Normal file
@@ -0,0 +1,75 @@
|
||||
Cloud 9 IDE
|
||||
===========
|
||||
|
||||
The following are installation instructions for the `Cloud 9 <https://c9.io/>`_ web based IDE.
|
||||
|
||||
**Step 1:** Clone NodeBB into a new workspace from GitHub. You can use the following command from the terminal:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
git clone git://github.com/designcreateplay/NodeBB.git nodebb
|
||||
|
||||
The nodebb command after the git url will create a file called nodebb so you have to CD into the file after you have cloned NodeBB.
|
||||
|
||||
**Step 2:** Install redis with Cloud9's package manager
|
||||
|
||||
.. code:: bash
|
||||
|
||||
nada-nix install redis
|
||||
|
||||
**Step 3:** Run your redis server on port 16379 - port 6379 tends to be already used on Cloud 9. The "&" makes the command run in the background. You can always terminate the process later. $IP is a Cloud 9 system variable containing the global ip of your server instance.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
redis-server --port 16379 --bind $IP &
|
||||
|
||||
**Step 4:** Find out your instance's ip address so NodeBB can bind to it correctly. This is one of Cloud 9's demands and seems to be the only way it will work. You can't use $IP in your config.json either (which means you can't enter $IP in the node app --setup).
|
||||
|
||||
.. code:: bash
|
||||
|
||||
echo $IP
|
||||
|
||||
**Step 5:** Install NodeBB and it's dependencies:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
npm install
|
||||
|
||||
**Step 6:** Run the nodebb setup utility:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
node app --setup
|
||||
|
||||
URL of this installation should be set to 'http://workspace_name-c9-username.c9.io', replacing workspace_name with your workspace name and username with your username. Note that as NodeBB is currently using unsecure http for loading jQuery you will find it much easier using http:// instead of https:// for your base url. Otherwise jQuery won't load and NodeBB will break.
|
||||
|
||||
Port number isn't so important - Cloud9 may force you to use port 80 anyway. Just set it to 80. If this is another port, like 4567, that is also fine.
|
||||
|
||||
Use a port number to access NodeBB? Again, this doesn't seem to make a big difference. Set this to no. Either will work.
|
||||
|
||||
Host IP or address of your Redis instance: localhost (the output of the $IP Command is also acceptable)
|
||||
|
||||
IP or Hostname to bind to: Enter what your $IP value holds here found in step 4. It should look something like: 123.4.567.8
|
||||
|
||||
Host port of your Redis instance: 16379
|
||||
|
||||
Redis Password: Unless you have set one manually, Redis will be configured without a password. Leave this blank and press enter
|
||||
|
||||
First-time set-up will also require an Admin name, email address and password to be set.
|
||||
|
||||
And you're good to go! Don't use the Run button at the top if the IDE, it has been a little buggy for me. Besides, you're better off using the command line anyway. Run:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
node app
|
||||
|
||||
And then open http://workspace_name-c9-username.c9.io in your browser.
|
||||
|
||||
Troubleshooting
|
||||
---------------
|
||||
|
||||
A common problem is that the database hasn't been started. Make sure you have set Redis up correctly and ran
|
||||
|
||||
.. code:: bash
|
||||
|
||||
redis-server --port 16379 --bind $IP
|
||||
47
docs/installing/heroku.rst
Normal file
47
docs/installing/heroku.rst
Normal file
@@ -0,0 +1,47 @@
|
||||
Heroku
|
||||
======
|
||||
|
||||
**Note**: Installations to Heroku require a local machine with some flavour of unix, as NodeBB does not run on Windows.
|
||||
|
||||
1. Download and install `Heroku Toolbelt <https://toolbelt.heroku.com/>`_ for your operating system
|
||||
2. Log into your Heroku account: ``heroku login``
|
||||
3. Verify your Heroku account by adding a credit card (at http://heroku.com/verify)
|
||||
4. Clone the repository: ``git clone https://github.com/designcreateplay/NodeBB.git /path/to/repo/clone``
|
||||
5. ``cd /path/to/repo/clone``
|
||||
6. Install dependencies locally ``npm install``
|
||||
7. Create the heroku app: ``heroku create``
|
||||
8. Enable WebSocket support (beta): ``heroku labs:enable websockets -a {APP_NAME}``, where ``{APP_NAME}`` is provided by Heroku, and looks something like ``adjective-noun-wxyz.herokuapp.com`` (NOTE: `See this doc <https://discussion.heroku.com/t/application-error/160>`_): drop the `.herokuapp.com` when entering ``{APP_NAME}`` above.
|
||||
9. Enable `Redis To Go <https://addons.heroku.com/redistogo>`_ for your heroku account: ``heroku addons:add redistogo:nano``
|
||||
10. Run the NodeBB setup script: ``node app --setup`` (information for your Heroku server and Redis to Go instance can be found in your account page)
|
||||
* Your server name is found in your Heroku app's "settings" page, and looks something like ``adjective-noun-wxyz.herokuapp.com``
|
||||
* Use any port number. It will be ignored.
|
||||
* Specify "n" when asked if a port will be used. Heroku transparently proxies all requests.
|
||||
* Your redis server can be found as part of the redis url. For example, for the url: ``redis://redistogo:h28h3wgh37fns7@crestfish.redistogo.com:12345/``
|
||||
* The server is ``fishyfish.redistogo.com``
|
||||
* The port is ``12345``
|
||||
* The password is ``h28h3wgh37fns7``
|
||||
11. Create a Procfile for Heroku: ``echo "web: node app.js" > Procfile``
|
||||
12. Commit the Procfile:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
git add -f Procfile config.json public/config.json && git commit -am "adding Procfile and configs for Heroku"
|
||||
|
||||
13. Push to heroku: ``git push heroku master``
|
||||
* Ensure that a proper SSH key was added to your account, otherwise the push will not succeed!
|
||||
14. Initialise a single dyno: ``heroku ps:scale web=1``
|
||||
15. Visit your app!
|
||||
|
||||
If these instructions are unclear or if you run into trouble, please let us know by `filing an issue <https://github.com/designcreateplay/NodeBB/issues>`_.
|
||||
|
||||
Keeping it up to date
|
||||
---------------------
|
||||
|
||||
If you wish to pull the latest changes from the git repository to your Heroku app:
|
||||
|
||||
1. Navigate to your repository at ``/path/to/nodebb``
|
||||
2. ``git pull``
|
||||
3. ``npm install``
|
||||
4. ``node app --upgrade``
|
||||
5. ``git commit -am "upgrading to latest nodebb"``
|
||||
6. ``git push heroku master``
|
||||
25
docs/installing/os.rst
Normal file
25
docs/installing/os.rst
Normal file
@@ -0,0 +1,25 @@
|
||||
NodeBB Installation by OS
|
||||
=========================
|
||||
|
||||
The following are step-by-step guides to help you get up and running.
|
||||
|
||||
.. note::
|
||||
|
||||
If your operating system is not listed here, please feel free to request a guide on our `community <https://community.nodebb.org>`_ or even better yet, submit one here.
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:hidden:
|
||||
:maxdepth: 0
|
||||
|
||||
Ubuntu <os/ubuntu>
|
||||
Debian <os/debian>
|
||||
SmartOS <os/smartos>
|
||||
Windows <os/windows8>
|
||||
|
||||
* :doc:`Ubuntu <os/ubuntu>`
|
||||
* :doc:`Debian <os/debian>`
|
||||
* :doc:`SmartOS <os/smartos>`
|
||||
* :doc:`Windows <os/windows8>`
|
||||
* `CentOS <https://blog.tommyparnell.com/installing-nodebb-on-centos-6-5/>`_ (external)
|
||||
177
docs/installing/os/debian.rst
Normal file
177
docs/installing/os/debian.rst
Normal file
@@ -0,0 +1,177 @@
|
||||
|
||||
Debian
|
||||
======
|
||||
|
||||
The current Ubuntu guide is not completely compatible with Debian and there are some specificities and especially the NodeJS installation, and how to get latest Redis.
|
||||
|
||||
Requirements
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
NodeBB requires these software to be installed:
|
||||
|
||||
* Node.js at least 0.10 and greater
|
||||
* Redis, version 2.6 or greater
|
||||
* cURL installed, just do ``sudo apt-get install curl`` in order to install it
|
||||
|
||||
Node.js installation
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Debian 7 and Debian 6 and older doesn't have `nodejs` packages included by default, but there are some solutions to install Node.js on your Debian distribution.
|
||||
|
||||
Wheezy Backport :
|
||||
------------------
|
||||
|
||||
This solution is **ONLY for Debian 7**, simply run the following **as root** :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ echo "deb http://ftp.us.debian.org/debian wheezy-backports main" >> /etc/apt/sources.list
|
||||
$ apt-get update
|
||||
|
||||
|
||||
To install Node.js + NPM, run this :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ apt-get install nodejs-legacy
|
||||
$ curl --insecure https://www.npmjs.org/install.sh | bash
|
||||
|
||||
|
||||
The following install a Node.js version who is greater than 0.8 (at 29 March 2014 : 0.10.21)
|
||||
|
||||
Compiling from the source :
|
||||
------------------
|
||||
|
||||
This solution is for Debian 6 (Squeeze) and greater, in order to install NodeJS, run this **as root** :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ sudo apt-get install python g++ make checkinstall
|
||||
$ src=$(mktemp -d) && cd $src
|
||||
$ wget -N http://nodejs.org/dist/node-latest.tar.gz
|
||||
$ tar xzvf node-latest.tar.gz && cd node-v*
|
||||
$ ./configure
|
||||
$ fakeroot checkinstall -y --install=no --pkgversion $(echo $(pwd) | sed -n -re's/.+node-v(.+)$/\1/p') make -j$(($(nproc)+1)) install
|
||||
$ sudo dpkg -i node_*
|
||||
|
||||
|
||||
Get latest Software via DotDeb
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Dotdeb is a repository containing packages to turn your Debian boxes into powerful, stable and up-to-date LAMP servers.
|
||||
|
||||
* Nginx,
|
||||
* PHP 5.4 and 5.3 (useful PHP extensions : APC, imagick, Pinba, xcache, Xdebug, XHpro..)
|
||||
* MySQL 5.5,
|
||||
* Percona toolkit,
|
||||
* Redis,
|
||||
* Zabbix,
|
||||
* Passenger…
|
||||
|
||||
Dotdeb supports :
|
||||
|
||||
* Debian 6.0 “Squeeze“ and 7 “Wheezy“
|
||||
* both amd64 and i386 architectures
|
||||
|
||||
Debian 7 (Wheezy) :
|
||||
------------------
|
||||
|
||||
For the complete DotDeb repositories :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ sudo echo 'deb http://packages.dotdeb.org wheezy all' >> /etc/apt/sources.list
|
||||
$ sudo echo 'deb-src http://packages.dotdeb.org wheezy all' >> /etc/apt/sources.list
|
||||
|
||||
|
||||
After this, add the following GPC keys :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ wget http://www.dotdeb.org/dotdeb.gpg
|
||||
$ sudo apt-key add dotdeb.gpg
|
||||
|
||||
|
||||
And update your package source :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ sudo apt-get update
|
||||
|
||||
|
||||
Debian 6 (Squeeze)
|
||||
------------------
|
||||
|
||||
For the complete DotDeb repositories :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ sudo echo 'deb http://packages.dotdeb.org squeeze all' >> /etc/apt/sources.list
|
||||
$ sudo echo 'deb-src http://packages.dotdeb.org squeeze all' >> /etc/apt/sources.list
|
||||
|
||||
|
||||
After this, add the following GPC keys :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ wget http://www.dotdeb.org/dotdeb.gpg
|
||||
$ sudo apt-key add dotdeb.gpg
|
||||
|
||||
|
||||
And update your package source :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ sudo apt-get update
|
||||
|
||||
|
||||
Installing NodeBB
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Now, we have NodeJS installed and Redis ready to be installed, run this command for install the base software stack :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ apt-get install redis-server imagemagick git
|
||||
|
||||
|
||||
Next clone this repository :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ cd /path/to/nodebb/install/location
|
||||
$ git clone git://github.com/designcreateplay/NodeBB.git nodebb
|
||||
|
||||
Now we are going to install all dependencies for NodeBB via NPM :
|
||||
|
||||
$ cd /path/to/nodebb/install/location/nodebb (or if you are on your install location directory run : cd nodebb)
|
||||
$ npm install
|
||||
|
||||
Install NodeBB by running the app with `--setup` flag :
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ ./nodebb setup
|
||||
|
||||
|
||||
1. `URL of this installation` is either your public ip address or your domain name pointing to that ip address.
|
||||
**Example:** ``http://0.0.0.0`` or ``http://example.org``
|
||||
|
||||
2. ``Port number of your NodeBB`` is the port needed to access your site:
|
||||
**Note:** If you do not proxy your port with something like nginx then port 80 is recommended for production.
|
||||
3. If you used the above steps to setup your redis-server then use the default redis settings.
|
||||
|
||||
And after all.. let's run the NodeBB forum
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ ./nodebb start
|
||||
|
||||
|
||||
**Note:** If you NodeBB or your server crash, your NodeBB instance will not reboot (snap), this is why you should take a look at the other way to start your NodeBB instance with helper programs such as ``supervisor`` and ``forever``, just :doc:`take a look here <../../running/index>` it's simple as a click!
|
||||
|
||||
Extras, tips and Advice
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
You should secure your NodeBB installation, `take a look here <https://github.com/designcreateplay/NodeBB#securing-nodebb>`_.
|
||||
|
||||
You should use Nginx (or similar) in order to reverse proxy your NodeBB installation on the port 80, :doc:`take a look here <../../configuring/proxies>`
|
||||
133
docs/installing/os/smartos.rst
Normal file
133
docs/installing/os/smartos.rst
Normal file
@@ -0,0 +1,133 @@
|
||||
SmartOS
|
||||
========
|
||||
|
||||
Requirements
|
||||
----------------
|
||||
|
||||
NodeBB requires the following software to be installed:
|
||||
|
||||
* A version of Node.js at least 0.8 or greater.
|
||||
* Redis, version 2.6 or greater (steps to install from Joyent's package repository given below).
|
||||
* nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB server).
|
||||
|
||||
Server Access
|
||||
----------------
|
||||
|
||||
1. Sign in your Joyent account: `Joyent.com <http://joyent.com>`_
|
||||
|
||||
2. Select: ``Create Instance``
|
||||
|
||||
3. Create the newest ``smartos nodejs`` image.
|
||||
|
||||
**Note:** The following steps have been tested with image: ``smartos nodejs 13.1.0``
|
||||
|
||||
4. Wait for your instance to show `Running` then click on its name.
|
||||
|
||||
5. Find your ``Login`` and admin password. If the ``Credentials`` section is missing, refresh the webpage.
|
||||
|
||||
**Example:** ``ssh root@0.0.0.0`` ``A#Ca{c1@3``
|
||||
|
||||
6. SSH into your server as the admin not root: ``ssh admin@0.0.0.0``
|
||||
|
||||
**Note:** For Windows users that do not have ssh installed, here is an option: `Cygwin.com <http://cygwin.com>`_
|
||||
|
||||
Installation
|
||||
----------------
|
||||
|
||||
1. Install NodeBB's software dependencies:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ sudo pkgin update
|
||||
$ sudo pkgin install scmgit nodejs build-essential ImageMagick redis
|
||||
|
||||
If any of these failed:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ pkgin search *failed-name*
|
||||
$ sudo pkgin install *available-name*
|
||||
|
||||
2. **If needed** setup a redis-server with default settings as a service (automatically starts and restarts):
|
||||
**Note:** These steps quickly setup a redis server but does not fine-tuned it for production.
|
||||
|
||||
**Note:** If you ran `redis-server` manually then exit out of it now.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ svcadm enable redis
|
||||
$ svcs
|
||||
|
||||
*-* If `svcs` shows "/pkgsrc/redis:default" in maintenance mode then:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ scvadm clear redis
|
||||
|
||||
*-* To shut down your redis-server and keep it from restarting:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ scvadm disable redis
|
||||
|
||||
*-* To start up your redis-server and have it always running:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ scvadm enable redis
|
||||
|
||||
3. Move to where you want to create the nodebb folder:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ cd /parent/directory/of/nodebb/
|
||||
|
||||
4. Clone NodeBB's repository:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ git clone git://github.com/designcreateplay/NodeBB.git nodebb
|
||||
|
||||
5. Install NodeBB's npm dependencies:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ cd nodebb/
|
||||
$ npm install
|
||||
|
||||
6. Run NodeBB's setup script:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ node app --setup
|
||||
|
||||
A. `URL of this installation` is either your public ip address from your ssh `Login` or your domain name pointing to that ip address.
|
||||
|
||||
**Example:** `http://0.0.0.0` or `http://example.org`
|
||||
|
||||
B. `Port number of your NodeBB` is the port needed to access your site:
|
||||
|
||||
**Note:** If you do not proxy your port with something like nginx then port 80 is recommended for production.
|
||||
C. If you used the above steps to setup your redis-server then use the default redis settings.
|
||||
|
||||
7. Start NodeBB process:
|
||||
|
||||
**Run NodeBB manually:**
|
||||
|
||||
**Note:** This should not be used for production.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ node app
|
||||
|
||||
8. Visit your app!
|
||||
**Example:** With a port of 4567: ``http://0.0.0.0:4567`` or ``http://example.org:4567``
|
||||
|
||||
**Note:** With port 80 the `:80` does not need to be entered.
|
||||
|
||||
**Note:** If these instructions are unclear or if you run into trouble, please let us know by `filing an issue <https://github.com/designcreateplay/NodeBB/issues>`_.
|
||||
|
||||
Upgrading NodeBB
|
||||
----------------
|
||||
|
||||
**Note:** Detailed upgrade instructions are listed in :doc:`Upgrading NodeBB <../../upgrading/index>`.
|
||||
58
docs/installing/os/ubuntu.rst
Normal file
58
docs/installing/os/ubuntu.rst
Normal file
@@ -0,0 +1,58 @@
|
||||
|
||||
Ubuntu
|
||||
--------------------
|
||||
|
||||
First, we install our base software stack:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ apt-get install git nodejs redis-server imagemagick
|
||||
|
||||
|
||||
If you want to use MongoDB, LevelDB, or another database instead of Redis please look at the :doc:`Configuring Databases <../configuring/databases>` section.
|
||||
|
||||
**If your package manager only installed a version of Node.js that is less than 0.8 (e.g. Ubuntu 12.10, 13.04):**
|
||||
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ add-apt-repository ppa:chris-lea/node.js
|
||||
$ apt-get update && apt-get dist-upgrade
|
||||
|
||||
|
||||
Next, clone this repository:
|
||||
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ cd /path/to/nodebb/install/location
|
||||
$ git clone git://github.com/designcreateplay/NodeBB.git nodebb
|
||||
|
||||
|
||||
Obtain all of the dependencies required by NodeBB:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ cd nodebb
|
||||
$ npm install
|
||||
|
||||
|
||||
Initiate the setup script by running the app with the ``setup`` flag:
|
||||
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ ./nodebb setup
|
||||
|
||||
|
||||
The default settings are for a local server running on the default port, with a redis store on the same machine/port.
|
||||
|
||||
Lastly, we run the forum.
|
||||
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ ./nodebb start
|
||||
|
||||
|
||||
NodeBB can also be started with helper programs, such as ``supervisor`` and ``forever``. :doc:`Take a look at the options here <../../running/index>`.
|
||||
82
docs/installing/os/windows8.rst
Normal file
82
docs/installing/os/windows8.rst
Normal file
@@ -0,0 +1,82 @@
|
||||
Windows 8
|
||||
==========
|
||||
|
||||
Required Software
|
||||
---------------------
|
||||
|
||||
First, install the following programs:
|
||||
|
||||
* https://windows.github.com/
|
||||
* http://nodejs.org/
|
||||
* http://sourceforge.net/projects/redis/files/redis-2.6.10/
|
||||
|
||||
You may have to restart your computer.
|
||||
|
||||
Running NodeBB
|
||||
---------------------
|
||||
|
||||
Start Redis Server
|
||||
|
||||
.. note::
|
||||
|
||||
The default location of Redis Server is
|
||||
|
||||
**C:\Program Files (x86)\Redis\StartRedisServer.cmd**
|
||||
|
||||
Open Git Shell, and type the following commands. Clone NodeBB repo:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
git clone https://github.com/designcreateplay/NodeBB.git
|
||||
|
||||
Enter directory:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
cd NodeBB
|
||||
|
||||
Install dependencies:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
npm install
|
||||
|
||||
Run interactive installation:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
node app.js
|
||||
|
||||
You may leave all of the options as default.
|
||||
|
||||
And you're done! After the installation, run
|
||||
|
||||
.. code:: bash
|
||||
|
||||
node app.js
|
||||
|
||||
You can visit your forum at ``http://127.0.0.1:4567/``
|
||||
|
||||
|
||||
Developing on Windows
|
||||
---------------------
|
||||
|
||||
It's a bit of a pain to shutdown and restart NodeBB everytime you make changes. First install supervisor:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
npm install -g supervisor
|
||||
|
||||
Open up bash:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
bash
|
||||
|
||||
And run NodeBB on "watch" mode:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
./nodebb watch
|
||||
|
||||
It will launch NodeBB in development mode, and watch files that change and automatically restart your forum.
|
||||
244
docs/make.bat
Normal file
244
docs/make.bat
Normal file
@@ -0,0 +1,244 @@
|
||||
@ECHO OFF
|
||||
|
||||
REM rmdir /s /q _build
|
||||
|
||||
REM Command file for Sphinx documentation
|
||||
|
||||
if "%SPHINXBUILD%" == "" (
|
||||
set SPHINXBUILD=sphinx-build
|
||||
)
|
||||
set BUILDDIR=_build
|
||||
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
|
||||
set I18NSPHINXOPTS=%SPHINXOPTS% .
|
||||
if NOT "%PAPER%" == "" (
|
||||
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
|
||||
set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
|
||||
)
|
||||
|
||||
if "%1" == "" goto help
|
||||
|
||||
if "%1" == "help" (
|
||||
:help
|
||||
echo.Please use `make ^<target^>` where ^<target^> is one of
|
||||
echo. html to make standalone HTML files
|
||||
echo. dirhtml to make HTML files named index.html in directories
|
||||
echo. singlehtml to make a single large HTML file
|
||||
echo. pickle to make pickle files
|
||||
echo. json to make JSON files
|
||||
echo. htmlhelp to make HTML files and a HTML help project
|
||||
echo. qthelp to make HTML files and a qthelp project
|
||||
echo. devhelp to make HTML files and a Devhelp project
|
||||
echo. epub to make an epub
|
||||
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
|
||||
echo. text to make text files
|
||||
echo. man to make manual pages
|
||||
echo. texinfo to make Texinfo files
|
||||
echo. gettext to make PO message catalogs
|
||||
echo. changes to make an overview over all changed/added/deprecated items
|
||||
echo. xml to make Docutils-native XML files
|
||||
echo. pseudoxml to make pseudoxml-XML files for display purposes
|
||||
echo. linkcheck to check all external links for integrity
|
||||
echo. doctest to run all doctests embedded in the documentation if enabled
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "clean" (
|
||||
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
|
||||
del /q /s %BUILDDIR%\*
|
||||
goto end
|
||||
)
|
||||
|
||||
|
||||
%SPHINXBUILD% 2> nul
|
||||
if errorlevel 9009 (
|
||||
echo.
|
||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||
echo.may add the Sphinx directory to PATH.
|
||||
echo.
|
||||
echo.If you don't have Sphinx installed, grab it from
|
||||
echo.http://sphinx-doc.org/
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
if "%1" == "html" (
|
||||
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "dirhtml" (
|
||||
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "singlehtml" (
|
||||
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "pickle" (
|
||||
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the pickle files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "json" (
|
||||
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the JSON files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "htmlhelp" (
|
||||
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run HTML Help Workshop with the ^
|
||||
.hhp project file in %BUILDDIR%/htmlhelp.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "qthelp" (
|
||||
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
||||
.qhcp project file in %BUILDDIR%/qthelp, like this:
|
||||
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\NodeBB.qhcp
|
||||
echo.To view the help file:
|
||||
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\NodeBB.ghc
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "devhelp" (
|
||||
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "epub" (
|
||||
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The epub file is in %BUILDDIR%/epub.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latex" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latexpdf" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf
|
||||
cd %BUILDDIR%/..
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latexpdfja" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf-ja
|
||||
cd %BUILDDIR%/..
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "text" (
|
||||
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The text files are in %BUILDDIR%/text.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "man" (
|
||||
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The manual pages are in %BUILDDIR%/man.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "texinfo" (
|
||||
%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "gettext" (
|
||||
%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "changes" (
|
||||
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.The overview file is in %BUILDDIR%/changes.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "linkcheck" (
|
||||
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Link check complete; look for any errors in the above output ^
|
||||
or in %BUILDDIR%/linkcheck/output.txt.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "doctest" (
|
||||
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Testing of doctests in the sources finished, look at the ^
|
||||
results in %BUILDDIR%/doctest/output.txt.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "xml" (
|
||||
%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The XML files are in %BUILDDIR%/xml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "pseudoxml" (
|
||||
%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
|
||||
goto end
|
||||
)
|
||||
|
||||
:end
|
||||
43
docs/modules/index.rst
Normal file
43
docs/modules/index.rst
Normal file
@@ -0,0 +1,43 @@
|
||||
Core Modules
|
||||
================
|
||||
|
||||
.. note::
|
||||
|
||||
This section is under construction. Have a look at the modules folder for more information, located at:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
public/src/modules
|
||||
|
||||
Alerts
|
||||
-------
|
||||
|
||||
The alert module is a toaster notification that can be called via the following syntax:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
app.alert({
|
||||
title: 'Success!',
|
||||
message: 'Here\'s an example of an alert!',
|
||||
location: 'left-bottom',
|
||||
timeout: 2500,
|
||||
type: 'success',
|
||||
image: 'https://i.imgur.com/dJBzcGT.jpg'
|
||||
});
|
||||
|
||||
The above code will result in this notification (default styling):
|
||||
|
||||
.. image:: https://i.imgur.com/jRD5GAI.png
|
||||
|
||||
To style this, have a look at the vanilla theme's ``modules/alert.less`` and ``templates/alert.tpl``.
|
||||
|
||||
**Parameters**:
|
||||
|
||||
1. ``title`` - string, which can be a language string as well. Some core language strings that you can use here include: ``[[global:alert.success]]`` and ``[[global:alert.error]]``
|
||||
2. ``message`` - string, which can be a language string as well.
|
||||
3. ``location`` (optional) - ``right-top`` (default), ``left-top``, ``right-bottom``, ``left-bottom``
|
||||
4. ``timeout`` (optional) - integer in milliseconds, default is permanent until closed.
|
||||
5. ``type`` - error, success, info, warning/notify
|
||||
6. ``image`` (optional) - string, URL to image.
|
||||
7. ``closefn`` (optional) - function. This is called when the user closes the alert via the (X) button.
|
||||
8. ``clickfn`` (optional) - function. This is called when the user clicks on the alert.
|
||||
121
docs/plugins/create.rst
Normal file
121
docs/plugins/create.rst
Normal file
@@ -0,0 +1,121 @@
|
||||
Writing Plugins for NodeBB
|
||||
==========================
|
||||
|
||||
So you want to write a plugin for NodeBB, that's fantastic! There are a couple of things you need to know before starting that will help you out.
|
||||
|
||||
Like WordPress, NodeBB's plugins are built on top of a hook system in NodeBB. This system exposes parts of NodeBB to plugin creators in a controlled way, and allows them to alter content while it passes through, or execute certain behaviours when triggered.
|
||||
|
||||
See the full :doc:`list of hooks <hooks>` for more information.
|
||||
|
||||
Filters and Actions
|
||||
------------------
|
||||
|
||||
There are two types of hooks: **filters** and **actions**.
|
||||
|
||||
**Filters** act on content, and can be useful if you want to alter certain pieces of content as it passes through NodeBB. For example, a filter may be used to alter posts so that any occurrences of "apple" gets changed to "orange". Likewise, filters may be used to beautify content (i.e. code filters), or remove offensive words (profanity filters).
|
||||
|
||||
**Actions** are executed at certain points of NodeBB, and are useful if you'd like to *do* something after a certain trigger. For example, an action hook can be used to notify an admin if a certain user has posted. Other uses include analytics recording, or automatic welcome posts on new user registration.
|
||||
|
||||
When you are writing your plugin, make sure a hook exists where you'd like something to happen. If a hook isn't present, `file an issue <https://github.com/designcreateplay/NodeBB/issues>`_ and we'll include it in the next version of NodeBB.
|
||||
|
||||
Configuration
|
||||
------------------
|
||||
|
||||
Each plugin package contains a configuration file called ``plugin.json``. Here is a sample:
|
||||
|
||||
.. code:: json
|
||||
|
||||
{
|
||||
"id": "my-plugin",
|
||||
"name": "My Awesome Plugin",
|
||||
"description": "Your plugin's description",
|
||||
"url": "Absolute URL to your plugin or a Github repository",
|
||||
"library": "./my-plugin.js",
|
||||
"staticDirs": {
|
||||
"images": "public/images"
|
||||
},
|
||||
"less": [
|
||||
"assets/style.less"
|
||||
],
|
||||
"hooks": [
|
||||
{ "hook": "filter:post.save", "method": "filter" },
|
||||
{ "hook": "action:post.save", "method": "emailme" }
|
||||
]
|
||||
}
|
||||
|
||||
The ``id`` property is a unique name that identifies the plugin.
|
||||
|
||||
The ``library`` property is a relative path to the library in your package. It is automatically loaded by NodeBB (if the plugin is activated).
|
||||
|
||||
The ``staticDirs`` property is an object hash that maps out paths (relative to your plugin's root) to a directory that NodeBB will expose to the public at the route ``/plugins/{YOUR-PLUGIN-ID}``.
|
||||
|
||||
* e.g. The ``staticDirs`` hash in the sample configuration maps ``/path/to/your/plugin/public/images`` to ``/plugins/my-plugin/images``
|
||||
|
||||
The ``less`` property contains an array of paths (relative to your plugin's directory), that will be precompiled into the CSS served by NodeBB.
|
||||
|
||||
The ``hooks`` property is an array containing objects that tell NodeBB which hooks are used by your plugin, and what method in your library to invoke when that hook is called. Each object contains the following properties (those with a * are required):
|
||||
|
||||
* ``hook``, the name of the NodeBB hook
|
||||
* ``method``, the method called in your plugin
|
||||
* ``priority``, the relative priority of the method when it is eventually called (default: 10)
|
||||
|
||||
Writing the plugin library
|
||||
------------------
|
||||
|
||||
The core of your plugin is your library file, which gets automatically included by NodeBB if your plugin is activated.
|
||||
|
||||
Each method you write into your library takes a certain number of arguments, depending on how it is called:
|
||||
|
||||
* Filters send a single argument through to your method, while asynchronous methods can also accept a callback.
|
||||
* Actions send a number of arguments (the exact number depends how the hook is implemented). These arguments are listed in the :doc:`list of hooks <hooks>`.
|
||||
|
||||
Example library method
|
||||
------------------
|
||||
|
||||
If we were to write method that listened for the ``action:post.save`` hook, we'd add the following line to the ``hooks`` portion of our ``plugin.json`` file:
|
||||
|
||||
.. code:: json
|
||||
|
||||
{ "hook": "action:post.save", "method": "myMethod" }
|
||||
|
||||
Our library would be written like so:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
var MyPlugin = {
|
||||
myMethod: function(postData) {
|
||||
// do something with postData here
|
||||
}
|
||||
};
|
||||
|
||||
Using NodeBB libraries to enhance your plugin
|
||||
------------------
|
||||
|
||||
Occasionally, you may need to use NodeBB's libraries. For example, to verify that a user exists, you would need to call the ``exists`` method in the ``User`` class. To allow your plugin to access these NodeBB classes, use ``module.parent.require``:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
var User = module.parent.require('./user');
|
||||
User.exists('foobar', function(err, exists) {
|
||||
// ...
|
||||
});
|
||||
|
||||
Installing the plugin
|
||||
------------------
|
||||
|
||||
In almost all cases, your plugin should be published in `npm <https://npmjs.org/>`_, and your package's name should be prefixed "nodebb-plugin-". This will allow users to install plugins directly into their instances by running ``npm install``.
|
||||
|
||||
When installed via npm, your plugin **must** be prefixed with "nodebb-plugin-", or else it will not be found by NodeBB.
|
||||
|
||||
As of v0.0.5, "installing" a plugin by placing it in the ``/plugins`` folder is still supported, but keep in mind that the package ``id`` and its folder name must match exactly, or else NodeBB will not be able to load the plugin. *This feature may be deprecated in later versions of NodeBB*.
|
||||
|
||||
Testing
|
||||
------------------
|
||||
|
||||
Run NodeBB in development mode:
|
||||
|
||||
.. code::
|
||||
|
||||
./nodebb dev
|
||||
|
||||
This will expose the plugin debug logs, allowing you to see if your plugin is loaded, and its hooks registered. Activate your plugin from the administration panel, and test it out.
|
||||
193
docs/plugins/hooks.rst
Normal file
193
docs/plugins/hooks.rst
Normal file
@@ -0,0 +1,193 @@
|
||||
Available Hooks
|
||||
=============
|
||||
|
||||
The following is a list of all hooks present in NodeBB. This list is intended to guide developers who are looking to write plugins for NodeBB. For more information, please consult :doc:`Writing Plugins for NodeBB <create>`.
|
||||
|
||||
There are two types of hooks, **filters**, and **actions**. Filters take an input (provided as a single argument), parse it in some way, and return the changed value. Actions take multiple inputs, and execute actions based on the inputs received. Actions do not return anything.
|
||||
|
||||
**Important**: This list is by no means exhaustive. Hooks are added on an as-needed basis (or if we can see a potential use case ahead of time), and all requests to add new hooks to NodeBB should be sent to us via the `issue tracker <https://github.com/designcreateplay/NodeBB/issues>`_.
|
||||
|
||||
|
||||
Filters
|
||||
----------
|
||||
|
||||
``filter:admin.header_build``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Allows plugins to create new navigation links in the ACP
|
||||
|
||||
``filter:post.save``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Argument(s)**: A post's content (markdown text)
|
||||
|
||||
Executed whenever a post is created or edited, but before it is saved into the database.
|
||||
|
||||
``filter:post.get``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Argument(s)**: A post object (javascript Object)
|
||||
|
||||
Executed whenever a post is retrieved, but before being sent to the client.
|
||||
|
||||
``filter:header.build``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Allows plugins to add new navigation links to NodeBB**
|
||||
|
||||
``filter:post.parse``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Argument(s)**: A post or signature's raw text (String)
|
||||
|
||||
Executed when a post or signature needs to be parsed from raw text to HTML (for output to client). This is useful if you'd like to use a parser to prettify posts, such as `Markdown <http://daringfireball.net/projects/markdown/>`_, or `BBCode <http://www.bbcode.org/>`_.
|
||||
|
||||
``filter:posts.custom_profile_info``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Allows plugins to add custom profile information in the topic view's author post block**
|
||||
|
||||
|
||||
``filter:register.check``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Allows plugins to run checks on information and deny registration if necessary.**
|
||||
|
||||
|
||||
``filter:scripts.get``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Allows to add client-side JS to the header and queue up for minification on production**
|
||||
|
||||
|
||||
``filter:uploadImage``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:uploadFile``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:widgets.getAreas``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:widgets.getWidgets``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:search.query``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:post.parse``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:messaging.parse``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:sounds.get``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:post.getPosts``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:post.getFields``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:auth.init``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:composer.help``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:topic.thread_tools``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:user.create``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``filter:widget.render``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
||||
|
||||
Actions
|
||||
----------
|
||||
|
||||
``action:app.load``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Argument(s)**: None
|
||||
|
||||
Executed when NodeBB is loaded, used to kickstart scripts in plugins (i.e. cron jobs, etc)
|
||||
|
||||
``action:page.load``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Argument(s)**: An object containing the following properties:
|
||||
|
||||
* ``template`` - The template loaded
|
||||
* ``url`` - Path to the page (relative to the site's base url)
|
||||
|
||||
``action:plugin.activate``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Argument(s)**: A String containing the plugin's ``id`` (e.g. ``nodebb-plugin-markdown``)
|
||||
|
||||
Executed whenever a plugin is activated via the admin panel.
|
||||
|
||||
**Important**: Be sure to check the ``id`` that is sent in with this hook, otherwise your plugin will fire its registered hook method, even if your plugin was not the one that was activated.
|
||||
|
||||
``action:plugin.deactivate``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Argument(s)**: A String containing the plugin's ``id`` (e.g. ``nodebb-plugin-markdown``)
|
||||
|
||||
Executed whenever a plugin is deactivated via the admin panel.
|
||||
|
||||
**Important**: Be sure to check the ``id`` that is sent in with this hook, otherwise your plugin will fire its registered hook method, even if your plugin was not the one that was deactivated.
|
||||
|
||||
``action:post.save``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Argument(s)**: A post object (javascript Object)
|
||||
|
||||
Executed whenever a post is created or edited, after it is saved into the database.
|
||||
|
||||
``action:email.send``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``action:post.setField``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``action:topic.edit``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``action:post.edit``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``action:post.delete``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``action:post.restore``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``action:config.set``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``action:topic.save``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``action:user.create``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``action:topic.delete``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
``action:user.set``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
Parameters: field (str), value, type ('set', 'increment', or 'decrement')
|
||||
Useful for things like awarding badges or achievements after a user has reached some value (ex. 100 posts)
|
||||
|
||||
``action:settings.set``
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
Parameters: hash (str), object (obj)
|
||||
Useful if your plugins want to cache settings instead of pulling from DB everytime a method is called. Listen to this and refresh accordingly.
|
||||
|
||||
|
||||
306
docs/plugins/settings.rst
Normal file
306
docs/plugins/settings.rst
Normal file
@@ -0,0 +1,306 @@
|
||||
Settings Framework
|
||||
==========================
|
||||
|
||||
If you want to make your plugin customizable you may use the Settings Framework NodeBB offers.
|
||||
|
||||
Server-Side Access
|
||||
------------------
|
||||
|
||||
First you need some default settings, just create a new object for this:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
var defaultSettings = {
|
||||
booleans: {
|
||||
someBool: true,
|
||||
moreBools: [false, false, true]
|
||||
},
|
||||
strings: {
|
||||
someString: 'hello world',
|
||||
multiLineString: 'some\nlong\ntext',
|
||||
arrayOfStrings: ['some\nlong\ntexts', 'and another one']
|
||||
},
|
||||
numbers: {
|
||||
multiArrayDimensions: [[42,42],[21,21]],
|
||||
multiArrayDimensions2: [[42,42],[]],
|
||||
justSomeNumbers: [],
|
||||
oneNumber: 3,
|
||||
anotherNumber: 2
|
||||
},
|
||||
someKeys: ['C+S+#13'] // Ctrl+Shift+Enter
|
||||
};
|
||||
|
||||
Now you can use the server-side settings-module to access the saved settings like this:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
var Settings = module.parent.require('./settings');
|
||||
var mySettings = new Settings('myPlugin', '0.1', defaultSettings, function() {
|
||||
// the settings are ready and can accessed.
|
||||
console.log(mySettings === this); // true
|
||||
console.log(this.get('strings.someString') === mySettings.get().strings.someString); // true
|
||||
});
|
||||
|
||||
The second parameter should change at least every time the structure of default settings changes. Because of this it's
|
||||
recommended to use your plugins version.
|
||||
|
||||
To use the settings client-side you need to create a WebSocket that delivers the result of ``mySettings.get()``.
|
||||
|
||||
The mySettings-object will cache the settings, so be sure to use methods like ``mySettings.sync(callback)`` when the
|
||||
settings got changed from somewhere else and ``mySettings.persist(callback)`` when you finished
|
||||
``mySettings.set(key, value)`` calls.
|
||||
|
||||
You need to create a socket-listener like following to allow the admin to initiate a synchronization with the settings
|
||||
stored within database:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
var SocketAdmin = module.parent.require('./socket.io/admin');
|
||||
SocketAdmin.settings.syncMyPlugin = function() {
|
||||
mySettings.sync();
|
||||
};
|
||||
|
||||
If you want to add a reset-functionality you need to create another socket-listener:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
SocketAdmin.settings.getMyPluginDefaults = function (socket, data, callback) {
|
||||
callback(null, mySettings.createDefaultWrapper());
|
||||
};
|
||||
|
||||
The methods of the ``mySettings`` object you probably want to use:
|
||||
|
||||
+ ``constructor()``
|
||||
+ ``sync([callback])``
|
||||
Reloads the settings from database, overrides local changes.
|
||||
+ ``persist([callback])``
|
||||
Saves the local changes within database.
|
||||
+ ``get([key])``
|
||||
Returns the setting(s) identified by given key. If no key is provided the whole settings-object gets returned. If no
|
||||
such setting is saved the default value gets returned.
|
||||
+ ``set([key, ]value)``
|
||||
Sets the setting of given key to given value. Remember that it's just a local change, you need to call ``persist``
|
||||
in order to save the changes.
|
||||
+ ``reset([callback])``
|
||||
Persists the default settings.
|
||||
+ ``getWrapper()``
|
||||
Returns the local object as it would get saved within database.
|
||||
+ ``createWrapper(version, settings)``
|
||||
Creates an object like it would get saved within database containing given information and settings.
|
||||
+ ``createDefaultWrapper()``
|
||||
Creates an object like it would get saved within database containing the default settings.
|
||||
|
||||
Client-Side Access
|
||||
------------------
|
||||
|
||||
The next step is making the settings available to the admin.
|
||||
|
||||
You need to use the :doc:`hooks <hooks>` ``filter:admin.header.build`` (to display a link to your page within ACP) and
|
||||
``action:app.load`` (to create the needed route).
|
||||
|
||||
Within your page you can access the client-side Settings API via
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
require(['settings'], function (settings) {
|
||||
var wrapper = $('#my_form_id');
|
||||
// [1]
|
||||
settings.sync('myPlugin', wrapper);
|
||||
// [2]
|
||||
});
|
||||
|
||||
To make a button with the id ``save`` actually save the settings you can add the following at ``[2]``:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
$('#save').click(function(event) {
|
||||
event.preventDefault();
|
||||
settings.persist('myPlugin', wrapper, function(){
|
||||
socket.emit('admin.settings.syncMyPlugin');
|
||||
});
|
||||
});
|
||||
|
||||
As said before the server-side settings-object caches the settings, so we emit a WebSocket to notify the server to
|
||||
synchronize the settings after they got persisted.
|
||||
|
||||
To use a reset-button you can add the following at ``[2]``:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
$('#reset').click(function(event) {
|
||||
event.preventDefault();
|
||||
socket.emit('admin.settings.getMyPluginDefaults', null, function (err, data) {
|
||||
settings.set('myPlugin', data, wrapper, function(){
|
||||
socket.emit('admin.settings.syncMyPlugin');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
There you go, the basic structure is done.
|
||||
Now you need to add the form-fields.
|
||||
|
||||
Each field needs an attribute ``data-key`` to reference its position within the settings.
|
||||
The Framework does support any fields whose jQuery-object provides the value via the ``val()`` method.
|
||||
|
||||
The plugin to use for a field gets determined by its ``data-type``, ``type`` or tag-name in this order.
|
||||
|
||||
Additionally the following plugins are registered by default:
|
||||
* array (types: div, array)
|
||||
An Array of any other fields.
|
||||
Uses the object within ``data-attributes`` to define the array-elements.
|
||||
Uses ``data-new`` to define the value of new created elements.
|
||||
* key (types: key)
|
||||
A field to input keyboard-combinations.
|
||||
* checkbox, number, select, textarea
|
||||
Handle appropriate fields.
|
||||
|
||||
A full list of all attributes that may influence the behavior of the default Framework:
|
||||
|
||||
* data-key: the key to save/load the value within configuration-object
|
||||
* data-type: highest priority type-definition to determine what kind of element it is or which plugin to associate
|
||||
* type: normal priority type-definition
|
||||
* data-empty: if ``false`` or ``0`` then values that are assumed as empty turn into null. data-empty of arrays affect their child-elements
|
||||
* data-trim: if not ``false`` or ``0`` then values will get trimmed as defined by the elements type
|
||||
* data-split: if set and the element doesn't belong to any plugin, it's value will get split and joined by its value into the field
|
||||
* array-elements:
|
||||
+ data-split: separator (HTML allowed) between the elements, defaults to ``', '``
|
||||
+ data-new: value to insert into new created elements
|
||||
+ data-attributes: an object to set the attributes of the child HTML-elements. tagName as special key will set the tag-name of the child HTML-elements
|
||||
* key-fields:
|
||||
+ data-trim: if ``false`` or ``0`` then the value will get saved as string else as object providing following properties: ``ctrl``, ``alt``, ``shift``, ``meta``, ``code``, ``char``
|
||||
+ data-split: separator between different modifiers and the key-code of the value that gets saved (only takes effect if trimming)
|
||||
+ data-short: if not ``false`` or ``0`` then modifier-keys get saved as first uppercase character (only takes effect if trimming)
|
||||
* select:
|
||||
+ data-options: an array of objects containing ``text`` and ``value`` attributes.
|
||||
|
||||
The methods of the ``settings`` module:
|
||||
|
||||
+ ``registerPlugin(plugin[, types])``
|
||||
Registers the given plugin and associates it to the given types if any, otherwise the plugins default types will get
|
||||
used.
|
||||
+ ``get()``
|
||||
Returns the saved object.
|
||||
+ ``set(hash, settings[, wrapper[, callback[, notify]]])``
|
||||
Refills the fields with given settings and persists them.
|
||||
``hash`` Identifies your plugins settings.
|
||||
``settings`` The object to save in database (settings-wrapper if you use server-side Settings Framework).
|
||||
``wrapper`` (default: 'form') The DOM-Element that contains all fields to fill.
|
||||
``callback`` (default: null) Gets called when done.
|
||||
``notify`` (default: true) Whether to display saved- and fail-notifications.
|
||||
+ ``sync(hash[, wrapper[, callback]])``
|
||||
Resets the settings to saved ones and refills the fields.
|
||||
+ ``persist(hash[, wrapper[, callback[, notify]]])``
|
||||
Reads the settings from given wrapper (default: 'form') and saves them within database.
|
||||
|
||||
For Settings 2.0 support the methods ``load`` and ``save`` are still available but not recommended.
|
||||
|
||||
Client-Side Example Template
|
||||
------------------
|
||||
|
||||
An example template-file to use the same settings we already used server-side:
|
||||
|
||||
.. code:: html
|
||||
|
||||
<h1>My Plugin</h1>
|
||||
<hr />
|
||||
|
||||
<form id="my_form_id">
|
||||
<div class="row">
|
||||
<p>
|
||||
<h2>Settings</h2>
|
||||
A boolean: <input type="checkbox" data-key="booleans.someBool"></input><br>
|
||||
An array of checkboxes that are selected by default:
|
||||
<div data-key="booleans.moreBools" data-attributes='{"data-type":"checkbox"}' data-new='true'></div><br>
|
||||
|
||||
A simple input-field of any common type: <input type="password" data-key="strings.someString"></input><br>
|
||||
A simple textarea: <textarea data-key="strings.multiLineString"></textarea><br>
|
||||
Array of textareas:
|
||||
<div data-key="strings.arrayOfStrings" data-attributes='{"data-type":"textarea"}' data-new='Hello Kitty, ahem... World!'></div><br>
|
||||
|
||||
2D-Array of numbers that persist even when empty (but not empty rows):
|
||||
<div data-key="numbers.multiArrayDimensions" data-split="<br>"
|
||||
data-attributes='{"data-type":"array","data-attributes":{"type":"number"}}' data-new='[42,21]'></div><br>
|
||||
Same with persisting empty rows, but not empty numbers, if no row is given null will get saved:
|
||||
<div data-key="numbers.multiArrayDimensions2" data-split="<br>" data-empty="false"
|
||||
data-attributes='{"data-type":"array","data-empty":true,"data-attributes":{"type":"number","data-empty":false}}' data-new='[42,21]'></div><br>
|
||||
Array of numbers (new: 42, step: 21):
|
||||
<div data-key="numbers.justSomeNumbers" data-attributes='{"data-type":"number","step":21}' data-new='42'></div><br>
|
||||
Select with dynamic options:
|
||||
<select data-key="numbers.oneNumber" data-options='[{"value":"2","text":"2"},{"value":"3","text":"3"}]'></select><br>
|
||||
Select that loads faster:
|
||||
<select data-key="numbers.anotherNumber"><br>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
</select>
|
||||
|
||||
Array of Key-shortcuts (new: Ctrl+Shift+7):
|
||||
<div data-key="someKeys" data-attributes='{"data-type":"key"}' data-new='Ctrl+Shift+#55'></div><br>
|
||||
</p>
|
||||
</div>
|
||||
<button class="btn btn-lg btn-warning" id="reset">Reset</button>
|
||||
<button class="btn btn-lg btn-primary" id="save">Save</button>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
require(['settings'], function (settings) {
|
||||
var wrapper = $('#my_form_id');
|
||||
// [1]
|
||||
settings.sync('myPlugin', wrapper);
|
||||
$('#save').click(function(event) {
|
||||
event.preventDefault();
|
||||
settings.persist('myPlugin', wrapper, function(){
|
||||
socket.emit('admin.settings.syncMyPlugin');
|
||||
});
|
||||
});
|
||||
$('#reset').click(function(event) {
|
||||
event.preventDefault();
|
||||
socket.emit('admin.settings.getMyPluginDefaults', null, function (err, data) {
|
||||
settings.set('myPlugin', data, wrapper, function(){
|
||||
socket.emit('admin.settings.syncMyPlugin');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
Custom Settings-Elements
|
||||
------------------
|
||||
|
||||
If you want do define your own element-structure you can create a **plugin** for the Settings Framework.
|
||||
|
||||
This allows you to use a whole object like a single field which - besides comfort in using multiple similar objects -
|
||||
allows you to use them within arrays.
|
||||
|
||||
A plugin is basically an object that contains at least an attribute ``types`` that contains an array of strings that
|
||||
associate DOM-elements with your plugin.
|
||||
|
||||
You can add a plugin at ``[1]`` using the method ``settings.registerPlugin``.
|
||||
|
||||
To customize the way the associated fields get interpreted you may add the following methods to your plugin-object:
|
||||
|
||||
All given elements are instances of JQuery.
|
||||
|
||||
All methods get called within Settings-scope.
|
||||
|
||||
+ ``use()``
|
||||
Gets called when the plugin gets registered.
|
||||
+ ``[HTML-Element|JQuery] create(type, tagName, data)``
|
||||
Gets called when a new element should get created (eg. by expansion of an array).
|
||||
+ ``destruct(element)``
|
||||
Gets called when the given element got removed from DOM (eg. by array-splice).
|
||||
+ ``init(element)``
|
||||
Gets called when an element should get initialized (eg. after creation).
|
||||
+ ``[value] get(element, trim, empty)``
|
||||
Gets called whenever the value of the given element is requested.
|
||||
``trim`` Whether the result should get trimmed.
|
||||
``empty`` Whether considered as empty values should get saved too.
|
||||
+ ``set(element, value, trim)``
|
||||
Gets called whenever the value of the given element should be set to given one.
|
||||
``trim`` Whether the value is assumed as trimmed.
|
||||
|
||||
For further impression take a look at the
|
||||
`default plugins <https://github.com/designcreateplay/NodeBB/tree/master/public/src/modules/settings>`_.
|
||||
|
||||
You should also take a look at the helper-functions within
|
||||
`Settings <https://github.com/designcreateplay/NodeBB/tree/master/public/src/modules/settings.js>`_ in order to create
|
||||
your own plugins. There are a few methods that take response to call the methods of other plugins when fittingly.
|
||||
27
docs/resources.rst
Normal file
27
docs/resources.rst
Normal file
@@ -0,0 +1,27 @@
|
||||
Developer's Resources
|
||||
=====================
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
This section is under construction.
|
||||
|
||||
|
||||
Core
|
||||
----
|
||||
|
||||
* `Building a new Admin Page <https://github.com/designcreateplay/NodeBB/wiki/How-to-build-a-new-Admin-Page>`_ (Out of date)
|
||||
|
||||
|
||||
Plugins
|
||||
-------
|
||||
|
||||
* `Developing plugins with Grunt and Coffeescript <https://github.com/frissdiegurke/nodebb-grunt-development>`_
|
||||
* `Writing your first NodeBB plugin <http://burnaftercompiling.com/nodebb/writing-your-first-nodebb-plugin/>`_
|
||||
|
||||
|
||||
Themes
|
||||
------
|
||||
|
||||
Widgets
|
||||
-------
|
||||
45
docs/running/index.rst
Normal file
45
docs/running/index.rst
Normal file
@@ -0,0 +1,45 @@
|
||||
Running NodeBB
|
||||
================
|
||||
|
||||
The preferred way to start and stop NodeBB is by invoking its executable:
|
||||
|
||||
* ``./nodebb start`` Starts the NodeBB server
|
||||
* ``./nodebb stop`` Stops the NodeBB server
|
||||
* Alternatively, you may use ``npm start`` and ``npm stop`` to do the same
|
||||
|
||||
The methods listed below are alternatives to starting NodeBB via the executable.
|
||||
|
||||
|
||||
Simple Node.js Process
|
||||
-----------------------
|
||||
|
||||
To start NodeBB, run it with ``node`` (some distributions use the executable ``nodejs``, please adjust accordingly):
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ cd /path/to/nodebb/install
|
||||
$ node app
|
||||
|
||||
However, bear in mind that crashes will cause the NodeBB process to halt, bringing down your forum. Consider some of the more reliable options, below:
|
||||
|
||||
Supervisor Process
|
||||
-----------------------
|
||||
|
||||
Using the `supervisor package <https://github.com/isaacs/node-supervisor>`_, you can have NodeBB restart itself if it crashes:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ npm install -g supervisor
|
||||
$ supervisor app
|
||||
|
||||
As ``supervisor`` by default continues to pipe output to ``stdout``, it is best suited to development builds.
|
||||
|
||||
Forever Daemon
|
||||
-----------------------
|
||||
|
||||
Another way to keep NodeBB up is to use the `forever package <https://github.com/nodejitsu/forever>`_ via the command line interface, which can monitor NodeBB and re-launch it if necessary:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ npm install -g forever
|
||||
$ forever start app.js
|
||||
61
docs/themes/create.rst
vendored
Normal file
61
docs/themes/create.rst
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
Creating a new NodeBB Theme
|
||||
===========================
|
||||
|
||||
NodeBB is built on `Twitter Bootstrap <twitter.github.com/bootstrap/>`_, which makes theming incredibly simple.
|
||||
|
||||
Packaging for NodeBB
|
||||
-------------------------------------
|
||||
|
||||
NodeBB expects any installed themes to be installed via ``npm``. Each individual theme is an npm package, and users can install themes through the command line, ex.:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
npm install nodebb-theme-modern-ui
|
||||
|
||||
The theme's folder must contain at least two files for it to be a valid theme:
|
||||
|
||||
1. ``theme.json``
|
||||
|
||||
2. ``theme.less``
|
||||
|
||||
``theme.less`` is where your theme's styles will reside. NodeBB expects LESS to be present in this file, and will precompile it down to CSS on-demand. For more information regarding LESS, take a look at `the project homepage <http://lesscss.org/>`_.
|
||||
|
||||
**Note**: A *suggested* organization for ``theme.less`` is to ``@import`` multiple smaller files instead of placing all of the styles in the main ``theme.less`` file.
|
||||
|
||||
Configuration
|
||||
-------------------------------------
|
||||
The theme configuration file is a simple JSON string containing all appropriate meta data regarding the theme. Please take note of the following properties:
|
||||
|
||||
* ``id``: A unique id for a theme (e.g. "my-theme")
|
||||
* ``name``: A user-friendly name for the theme (e.g. "My Theme")
|
||||
* ``description``: A one/two line description about the theme (e.g. "This is the theme I made for my personal NodeBB")
|
||||
* ``screenshot``: A filename (in the same folder) that is a preview image (ideally, 370x250, or an aspect ratio of 1.48:1)
|
||||
* ``url``: A fully qualified URL linking back to the theme's homepage/project
|
||||
|
||||
Child Themes
|
||||
-------------------------------------
|
||||
|
||||
If your theme is based off of another theme, simply modify your LESS files to point to the other theme as a base:
|
||||
|
||||
topic.less
|
||||
^^^^^^^^^^
|
||||
|
||||
.. code: css
|
||||
|
||||
@import "../nodebb-theme-vanilla/topic";
|
||||
|
||||
.topic .main-post {
|
||||
.post-info {
|
||||
font-size: 20px; // My theme specific override
|
||||
}
|
||||
}
|
||||
|
||||
As ``topic.less`` from the theme ``nodebb-theme-vanilla`` was imported, those styles are automatically incorporated into your theme.
|
||||
|
||||
**Important**: If you depend on another theme, make sure that your theme specifically states this in its ``package.json``. For example, for the above theme, as we depend on ``nodebb-theme-vanilla``, we would explicitly state this by adding a new section into the ``package.json`` file:
|
||||
|
||||
.. code:: json
|
||||
|
||||
"peerDependencies": {
|
||||
"nodebb-theme-vanilla": "~0.0.1"
|
||||
}
|
||||
194
docs/themes/templates.rst
vendored
Normal file
194
docs/themes/templates.rst
vendored
Normal file
@@ -0,0 +1,194 @@
|
||||
Rendering Engine
|
||||
=================
|
||||
|
||||
How it works
|
||||
------------------------------------------------------
|
||||
|
||||
Every page has an associated API call, Template file, and Language File.
|
||||
|
||||
For example, if you navigate to `/topic/351/nodebb-wiki <http://community.nodebb.org/topic/351/nodebb-wiki>`_, the application will load three resources. The API return `/api/topic/351/nodebb-wiki <http://community.nodebb.org/api/topic/351/nodebb-wiki>`_ and the `template <http://community.nodebb.org/templates/topic.tpl>`_, in this example, "topic.tpl", and the appropriate `language file <community.nodebb.org/language/en_GB/topic.json>`_ "topic.json"*.
|
||||
|
||||
Just prepend api/ to the URL's path name to discover the JSON return. Any value in that return can be utilized in your template.
|
||||
|
||||
*A page's name corresponds to the template and language's filename (ex. ``http://domain.com/topic/xyz`` correlates to ``topic.tpl``). Sometimes this is not the case - ex. ``/user/xyz`` loads ``account.tpl``. Have a look at the ``custom_mapping`` section in ``public/templates/config.json`` for more details.
|
||||
|
||||
Templating Basics
|
||||
------------------------------------------------------
|
||||
|
||||
Using the API return as your guide, you can utilize any of those values in your template/logic. Using the above API call as an example, for anything in the root level of the return you can do something like:
|
||||
|
||||
.. code:: html
|
||||
|
||||
{topic_name}
|
||||
|
||||
To access values in objects:
|
||||
|
||||
.. code:: html
|
||||
|
||||
{privileges.read}
|
||||
|
||||
And finally you can loop through arrays and create blocks like so:
|
||||
|
||||
.. code:: html
|
||||
|
||||
<!-- BEGIN posts -->
|
||||
{posts.content}
|
||||
<!-- END posts -->
|
||||
|
||||
|
||||
The above will create X copies of the above block, for each item in the posts array.
|
||||
|
||||
Templating Logic
|
||||
------------------------------------------------------
|
||||
|
||||
NodeBB's templating system implements some basic logic. Using the same API call as above for our example. You can write IF conditionals like so:
|
||||
|
||||
.. code:: html
|
||||
|
||||
<!-- IF unreplied -->
|
||||
This thread is unreplied!
|
||||
<!-- ENDIF unreplied -->
|
||||
|
||||
|
||||
Another example:
|
||||
|
||||
.. code:: html
|
||||
|
||||
<!-- IF !disableSocialButtons -->
|
||||
<button>Share on Facebook</button>
|
||||
<!-- ELSE -->
|
||||
Sharing has been disabled.
|
||||
<!-- ENDIF !disableSocialButtons -->
|
||||
|
||||
|
||||
We can check for the length of an array like so:
|
||||
|
||||
.. code:: html
|
||||
|
||||
<!-- IF posts.length -->
|
||||
There be some posts
|
||||
<!-- ENDIF posts.length -->
|
||||
|
||||
|
||||
While looping through an array, we can check if our current index is the @first or @last like so:
|
||||
|
||||
.. code:: html
|
||||
|
||||
<!-- BEGIN posts -->
|
||||
<!-- IF @first -->
|
||||
<h1>Main Author: {posts.username}</h1>
|
||||
<!-- ENDIF @first -->
|
||||
{posts.content}
|
||||
<!-- IF @last -->
|
||||
End of posts. Click here to scroll to the top.
|
||||
<!-- ENDIF @last -->
|
||||
<!-- END posts -->
|
||||
|
||||
|
||||
For more advanced documentation, have a look at the `templates.js <https://github.com/psychobunny/templates.js>`_ repository
|
||||
|
||||
|
||||
Exposing template variables to client-side JavaScript
|
||||
------------------------------------------------------
|
||||
|
||||
There are two ways of letting our JS know about data from the server-side, apart from WebSockets (TODO: will be covered in a different article).
|
||||
|
||||
Via jQuery.get
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
If we require data from a different page we can make a ``$.get`` call to any other API call. For example, if we wanted to know more about a specific user we could make a call like so:
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
$.get(RELATIVE_PATH + '/api/user/psychobunny', {}, function(user) {
|
||||
console.log(user)
|
||||
});
|
||||
|
||||
|
||||
See this API call in action: http://community.nodebb.org/api/user/psychobunny
|
||||
|
||||
Via Template Variables
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
In topic.tpl for example, we can add a hidden input like so:
|
||||
|
||||
.. code:: html
|
||||
|
||||
<input type="hidden" template-variable="pageCount" value="{pageCount}" />
|
||||
|
||||
The template system will immediately parse all of these and expose them via the following method:
|
||||
|
||||
.. code:: html
|
||||
|
||||
ajaxify.variables.get('pageCount');
|
||||
|
||||
This is the ideal method of letting JS know about important variables within the template.
|
||||
|
||||
Internationalization
|
||||
---------------------
|
||||
|
||||
The template engine interfaces with the internationalization system as well. We can embed variables into language strings. Let's use `this API call <http://community.nodebb.org/api/register>`_ as well as this `language file <http://community.nodebb.org/language/en_GB/register.json>`_ as an example. We can now do something like the following:
|
||||
|
||||
.. code:: html
|
||||
|
||||
[[register:help.username_restrictions, {minimumUsernameLength}, {maximumUsernameLength}]]
|
||||
|
||||
Which will translate this string:
|
||||
|
||||
.. code:: html
|
||||
|
||||
A unique username between %1 and %2 characters
|
||||
|
||||
to
|
||||
|
||||
.. code:: html
|
||||
|
||||
A unique username between 2 and 16 characters
|
||||
|
||||
Advanced Topics
|
||||
---------------------
|
||||
|
||||
Dynamically requiring and rendering a template file from client-side JavaScript
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The template engine lazy loads templates on an as-needed basis and caches them. If your code requires a template or partial on-demand then you can :
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
ajaxify.loadTemplate('myTemplate', function(myTemplate) {
|
||||
var html = templates.parse(myTemplate, myData);
|
||||
});
|
||||
|
||||
|
||||
You can also access the invidual blocks inside each template, which is handy for doing things like (for example) rendering a new post's ``<li>`` and dynamically sticking it in an already loaded ``<ul>``
|
||||
|
||||
.. code:: html
|
||||
|
||||
Some stuff here...
|
||||
<!-- BEGIN posts -->
|
||||
We just want to pull this block only.
|
||||
<!-- END posts -->
|
||||
... some stuff here
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
ajaxify.loadTemplate('myTemplate', function(myTemplate) {
|
||||
var block = templates.getBlock(myTemplate, 'posts');
|
||||
var html = templates.parse(block, myData);
|
||||
});
|
||||
|
||||
|
||||
Rendering templates on server-side Node.js
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The templating system hooks into Express just like most other templating frameworks. Just use either ``app.render`` or ``res.render`` to parse the appropriate template.
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
res.render('myTemplate', myData);
|
||||
|
||||
.. code:: javascript
|
||||
|
||||
app.render('myTemplate', myData, function(err, parsedTemplate) {
|
||||
console.log(parsedTemplate);
|
||||
});
|
||||
148
docs/upgrading/index.rst
Normal file
148
docs/upgrading/index.rst
Normal file
@@ -0,0 +1,148 @@
|
||||
Upgrading NodeBB
|
||||
======================
|
||||
|
||||
NodeBB's periodic releases are located in the `Releases <https://github.com/designcreateplay/NodeBB/releases>`_. These releases contain what is usually considered the most bug-free code, and is designed to be used on production-level instances of NodeBB.
|
||||
|
||||
You can utilise git to install a specific version of NodeBB, and upgrade periodically as new releases are made.
|
||||
|
||||
To obtain the latest fixes and features, you can also ``git clone`` the latest version directly from the repository (``master`` branch), although its stability cannot be guaranteed. Core developers will attempt to ensure that every commit results in a working client, even if individual features may not be 100% complete.
|
||||
|
||||
***As always***, the NodeBB team is not responsible for any misadventures, loss of data, data corruption, or any other bad things that may arise due to a botched upgrade - so please **don't forget to back up** before beginning!
|
||||
|
||||
Upgrade Path
|
||||
-------------------
|
||||
|
||||
NodeBB's upgrade path is designed so that upgrading between versions is straightforward. NodeBB will provide upgrade compatibility (via the ``--upgrade`` flag) between the latest version of a lower branch and the latest version of the higher branch. For example, if ``v0.2.2`` is the latest version in the ``v0.2.x`` branch, you can switch to the ``v0.3.x`` branch and suffer no ill effects. Upgrading from ``v0.2.0`` to ``v0.3.x`` is not supported, and NodeBB will warn you when attempting to upgrade that you are not upgrading cleanly.
|
||||
|
||||
Upgrading between patch revisions
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
*e.g. v0.1.0 to v0.1.1*
|
||||
|
||||
Patch revisions contain bugfixes and other minor changes. Updating to the latest version of code for your specific version branch is all that is usually required.
|
||||
|
||||
**Execute steps 1 through 3.**
|
||||
|
||||
Upgrading between minor revisions
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
*e.g. v0.1.3 to v0.2.0*
|
||||
|
||||
Minor revisions contain new features or substantial changes that are still backwards compatible. They may also contain dependent packages that require upgrading, and other features may be deprecated (but would ideally still be supported).
|
||||
|
||||
Execute steps 1 through 4.
|
||||
|
||||
.. (the block below was commented out in original, so I'm leaving it commented out)
|
||||
Upgrading between major revisions
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
*e.g. v0.2.4 to v1.0.0*
|
||||
|
||||
Major revisions contain breaking changes that are done in a backwards incompatible manner. Complete rewrites of core functionality are not uncommon. In all cases, NodeBB will attempt to provide migration tools so that a transition is possible.
|
||||
|
||||
Execute all of the steps.
|
||||
|
||||
Upgrade Steps
|
||||
-------------------
|
||||
|
||||
**Note**: After upgrading between revisions (i.e. v0.0.4 to v0.0.5), it may be necessary to run the following upgrade steps to ensure that any data schema changes are properly upgraded as well:
|
||||
|
||||
1. Shut down your forum
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
While it is possible to upgrade NodeBB while it is running, it is definitely not recommended, particularly if it is an active forum:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ cd /path/to/nodebb
|
||||
$ ./nodebb stop
|
||||
|
||||
|
||||
2. Back up your data
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. note::
|
||||
|
||||
This section is incomplete, please take care to back up your files properly!
|
||||
|
||||
|
||||
Backing up Redis
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
As with all upgrades, the first step is to **back up your data**! Nobody likes database corruption/misplacement.
|
||||
|
||||
All of the textual data stored in NodeBB is found in a ``.rdb`` file. On typical installs of Redis, the main database is found at ``/var/lib/redis/dump.rdb``.
|
||||
|
||||
**Store this file somewhere safe.**
|
||||
|
||||
Backing up MongoDB
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
TBA
|
||||
|
||||
Backing up LevelDB
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
As LevelDB is simply a collection of flat files, just copy the database over to a safe location, ex.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
cp -r /path/to/db /path/to/backups
|
||||
|
||||
**Store this file somewhere safe.**
|
||||
|
||||
Avatars
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
Uploaded images (avatars) are stored in /public/uploads. Feel free to back up this folder too:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
cd /path/to/nodebb/public
|
||||
tar -czf ~/nodebb_assets.tar.gz ./uploads
|
||||
|
||||
3. Grab the latest and greatest code
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Navigate to your NodeBB: ``$ cd /path/to/nodebb``.
|
||||
|
||||
If you are upgrading from a lower branch to a higher branch, switch branches as necessary. ***Make sure you are completely up-to-date on your current branch!***.
|
||||
|
||||
For example, if upgrading from ``v0.1.4`` to ``v0.2.0``:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ git fetch # Grab the latest code from your current branch
|
||||
$ git checkout v0.2.x
|
||||
|
||||
If not upgrading between branches, skip the commands above.
|
||||
|
||||
Then, grab the latest code:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ git pull
|
||||
|
||||
This should retrieve the latest (and greatest) version of NodeBB from the repository.
|
||||
|
||||
Alternatively, download and extract the latest versioned copy of the code from `the Releases Page <https://github.com/designcreateplay/NodeBB/releases>`_. Overwrite any files as necessary. This method is not supported.
|
||||
|
||||
4. Run the NodeBB upgrade script
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
This script will install any missing dependencies, upgrade any plugins or themes (if an upgrade is available), and migrate the database if necessary.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ ./nodebb upgrade
|
||||
|
||||
**Note**: ``./nodebb upgrade`` is only available after v0.3.0. If you are running an earlier version, run these instead:
|
||||
|
||||
* ``npm install``
|
||||
* ``ls -d node_modules/nodebb* | xargs -n1 basename | xargs npm update``
|
||||
* ``node app --upgrade``
|
||||
|
||||
6. Start up NodeBB & Test!
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
You should now be running the latest version of NodeBB.
|
||||
78
docs/widgets/create.rst
Normal file
78
docs/widgets/create.rst
Normal file
@@ -0,0 +1,78 @@
|
||||
Writing Widgets for NodeBB
|
||||
==========================
|
||||
|
||||
See the original `blog post <http://blog.nodebb.org/widgets-system/>`_ for a high level overview and screenshots of the widget system.
|
||||
|
||||
Embedding HTML and JavaScript
|
||||
-----------------------------
|
||||
|
||||
You don't need to be a developer to figure this out. Head over to the Themes control panel and click on the Widgets tab. Create a new HTML widget by dragging and dropping the widget onto whatever template you want.
|
||||
|
||||
Copy and paste HTML or JavaScript into the widget and hit save - you're done!
|
||||
|
||||
You can optionally give your widget a container by dragging and dropping from the containers section onto your selected widget.
|
||||
|
||||
If you're looking for some sample scripts, head over to our `plugins section <http://community.nodebb.org/category/7/nodebb-plugins>`_ and look for any topic labelled ``nodebb-script-xyz``. Don't forget to submit your scripts and ideas as well!
|
||||
|
||||
|
||||
Creating Widgets
|
||||
-----------------------------
|
||||
|
||||
You can define widgets in both plugins and themes. If you're building a plugin which simply delivers a widget (or collection of widgets), we strongly suggest you follow the ``nodebb-widget-xyz`` nomenclature instead when publishing.
|
||||
|
||||
Registering your widget
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Listen to this hook to register your widget:
|
||||
|
||||
.. code:: json
|
||||
|
||||
"hook": "filter:widgets.getWidgets", "method": "defineWidgets", "callbacked": true
|
||||
|
||||
Pass this back in the array:
|
||||
|
||||
.. code:: json
|
||||
{
|
||||
widget: "widget_namespace",
|
||||
name: "My Widget",
|
||||
description: "Short description of what it does.",
|
||||
content: "<input type=\"text\" name=\"myKey\" class=\"form-control\" />"
|
||||
}
|
||||
|
||||
|
||||
``Content`` defines the form that is displayed to customize your widget in the admin panel.
|
||||
|
||||
Listening to your widget
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
NodeBB core will call your widget on the appropriate page load by way of the hooks system. The hook will be named after your widget's namespace (see previous example) - like so: ``filter:widget.render:widget_namespace``
|
||||
|
||||
This will pass in an object with the following useful properties:
|
||||
|
||||
* ``obj.area`` - will have ``location``, ``template``, ``url``
|
||||
* ``obj.data`` - will have your admin-defined data; in the example from the previous section you will be exposed an ``obj.data.myKey``
|
||||
|
||||
Defining Widget Areas in Themes
|
||||
------------------------------------
|
||||
|
||||
A Widget Area is characterized by a template and a location. Themes can share widgets if they define the same Widget Areas. If an admin switches themes, widgets that were previously defined in a Widget Area incompatible with the new theme are saved.
|
||||
|
||||
Listen to this hook to register your Widget Area:
|
||||
|
||||
.. code:: json
|
||||
|
||||
"hook": "filter:widgets.getAreas", "method": "defineWidgetAreas", "callbacked": true
|
||||
|
||||
Pass this back in the array:
|
||||
|
||||
.. code:: json
|
||||
|
||||
{
|
||||
name: "Category Sidebar",
|
||||
template: "category.tpl",
|
||||
location: "sidebar"
|
||||
}
|
||||
|
||||
|
||||
And that's all. You can define as many Widget Areas in your theme as you wish. If you're still stuck, have a look at `this commit <https://github.com/designcreateplay/nodebb-theme-cerulean/commit/50e49a9da5a89484fa8001bbda2e613b69f18e86>`_ which upgraded the Cerulean theme to use the widget system.
|
||||
|
||||
1
feeds/categories/.gitignore
vendored
1
feeds/categories/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
*.rss
|
||||
1
feeds/topics/.gitignore
vendored
1
feeds/topics/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
*.rss
|
||||
@@ -1,74 +1,98 @@
|
||||
[
|
||||
[
|
||||
{
|
||||
"name": "Announcements",
|
||||
"description": "A place to talk about whateeeever you want",
|
||||
"blockclass": "category-blue",
|
||||
"icon" : "icon-bullhorn"
|
||||
"description": "Announcements regarding our community",
|
||||
"bgColor": "#0059B2",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-bullhorn",
|
||||
"order": 1
|
||||
},
|
||||
{
|
||||
"name": "General Discussion",
|
||||
"description": "A place to talk about whateeeever you want",
|
||||
"blockclass": "category-blue",
|
||||
"icon" : "icon-comment"
|
||||
"bgColor": "#0059B2",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-comment",
|
||||
"order": 2
|
||||
},
|
||||
{
|
||||
"name": "NodeBB Development",
|
||||
"description": "Bugs? Dont worry, we dont read this thread, so post them here.",
|
||||
"blockclass": "category-blue",
|
||||
"icon" : "icon-github"
|
||||
"description": "NodeBB development news and announcements",
|
||||
"bgColor": "#0059B2",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-github",
|
||||
"order": 3
|
||||
},
|
||||
{
|
||||
"name": "Blogs",
|
||||
"description": "In future an example of how a hidden category should look like.",
|
||||
"blockclass": "category-blue",
|
||||
"icon" : "icon-pencil"
|
||||
"description": "Blog posts from individual members",
|
||||
"bgColor": "#0059B2",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-pencil",
|
||||
"order": 4
|
||||
},
|
||||
{
|
||||
"name": "Feature Requests",
|
||||
"description": "In future an example of how a hidden category should look like.",
|
||||
"blockclass": "category-purple",
|
||||
"icon" : "icon-lightbulb"
|
||||
"description": "Got a feature request you'd like to see? Give us a shout here.",
|
||||
"bgColor": "#ab1290",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-lightbulb-o",
|
||||
"order": 5
|
||||
},
|
||||
{
|
||||
"name": "Bug Reports",
|
||||
"description": "In future an example of how a hidden category should look like.",
|
||||
"blockclass": "category-purple",
|
||||
"icon" : "icon-cogs"
|
||||
"description": "Having trouble with NodeBB? Let us know...",
|
||||
"bgColor": "#ab1290",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-cogs",
|
||||
"order": 6
|
||||
},
|
||||
{
|
||||
"name": "NodeBB Addons",
|
||||
"description": "In future an example of how a hidden category should look like.",
|
||||
"blockclass": "category-purple",
|
||||
"icon" : "icon-plus-sign"
|
||||
"name": "NodeBB Plugins",
|
||||
"description": "Enhance your NodeBB with plugins!",
|
||||
"bgColor": "#ab1290",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-plus-square",
|
||||
"order": 7
|
||||
},
|
||||
{
|
||||
"name": "NodeBB Link Exchange",
|
||||
"description": "In future an example of how a hidden category should look like.",
|
||||
"blockclass": "category-purple",
|
||||
"icon" : "icon-exchange"
|
||||
"description": "Link exchange",
|
||||
"bgColor": "#ab1290",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-exchange",
|
||||
"order": 8
|
||||
},
|
||||
{
|
||||
"name": "News",
|
||||
"description": "In future an example of how a hidden category should look like.",
|
||||
"blockclass": "category-darkblue",
|
||||
"icon" : "icon-globe"
|
||||
"description": "News from around the world",
|
||||
"bgColor": "#004C66",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-globe",
|
||||
"order": 9
|
||||
},
|
||||
{
|
||||
"name": "Movies",
|
||||
"description": "In future an example of how a hidden category should look like.",
|
||||
"blockclass": "category-darkblue",
|
||||
"icon" : "icon-film"
|
||||
"description": "Discuss the latest movies here",
|
||||
"bgColor": "#004C66",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-film",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"name": "Games",
|
||||
"description": "In future an example of how a hidden category should look like.",
|
||||
"blockclass": "category-darkblue",
|
||||
"icon" : "icon-screenshot"
|
||||
"description": "Discuss the latest games here",
|
||||
"bgColor": "#004C66",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-crosshairs",
|
||||
"order": 11
|
||||
},
|
||||
{
|
||||
"name": "Random",
|
||||
"description": "In future an example of how a hidden category should look like.",
|
||||
"blockclass": "category-darkblue",
|
||||
"icon" : "icon-beer"
|
||||
"description": "Anything and (almost) everything welcome!",
|
||||
"bgColor": "#004C66",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-beer",
|
||||
"order": 12
|
||||
}
|
||||
]
|
||||
74
install/data/defaults.json
Normal file
74
install/data/defaults.json
Normal file
@@ -0,0 +1,74 @@
|
||||
[
|
||||
{
|
||||
"field": "title",
|
||||
"value": "NodeBB"
|
||||
},
|
||||
{
|
||||
"field": "postDelay",
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"field": "minimumPostLength",
|
||||
"value": 8
|
||||
},
|
||||
{
|
||||
"field": "allowGuestPosting",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"field": "allowGuestSearching",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"field": "allowTopicsThumbnail",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"field": "allowRegistration",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"field": "allowLocalLogin",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"field": "allowFileUploads",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"field": "maximumFileSize",
|
||||
"value": 2048
|
||||
},
|
||||
{
|
||||
"field": "minimumTitleLength",
|
||||
"value": 3
|
||||
},
|
||||
{
|
||||
"field": "maximumTitleLength",
|
||||
"value": 255
|
||||
},
|
||||
{
|
||||
"field": "minimumUsernameLength",
|
||||
"value": 2
|
||||
},
|
||||
{
|
||||
"field": "maximumUsernameLength",
|
||||
"value": 16
|
||||
},
|
||||
{
|
||||
"field": "minimumPasswordLength",
|
||||
"value": 6
|
||||
},
|
||||
{
|
||||
"field": "maximumSignatureLength",
|
||||
"value": 255
|
||||
},
|
||||
{
|
||||
"field": "maximumProfileImageSize",
|
||||
"value": 256
|
||||
},
|
||||
{
|
||||
"field": "chatMessagesToDisplay",
|
||||
"value": 50
|
||||
}
|
||||
]
|
||||
113
install/databases.js
Normal file
113
install/databases.js
Normal file
@@ -0,0 +1,113 @@
|
||||
"use strict";
|
||||
|
||||
var async = require('async'),
|
||||
prompt = require('prompt'),
|
||||
nconf = require('nconf'),
|
||||
winston = require('winston'),
|
||||
|
||||
questions = {};
|
||||
|
||||
function success(err, config, callback) {
|
||||
if (!config) {
|
||||
return callback(new Error('aborted'));
|
||||
}
|
||||
|
||||
var database = (config.redis || config.mongo || config.level) ? config.secondary_database : config.database;
|
||||
|
||||
function dbQuestionsSuccess(err, databaseConfig) {
|
||||
if (!databaseConfig) {
|
||||
return callback(new Error('aborted'));
|
||||
}
|
||||
|
||||
// Translate redis properties into redis object
|
||||
if(database === 'redis') {
|
||||
config.redis = {
|
||||
host: databaseConfig['redis:host'],
|
||||
port: databaseConfig['redis:port'],
|
||||
password: databaseConfig['redis:password'],
|
||||
database: databaseConfig['redis:database']
|
||||
};
|
||||
|
||||
if (config.redis.host.slice(0, 1) === '/') {
|
||||
delete config.redis.port;
|
||||
}
|
||||
} else if (database === 'mongo') {
|
||||
config.mongo = {
|
||||
host: databaseConfig['mongo:host'],
|
||||
port: databaseConfig['mongo:port'],
|
||||
username: databaseConfig['mongo:username'],
|
||||
password: databaseConfig['mongo:password'],
|
||||
database: databaseConfig['mongo:database']
|
||||
};
|
||||
} else if (database === 'level') {
|
||||
config.level = {
|
||||
database: databaseConfig['level:database']
|
||||
};
|
||||
} else {
|
||||
return callback(new Error('unknown database : ' + database));
|
||||
}
|
||||
|
||||
var allQuestions = questions.redis.concat(questions.mongo.concat(questions.level));
|
||||
for(var x=0;x<allQuestions.length;x++) {
|
||||
delete config[allQuestions[x].name];
|
||||
}
|
||||
|
||||
callback(err, config);
|
||||
}
|
||||
|
||||
if(database === 'redis') {
|
||||
if (config['redis:host'] && config['redis:port']) {
|
||||
dbQuestionsSuccess(null, config);
|
||||
} else {
|
||||
prompt.get(questions.redis, dbQuestionsSuccess);
|
||||
}
|
||||
} else if(database === 'mongo') {
|
||||
if (config['mongo:host'] && config['mongo:port']) {
|
||||
dbQuestionsSuccess(null, config);
|
||||
} else {
|
||||
prompt.get(questions.mongo, dbQuestionsSuccess);
|
||||
}
|
||||
} else if(database === 'level') {
|
||||
if (config['level:database']) {
|
||||
dbQuestionsSuccess(null, config);
|
||||
} else {
|
||||
prompt.get(questions.level, dbQuestionsSuccess);
|
||||
}
|
||||
} else {
|
||||
return callback(new Error('unknown database : ' + database));
|
||||
}
|
||||
}
|
||||
|
||||
function getSecondaryDatabaseModules(config, next) {
|
||||
prompt.get({
|
||||
"name": "secondary_db_modules",
|
||||
"description": "Which database modules should " + config.secondary_database + " store?",
|
||||
"default": nconf.get('secondary_db_modules') || "hash, list, sets, sorted"
|
||||
}, function(err, db) {
|
||||
config.secondary_db_modules = db.secondary_db_modules;
|
||||
success(err, config, next);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = function(err, config, databases, callback) {
|
||||
var allowedDBs = Object.keys(databases);
|
||||
|
||||
allowedDBs.forEach(function(db) {
|
||||
questions[db] = require('./../src/database/' + db).questions;
|
||||
});
|
||||
|
||||
async.waterfall([
|
||||
function(next) {
|
||||
winston.info('Now configuring ' + config.database + ' database:');
|
||||
success(err, config, next);
|
||||
},
|
||||
function(config, next) {
|
||||
winston.info('Now configuring ' + config.secondary_database + ' database:');
|
||||
if (config.secondary_database && allowedDBs.indexOf(config.secondary_database) !== -1) {
|
||||
getSecondaryDatabaseModules(config, next);
|
||||
} else {
|
||||
next(err, config);
|
||||
}
|
||||
}
|
||||
], callback);
|
||||
};
|
||||
101
loader.js
Normal file
101
loader.js
Normal file
@@ -0,0 +1,101 @@
|
||||
"use strict";
|
||||
|
||||
var nconf = require('nconf'),
|
||||
fs = require('fs'),
|
||||
pidFilePath = __dirname + '/pidfile',
|
||||
output = fs.openSync(__dirname + '/logs/output.log', 'a'),
|
||||
start = function() {
|
||||
var fork = require('child_process').fork,
|
||||
nbb_start = function() {
|
||||
if (timesStarted > 3) {
|
||||
console.log('\n[loader] Experienced three start attempts in 10 seconds, most likely an error on startup. Halting.');
|
||||
return nbb_stop();
|
||||
}
|
||||
|
||||
timesStarted++;
|
||||
if (startTimer) {
|
||||
clearTimeout(startTimer);
|
||||
}
|
||||
startTimer = setTimeout(resetTimer, 1000*10);
|
||||
|
||||
nbb = fork('./app', process.argv.slice(2), {
|
||||
env: {
|
||||
'NODE_ENV': process.env.NODE_ENV
|
||||
}
|
||||
});
|
||||
|
||||
nbb.on('message', function(message) {
|
||||
if (message && typeof message === 'object' && message.action) {
|
||||
if (message.action === 'restart') {
|
||||
nbb_restart();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
nbb.on('exit', function(code, signal) {
|
||||
if (code) {
|
||||
nbb_start();
|
||||
} else {
|
||||
nbb_stop();
|
||||
}
|
||||
});
|
||||
},
|
||||
nbb_stop = function() {
|
||||
if (startTimer) {
|
||||
clearTimeout(startTimer);
|
||||
}
|
||||
|
||||
nbb.kill();
|
||||
if (fs.existsSync(pidFilePath)) {
|
||||
var pid = parseInt(fs.readFileSync(pidFilePath, { encoding: 'utf-8' }), 10);
|
||||
if (process.pid === pid) {
|
||||
fs.unlinkSync(pidFilePath);
|
||||
}
|
||||
}
|
||||
},
|
||||
nbb_restart = function() {
|
||||
nbb.removeAllListeners('exit').on('exit', function() {
|
||||
nbb_start();
|
||||
});
|
||||
nbb.kill();
|
||||
},
|
||||
resetTimer = function() {
|
||||
clearTimeout(startTimer);
|
||||
timesStarted = 0;
|
||||
},
|
||||
timesStarted = 0,
|
||||
startTimer;
|
||||
|
||||
process.on('SIGINT', nbb_stop);
|
||||
process.on('SIGTERM', nbb_stop);
|
||||
process.on('SIGHUP', nbb_restart);
|
||||
|
||||
nbb_start();
|
||||
},
|
||||
nbb;
|
||||
|
||||
nconf.argv();
|
||||
|
||||
// Start the daemon!
|
||||
if (nconf.get('daemon') !== false) {
|
||||
// Check for a still-active NodeBB process
|
||||
if (fs.existsSync(pidFilePath)) {
|
||||
try {
|
||||
var pid = fs.readFileSync(pidFilePath, { encoding: 'utf-8' });
|
||||
process.kill(pid, 0);
|
||||
process.exit();
|
||||
} catch (e) {
|
||||
fs.unlinkSync(pidFilePath);
|
||||
}
|
||||
}
|
||||
|
||||
// Daemonize and record new pid
|
||||
require('daemon')({
|
||||
stdout: output
|
||||
});
|
||||
fs.writeFile(__dirname + '/pidfile', process.pid);
|
||||
|
||||
start();
|
||||
} else {
|
||||
start();
|
||||
}
|
||||
1
logs/.gitignore
vendored
Normal file
1
logs/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.log
|
||||
58
minifier.js
Normal file
58
minifier.js
Normal file
@@ -0,0 +1,58 @@
|
||||
var uglifyjs = require('uglify-js'),
|
||||
less = require('less'),
|
||||
async = require('async'),
|
||||
fs = require('fs'),
|
||||
|
||||
Minifier = {
|
||||
js: {},
|
||||
css: {}
|
||||
};
|
||||
|
||||
/* Javascript */
|
||||
Minifier.js.minify = function (scripts, callback) {
|
||||
try {
|
||||
var minified = uglifyjs.minify(scripts);
|
||||
callback(minified.code);
|
||||
} catch(err) {
|
||||
process.send({
|
||||
action: 'error',
|
||||
error: err
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Minifier.js.concatenate = function(scripts, callback) {
|
||||
async.map(scripts, function(path, next) {
|
||||
fs.readFile(path, { encoding: 'utf-8' }, next);
|
||||
}, function(err, contents) {
|
||||
if (err) {
|
||||
process.send({
|
||||
action: 'error',
|
||||
error: err
|
||||
});
|
||||
} else {
|
||||
callback(contents.reduce(function(output, src) {
|
||||
return output.length ? output + ';\n' + src : src;
|
||||
}, ''));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
process.on('message', function(payload) {
|
||||
var executeCallback = function(data) {
|
||||
process.send({
|
||||
action: payload.action,
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
switch(payload.action) {
|
||||
case 'js.minify':
|
||||
Minifier.js.minify(payload.scripts, executeCallback);
|
||||
break;
|
||||
|
||||
case 'js.concatenate':
|
||||
Minifier.js.concatenate(payload.scripts, executeCallback);
|
||||
break;
|
||||
}
|
||||
})
|
||||
100
mocks/databasemock.js
Normal file
100
mocks/databasemock.js
Normal file
@@ -0,0 +1,100 @@
|
||||
/**
|
||||
* Database Mock - wrapper for database.js, makes system use separate test db, instead of production
|
||||
* ATTENTION: testing db is flushed before every use!
|
||||
*/
|
||||
|
||||
(function(module) {
|
||||
'use strict';
|
||||
/*global before*/
|
||||
|
||||
var utils = require('./../public/src/utils.js'),
|
||||
path = require('path'),
|
||||
nconf = require('nconf'),
|
||||
winston = require('winston'),
|
||||
errorText;
|
||||
|
||||
|
||||
nconf.file({ file: path.join(__dirname, '../config.json') });
|
||||
nconf.defaults({
|
||||
base_dir: path.join(__dirname,'..'),
|
||||
themes_path: path.join(__dirname, '../node_modules'),
|
||||
upload_url: path.join(path.sep, '../uploads', path.sep),
|
||||
views_dir: path.join(__dirname, '../public/templates')
|
||||
});
|
||||
|
||||
var dbType = nconf.get('database'),
|
||||
testDbConfig = nconf.get('test_database'),
|
||||
productionDbConfig = nconf.get(dbType);
|
||||
|
||||
if(!testDbConfig){
|
||||
errorText = 'test_database is not defined';
|
||||
winston.info(
|
||||
"\n===========================================================\n"+
|
||||
"Please, add parameters for test database in config.json\n"+
|
||||
"For example (redis):\n"+
|
||||
'"test_database": {' + '\n' +
|
||||
' "host": "127.0.0.1",' + '\n' +
|
||||
' "port": "6379",' + '\n' +
|
||||
' "password": "",' + '\n' +
|
||||
' "database": "1"' + '\n' +
|
||||
'}\n'+
|
||||
" or (mongo):\n" +
|
||||
'"test_database": {' + '\n' +
|
||||
' "host": "127.0.0.1",' + '\n' +
|
||||
' "port": "27017",' + '\n' +
|
||||
' "password": "",' + '\n' +
|
||||
' "database": "1"' + '\n' +
|
||||
'}\n'+
|
||||
" or (level):\n" +
|
||||
'"test_database": {' + '\n' +
|
||||
' "database": "/path/to/database"' + '\n' +
|
||||
'}\n'+
|
||||
"==========================================================="
|
||||
);
|
||||
winston.error(errorText);
|
||||
throw new Error(errorText);
|
||||
}
|
||||
|
||||
if( testDbConfig.database === productionDbConfig.database &&
|
||||
testDbConfig.host === productionDbConfig.host &&
|
||||
testDbConfig.port === productionDbConfig.port
|
||||
){
|
||||
errorText = 'test_database has the same config as production db';
|
||||
winston.error(errorText);
|
||||
throw new Error(errorText);
|
||||
}
|
||||
|
||||
nconf.set(dbType, testDbConfig);
|
||||
|
||||
var db = require('../src/database'),
|
||||
meta = require('../src/meta');
|
||||
|
||||
before(function(done) {
|
||||
db.init(function(err) {
|
||||
//Clean up
|
||||
db.flushdb(function(err) {
|
||||
if(err) {
|
||||
winston.error(err);
|
||||
throw new Error(err);
|
||||
}
|
||||
|
||||
winston.info('test_database flushed');
|
||||
|
||||
meta.configs.init(function () {
|
||||
nconf.set('url', nconf.get('base_url') + (nconf.get('use_port') ? ':' + nconf.get('port') : '') + nconf.get('relative_path'));
|
||||
nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-vanilla/templates'));
|
||||
nconf.set('theme_templates_path', meta.config['theme:templates'] ? path.join(nconf.get('themes_path'), meta.config['theme:id'], meta.config['theme:templates']) : nconf.get('base_templates_path'));
|
||||
|
||||
var webserver = require('../src/webserver'),
|
||||
sockets = require('../src/socket.io');
|
||||
sockets.init(webserver.server);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = db;
|
||||
|
||||
}(module));
|
||||
134
nodebb
134
nodebb
@@ -1,6 +1,130 @@
|
||||
#!/bin/bash
|
||||
clear
|
||||
echo "Launching NodeBB in \"development\" mode."
|
||||
echo "To run the production build of NodeBB, please use \"forever\"."
|
||||
echo "More Information: https://github.com/designcreateplay/NodeBB/wiki/How-to-run-NodeBB"
|
||||
NODE_ENV=development supervisor --extensions 'node|js|tpl' -- app $1
|
||||
|
||||
# $0 script path
|
||||
# $1 action
|
||||
# $2 subaction
|
||||
|
||||
node="$(which nodejs 2>/dev/null)";
|
||||
if [ $? -gt 0 ];
|
||||
then node="$(which node)";
|
||||
fi
|
||||
|
||||
function pidExists() {
|
||||
if [ -e "pidfile" ];
|
||||
then
|
||||
kill -s 0 $(cat pidfile);
|
||||
if [ !$? ];
|
||||
then return 1;
|
||||
else return 0;
|
||||
fi
|
||||
else
|
||||
return 0;
|
||||
fi
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
echo "Starting NodeBB";
|
||||
echo " \"./nodebb stop\" to stop the NodeBB server";
|
||||
echo " \"./nodebb log\" to view server output";
|
||||
|
||||
if [ -f "./logs/output.log" ]; # Preserve the last output log
|
||||
then
|
||||
mv ./logs/output.log ./logs/output.1.log;
|
||||
fi;
|
||||
|
||||
# Start the loader daemon
|
||||
"$node" loader -d "$@"
|
||||
;;
|
||||
|
||||
stop)
|
||||
pidExists;
|
||||
if [ 0 -eq $? ];
|
||||
then
|
||||
echo "NodeBB is already stopped.";
|
||||
else
|
||||
echo "Stopping NodeBB. Goodbye!";
|
||||
kill $(cat pidfile);
|
||||
fi
|
||||
;;
|
||||
|
||||
reload|restart)
|
||||
pidExists;
|
||||
if [ 0 -eq $? ];
|
||||
then
|
||||
echo "NodeBB could not be restarted, as a running instance could not be found.";
|
||||
else
|
||||
echo "Restarting NodeBB.";
|
||||
kill -1 $(cat pidfile);
|
||||
fi
|
||||
;;
|
||||
|
||||
status)
|
||||
pidExists;
|
||||
if [ 0 -eq $? ];
|
||||
then
|
||||
echo "NodeBB is not running";
|
||||
echo " \"./nodebb start\" to launch the NodeBB server";
|
||||
else
|
||||
echo "NodeBB Running (pid $(cat pidfile))";
|
||||
echo " \"./nodebb stop\" to stop the NodeBB server";
|
||||
echo " \"./nodebb log\" to view server output";
|
||||
echo " \"./nodebb restart\" to restart NodeBB";
|
||||
fi
|
||||
;;
|
||||
|
||||
log)
|
||||
clear;
|
||||
tail -F ./logs/output.log;
|
||||
;;
|
||||
|
||||
upgrade)
|
||||
npm install
|
||||
# ls -d node_modules/nodebb* | xargs -n1 basename | xargs npm install
|
||||
# ls -d node_modules/nodebb* | xargs -n1 basename | xargs npm update
|
||||
npm i nodebb-theme-vanilla nodebb-theme-lavender
|
||||
"$node" app --upgrade
|
||||
touch package.json
|
||||
echo -e "\n\e[00;32mNodeBB Dependencies up-to-date!\e[00;00m";
|
||||
;;
|
||||
|
||||
setup)
|
||||
"$node" app --setup "$@"
|
||||
;;
|
||||
|
||||
reset)
|
||||
"$node" app --reset --$2
|
||||
;;
|
||||
|
||||
dev)
|
||||
echo "Launching NodeBB in \"development\" mode."
|
||||
echo "To run the production build of NodeBB, please use \"forever\"."
|
||||
echo "More Information: https://github.com/designcreateplay/NodeBB/wiki/How-to-run-NodeBB"
|
||||
NODE_ENV=development "$node" loader --no-daemon "$@"
|
||||
;;
|
||||
|
||||
watch)
|
||||
echo "Launching NodeBB in \"development\" mode."
|
||||
echo "To run the production build of NodeBB, please use \"forever\"."
|
||||
echo "More Information: https://github.com/designcreateplay/NodeBB/wiki/How-to-run-NodeBB"
|
||||
NODE_ENV=development supervisor -q --ignore public/templates --extensions 'node|js|tpl|less' -- app "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Welcome to NodeBB"
|
||||
echo $"Usage: $0 {start|stop|reload|restart|log|setup|reset|upgrade|dev|watch}"
|
||||
echo ''
|
||||
column -s ' ' -t <<< '
|
||||
start Start the NodeBB server
|
||||
stop Stops the NodeBB server
|
||||
reload Restarts NodeBB
|
||||
restart Restarts NodeBB
|
||||
log Opens the logging interface (useful for debugging)
|
||||
setup Runs the NodeBB setup script
|
||||
reset Disables all plugins, restores the default theme.
|
||||
upgrade Run NodeBB upgrade scripts, ensure packages are up-to-date
|
||||
dev Start NodeBB in interactive development mode
|
||||
watch Start NodeBB in development mode and watch for changes
|
||||
'
|
||||
exit 1
|
||||
esac
|
||||
|
||||
1190
npm-shrinkwrap.json
generated
Normal file
1190
npm-shrinkwrap.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
79
package.json
79
package.json
@@ -2,40 +2,58 @@
|
||||
"name": "nodebb",
|
||||
"license": "GPLv3 or later",
|
||||
"description": "NodeBB Forum",
|
||||
"version": "0.0.6",
|
||||
"version": "0.4.3",
|
||||
"homepage": "http://www.nodebb.org",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/designcreateplay/NodeBB/"
|
||||
},
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"start": "./nodebb start",
|
||||
"stop": "./nodebb stop",
|
||||
"test": "mocha ./tests -t 10000"
|
||||
},
|
||||
"dependencies": {
|
||||
"socket.io": "0.9.14",
|
||||
"redis": "0.8.3",
|
||||
"express": "3.2.0",
|
||||
"express-namespace": "0.1.1",
|
||||
"emailjs": "0.3.4",
|
||||
"cookie": "0.0.6",
|
||||
"connect-redis": "1.4.5",
|
||||
"passport": "0.1.17",
|
||||
"express-namespace": "~0.1.1",
|
||||
"socket.io": "~0.9.16",
|
||||
"socket.io-wildcard": "~0.1.1",
|
||||
"passport": "~0.2.0",
|
||||
"passport-local": "0.1.6",
|
||||
"passport-twitter": "0.1.5",
|
||||
"passport-google-oauth": "0.1.5",
|
||||
"passport-facebook": "0.1.5",
|
||||
"less-middleware": "0.1.12",
|
||||
"marked": "0.2.8",
|
||||
"bcrypt": "0.7.5",
|
||||
"async": "0.2.8",
|
||||
"node-imagemagick": "0.1.8",
|
||||
"node-rss": "1.0.1",
|
||||
"async": "~0.2.8",
|
||||
"gm": "1.14.2",
|
||||
"gravatar": "1.0.6",
|
||||
"nconf": "~0.6.7",
|
||||
"sitemap": "~0.6.0",
|
||||
"cheerio": "~0.12.0",
|
||||
"request": "~2.25.0",
|
||||
"reds": "~0.2.4",
|
||||
"sitemap": "~0.7.1",
|
||||
"winston": "~0.7.2",
|
||||
"nodebb-plugin-mentions": "~0.1.0"
|
||||
"rss": "~0.2.0",
|
||||
"request": "~2.34.0",
|
||||
"prompt": "~0.2.11",
|
||||
"uglify-js": "~2.4.0",
|
||||
"validator": "~3.4.0",
|
||||
"cron": "~1.0.4",
|
||||
"semver": "~2.2.1",
|
||||
"string": "~1.7.0",
|
||||
"xregexp": "~2.0.0",
|
||||
"bcryptjs": "~0.7.10",
|
||||
"less": "~1.6.3",
|
||||
"daemon": "~1.1.0",
|
||||
"underscore": "~1.6.0",
|
||||
"mkdirp": "~0.3.5",
|
||||
"rimraf": "~2.2.6",
|
||||
"npm": "^1.4.6",
|
||||
"nodebb-plugin-mentions": "~0.4.0",
|
||||
"nodebb-plugin-markdown": "~0.4.1",
|
||||
"nodebb-widget-essentials": "~0.0.21",
|
||||
"nodebb-theme-vanilla": "<0.0.20",
|
||||
"nodebb-theme-lavender": "<0.0.26",
|
||||
"nodebb-plugin-soundpack-default": "~0.1.1",
|
||||
"nodebb-plugin-dbsearch": "0.0.9"
|
||||
},
|
||||
"devDependencies": {
|
||||
"mocha": "~1.13.0"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/designcreateplay/NodeBB/issues"
|
||||
@@ -43,26 +61,21 @@
|
||||
"engines": {
|
||||
"node": ">=0.8"
|
||||
},
|
||||
"contributors": [
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "Andrew Rodrigues",
|
||||
"email": "andrew@designcreateplay.com"
|
||||
"email": "andrew@designcreateplay.com",
|
||||
"url": "https://github.com/psychobunny"
|
||||
},
|
||||
{
|
||||
"name": "Julian Lam",
|
||||
"email": "julian@designcreateplay.com"
|
||||
"email": "julian@designcreateplay.com",
|
||||
"url": "https://github.com/julianlam"
|
||||
},
|
||||
{
|
||||
"name": "Barış Soner Uşaklı",
|
||||
"email": "baris@designcreateplay.com"
|
||||
},
|
||||
{
|
||||
"name": "Damian Bushong",
|
||||
"url": "https://github.com/damianb"
|
||||
},
|
||||
{
|
||||
"name": "Matt Smith",
|
||||
"url": "https://github.com/soimafreak"
|
||||
"email": "baris@designcreateplay.com",
|
||||
"url": "https://github.com/barisusakli"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
0
plugins/.gitignore
vendored
0
plugins/.gitignore
vendored
@@ -1,157 +0,0 @@
|
||||
@import "mixins";
|
||||
|
||||
.admin {
|
||||
.entry-row {
|
||||
border-radius: 10px;
|
||||
margin-bottom: 10px;
|
||||
padding: 10px;
|
||||
cursor: move;
|
||||
}
|
||||
|
||||
input.description {
|
||||
width: 400px;
|
||||
}
|
||||
|
||||
.admin-categories {
|
||||
form {
|
||||
margin: 0 0 0px;
|
||||
}
|
||||
|
||||
input {
|
||||
height: 20px;
|
||||
padding: 5px;
|
||||
margin-left: 10px;
|
||||
width: 150px;
|
||||
border: 0;
|
||||
border-radius: 5px;
|
||||
margin-top: -8px;
|
||||
}
|
||||
|
||||
.category_description {
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
select {
|
||||
border: 0;
|
||||
margin-left: 10px;
|
||||
padding: 5px;
|
||||
margin-top: -8px;
|
||||
}
|
||||
|
||||
button {
|
||||
margin-top: -7px;
|
||||
}
|
||||
|
||||
.icon{
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
text-align: center;
|
||||
line-height: 35px;
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
.themes {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
li {
|
||||
padding: 10px 16px;
|
||||
margin: 0.25em 1em;
|
||||
list-style-type: none;
|
||||
.pointer;
|
||||
-webkit-border-radius: 10px;
|
||||
-moz-border-radius: 10px;
|
||||
border-radius: 10px;
|
||||
-webkit-transition: background-color 250ms linear;
|
||||
-moz-transition: background-color 250ms linear;
|
||||
-ms-transition: background-color 250ms linear;
|
||||
-o-transition: background-color 250ms linear;
|
||||
transition: background-color 250ms linear;
|
||||
|
||||
img {
|
||||
max-width: 150px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
h4, p {
|
||||
margin-left: 170px;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: rgba(128, 128, 128, 0.2);
|
||||
}
|
||||
|
||||
&.no-themes {
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.motd textarea {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.topics {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
> li {
|
||||
.zebra;
|
||||
list-style-type: none;
|
||||
padding: 1em;
|
||||
margin-bottom: 1em;
|
||||
|
||||
ul {
|
||||
margin: 0.5em 0;
|
||||
|
||||
li {
|
||||
list-style-type: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.icon-container {
|
||||
.row {
|
||||
margin: 0;
|
||||
.span3 {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin: 1px;
|
||||
cursor: pointer;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
|
||||
&:hover, &.selected {
|
||||
background: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.plugins {
|
||||
li {
|
||||
list-style-type: none;
|
||||
background: rgba(64, 64, 64, 0.05);
|
||||
padding: 1em;
|
||||
border-left: 5px solid #08c;
|
||||
|
||||
h2 {
|
||||
font-size: 16px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,224 +0,0 @@
|
||||
|
||||
.category {
|
||||
.span9 {
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
|
||||
a {
|
||||
li {
|
||||
list-style: none;
|
||||
//border-bottom: 1px solid #eee;
|
||||
margin-bottom: 10px;
|
||||
padding-bottom: 10px;
|
||||
|
||||
&.deleted {
|
||||
-moz-opacity: 0.30;
|
||||
opacity: 0.30;
|
||||
}
|
||||
}
|
||||
|
||||
&:last-child li {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.thread-rating {
|
||||
color: #444;
|
||||
text-align: center;
|
||||
margin-top: 7px;
|
||||
|
||||
span {
|
||||
display: inline-block; margin-left: 5px;
|
||||
i {
|
||||
padding-left: 2.4px;
|
||||
}
|
||||
|
||||
|
||||
@media (max-width: 1200px)
|
||||
{
|
||||
margin-left: -1px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
.topic-row {
|
||||
border-radius: 5px;
|
||||
padding-left: 20px;
|
||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||
|
||||
small {
|
||||
vertical-align: 2px;
|
||||
strong {
|
||||
color: #666;
|
||||
}
|
||||
color: #999;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
margin-top: 4px;
|
||||
color: rgb(0, 136, 204);
|
||||
line-height: 25px;
|
||||
|
||||
.topic-title {
|
||||
width: 50%;
|
||||
display: inline-block;
|
||||
font-size: 20px;
|
||||
white-space: nowrap;
|
||||
text-overflow:ellipsis;
|
||||
overflow: hidden;
|
||||
|
||||
|
||||
.badge {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
@media (max-width: 979px)
|
||||
{
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 979px)
|
||||
{
|
||||
width: 100%;
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.latest-post {
|
||||
float: right;
|
||||
padding-top: 2px;
|
||||
margin-right: 0px;
|
||||
width: 40%;
|
||||
|
||||
.pull-right {
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
line-height: 16px;
|
||||
margin-left: 1px;
|
||||
padding: 5px;
|
||||
border-left: 1px solid #bbb;
|
||||
padding-left: 20px;
|
||||
|
||||
img {
|
||||
display: block;
|
||||
float: left;
|
||||
}
|
||||
p {
|
||||
display: block;
|
||||
float: left;
|
||||
width: 70%;
|
||||
margin-left: 10px;
|
||||
overflow: hidden;
|
||||
height: 32px;
|
||||
}
|
||||
span {
|
||||
display: block;
|
||||
float: left;
|
||||
width: 70%;
|
||||
margin-left: 10px;
|
||||
overflow: hidden;
|
||||
height: 16px;
|
||||
margin-top: -10px;
|
||||
color: #666;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.recent-replies {
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
|
||||
ul {
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
line-height: 16px;
|
||||
margin-left: 1px;
|
||||
padding: 5px 5px 5px 0px;
|
||||
list-style-type: none;
|
||||
|
||||
li {
|
||||
clear: both;
|
||||
line-height: 16px;
|
||||
margin-bottom: 1em;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
float: left;
|
||||
}
|
||||
p {
|
||||
display: block;
|
||||
padding-left:5px;
|
||||
padding-top: 2px;
|
||||
overflow: hidden;
|
||||
height: 32px;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
span {
|
||||
font-size: 12px;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
height: 16px;
|
||||
padding-left:5px;
|
||||
color: #666;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
.sidebar-block {
|
||||
.block-header {
|
||||
padding: 8px;
|
||||
padding-left: 13px;
|
||||
display: block;
|
||||
background: rgb(245,245,245);
|
||||
color: #676;
|
||||
font-weight: 400;
|
||||
font-size: 14px;
|
||||
border-radius: 5px 5px 0 0;
|
||||
border-bottom: 1px solid #ddd;
|
||||
|
||||
}
|
||||
.block-content {
|
||||
padding: 10px;
|
||||
.img-polaroid {
|
||||
width: 20%;
|
||||
height: auto;
|
||||
max-width: 48px;
|
||||
}
|
||||
}
|
||||
|
||||
border-radius: 5px;
|
||||
padding: 0;
|
||||
margin-bottom: 20px;
|
||||
|
||||
.img-polaroid {
|
||||
margin-top: 2px;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
.no-select {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.pointer {
|
||||
cursor: pointer;
|
||||
*cursor: hand;
|
||||
}
|
||||
|
||||
.inline-block {
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
zoom: 1;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.zebra {
|
||||
&:nth-child(even) {
|
||||
background: rgba(191,191,191,0.2);
|
||||
}
|
||||
|
||||
&:nth-child(odd) {
|
||||
background: rgba(223,223,223,0.2);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
@import "style";
|
||||
|
||||
@import "topic";
|
||||
@import "category";
|
||||
@import "noscript";
|
||||
@@ -1,57 +0,0 @@
|
||||
@import "mixins";
|
||||
|
||||
noscript {
|
||||
.default {
|
||||
list-style-type: none;
|
||||
padding: 1em;
|
||||
margin-bottom: 1em;
|
||||
.zebra;
|
||||
}
|
||||
|
||||
.categories {
|
||||
li {
|
||||
.default;
|
||||
|
||||
.icon {
|
||||
float: left;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
a {
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.topics {
|
||||
li {
|
||||
.default;
|
||||
}
|
||||
|
||||
.teaser {
|
||||
margin-left: 16px;
|
||||
margin-top: 8px;
|
||||
|
||||
img {
|
||||
float: left;
|
||||
width: 32px;
|
||||
}
|
||||
|
||||
p {
|
||||
color: #666;
|
||||
font-size: 13px;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
margin-left: 64px;
|
||||
padding-top: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.posts {
|
||||
li {
|
||||
.default;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,885 +0,0 @@
|
||||
@import "mixins";
|
||||
|
||||
html {
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
body {
|
||||
/*background: #fdfdfd;*/ // port to default theme when it is implemented.
|
||||
-webkit-transition: margin-bottom 250ms ease;
|
||||
-moz-transition: margin-bottom 250ms ease;
|
||||
-ms-transition: margin-bottom 250ms ease;
|
||||
-o-transition: margin-bottom 250ms ease;
|
||||
transition: margin-bottom 250ms ease;
|
||||
|
||||
&.composing {
|
||||
margin-bottom: 350px;
|
||||
}
|
||||
|
||||
@media (min-width: 979px)
|
||||
{
|
||||
padding-top: 70px;
|
||||
}
|
||||
|
||||
@media (max-width: 979px)
|
||||
{
|
||||
padding-bottom: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
button, a {
|
||||
-webkit-tap-highlight-color: rgba(0,0,0,0);
|
||||
}
|
||||
|
||||
.none {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.block, .show {
|
||||
display: block;
|
||||
}
|
||||
.badge {
|
||||
vertical-align: 17%;
|
||||
}
|
||||
.nav .badge {
|
||||
vertical-align: 2%;
|
||||
}
|
||||
|
||||
#alert_window {
|
||||
position: fixed;
|
||||
right: 20px;
|
||||
top: 60px;
|
||||
width: 300px;
|
||||
height: 0px;
|
||||
}
|
||||
|
||||
.toaster-alert {
|
||||
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
footer.footer {
|
||||
color: #555;
|
||||
text-align: center;
|
||||
|
||||
a {
|
||||
color: #222;
|
||||
}
|
||||
}
|
||||
|
||||
#post_window {
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
height: 350px;
|
||||
left: 0px;
|
||||
bottom: 0px;
|
||||
background: white;
|
||||
z-index: 1500;
|
||||
|
||||
input {
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100%;
|
||||
background: #222;
|
||||
height: 220px;
|
||||
resize: none;
|
||||
border-radius: 0;
|
||||
border: 1px solid #111;
|
||||
font-size: 16px;
|
||||
color: #bebebe;
|
||||
outline: 0;
|
||||
|
||||
&:focus {
|
||||
outline: 0;
|
||||
border:none !important;
|
||||
box-shadow:none !important;
|
||||
}
|
||||
}
|
||||
|
||||
.post-title-container {
|
||||
opacity: 0.8;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.post-content-container {
|
||||
opacity: 0.8;
|
||||
background: #000;
|
||||
width: 100%;
|
||||
height: 300px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#user_label { //belongs in header.less
|
||||
img {
|
||||
border: 1px solid #454;
|
||||
margin-right: 8px;
|
||||
margin-top: -2px;
|
||||
float: left;
|
||||
width:24px;
|
||||
height:24px;
|
||||
}
|
||||
|
||||
span {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #ded;
|
||||
}
|
||||
}
|
||||
|
||||
#reply_title {
|
||||
font-size: 17px;
|
||||
padding-top: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.alt-logins {
|
||||
margin: 0 0 0 1em;
|
||||
padding: 0;
|
||||
|
||||
li {
|
||||
vertical-align: top;
|
||||
background: transparent;
|
||||
display: none;
|
||||
margin: 0.25em;
|
||||
.pointer;
|
||||
|
||||
&.active {
|
||||
.inline-block;
|
||||
}
|
||||
|
||||
i {
|
||||
-webkit-transition: color 100ms linear;
|
||||
-moz-transition: color 100ms linear;
|
||||
-ms-transition: color 100ms linear;
|
||||
-o-transition: color 100ms linear;
|
||||
transition: color 100ms linear;
|
||||
|
||||
&.icon-twitter-sign:hover {
|
||||
color: #4099FF;
|
||||
}
|
||||
|
||||
&.icon-facebook-sign:hover {
|
||||
color: #3b5999;
|
||||
}
|
||||
|
||||
&.icon-google-plus-sign:hover {
|
||||
color: #d34836;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#thread_active_users {
|
||||
float: right;
|
||||
color: rgb(153,153,153);
|
||||
|
||||
strong {
|
||||
color: rgb(100,100,100);
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.account-username-box{
|
||||
border-bottom:1px solid #e3e3e3;
|
||||
margin-bottom:10px;
|
||||
}
|
||||
|
||||
.account-sub-links a{
|
||||
margin-left:10px;
|
||||
}
|
||||
|
||||
.account-username{
|
||||
font-size:20px;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
.account-block {
|
||||
div {
|
||||
padding-bottom:10px;
|
||||
}
|
||||
}
|
||||
|
||||
.account-picture-block{
|
||||
display:inline-block;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
.account-online-status {
|
||||
.icon-circle-blank {
|
||||
color:red;
|
||||
}
|
||||
.icon-circle {
|
||||
color:green;
|
||||
}
|
||||
}
|
||||
|
||||
.user-profile-picture {
|
||||
width:128px;
|
||||
}
|
||||
|
||||
.user-picture-label {
|
||||
font-size:20px;
|
||||
}
|
||||
|
||||
.account-bio-block{
|
||||
display:inline-block;
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
.account-bio-label{
|
||||
display:inline-block;
|
||||
width:100px;
|
||||
}
|
||||
|
||||
.user-recent-posts {
|
||||
div {
|
||||
color: #333;
|
||||
margin-bottom: 10px;
|
||||
cursor: pointer;
|
||||
overflow:hidden;
|
||||
p {
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
span {
|
||||
padding-top: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.category-icon {
|
||||
width: 100%;
|
||||
height: 90px;
|
||||
text-align: center;
|
||||
border-radius: 0px;
|
||||
margin: 0;
|
||||
padding-top:25px;
|
||||
cursor: pointer;
|
||||
margin-bottom: 20px;
|
||||
border-radius: 5px;
|
||||
overflow:hidden;
|
||||
}
|
||||
.category-row h4 {
|
||||
font-weight: 700;
|
||||
text-align: left;
|
||||
/*color: #555;*/ // NOTE: color for cat/topic header links should be grey in the default theme when we get around to it.
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.category-row a {
|
||||
text-decoration: none;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.category-purple {
|
||||
@color: #ab1290;
|
||||
background: @color;
|
||||
color: white;
|
||||
|
||||
&:hover {
|
||||
background: lighten(@color, 10%);
|
||||
}
|
||||
}
|
||||
|
||||
.category-darkblue {
|
||||
@color: #004C66;
|
||||
background: @color;
|
||||
color: white;
|
||||
|
||||
&:hover {
|
||||
background: lighten(@color, 10%);
|
||||
}
|
||||
}
|
||||
|
||||
.category-blue {
|
||||
@color: #0059B2;
|
||||
background: @color;
|
||||
color: white;
|
||||
|
||||
&:hover {
|
||||
background: lighten(@color, 10%);
|
||||
}
|
||||
}
|
||||
|
||||
.category-darkgreen {
|
||||
@color: #004000;
|
||||
background: @color;
|
||||
color: white;
|
||||
|
||||
&:hover {
|
||||
background: lighten(@color, 10%);
|
||||
}
|
||||
}
|
||||
.category-orange {
|
||||
@color: #FF7A4D;
|
||||
color: white;
|
||||
background: @color;
|
||||
|
||||
&:hover {
|
||||
background: lighten(@color, 10%);
|
||||
}
|
||||
}
|
||||
|
||||
.category-list {
|
||||
li {
|
||||
.inline-block;
|
||||
.pointer;
|
||||
padding: 0.5em 0;
|
||||
text-align: center;
|
||||
margin: 0.5em;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
padding: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
.hero-unit {
|
||||
background: #56BCDA;
|
||||
color: white;
|
||||
padding: 30px;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.users-box{
|
||||
display: inline-block;
|
||||
margin-top: 20px;
|
||||
text-align: center;
|
||||
vertical-align: top;
|
||||
max-width: 104px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
|
||||
img {
|
||||
width:80px;
|
||||
height:80px;
|
||||
}
|
||||
|
||||
a {
|
||||
margin:5px;
|
||||
}
|
||||
}
|
||||
|
||||
a:hover, .btn-link:hover, .btn-link:active, .btn-link:focus {
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.formatting-bar {
|
||||
.no-select;
|
||||
|
||||
span:focus {
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.breadcrumb {
|
||||
li {
|
||||
max-width: 35%;
|
||||
white-space: nowrap;
|
||||
text-overflow:ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
body .navbar .nodebb-inline-block {
|
||||
display:inline-block;
|
||||
}
|
||||
|
||||
#right-menu{
|
||||
float:right;
|
||||
}
|
||||
|
||||
#admin-redis-info {
|
||||
span {
|
||||
display:inline-block;
|
||||
width:220px;
|
||||
}
|
||||
}
|
||||
|
||||
.post-signature {
|
||||
color: #666;
|
||||
font-size: 12px;
|
||||
border-top: 1px solid #ddd;
|
||||
display: inline-block;
|
||||
|
||||
img {
|
||||
max-width:200px;
|
||||
max-height:60px;
|
||||
}
|
||||
}
|
||||
|
||||
.username-field {
|
||||
.icon-circle {
|
||||
font-size: 12px;
|
||||
color: green;
|
||||
margin-right:3px;
|
||||
}
|
||||
.icon-circle-blank {
|
||||
font-size: 12px;
|
||||
color: red;
|
||||
margin-right:3px;
|
||||
}
|
||||
}
|
||||
|
||||
#chat-content {
|
||||
width:95%;
|
||||
height:200px;
|
||||
resize:none;
|
||||
}
|
||||
|
||||
#chat-message-input {
|
||||
width:95%;
|
||||
}
|
||||
|
||||
#content{
|
||||
padding-bottom:20px;
|
||||
}
|
||||
|
||||
|
||||
.dropdown-toggle {
|
||||
i {
|
||||
font-size: 12px;
|
||||
|
||||
@-webkit-keyframes glow
|
||||
{
|
||||
from {text-shadow: 0 0 5px #aaf, 0 0 5px #aaf, 0 0 5px #aaf;}
|
||||
50% {text-shadow: 0 0 10px #aaf, 0 0 10px #aaf, 0 0 10px #aaf;}
|
||||
to {text-shadow: 0 0 5px #aaf, 0 0 5px #aaf, 0 0 5px #aaf;}
|
||||
}
|
||||
@keyframes glow
|
||||
{
|
||||
from {text-shadow: 0 0 5px #aaf, 0 0 5px #aaf, 0 0 5px #aaf;}
|
||||
50% {text-shadow: 0 0 10px #aaf, 0 0 10px #aaf, 0 0 10px #aaf;}
|
||||
to {text-shadow: 0 0 5px #aaf, 0 0 5px #aaf, 0 0 5px #aaf;}
|
||||
}
|
||||
|
||||
|
||||
&.active {
|
||||
color: #558;
|
||||
|
||||
text-shadow: 0 0 1em #aaf, 0 0 1em #aaf, 0 0 1em #aaf;
|
||||
-webkit-animation:glow 1.5s infinite linear;
|
||||
animation:glow 1.5s infinite linear;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#notif-list {
|
||||
li {
|
||||
font-size: 12px;
|
||||
width: 300px;
|
||||
text-align: left;
|
||||
|
||||
a {
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
&.unread {
|
||||
background: #eceff5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.taskbar {
|
||||
display: none;
|
||||
-moz-opacity: 0.5;
|
||||
opacity: 0.5;
|
||||
margin-top: 0;
|
||||
-webkit-transition: opacity 250ms ease-in;
|
||||
-moz-transition: opacity 250ms ease-in;
|
||||
-ms-transition: opacity 250ms ease-in;
|
||||
-o-transition: opacity 250ms ease-in;
|
||||
transition: opacity 250ms ease-in;
|
||||
|
||||
&[data-active="1"] {
|
||||
display: block;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
-moz-opacity: 1;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
li {
|
||||
a > span {
|
||||
.inline-block;
|
||||
max-width: 200px;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 24px;
|
||||
max-height: 24px;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
&.pulse {
|
||||
-webkit-animation: pulsate 2500ms linear;
|
||||
-webkit-animation-iteration-count: infinite;
|
||||
}
|
||||
|
||||
@-webkit-keyframes pulsate {
|
||||
0% { background: none; }
|
||||
50% { background: #e5e5e5; }
|
||||
100% { background: none; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.post-window {
|
||||
position: fixed;
|
||||
display: none;
|
||||
height: 350px;
|
||||
visibility: hidden;
|
||||
|
||||
> div {
|
||||
position: absolute;
|
||||
height: 100%;
|
||||
background: rgba(64, 64, 64, 0.6);
|
||||
visibility: visible;
|
||||
|
||||
.btn-toolbar {
|
||||
&.formatting-bar {
|
||||
width: 90%;
|
||||
margin: 0 auto 8px auto;
|
||||
|
||||
span {
|
||||
color: white;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.action-bar {
|
||||
width: 90%;
|
||||
margin: 8px auto 0 auto;
|
||||
}
|
||||
}
|
||||
|
||||
input {
|
||||
width: 98%;
|
||||
text-align: center;
|
||||
border: none;
|
||||
padding: 0.5em 0;
|
||||
-webkit-border-radius: 0px;
|
||||
-moz-border-radius: 0px;
|
||||
border-radius: 0px;
|
||||
margin: 5px auto 10px auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
textarea {
|
||||
background: rgba(64, 64, 64, 0.95);
|
||||
border: none;
|
||||
padding: 0.5em;
|
||||
display: block;
|
||||
width: 90%;
|
||||
margin: 0em auto;
|
||||
resize: none;
|
||||
color: white;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.imagedrop {
|
||||
text-align: center;
|
||||
color: white;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 100%;
|
||||
height: 214px;
|
||||
line-height: 214px;
|
||||
font-size: 20px;
|
||||
vertical-align: middle;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.imagelist {
|
||||
position: absolute;
|
||||
bottom: 50px;
|
||||
left: 5%;
|
||||
|
||||
div {
|
||||
margin-right:5px;
|
||||
}
|
||||
|
||||
span {
|
||||
line-height:20px;
|
||||
float:left;
|
||||
}
|
||||
|
||||
button {
|
||||
padding-left:5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 979px) {
|
||||
.post-window {
|
||||
position: relative;
|
||||
bottom: 0px !important;
|
||||
|
||||
> div {
|
||||
position: static;
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#mobile-menu {
|
||||
position: fixed;
|
||||
bottom: 0px;
|
||||
height: 50px;
|
||||
background: #333;
|
||||
width: 100%;
|
||||
left: 0px;
|
||||
}
|
||||
|
||||
#mobile-menu, #mobile-menu-overlay {
|
||||
z-index: 999;
|
||||
|
||||
@media (min-width: 979px)
|
||||
{
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.btn-none,
|
||||
.btn-none:active,
|
||||
.btn-none[disabled] {
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
-webkit-box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.btn-none {
|
||||
cursor: pointer;
|
||||
border-color: transparent;
|
||||
-webkit-border-radius: 0;
|
||||
-moz-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.btn-none:hover,
|
||||
.btn-none:focus {
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.btn-none[disabled]:hover,
|
||||
.btn-none[disabled]:focus {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.btn-none {
|
||||
.icon-white {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
#mobile-menu {
|
||||
button {
|
||||
color: #eee;
|
||||
padding: 10px;
|
||||
text-shadow: none;
|
||||
-webkit-tap-highlight-color: rgba(0,0,0,0);
|
||||
}
|
||||
}
|
||||
|
||||
#mobile-menu-overlay {
|
||||
|
||||
background: rgba(0, 0, 0, 0.85);
|
||||
position: fixed;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
//margin-top: 50px;
|
||||
padding-top: 20px;
|
||||
opacity: 0;
|
||||
|
||||
-webkit-transition: opacity 150ms ease;
|
||||
-moz-transition: opacity 150ms ease;
|
||||
-ms-transition: opacity 150ms ease;
|
||||
-o-transition: opacity 150ms ease;
|
||||
transition: opacity 150ms ease;
|
||||
z-index: -1;
|
||||
&.menu-visible {
|
||||
z-index: 99;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.mobile-menu-icon {
|
||||
color: white;
|
||||
width: 20%;
|
||||
min-width: 85px;
|
||||
height: auto;
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
-webkit-tap-highlight-color: rgba(0,0,0,0);
|
||||
|
||||
-webkit-transition: margin-top 250ms ease;
|
||||
-moz-transition: margin-top 250ms ease;
|
||||
-ms-transition: margin-top 250ms ease;
|
||||
-o-transition: margin-top 250ms ease;
|
||||
transition: margin-top 250ms ease;
|
||||
|
||||
margin-top: 20%;
|
||||
|
||||
|
||||
&.menu-visible {
|
||||
margin-top: 0%;
|
||||
}
|
||||
|
||||
i {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#mobile-sidebar {
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
left: 100%;
|
||||
top: 0px;
|
||||
overflow: hidden;
|
||||
margin-top: 60px;
|
||||
}
|
||||
|
||||
.category-box {
|
||||
height:90px;
|
||||
|
||||
.post-preview {
|
||||
padding-left:10px;
|
||||
padding-right:10px;
|
||||
text-align:left;
|
||||
img {
|
||||
width:60px;
|
||||
height:60px;
|
||||
padding-right:5px;
|
||||
}
|
||||
|
||||
p {
|
||||
overflow: hidden;
|
||||
text-overflow:ellipsis;
|
||||
height:60px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#mark-allread-btn {
|
||||
margin-bottom:15px;
|
||||
}
|
||||
|
||||
@-webkit-keyframes scroll-2 /* Safari and Chrome */
|
||||
{
|
||||
0% {top: 0px;}
|
||||
25% {top: -90px;}
|
||||
50% {top: -180px;}
|
||||
75% {top: -270px;}
|
||||
100% {top: -360px;}
|
||||
}
|
||||
|
||||
@keyframes scroll-2
|
||||
{
|
||||
0% {top: 0px;}
|
||||
25% {top: -90px;}
|
||||
50% {top: -180px;}
|
||||
75% {top: -270px;}
|
||||
100% {top: -360px;}
|
||||
}
|
||||
|
||||
@-webkit-keyframes scroll-1 /* Safari and Chrome */
|
||||
{
|
||||
0% {top: 0px;}
|
||||
33% {top: -90px;}
|
||||
66% {top: -180px;}
|
||||
100% {top: -270px;}
|
||||
}
|
||||
|
||||
@keyframes scroll-1
|
||||
{
|
||||
0% {top: 0px;}
|
||||
33% {top: -90px;}
|
||||
66% {top: -180px;}
|
||||
100% {top: -270px;}
|
||||
}
|
||||
|
||||
@-webkit-keyframes scroll-0 /* Safari and Chrome */
|
||||
{
|
||||
0% {top: 0px;}
|
||||
50% {top: -90px;}
|
||||
100% {top: -180px;}
|
||||
}
|
||||
|
||||
@keyframes scroll-0
|
||||
{
|
||||
0% {top: 0px;}
|
||||
50% {top: -90px;}
|
||||
100% {top: -180px;}
|
||||
}
|
||||
|
||||
.category-slider-2:hover {
|
||||
position:relative;
|
||||
|
||||
-webkit-animation: scroll-2 10s ease 0.5s infinite normal;
|
||||
animation: scroll-2 10s ease 0.5s infinite normal;/* Safari and Chrome: */
|
||||
}
|
||||
|
||||
.category-slider-1:hover {
|
||||
position:relative;
|
||||
|
||||
-webkit-animation: scroll-1 8s ease 0.5s infinite normal;
|
||||
animation: scroll-1 8s ease 0.5s infinite normal;/* Safari and Chrome: */
|
||||
}
|
||||
|
||||
.category-slider-0:hover {
|
||||
position:relative;
|
||||
|
||||
-webkit-animation: scroll-0 6s ease 0.5s infinite normal;
|
||||
animation: scroll-0 6s ease 0.5s infinite normal;/* Safari and Chrome: */
|
||||
}
|
||||
|
||||
.form-search {
|
||||
float: left;
|
||||
margin-top: 5px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.search-result-post {
|
||||
width: 100%;
|
||||
line-height: 16px;
|
||||
padding: 5px;
|
||||
overflow:hidden;
|
||||
img {
|
||||
display: block;
|
||||
float: left;
|
||||
width:48px;
|
||||
height:48px;
|
||||
padding-right:10px;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,226 +0,0 @@
|
||||
|
||||
.post-container {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
clear: both;
|
||||
|
||||
.profile-image-block {
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
|
||||
.stats {
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
li {
|
||||
padding-bottom: 15px;
|
||||
|
||||
&.deleted {
|
||||
-moz-opacity: 0.30;
|
||||
opacity: 0.30;
|
||||
height:30px;
|
||||
overflow-y:hidden;
|
||||
}
|
||||
|
||||
&.deleted-expanded {
|
||||
height:100%;
|
||||
overflow-y:default;
|
||||
}
|
||||
}
|
||||
|
||||
.profile-block, .post-block {
|
||||
position:relative;
|
||||
border: 1px solid rgba(0, 0, 0, 0.06);
|
||||
border-radius: 5px;
|
||||
padding: 10px;
|
||||
|
||||
p {
|
||||
line-height: 1.75em;
|
||||
}
|
||||
}
|
||||
|
||||
.profile-block {
|
||||
background: rgba(0, 0, 0, 0.02);
|
||||
margin-right: -11px;
|
||||
margin-left: -11px;
|
||||
margin-bottom: -11px;
|
||||
margin-top: 15px;
|
||||
border-radius: 0 0 5px 5px;
|
||||
font-size: 10px;
|
||||
line-height: 18px;
|
||||
padding: 5px;
|
||||
padding-left: 10px;
|
||||
|
||||
img.hidden-desktop {
|
||||
max-width: 10px;
|
||||
max-height: 10px;
|
||||
padding-top: 5px;
|
||||
margin-right: 5px;
|
||||
|
||||
}
|
||||
}
|
||||
.post-content {
|
||||
min-height: 50px;
|
||||
padding: 2px 5px 0 5px;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.post-images{
|
||||
padding: 2px 5px 0 5px;
|
||||
}
|
||||
|
||||
.post-block {
|
||||
.post-buttons {
|
||||
font-size: 12px;
|
||||
float: right;
|
||||
margin-right: 5px;
|
||||
|
||||
button, a {
|
||||
display: inline-block;
|
||||
padding: 0px 15px;
|
||||
border: none;
|
||||
border-left: 1px solid rgba(0, 0, 0, 0.06);
|
||||
cursor: pointer;
|
||||
background: none;
|
||||
font-size: 12px;
|
||||
height: 20px;
|
||||
|
||||
&:last-child {
|
||||
padding-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.icon-star {
|
||||
//theme this to make it yellow eventually
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
&.deleted {
|
||||
-moz-opacity: 0.30;
|
||||
opacity: 0.30;
|
||||
}
|
||||
/*http://stackoverflow.com/questions/11037517/bootstrap-making-responsive-changes-to-layout*/
|
||||
@media (max-width: 979px) {
|
||||
|
||||
|
||||
.span12-tablet {
|
||||
width: 100% !important;
|
||||
margin-left:0px;
|
||||
*width: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 979px) {
|
||||
.speech-bubble:after
|
||||
{
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 9px;
|
||||
left: -7px;
|
||||
border-style: solid;
|
||||
border-width: 7px 7px 7px 0;
|
||||
border-color: transparent #FFFFFF;
|
||||
display: block;
|
||||
width: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.speech-bubble:before
|
||||
{
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 9px;
|
||||
left: -8px;
|
||||
border-style: solid;
|
||||
border-width: 7px 7px 7px 0;
|
||||
border-color: transparent rgba(0, 0, 0, 0.125);
|
||||
display: block;
|
||||
width: 0;
|
||||
z-index: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.main-post {
|
||||
h3 {
|
||||
margin: 0;
|
||||
|
||||
.topic-title {
|
||||
width: auto;
|
||||
overflow: hidden;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
padding-top: 5px;
|
||||
margin-bottom: -5px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.main-avatar {
|
||||
color: white;
|
||||
position: relative;
|
||||
float: left;
|
||||
margin-right: 25px;
|
||||
margin-bottom: 0px;
|
||||
padding-bottom: 0px;
|
||||
text-align: center;
|
||||
width:80px;
|
||||
|
||||
@media (max-width: 767px) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.main-avatar:hover .hover-overlay {
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
.hover-overlay {
|
||||
margin: 5px;
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
height: 35px;
|
||||
padding-top: 2px;
|
||||
width: 80px;
|
||||
font-size: 13px;
|
||||
line-height: 16px;
|
||||
background: #000;
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s;
|
||||
}
|
||||
|
||||
.post-content {
|
||||
min-height: 80px;
|
||||
}
|
||||
hr {
|
||||
margin-top: 0;
|
||||
margin-right: 10px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.post-block {
|
||||
.post-buttons {
|
||||
div {
|
||||
border: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.favourite {
|
||||
cursor: pointer;
|
||||
}
|
||||
.btn {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.topic-buttons {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
3
public/language/TODO
Normal file
3
public/language/TODO
Normal file
@@ -0,0 +1,3 @@
|
||||
NPM INSTALL
|
||||
For now, language packs will be stored here. Eventually, will be moved to server side to allow for npm install-ability.
|
||||
When that happens, server code will generate compressed JSON language files in this folder.
|
||||
7
public/language/ar/category.json
Normal file
7
public/language/ar/category.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"new_topic_button": "موضوع جديد",
|
||||
"no_topics": "<strong>لا توجد مواضيع في هذه الفئة</strong>لماذا لا تحاول نشر واحد؟<br />",
|
||||
"browsing": "يتصفح",
|
||||
"no_replies": "لم يرد أحد",
|
||||
"share_this_category": "Share this category"
|
||||
}
|
||||
50
public/language/ar/error.json
Normal file
50
public/language/ar/error.json
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"invalid-data": "Invalid Data",
|
||||
"not-logged-in": "You don't seem to be logged in.",
|
||||
"account-locked": "Your account has been locked temporarily",
|
||||
"invalid-cid": "Invalid Category ID",
|
||||
"invalid-tid": "Invalid Topic ID",
|
||||
"invalid-pid": "Invalid Post ID",
|
||||
"invalid-uid": "Invalid User ID",
|
||||
"invalid-username": "Invalid Username",
|
||||
"invalid-email": "Invalid Email",
|
||||
"invalid-title": "Invalid title",
|
||||
"invalid-user-data": "Invalid User Data",
|
||||
"invalid-password": "Invalid Password",
|
||||
"invalid-pagination-value": "Invalid pagination value",
|
||||
"username-taken": "Username taken",
|
||||
"email-taken": "Email taken",
|
||||
"user-banned": "User banned",
|
||||
"no-category": "Category doesn't exist",
|
||||
"no-topic": "Topic doesn't exist",
|
||||
"no-post": "Post doesn't exist",
|
||||
"no-group": "Group doesn't exist",
|
||||
"no-user": "User doesn't exist",
|
||||
"no-teaser": "Teaser doesn't exist",
|
||||
"no-privileges": "You don't have enough privileges for this action.",
|
||||
"category-disabled": "Category disabled",
|
||||
"topic-locked": "Topic Locked",
|
||||
"still-uploading": "Please wait for uploads to complete.",
|
||||
"content-too-short": "Please enter a longer post. At least %1 characters.",
|
||||
"title-too-short": "Please enter a longer title. At least %1 characters.",
|
||||
"title-too-long": "Please enter a shorter title. Titles can't be longer than %1 characters.",
|
||||
"too-many-posts": "You can only post every %1 seconds.",
|
||||
"file-too-big": "Maximum allowed file size is %1 kbs",
|
||||
"cant-vote-self-post": "You cannot vote for your own post",
|
||||
"already-favourited": "You already favourited this post",
|
||||
"already-unfavourited": "You alread unfavourited this post",
|
||||
"cant-ban-other-admins": "You can't ban other admins!",
|
||||
"invalid-image-type": "Invalid image type",
|
||||
"group-name-too-short": "Group name too short",
|
||||
"group-already-exists": "Group already exists",
|
||||
"group-name-change-not-allowed": "Group name change not allowed",
|
||||
"post-already-deleted": "Post already deleted",
|
||||
"post-already-restored": "Post already restored",
|
||||
"topic-already-deleted": "Topic already deleted",
|
||||
"topic-already-restored": "Topic already restored",
|
||||
"topic-thumbnails-are-disabled": "Topic thumbnails are disabled.",
|
||||
"invalid-file": "Invalid File",
|
||||
"uploads-are-disabled": "Uploads are disabled",
|
||||
"signature-too-long": "Signature can't be longer than %1 characters!",
|
||||
"cant-chat-with-yourself": "You can't chat with yourself!"
|
||||
}
|
||||
7
public/language/ar/footer.json
Normal file
7
public/language/ar/footer.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"stats.online": "حالياً على الموقع",
|
||||
"stats.users": "مستخدمين",
|
||||
"stats.topics": "مواضيع",
|
||||
"stats.posts": "مشاركات",
|
||||
"success": "نجاح"
|
||||
}
|
||||
71
public/language/ar/global.json
Normal file
71
public/language/ar/global.json
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"home": "الصفحة الرئيسية",
|
||||
"search": "بحث",
|
||||
"buttons.close": "أغلق",
|
||||
"403.title": "غير مسموح بالدخول",
|
||||
"403.message": "يبدو أنك قد تعثر على الصفحة التي لم يكن لديك الوصول إليها. ربما يجب عليك <a href='/login'> تسجيل الدخول </a> ",
|
||||
"404.title": "لم يتم العثور",
|
||||
"404.message": "يبدو أنك قد تعثرت على صفحة غير موجودة. عودة إلى الصفحة الرئيسية.",
|
||||
"500.title": "خطأ داخلي.",
|
||||
"500.message": "عفوا! يبدو وكأنه شيء ذهب على نحو خاطئ!",
|
||||
"register": "تسجيل",
|
||||
"login": "دخول",
|
||||
"please_log_in": "Please Log In",
|
||||
"logout": "تسجيل الخروج",
|
||||
"posting_restriction_info": "Posting is currently restricted to registered members only, click here to log in.",
|
||||
"welcome_back": "Welcome Back ",
|
||||
"you_have_successfully_logged_in": "You have successfully logged in",
|
||||
"save_changes": "حفظ التغييرات",
|
||||
"close": "أغلق",
|
||||
"pagination": "Pagination",
|
||||
"pagination.out_of": "%1 out of %2",
|
||||
"header.admin": "مشرف",
|
||||
"header.recent": "حديث",
|
||||
"header.unread": "غير مقروء",
|
||||
"header.popular": "Popular",
|
||||
"header.users": "المستخدمين",
|
||||
"header.chats": "Chats",
|
||||
"header.notifications": "Notifications",
|
||||
"header.search": "بحث",
|
||||
"header.profile": "ملف",
|
||||
"notifications.loading": "تحميل التبليغات",
|
||||
"chats.loading": "تحميل الدردشات",
|
||||
"motd.welcome": "مرحبا بكم NodeBB، منصة مناقشة المستقبل",
|
||||
"previouspage": "Previous Page",
|
||||
"nextpage": "Next Page",
|
||||
"alert.success": "Success",
|
||||
"alert.error": "Error",
|
||||
"alert.banned": "Banned",
|
||||
"alert.banned.message": "You have just been banned, you will now be logged out.",
|
||||
"alert.unfollow": "You are no longer following %1!",
|
||||
"alert.follow": "You are now following %1!",
|
||||
"online": "Online",
|
||||
"users": "Users",
|
||||
"topics": "Topics",
|
||||
"posts": "Posts",
|
||||
"views": "Views",
|
||||
"reputation": "Reputation",
|
||||
"read_more": "read more",
|
||||
"posted_ago_by_guest": "posted %1 by Guest",
|
||||
"posted_ago_by": "posted %1 by %2",
|
||||
"posted_ago": "posted %1",
|
||||
"posted_in_ago_by_guest": "posted in %1 %2 by Guest",
|
||||
"posted_in_ago_by": "posted in %1 %2 by %3",
|
||||
"posted_in_ago": "posted in %1 %2",
|
||||
"replied_ago": "replied %1",
|
||||
"user_posted_ago": "%1 posted %2",
|
||||
"guest_posted_ago": "Guest posted %1",
|
||||
"last_edited_by_ago": "last edited by %1 %2",
|
||||
"norecentposts": "No Recent Posts",
|
||||
"norecenttopics": "No Recent Topics",
|
||||
"recentposts": "Recent Posts",
|
||||
"recentips": "Recently Logged In IPs",
|
||||
"away": "Away",
|
||||
"dnd": "Do not Disturb",
|
||||
"invisible": "Invisible",
|
||||
"offline": "Offline",
|
||||
"email": "Email",
|
||||
"language": "Language",
|
||||
"guest": "Guest",
|
||||
"guests": "Guests"
|
||||
}
|
||||
5
public/language/ar/language.json
Normal file
5
public/language/ar/language.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"name": "العربية",
|
||||
"code": "ar",
|
||||
"dir": "rtl"
|
||||
}
|
||||
8
public/language/ar/login.json
Normal file
8
public/language/ar/login.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"username": "Username / Email",
|
||||
"remember_me": "تذكرني؟",
|
||||
"forgot_password": "نسيت كلمة المرور؟",
|
||||
"alternative_logins": "تسجيلات الدخول البديلة",
|
||||
"failed_login_attempt": "فشلت محاولة تسجيل الدخول، يرجى المحاولة مرة أخرى.",
|
||||
"login_successful": "قمت بتسجيل الدخول بنجاح!"
|
||||
}
|
||||
8
public/language/ar/modules.json
Normal file
8
public/language/ar/modules.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"chat.chatting_with": "الدردشة مع <span id=\"chat-with-name\"></span>",
|
||||
"chat.placeholder": "اكتب رسالة دردشة هنا، وإضغط ENTER لإرسال",
|
||||
"chat.send": "أرسل",
|
||||
"chat.no_active": "لا يوجد لديك دردشات نشطة.",
|
||||
"chat.user_typing": "%1 is typing ...",
|
||||
"chat.user_has_messaged_you": "%1 has messaged you."
|
||||
}
|
||||
18
public/language/ar/notifications.json
Normal file
18
public/language/ar/notifications.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"title": "إعلام",
|
||||
"no_notifs": "You have no new notifications",
|
||||
"see_all": "See all Notifications",
|
||||
"back_to_home": "العودة إلى NodeBB",
|
||||
"outgoing_link": "رابط خارجي",
|
||||
"outgoing_link_message": "أنت الأن ترحل",
|
||||
"continue_to": "أكمل إلى",
|
||||
"return_to": "إرجع إلى",
|
||||
"new_notification": "New Notification",
|
||||
"you_have_unread_notifications": "You have unread notifications.",
|
||||
"user_made_post": "<strong>%1</strong> made a new post",
|
||||
"new_message_from": "New message from <strong>%1</strong>",
|
||||
"upvoted_your_post": "<strong>%1</strong> has upvoted your post.",
|
||||
"favourited_your_post": "<strong>%1</strong> has favourited your post.",
|
||||
"user_flagged_post": "<strong>%1</strong> flagged a post.",
|
||||
"user_posted_to": "<strong>%1</strong> has posted a reply to: <strong>%2</strong>"
|
||||
}
|
||||
15
public/language/ar/pages.json
Normal file
15
public/language/ar/pages.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"home": "Home",
|
||||
"unread": "Unread Topics",
|
||||
"popular": "Popular Topics",
|
||||
"recent": "Recent Topics",
|
||||
"users": "Registered Users",
|
||||
"notifications": "Notifications",
|
||||
"user.edit": "Editing \"%1\"",
|
||||
"user.following": "People %1 Follows",
|
||||
"user.followers": "People who Follow %1",
|
||||
"user.posts": "Posts made by %1",
|
||||
"user.topics": "Topics created by %1",
|
||||
"user.favourites": "%1's Favourite Posts",
|
||||
"user.settings": "User Settings"
|
||||
}
|
||||
7
public/language/ar/recent.json
Normal file
7
public/language/ar/recent.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"title": "Recent",
|
||||
"day": "يوم",
|
||||
"week": "أسبوع",
|
||||
"month": "شهر",
|
||||
"no_recent_topics": "There are no recent topics."
|
||||
}
|
||||
18
public/language/ar/register.json
Normal file
18
public/language/ar/register.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"register": "تسجيل",
|
||||
"help.email": "افتراضيا، سيتم إخفاء بريدك الإلكتروني من الجمهور.",
|
||||
"help.username_restrictions": "اسم مستخدم فريدة من نوعها بين1% و2% حرفا. يمكن للآخرين ذكرك @ <'span id='your-username> اسم المستخدم </span>.",
|
||||
"help.minimum_password_length": "كلمتك السر يجب أن تكون على الأقل متألفة من 1% أحرف",
|
||||
"email_address": "عنوان البريد الإلكتروني",
|
||||
"email_address_placeholder": "ادخل عنوان البريد الإلكتروني",
|
||||
"username": "اسم المستخدم",
|
||||
"username_placeholder": "أدخل اسم المستخدم",
|
||||
"password": "كلمة السر",
|
||||
"password_placeholder": "أدخل كلمة السر",
|
||||
"confirm_password": "تأكيد كلمة السر",
|
||||
"confirm_password_placeholder": "تأكيد كلمة السر",
|
||||
"register_now_button": "قم بالتسجيل الآن",
|
||||
"alternative_registration": "التسجيل البديلة",
|
||||
"terms_of_use": "Terms of Use",
|
||||
"agree_to_terms_of_use": "I agree to the Terms of Use"
|
||||
}
|
||||
14
public/language/ar/reset_password.json
Normal file
14
public/language/ar/reset_password.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"reset_password": "إعادة تعيين كلمة السر",
|
||||
"update_password": "تحديث كلمة السر",
|
||||
"password_changed.title": "تم تغير كلمة السر",
|
||||
"password_changed.message": "<p>تم تغير كلمة السر بنجاح. يرجى <a href='/login'>إعادة الدخول</a></p>",
|
||||
"wrong_reset_code.title": "إعادة تعيين رمز غير صحيح",
|
||||
"wrong_reset_code.message": "رامز إعادة التعين غير صحيح، يرجى المحاولة مرة أخرى أو <a href='/reset'>اطلب رمز جديد</a>",
|
||||
"new_password": "كلمة السر الجديدة",
|
||||
"repeat_password": "تأكيد كلمة السر",
|
||||
"enter_email": "يرجى إدخال <strong>عنوان البريد الإلكتروني</strong> الخاص بك وسوف نرسل لك رسالة بالبريد الالكتروني مع تعليمات حول كيفية إستعادة حسابك.",
|
||||
"enter_email_address": "Enter Email Address",
|
||||
"password_reset_sent": "إعادة تعيين كلمة السر أرسلت",
|
||||
"invalid_email": "بريد إلكتروني غير صالح أو غير موجود"
|
||||
}
|
||||
6
public/language/ar/success.json
Normal file
6
public/language/ar/success.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"success": "Success",
|
||||
"topic-post": "You have successfully posted.",
|
||||
"authentication-successful": "Authentication Successful",
|
||||
"settings-saved": "Settings saved!"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user