Compare commits

...

2684 Commits

Author SHA1 Message Date
barisusakli
accee7d05b use socket.io default and ["polling", "websocket"] 2014-12-25 14:16:44 -05:00
barisusakli
f403a297b4 only send back error for sortedSetsRemove 2014-12-24 02:09:08 -05:00
Julian Lam
73e7da6f03 0.6.0 2014-12-24 00:45:41 -05:00
Julian Lam
9c1b24c963 added shrinkwrap file 2014-12-24 00:45:36 -05:00
barisusakli
0d223ef88d missing err 2014-12-24 00:19:47 -05:00
barisusakli
87435c1a9e return email:confirmed on admin header 2014-12-24 00:06:37 -05:00
barisusakli
ce24c6dc04 pass callback directly 2014-12-23 23:53:26 -05:00
barisusakli
4b1b98e229 handle changePicture callback properly 2014-12-23 18:09:23 -05:00
barisusakli
3d9e86d9b2 removed null 2014-12-23 15:06:05 -05:00
barisusakli
cd41e192d1 closes #2546 2014-12-23 15:03:31 -05:00
barisusakli
87f57b8cd3 cuz @psychobunny said so 2014-12-23 02:23:36 -05:00
barisusakli
d68c44fd0a dont sent status update if user set it offline 2014-12-23 01:37:39 -05:00
psychobunny
7c2b041633 ./nodebb reset theme - singular imo 2014-12-23 00:53:28 -05:00
barisusakli
a9e12f4174 remove unused requires 2014-12-22 21:17:26 -05:00
barisusakli
b1edc59987 fix undefined next 2014-12-22 21:12:22 -05:00
psychobunny
a5f63a5ac7 upgrade script was refusing to complete until I added this
@barisusakli fyi
2014-12-22 12:47:55 -05:00
barisusakli
9865f78cbb flat is good 2014-12-22 00:12:47 -05:00
barisusakli
768c17263c fix error messages 2014-12-21 23:32:19 -05:00
Barış Soner Uşaklı
25cb450f40 Merge pull request #2542 from gitter-badger/gitter-badge
Add a Gitter chat badge to README.md
2014-12-21 23:19:53 -05:00
The Gitter Badger
3019023d38 Added Gitter badge 2014-12-22 04:13:58 +00:00
barisusakli
936ea5f686 sync config changes over redis pubsub 2014-12-21 20:25:54 -05:00
barisusakli
2f8e6a1f2b closes #2458 2014-12-21 16:29:32 -05:00
barisusakli
2ea5f85d9b closes #2481 2014-12-21 14:36:22 -05:00
barisusakli
e6b4a45cda closes #2531 2014-12-21 14:14:46 -05:00
barisusakli
e22c13abd4 closes #2423 2014-12-21 14:07:45 -05:00
barisusakli
3bdb98e747 closes #2530 2014-12-21 00:08:01 -05:00
barisusakli
712d5bce5b show 24 hours in traffic graph 2014-12-20 20:34:46 -05:00
barisusakli
94cf29d42c show monthly page views 2014-12-20 20:05:59 -05:00
barisusakli
b07a522c60 one less query in privileges.topics.get 2014-12-20 18:34:02 -05:00
barisusakli
984b17349a closes #2476 2014-12-20 17:26:39 -05:00
barisusakli
4ce6341d85 fix acp for header changes 2014-12-20 00:42:52 -05:00
barisusakli
83312ad53a faster getTeasers 2014-12-19 23:56:51 -05:00
barisusakli
14e46a87a6 closes #2529 2014-12-19 18:58:28 -05:00
barisusakli
1424acc88e fix reconnection for socket.io 1.x 2014-12-19 18:49:56 -05:00
barisusakli
8ed06eb773 closes #2528 2014-12-19 18:31:39 -05:00
barisusakli
04084807c2 removed app.loadConfig 2014-12-19 17:19:33 -05:00
psychobunny
da7dcd99a8 #2532 renamed to "socket.io:transports"
Sample config:

"socket.io": {
"transports": ["websocket"]
}
2014-12-19 16:49:20 -05:00
barisusakli
6a8a5a9de0 use validator.escape 2014-12-18 23:43:07 -05:00
barisusakli
793a0a6772 fix mark topic notifications read on enter 2014-12-18 23:28:19 -05:00
barisusakli
2bfc33edb7 updated deps 2014-12-18 20:23:31 -05:00
barisusakli
d314b9cae2 closes #2538 2014-12-18 19:47:51 -05:00
barisusakli
d28fb153c7 closes #2537 2014-12-18 19:22:59 -05:00
barisusakli
7ec8393004 closes #2532 2014-12-17 18:18:53 -05:00
barisusakli
2423bd18eb jobs disabled is boolean, great 2014-12-17 18:09:09 -05:00
barisusakli
1a34327f9d removed unnecessary require 2014-12-16 23:55:02 -05:00
barisusakli
59545d740c only emit event:user_leave to topic rooms instead of all online users 2014-12-16 19:40:47 -05:00
barisusakli
f47550d23e closes #2533 2014-12-16 15:09:15 -05:00
barisusakli
26b2ef1543 prevent crash in getChildren 2014-12-16 14:46:02 -05:00
barisusakli
989ca19df5 added jobsDisabled flag 2014-12-15 19:07:15 -05:00
barisusakli
acf1b76da8 reconnectionAttemps in socket.io 1.0x
https://github.com/automattic/socket.io-client#managerurlstring-optsobject
2014-12-15 10:07:11 -05:00
barisusakli
76480d4d31 app.user undefined on cold load 2014-12-14 23:02:58 -05:00
barisusakli
c0c85c24cf duh strings dont work 2014-12-14 22:34:53 -05:00
barisusakli
64cc0f244d just show err.message 2014-12-14 17:45:22 -05:00
barisusakli
5bf46864ed removed global admin object, CF rocket loader fix
added colorpicker module
2014-12-13 22:14:08 -05:00
psychobunny
9e1a049fd5 Merge pull request #2526 from akhoury/patch-5
adding mid on the message returned data on addMessage
2014-12-13 10:17:09 -05:00
Aziz Khoury
100f31be81 adding mid on the message returned data on addMessage 2014-12-13 08:19:49 -05:00
barisusakli
e72ec429a2 remvoed lowered pingTimeout 2014-12-13 00:10:45 -05:00
barisusakli
e74d39889e removed extra comma 2014-12-12 23:26:01 -05:00
barisusakli
bf3f20bf8b removed extra comma 2014-12-12 23:25:16 -05:00
barisusakli
2c7d9e1a7c store teaserPid in topic
-update teaser pid as necessary in addPostToTopic, removePostFromTopic,
post purge
-removed 20x db calls from getTeasers
-fixed scroll to post in sub folder install
-upgrade script to update topics with teaserPid
2014-12-12 18:52:37 -05:00
barisusakli
0cb0dafae3 another relative_path fix 2014-12-12 16:31:54 -05:00
barisusakli
03de918f10 fix more relative path redirects 2014-12-12 16:20:24 -05:00
barisusakli
011c42bde3 updated analytics
accumulate pageviews, uniquevisitors and uniqueIps locally and update db
every 10 mins instead of on every page view
2014-12-12 16:15:13 -05:00
barisusakli
da4014eb71 dont allow move to same topic 2014-12-12 00:52:59 -05:00
barisusakli
8bba811aaf closes #2522 2014-12-12 00:45:43 -05:00
barisusakli
52a53df80d missing err check 2014-12-11 23:59:23 -05:00
barisusakli
8965855218 made breadcrumbs regular function
less db calls as well
2014-12-11 22:55:00 -05:00
barisusakli
518c6f7cfa closes #2521 2014-12-11 22:16:17 -05:00
psychobunny
e0c8989e8b closes #2519 2014-12-11 10:17:04 -05:00
psychobunny
94efa6dd87 closes #2520 2014-12-11 10:02:17 -05:00
Barış Soner Uşaklı
5f47f2226a escape topic title and category name 2014-12-11 03:09:09 -05:00
Julian Lam
3deb423c55 testing socket availability before attempting to bind 2014-12-10 19:44:27 -05:00
Julian Lam
49dcffcbab if worker process exits with code zero, don't boot up a new worker 2014-12-10 18:52:38 -05:00
Julian Lam
68e761bed0 if using sockets, reset the umask back to the old value after listening 2014-12-10 18:16:09 -05:00
Julian Lam
273e26ddb1 if a locally installed plugin not published to npm has a syntax error, this fixes it. closes #2512 2014-12-10 14:59:49 -05:00
barisusakli
9b083a6a66 half ping timeout 2014-12-10 04:07:05 -05:00
barisusakli
86bd85bba4 removed qs fix indent 2014-12-10 01:40:31 -05:00
barisusakli
646c5705cf no need to make call for guests 2014-12-10 00:43:35 -05:00
barisusakli
2e04501224 closes #2516 2014-12-09 20:48:35 -05:00
barisusakli
348d05d3d1 remove deprecated res.json usage 2014-12-09 20:07:12 -05:00
barisusakli
b63c0df8a2 fixed event name 2014-12-09 13:50:20 -05:00
barisusakli
5a79b99a7a derp 2014-12-09 12:59:49 -05:00
barisusakli
9f7196f5b0 dont crash if config is undefined, added error to plugins 2014-12-09 12:59:12 -05:00
Julian Lam
772f4c103a properly pass in error value for locally installed plugin 2014-12-09 12:11:01 -05:00
barisusakli
aeae76c28d added error false 2014-12-09 11:22:04 -05:00
Julian Lam
b565f3ac0a closed #2497 2014-12-09 10:27:05 -05:00
barisusakli
8af5102912 missing return 2014-12-08 17:50:45 -05:00
barisusakli
81a5a4cfe0 removed global var 2014-12-08 16:49:18 -05:00
barisusakli
8e8375cbba validate email password on register 2014-12-08 16:28:30 -05:00
barisusakli
8bee231d80 show validation errors on register 2014-12-08 16:11:35 -05:00
Julian Lam
b278f27ffe partial fix to #2509 2014-12-08 12:04:41 -05:00
psychobunny
e3e737458e linting 2014-12-08 10:28:21 -05:00
psychobunny
beaa52fff5 acp - if bs env < lg + content is long (ex plugins list) then duplicate sidebar menu on header + footer; closes #2510 2014-12-08 10:27:54 -05:00
barisusakli
9d78a204df missing return 2014-12-07 16:37:05 -05:00
barisusakli
5128f7d2f9 prevent crash on invalid data 2014-12-07 16:32:40 -05:00
barisusakli
6b20cf5cff #2508 2014-12-06 16:05:00 -05:00
barisusakli
5337a31eb9 #2254 sitemap topic limit 2014-12-06 00:44:58 -05:00
barisusakli
8bea0bb6e5 fix favourite infinite scroll 2014-12-05 22:22:57 -05:00
barisusakli
f2b24eb72a fix tests 2014-12-05 16:46:16 -05:00
Julian Lam
8c097357fc updated language files 2014-12-05 13:31:08 -05:00
barisusakli
79f3659e55 reconnectionDelay 2014-12-05 13:19:09 -05:00
barisusakli
99e774d196 socket.socket.disconnect doens't exist in 1.x 2014-12-05 13:15:51 -05:00
barisusakli
ef3b6a2450 closes #2498 2014-12-05 13:07:13 -05:00
barisusakli
64c0e1df61 settimeout 2014-12-04 14:29:48 -05:00
Julian Lam
389f74b615 hungarian translations 2014-12-04 13:24:11 -05:00
Julian Lam
2de108153f closed #2464 2014-12-04 00:36:24 -05:00
Julian Lam
2914c74587 allowed admin to remove skins, if set 2014-12-03 23:40:04 -05:00
barisusakli
104fc2d273 10 second timer 2014-12-03 23:16:50 -05:00
barisusakli
9e9b138afb removed unused code 2014-12-03 23:13:26 -05:00
barisusakli
e7c2bc5d5d removed unused callback 2014-12-03 23:07:00 -05:00
barisusakli
e86650a6af not used anymore 2014-12-03 23:05:33 -05:00
Julian Lam
fb6026f95f fixed issue where logging out via ACP caused CSRF error 2014-12-03 22:42:42 -05:00
Julian Lam
908f5f2fd4 fixed ACP background image on subfolder installs 2014-12-03 22:35:45 -05:00
barisusakli
080c54d414 #2434 2014-12-03 22:35:06 -05:00
barisusakli
e18ad61ff6 fix login maybe? 2014-12-03 22:29:56 -05:00
barisusakli
356f577a74 redirect to correct login 2014-12-03 22:08:25 -05:00
barisusakli
85dfedeedc removed commented out code 2014-12-03 19:43:15 -05:00
barisusakli
7ae7c50f56 app.user 2014-12-03 19:36:19 -05:00
barisusakli
22e20b961e pass all env variables to worker 2014-12-03 17:10:25 -05:00
Julian Lam
d14cd254a5 only instantiating logrotate object if silent 2014-12-03 17:06:26 -05:00
barisusakli
16f62e6502 closes #2472 2014-12-03 17:05:34 -05:00
barisusakli
7d6c81160b show 20 results for user search 2014-12-03 16:45:12 -05:00
Julian Lam
aaef0ad282 closed #2495 2014-12-03 16:18:26 -05:00
barisusakli
d62cdd5127 added support for specifying which ports to use
if no port is specified in config.json port from url will be used if no
port in url then default to 4567

port in config.json can be an array or a single port number
2014-12-03 15:46:52 -05:00
barisusakli
f67bc8d056 fix space 2014-12-03 14:17:05 -05:00
barisusakli
64e13df14c removed node cluster spawn procs on ports 2014-12-03 14:03:41 -05:00
barisusakli
3ad3e781f3 fix tests 2014-12-03 01:49:57 -05:00
barisusakli
28ed49a1d2 removed android check 2014-12-03 01:17:45 -05:00
barisusakli
2fbaed9cdf moved nconf setup to loadConfig, fixed upload_url 2014-12-03 01:10:49 -05:00
psychobunny
fc00791125 a plugin's package.json can be invalid too 2014-12-02 21:57:21 -05:00
barisusakli
5576ef0d1e upgrade script to remove fields 2014-12-02 18:06:11 -05:00
barisusakli
e49dfc7266 cleaned up loader.js 2014-12-02 17:40:48 -05:00
barisusakli
83a679fc15 fixed wrong var 2014-12-02 16:51:14 -05:00
barisusakli
7a5383748c possible fix for #2492 2014-12-02 16:49:53 -05:00
psychobunny
c0bce71984 added some failsafe checks for filter:user.isModerator 2014-12-02 16:13:29 -05:00
psychobunny
6a47aacdfd forgot description 2014-12-02 15:34:34 -05:00
psychobunny
6a9145d90e some basic moderator tests 2014-12-02 15:33:28 -05:00
barisusakli
48337e4f51 check err 2014-12-02 15:13:18 -05:00
psychobunny
113d35887c moved admin.getVoters to posts.getVoters; now getVoters modal can be accessed by moderators as well 2014-12-02 14:59:29 -05:00
psychobunny
63367bd670 *user.isModerator*, duh 2014-12-02 14:21:17 -05:00
psychobunny
673145d413 added filter:users.isModerator 2014-12-02 14:19:14 -05:00
barisusakli
a3f0f58ebe update nconf, gm deps 2014-12-02 13:31:53 -05:00
barisusakli
ae1d226218 fix group test 2014-12-02 13:27:36 -05:00
barisusakli
612aa4e55b closes #2491 2014-12-02 12:38:53 -05:00
barisusakli
09a5d92dba correct method name 2014-12-01 23:22:02 -05:00
barisusakli
9075a8d4c9 added back isAdmin into admin middleware with a warning 2014-12-01 23:07:47 -05:00
barisusakli
97d01de155 fix acp 2014-12-01 22:57:57 -05:00
barisusakli
ddd6ed9e8c #2477 403 page 2014-12-01 21:07:23 -05:00
barisusakli
be11577aa4 closes #2477 2014-12-01 20:28:36 -05:00
barisusakli
9023060008 moved category redirect up 2014-12-01 17:59:38 -05:00
psychobunny
12e00ec497 hinting 2014-12-01 16:28:16 -05:00
psychobunny
77d0b095c8 closes #2488 2014-12-01 16:27:29 -05:00
Julian Lam
aa44894db2 fixing home breadcrumb, #1984 2014-12-01 16:11:44 -05:00
barisusakli
866adab648 removed console.log 2014-12-01 16:09:01 -05:00
Julian Lam
04dbd5766d latest language strings 2014-12-01 15:31:27 -05:00
Julian Lam
66bbbfcd22 fixed url being overwritten 2014-12-01 15:25:37 -05:00
Julian Lam
420649d3bd no longer setting sourcemap header for minifiedjs 2014-12-01 15:01:49 -05:00
barisusakli
d544b19220 set path on socket.io server 2014-12-01 14:59:12 -05:00
barisusakli
3a0b92a0e4 fix path for socket.io subfolder install 2014-12-01 14:52:21 -05:00
barisusakli
14a2db4b2e fix workerIndex for ipv6 2014-12-01 14:45:32 -05:00
Julian Lam
d16cfb89e0 extra log, #2246 2014-12-01 14:22:53 -05:00
Julian Lam
5cc30ca1a0 more cache hash fixes 2014-12-01 14:21:03 -05:00
Julian Lam
2e24224449 passing css hash to other workers on startup 2014-12-01 14:19:14 -05:00
Julian Lam
82708d65c6 propagating hash to all workers on css compilation 2014-12-01 14:05:20 -05:00
barisusakli
46e022e97f closes #2483 2014-12-01 13:24:13 -05:00
barisusakli
647b15c7ef Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-12-01 12:46:39 -05:00
barisusakli
7332ba9c25 fix loader for new config.json format 2014-12-01 12:36:59 -05:00
psychobunny
6fe093324a moved signature length setting out of settings/user and into settings/post; created new sub section for signatures 2014-12-01 12:25:05 -05:00
psychobunny
63a5002b53 closes #2441 2014-12-01 12:23:31 -05:00
psychobunny
92addc349b signatures:disableLinks and signatures:disableImages config options 2014-12-01 12:23:30 -05:00
barisusakli
957800b2c3 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-12-01 12:13:50 -05:00
Julian Lam
f00a3dbf49 minor fix to upgrade script 2014-12-01 12:03:42 -05:00
Julian Lam
604f883ac2 closed #2478 2014-11-30 23:53:35 -05:00
Julian Lam
1378e1155f fixed #2479 2014-11-30 23:44:15 -05:00
Julian Lam
682ba8fb1a upping vanilla and lavender minvers 2014-11-30 23:40:15 -05:00
Julian Lam
110fd863e4 fixing breadcrumbs for subfolder installs, #2122 2014-11-30 23:38:18 -05:00
Julian Lam
78763834fe closed #2122 2014-11-30 21:15:09 -05:00
Julian Lam
c120f5c2c6 travis CI again 2014-11-30 17:05:00 -05:00
Julian Lam
a0860abaaa no need to set bcrypt_rounds, only used in one place. 2014-11-30 16:49:53 -05:00
Julian Lam
598049e077 travis CI fixes again 2014-11-30 16:48:36 -05:00
Julian Lam
21fe3f2596 hopefully fixing travis CI 2014-11-30 16:30:25 -05:00
barisusakli
62609b2db6 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-30 15:38:43 -05:00
Julian Lam
7f43fd4843 bugfix #1984 2014-11-30 15:36:57 -05:00
barisusakli
1db2a447d7 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-30 15:36:42 -05:00
barisusakli
48ee8c1370 check err in tests 2014-11-30 15:36:17 -05:00
barisusakli
7f81a0b0ad Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-30 12:53:37 -05:00
barisusakli
51c520f888 closes #2480 2014-11-30 12:52:16 -05:00
barisusakli
3b8e31c31f Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-30 02:02:48 -05:00
barisusakli
f531a5362d #2254 proper fix 2014-11-30 02:02:32 -05:00
barisusakli
1723894e5a merge 2014-11-30 01:50:49 -05:00
barisusakli
fb3251c269 removed extra db call #2254 2014-11-30 01:44:46 -05:00
Julian Lam
03b106b03a final pass, #1984 2014-11-29 23:38:36 -05:00
Julian Lam
d430ef3983 second pass, #1984 2014-11-29 22:03:49 -05:00
Julian Lam
d5e473609c first pass, #1984 2014-11-29 21:54:58 -05:00
Julian Lam
dfbac595b6 refactors to sitemap, closed #2254 2014-11-29 21:18:02 -05:00
Julian Lam
9b0ba6c7a4 closed #2384 2014-11-29 20:50:14 -05:00
barisusakli
722d1497c3 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-29 12:35:31 -05:00
barisusakli
083ba12ee0 check err in emailer 2014-11-29 12:35:04 -05:00
barisusakli
142536b659 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-29 12:13:14 -05:00
barisusakli
83ab462ff5 module changes, fixed missing interval 2014-11-29 12:12:02 -05:00
barisusakli
510343b9d5 dont markAsRead for guests 2014-11-29 02:07:19 -05:00
barisusakli
e7a52b615b remove user from users:online on delete 2014-11-28 21:46:50 -05:00
barisusakli
392be78554 fix whitespace 2014-11-28 21:43:44 -05:00
barisusakli
0a2d543186 removed getUserSockets 2014-11-28 21:35:34 -05:00
barisusakli
fa92eb4d5c onDisconnect fix 2014-11-28 21:04:12 -05:00
barisusakli
4913866785 missing semicolon 2014-11-28 20:36:11 -05:00
barisusakli
0c5881b51f update online users regardless of status 2014-11-28 20:31:47 -05:00
barisusakli
17d7916fe9 check if worker exists 2014-11-28 20:00:41 -05:00
barisusakli
cbb3ff26e9 meta room count 2014-11-28 19:41:35 -05:00
barisusakli
1ffa498807 use shortcut 2014-11-28 19:40:47 -05:00
barisusakli
3a172711f4 socket.io index refactor 2014-11-28 19:33:07 -05:00
barisusakli
14a5de6d9d not used 2014-11-28 19:08:02 -05:00
barisusakli
f7c70e2a7a update all socket methods, works on single node 2014-11-28 19:06:07 -05:00
barisusakli
13609edf82 fix reqFromSocket for socket.io 1.x 2014-11-28 17:46:00 -05:00
barisusakli
2c89d50322 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-28 16:00:36 -05:00
barisusakli
f9405c0423 closes #2440 2014-11-28 15:49:16 -05:00
barisusakli
6760ce00cc removed unused msgs 2014-11-28 15:03:33 -05:00
barisusakli
49a73e1665 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-28 14:36:01 -05:00
barisusakli
c213f77f91 merge 2014-11-28 14:35:21 -05:00
Barış Soner Uşaklı
b8845181f6 missing now :( 2014-11-28 14:34:51 -05:00
Barış Soner Uşaklı
4d4f39a44f added missing db 2014-11-28 14:34:21 -05:00
Barış Soner Uşaklı
126f3182fd fix next 2014-11-28 14:30:43 -05:00
barisusakli
5ac5d20e4b users:online refactor 2014-11-28 14:25:11 -05:00
Julian Lam
1ce3c9ca2d no longer logging warnings for socket.io 2014-11-28 13:44:46 -05:00
Julian Lam
7ad242b981 using redis for user online list management if configured 2014-11-28 12:34:19 -05:00
Julian Lam
e952a873a8 moving onlineUsers from an in-memory variable to a sorted set 2014-11-28 11:50:29 -05:00
barisusakli
1abe35092b cluster socket.io fixes
close proxy server on loader.stop
changed handles to object
2014-11-27 15:36:05 -05:00
barisusakli
785790c414 moved handle close to fork worker 2014-11-27 14:09:01 -05:00
barisusakli
5521e6143f Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-26 22:31:14 -05:00
barisusakli
033e078aeb closes #2436 2014-11-26 22:30:21 -05:00
barisusakli
0674258793 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-26 22:11:31 -05:00
barisusakli
c12d90ddfb closes #2457 2014-11-26 22:10:38 -05:00
Julian Lam
8de2d1f58d closed #2459 2014-11-26 21:30:24 -05:00
barisusakli
2ecfcc582f Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-26 17:31:26 -05:00
barisusakli
d1fcb50c7d cluster sticky session 2014-11-26 17:24:49 -05:00
Julian Lam
b7c4647e9a added Bengali language to repo, তোমাকে ধন্যবাদ! 2014-11-26 13:37:12 -05:00
Julian Lam
8ca6d51d8d latest translations 2014-11-26 13:35:07 -05:00
Julian Lam
e97d5b2e0e closed #2456 2014-11-26 13:31:03 -05:00
Julian Lam
23b14b3443 moving nearly all startup messages to verbose type 2014-11-26 13:28:10 -05:00
barisusakli
99e0a02b4c Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-25 23:21:36 -05:00
barisusakli
ab2580cc5f fix human readable post count in topics 2014-11-25 23:20:29 -05:00
barisusakli
b6bd955131 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-25 23:09:28 -05:00
barisusakli
51436fd2d9 check privs on composer.push 2014-11-25 23:08:28 -05:00
barisusakli
4bed05a622 disable stuff that crashes in socket.io 1.x 2014-11-25 15:18:33 -05:00
barisusakli
396dffd60f Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-25 11:53:07 -05:00
barisusakli
916f1c7ce1 fix debug path on relative path install 2014-11-25 11:35:10 -05:00
barisusakli
08b0462695 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-24 22:05:34 -05:00
barisusakli
a69eafd9f7 added postcount to topic 2014-11-24 21:45:18 -05:00
psychobunny
0202666ed0 taking a break with an almost completely pointless commit 2014-11-24 20:09:23 -05:00
barisusakli
7cbaa90d36 update to socket.io 1.2.1, return_buffers option 2014-11-24 13:44:59 -05:00
barisusakli
04175c92d9 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-24 13:29:23 -05:00
barisusakli
80d7ae597b closes #2451 2014-11-24 13:28:48 -05:00
Julian Lam
a31525c79f Skipping digest sending if no notifs and no new topics, #2455 2014-11-24 13:22:10 -05:00
Julian Lam
1b526026a0 closed #2442 2014-11-24 12:48:21 -05:00
Julian Lam
1c21ca78dc preventing ctrl-f hijacking if no search plugin is installed 2014-11-24 12:38:44 -05:00
Julian Lam
fa39b5e46b closed #2446 2014-11-24 12:20:28 -05:00
Julian Lam
f5fce863f9 plugin warnings for v0.5.4+ when installing plugins with no suggested version, #2438 2014-11-23 17:02:25 -05:00
Julian Lam
ba9a5ad7d7 fixed #2448 2014-11-23 15:53:42 -05:00
barisusakli
6b23977a46 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-23 00:32:58 -05:00
barisusakli
7daf3a34a7 removed slice 2014-11-23 00:32:31 -05:00
barisusakli
1ea295ed1b #2449 2014-11-23 00:31:37 -05:00
barisusakli
e1758e0c36 closes #2449 2014-11-23 00:30:19 -05:00
barisusakli
9ea10ba8ec Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-21 12:28:39 -05:00
Barış Soner Uşaklı
bea1d053b4 closes #2443, closes #2445 2014-11-21 12:28:25 -05:00
barisusakli
552c56f3d1 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-21 11:44:35 -05:00
Barış Soner Uşaklı
2086ddf386 closes #2444 2014-11-21 11:44:06 -05:00
Julian Lam
354268bccd latest translations for french 2014-11-21 09:05:44 -05:00
barisusakli
fba0e95aeb Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-20 19:25:07 -05:00
Barış Soner Uşaklı
6581c90475 forgot one 2014-11-20 19:24:23 -05:00
barisusakli
7e6f29e007 Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-20 19:15:39 -05:00
Barış Soner Uşaklı
7b14716eb8 use data.url 2014-11-20 19:15:10 -05:00
barisusakli
702b1554fb Merge remote-tracking branch 'origin/master' into socket.io1.x 2014-11-20 19:02:47 -05:00
barisusakli
73fb653ddf emit works 2014-11-20 19:02:29 -05:00
psychobunny
c905f96108 closes #2412 2014-11-20 17:50:09 -05:00
Julian Lam
0b58e2fea3 minor tweaks to in-topic searching UI, #2442 2014-11-20 17:02:09 -05:00
barisusakli
82d863b9c8 deps, disabled all server side calls 2014-11-20 16:51:11 -05:00
Julian Lam
259f0f96f1 Merge pull request #2433 from bendem/patch-1
Fix nodeBB address in a few places
2014-11-20 16:38:36 -05:00
barisusakli
347e37a224 show warning and errors for socket.io also show info in dev 2014-11-20 15:53:23 -05:00
psychobunny
8d8731c609 closes #2436 2014-11-20 13:41:09 -05:00
psychobunny
35be69d6cd closes #2439 2014-11-20 13:22:45 -05:00
Julian Lam
3ad509b93a fixed #2434 2014-11-20 13:22:27 -05:00
barisusakli
fdf06c0500 fix upgrade script #2435 2014-11-20 12:42:55 -05:00
Julian Lam
fe7726d249 fixed #2431 2014-11-20 10:30:53 -05:00
bendem
0f4fcd8e0b fix nodeBB adresses 2014-11-20 12:08:53 +01:00
barisusakli
9cd352c49a removed extra space 2014-11-20 00:10:08 -05:00
barisusakli
d177481f94 chop chop 2014-11-19 23:37:55 -05:00
barisusakli
6012223b81 show message name, fix template name overwrite 2014-11-19 22:41:16 -05:00
psychobunny
9eb8924bf2 cleanup 2014-11-19 17:48:43 -05:00
barisusakli
9c1216eb63 closes #2432 2014-11-19 15:55:01 -05:00
barisusakli
d5453efdac added current template name to return 2014-11-19 14:14:35 -05:00
barisusakli
15c2b124e3 recent replies needs stripTags true
changed [self] to _
2014-11-19 14:13:00 -05:00
Julian Lam
6eef866320 closed #2429 2014-11-19 12:19:08 -05:00
Julian Lam
067d1ae404 adding client-side hook whenever composer renders a preview 2014-11-19 11:56:03 -05:00
barisusakli
21459fff84 use getPostsFromSet for recent replies 2014-11-19 11:02:28 -05:00
barisusakli
04afe7dc4b closes #2425 2014-11-19 10:38:47 -05:00
Julian Lam
e0fba796c7 Merge pull request #2426 from Schamper/image-upload-socket-fix
Fix the hook return object in the User.uploadProfileImageFromUrl socket
2014-11-19 08:29:17 -05:00
Julian Lam
7183187be8 latest translations 2014-11-19 08:20:10 -05:00
MrWaffle
969c3a77cf Fix the hook return object in the User.uploadProfileImageFromUrl socket 2014-11-19 13:45:12 +01:00
barisusakli
b919d2ee77 shorther 2014-11-18 23:31:17 -05:00
barisusakli
4be8f3ec75 closes #2316 2014-11-18 23:27:40 -05:00
barisusakli
0bb5971915 disconnect on error too 2014-11-18 23:23:35 -05:00
barisusakli
a445e3f7b1 use send for child process 2014-11-18 22:55:44 -05:00
barisusakli
871cf8a3b7 shorter getTeasers 2014-11-18 22:19:17 -05:00
Julian Lam
5292a47a96 fixed maintenance mode page not working with new CSRF implementation, #2424 2014-11-18 15:51:09 -05:00
barisusakli
b665aeee83 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-11-18 15:50:35 -05:00
barisusakli
81e4bcd358 fix rename to multi 2014-11-18 15:50:32 -05:00
Julian Lam
b06ff89e02 adding missing file, re: #2424 2014-11-18 15:22:26 -05:00
Julian Lam
deac12c540 closed #2424 2014-11-18 14:56:22 -05:00
barisusakli
4f38a33702 fix pagination going to 404 if new post creates a new page 2014-11-18 14:49:48 -05:00
barisusakli
10680d47b0 postCount only used once 2014-11-18 14:34:21 -05:00
barisusakli
d0bc5ec9c7 client/topics.js refactor
ability to dismiss all flags
2014-11-18 14:33:14 -05:00
barisusakli
78033dbf5c handled in events.js 2014-11-18 00:12:43 -05:00
barisusakli
d7c367ae91 moved new notification to events.js 2014-11-18 00:10:42 -05:00
barisusakli
7f5984d1fd removed dupe code 2014-11-17 23:57:31 -05:00
barisusakli
c974256600 missing radix 2014-11-17 23:41:45 -05:00
barisusakli
671ec8532c fix unfavourite 2014-11-17 23:32:39 -05:00
barisusakli
47c1092842 moved registerLoader/refresh to top 2014-11-17 23:12:45 -05:00
barisusakli
776fb29dce removed preloader leftovers 2014-11-17 23:08:50 -05:00
barisusakli
3d93a76508 removed command param made unvote wrapper 2014-11-17 21:45:52 -05:00
psychobunny
8c98f47688 action:post.upvote / action:post.downvote now sends current status; new: action:post.unvote 2014-11-17 19:24:41 -05:00
Julian Lam
0d6be40238 fixed #2406 2014-11-17 14:47:51 -05:00
barisusakli
14ba1ff8c0 closes #2352 2014-11-17 14:22:29 -05:00
Julian Lam
ae1528dc7e closed #2407 2014-11-17 14:07:34 -05:00
Julian Lam
2d79169855 latest fallbacks 2014-11-17 14:01:07 -05:00
Julian Lam
d51683f62e closed #2421 2014-11-17 13:37:13 -05:00
Julian Lam
2e2995d3bd updating dailyDigestFreq to 'day' instead of 'daily' 2014-11-17 13:37:13 -05:00
Julian Lam
c7396f58cd verbose logging for email 2014-11-17 13:37:13 -05:00
barisusakli
ee3b0c93c3 fix tag update
was hanging on tag remove, and wasnt updating if tag count didnt change
2014-11-17 13:37:00 -05:00
barisusakli
0864480433 forgot return 2014-11-17 12:45:30 -05:00
barisusakli
cb8ce066c8 give guests find read access on category creation 2014-11-17 12:39:07 -05:00
barisusakli
8b573bff39 send 10 topics in digest not 11 2014-11-17 12:32:29 -05:00
barisusakli
9791dfb9ea closes #2420 2014-11-17 12:21:51 -05:00
Julian Lam
23485fcbf3 missed one invocation of old LESS library, #2419 2014-11-17 11:31:11 -05:00
Julian Lam
207bfa8960 closed #2419 2014-11-17 11:26:03 -05:00
barisusakli
0a1fa72bd8 use loadMoreFromSet 2014-11-16 18:31:57 -05:00
barisusakli
32e08ba419 closes #2070 2014-11-16 17:29:45 -05:00
barisusakli
807d4b7e2e update template.js dep 2014-11-16 16:51:14 -05:00
barisusakli
114d0506e1 fixed typo 2014-11-16 16:46:40 -05:00
barisusakli
f0797493ee make sure sockets leave the current room when entering another 2014-11-16 16:37:31 -05:00
barisusakli
8e114c2093 moved isAdminOrMod check out of getTopicsByTids 2014-11-16 16:15:49 -05:00
barisusakli
a75727bbbd duh 2014-11-16 01:56:42 -05:00
barisusakli
653850661e topics.getTopics doesnt take set param 2014-11-16 01:33:11 -05:00
barisusakli
79265b9e83 removed dupe code 2014-11-16 00:58:02 -05:00
barisusakli
c1b61522f7 check if topic is deleted 2014-11-16 00:09:43 -05:00
barisusakli
c458a7f7b2 missing nconf require 2014-11-16 00:01:20 -05:00
barisusakli
9852809c2c cleanup 2014-11-15 23:54:34 -05:00
barisusakli
1d2d69fa45 use helpers, redis crash fix 2014-11-15 23:44:34 -05:00
barisusakli
556e7066e8 moved notFound notAllowed to helpers 2014-11-15 23:22:57 -05:00
barisusakli
f8cfd82667 less code in uploadimage 2014-11-15 22:50:05 -05:00
barisusakli
0a44d3f5e0 moved updateCategoryField out, db.delete only sends back err 2014-11-15 22:41:45 -05:00
barisusakli
d485b65b67 call next 2014-11-15 21:52:05 -05:00
barisusakli
9ab74b0a61 added ability to take heap snapshots 2014-11-15 19:09:44 -05:00
barisusakli
7825b8b951 closes #2416 2014-11-15 16:12:06 -05:00
psychobunny
2a88e08977 and one last derp 2014-11-15 14:57:32 -05:00
psychobunny
556d817cc5 forgot to return 2014-11-15 14:56:34 -05:00
psychobunny
458ee7cca8 acute ocd attack 2014-11-15 14:56:04 -05:00
psychobunny
bfaeee2531 linting 2014-11-15 14:48:23 -05:00
psychobunny
b511bc37fb don't initialize taskbar until dom is ready 2014-11-15 14:47:31 -05:00
barisusakli
9d56f50967 voters info 2014-11-15 12:37:22 -05:00
barisusakli
8330a6e6d9 added plugin reset info as well #2415 2014-11-14 22:18:24 -05:00
barisusakli
76933f4c37 closes #2415 2014-11-14 22:14:55 -05:00
barisusakli
30d7f3351b cid isnt always present 2014-11-14 22:07:24 -05:00
Barış Soner Uşaklı
36ac6f849f Merge pull request #2397 from joe1chen/bug-fix-topic-search
Bug fix - Topic search broken due to encodeURIComponent being called too early
2014-11-14 21:51:39 -05:00
barisusakli
02fb81901d moved posts related stuff to user/posts.js 2014-11-14 21:47:24 -05:00
barisusakli
d9a071d710 removed unused code from category and topic controller 2014-11-14 21:16:35 -05:00
barisusakli
cd05a123ab check cids 2014-11-14 20:43:52 -05:00
barisusakli
52c12fa1b1 use wrapper functions getPostsFields and getTopicsFields 2014-11-14 20:19:14 -05:00
Julian Lam
9a606246a9 more fallbacks 2014-11-14 20:02:04 -05:00
Julian Lam
d0770bcb95 latest translations and fallbacks 2014-11-14 20:00:07 -05:00
barisusakli
6b13a84d2f removed extra priv checks
-removed category check from recentreplies since pids are already
checked
-removed category check from topics/unread.js since topics are filtered
now
-added array checks to src/topics.js
2014-11-14 19:52:25 -05:00
barisusakli
5c7487c13b err check 2014-11-14 19:38:51 -05:00
barisusakli
283ac1578f fix null datetime error 2014-11-14 18:33:10 -05:00
barisusakli
f3309e3dd4 renamed to local registration
closes https://github.com/NodeBB/nodebb-theme-vanilla/issues/36
2014-11-14 18:11:21 -05:00
barisusakli
545dbbf0df check err and tids 2014-11-14 18:03:19 -05:00
Julian Lam
b65d518a97 properly handling error for hook filter:privileges.posts.filter 2014-11-14 17:53:20 -05:00
Julian Lam
9debfd94ec removed the hook I just added: filter:category.recent, was a bit misleading. 2014-11-14 17:42:33 -05:00
Julian Lam
20ea40133b added four new hooks: filter:categories.recent, filter:privileges.categories.get, filter:privileges.posts.filter, filter:privileges.topics.filter 2014-11-14 17:31:44 -05:00
psychobunny
b480bff3fd moved taskbar markup out of JS and into modules/taskbar.tpl 2014-11-14 17:15:57 -05:00
barisusakli
cd19bf156c update bcryptjs and validator 2014-11-14 17:14:44 -05:00
barisusakli
6ce1415cd4 update db search version 2014-11-14 17:13:18 -05:00
barisusakli
9ff35a18f2 closes #2261 2014-11-14 17:03:13 -05:00
psychobunny
1e453140d9 adding uid to filter:category.topics.get 2014-11-14 16:34:34 -05:00
psychobunny
abe887f557 filter:category.topics.get 2014-11-14 16:29:59 -05:00
psychobunny
c988f54243 renaming filter:category.topics.get to filter:category.topics.prepare 2014-11-14 16:28:59 -05:00
barisusakli
485827db84 check count before privileges 2014-11-14 16:22:05 -05:00
barisusakli
6a3a3669d2 check privs on getRecentReplies and getRecentTopicReplies 2014-11-14 16:20:40 -05:00
psychobunny
c7ca2e2573 fixing time derp if minutes are singular 2014-11-14 16:16:06 -05:00
barisusakli
b4daae9b23 closes #2307 2014-11-14 16:02:35 -05:00
psychobunny
3aa18ebb12 no need to inform attempt to listen to address 2014-11-14 15:40:08 -05:00
barisusakli
5c3af6f549 removed webserver.init 2014-11-14 15:31:45 -05:00
barisusakli
363057cf49 closes #2390 2014-11-14 15:19:26 -05:00
barisusakli
d1b457b066 check err 2014-11-14 14:09:29 -05:00
barisusakli
519b1b7e37 closes #2377 2014-11-14 13:36:37 -05:00
barisusakli
a1624013f8 closes #2400 2014-11-14 12:17:28 -05:00
Julian Lam
95e3c6f8a4 Merge pull request #2410 from joe1chen/add-topics-loaded-event
Add topics.loaded event to be triggered when new topics are loaded by infinite scroll.
2014-11-14 12:13:59 -05:00
barisusakli
05a4737e84 closes #2409 2014-11-14 11:32:56 -05:00
Joseph Chen
4f03e74b99 Add topics.loaded event to be triggered when new topics are loaded by infinite scroll. 2014-11-14 06:24:38 -08:00
barisusakli
61863a69fe sendfile is deprecated 2014-11-13 17:04:08 -05:00
psychobunny
2990b33dc6 linting 2014-11-13 16:47:38 -05:00
barisusakli
d9d44aee2b #2334 2014-11-13 16:33:03 -05:00
barisusakli
c24e451c12 closes #2401 2014-11-13 16:03:11 -05:00
barisusakli
181e2b4132 check err 2014-11-13 15:49:43 -05:00
barisusakli
e6973b55d4 closes #1990 2014-11-13 15:47:25 -05:00
barisusakli
962d14746e trim tag after substr
this prevents spaces in the middle of the tag from being added to the db
2014-11-13 15:02:20 -05:00
barisusakli
a45858dacd previous commit doesnt show unusud tags in admin 2014-11-13 14:36:44 -05:00
barisusakli
68e8039ac7 closes #2379
also fixed a bug where tags with 0 topics were showing up in /tags
2014-11-13 14:29:48 -05:00
psychobunny
45affa3043 closes #2399 2014-11-13 14:04:29 -05:00
psychobunny
a8402b228c updating winston timestamp 2014-11-13 13:52:52 -05:00
barisusakli
b3544f644a relative path upload fixes #2403 2014-11-13 13:00:36 -05:00
barisusakli
7f5617bc74 closes #2402 2014-11-13 11:44:26 -05:00
barisusakli
14fdb9ebee reverted 2014-11-13 11:37:42 -05:00
barisusakli
6809af536c removed winston log in plugin fireHook 2014-11-13 11:31:30 -05:00
barisusakli
4c7a4d3688 fix topicIndex, 2014-11-12 18:00:34 -05:00
barisusakli
05f33df098 manage/groups.js 2014-11-12 16:56:11 -05:00
barisusakli
bd388f727c src/favourites.js 2014-11-12 16:40:06 -05:00
barisusakli
9a16a359a8 auth refactor 2014-11-12 16:15:44 -05:00
barisusakli
fc0dce429b topic.reply checks with invalid parameters 2014-11-12 15:06:55 -05:00
barisusakli
834ca016ec topics.reply test 2014-11-12 14:34:06 -05:00
Julian Lam
c0fc7e9ca4 updating privilege handling to fire two new hooks, filter:privileges.topics.get and filter:category.topics.get 2014-11-12 14:33:25 -05:00
barisusakli
eada3daf9f fixed recent and unread 2014-11-12 14:11:04 -05:00
Julian Lam
6ea10aa7e3 ensuring that the filter:category.get hook always sends data in the same format 2014-11-12 11:07:11 -05:00
Julian Lam
7e35987e1b fixing regression for #2355, introduced in a129075 2014-11-12 10:58:46 -05:00
Julian Lam
c2467de9c2 added Greek language to NodeBB, Γεια σας και καλώς ήρθατε! 2014-11-12 08:29:08 -05:00
Julian Lam
872dd679e2 latest translations and fallbacks 2014-11-12 08:29:08 -05:00
Joseph Chen
f02fd88eaf Bug fix - Topic search broken due to encodeURIComponent being called too early. 2014-11-11 22:51:16 -08:00
barisusakli
964d531582 fix test really 2014-11-12 01:22:50 -05:00
barisusakli
385e034a23 fix tests 2014-11-12 01:19:40 -05:00
barisusakli
7a51520074 #2393 2014-11-12 00:24:25 -05:00
barisusakli
4e23fe7c3a more topic post tests 2014-11-11 23:12:37 -05:00
barisusakli
3029b19be6 fix test 2014-11-11 23:03:20 -05:00
barisusakli
15e472db12 on category creation give defaults privs to admins and registered users 2014-11-11 22:58:34 -05:00
barisusakli
2579d2535d closes #2396 2014-11-11 20:10:51 -05:00
barisusakli
fa5ac04cd3 src/topics.js cleanup 2014-11-11 19:47:56 -05:00
barisusakli
c9f990bb72 derp 2014-11-11 19:22:54 -05:00
barisusakli
7225c0d45b finish up posts refactor 2014-11-11 18:55:49 -05:00
Julian Lam
54ee8e59f6 showing proper time for newbie post delay 2014-11-11 18:38:31 -05:00
barisusakli
d2cddc734b fix flagging and post filter
cant flag posts that don't exist anymore
2014-11-11 18:34:29 -05:00
barisusakli
11dc477dde posts/categories.js 2014-11-11 18:22:50 -05:00
barisusakli
e593c8e6b1 setFields makes more sense 2014-11-11 18:14:45 -05:00
barisusakli
fa95012fa3 action:set,postField 2014-11-11 18:13:15 -05:00
barisusakli
1413478a68 ill get it right this year 2014-11-11 18:08:50 -05:00
barisusakli
003535b3ab filter:post.getFields again 2014-11-11 18:08:03 -05:00
barisusakli
383fa4d0ea filter:post.getFields change 2014-11-11 18:05:42 -05:00
barisusakli
604dac88e3 closes #2382, closes #2130 2014-11-11 17:25:16 -05:00
psychobunny
70b5c631c6 if dev, compile view scripts only; let rjs dynamically load module scripts
fixes a bug introduced @ 11c83079f2
2014-11-11 13:53:32 -05:00
psychobunny
9726e599e4 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-11-11 13:30:59 -05:00
psychobunny
1b9297fa31 until now, this variable was never false... so I'm just removing it
@julianlam just in case
2014-11-11 13:30:55 -05:00
psychobunny
02b6a7893a in dev mode, concatenate scripts instead of minifying
faster reboot & restores sanity to those trying to debug browser
specific issues on IE and FF. not that you have much sanity to begin
with if it's an IE bug...
2014-11-11 13:30:16 -05:00
Julian Lam
286d14f614 allowing use of winston.verbose now 2014-11-11 13:18:46 -05:00
psychobunny
11c83079f2 if env is dev, don't re-compile rjs files
faster reboot & easier to debug on browsers that don't support
sourcemaps
2014-11-11 13:12:09 -05:00
psychobunny
8de978fbcf lmao, wtf?
my brain just exploded trying to figure out what this is doing here
2014-11-11 13:07:54 -05:00
psychobunny
d5d686b701 Merge pull request #2392 from a5mith/patch-3
ACP Text Colour
2014-11-11 12:13:50 -05:00
Aaron Smith
f2b0068b32 ACP Text Colour
Replaces my other commit.
2014-11-11 17:05:36 +00:00
psychobunny
db157da3fb fixes potential IE8 crash (both toISOString and console.log don't exist)
not that client-side calls this anyways
2014-11-11 11:44:49 -05:00
psychobunny
0580773331 random console.log 2014-11-11 11:38:29 -05:00
psychobunny
d69054804e closes #2391 2014-11-11 11:37:32 -05:00
Julian Lam
73dea4fc4e upvote and favourites notif fixing 2014-11-11 09:41:28 -05:00
Julian Lam
f9f1cf63cf fixing topic deletion and purging 2014-11-10 16:52:45 -05:00
Julian Lam
5281c8c376 Merge pull request #2381 from akhoury/patch-3
could you explicitly specify the last 4 rules?
2014-11-10 14:13:29 -05:00
Aziz Khoury
535529923c why leave json files out? 2014-11-10 13:26:07 -05:00
Aziz Khoury
a17ecefd20 could you explicitly specify the last 4 rules?
I put in some values in there, as placeholders, feel free to change them, and I will follow
so we can have a standard, and developers can choose to have the same across plugins as well
2014-11-10 13:16:48 -05:00
Julian Lam
c7e731f4c4 Merge branch 'master' of github.com:NodeBB/NodeBB 2014-11-10 12:42:56 -05:00
Julian Lam
b2625a1bf0 upping spam-be-gone minver 2014-11-10 12:42:44 -05:00
psychobunny
91103fb09e updating widget-essentials to 0.2.0 ** 2014-11-10 12:02:03 -05:00
psychobunny
121fb88008 updating widget-essentials to 0.1.2 2014-11-10 11:53:08 -05:00
psychobunny
aa6137b9c3 fixed potential XSS in registration form 2014-11-10 11:46:15 -05:00
barisusakli
c18de5cdd2 posts/recent.js refactor 2014-11-09 01:30:27 -05:00
barisusakli
ef35b83806 use getPostsFields 2014-11-09 01:24:12 -05:00
barisusakli
263f479b20 posts.js refactor pt1 2014-11-09 01:12:24 -05:00
barisusakli
39def60f9b return empty array 2014-11-09 00:45:18 -05:00
barisusakli
420aa5e102 fix moderators 2014-11-09 00:33:26 -05:00
barisusakli
8294aec5e7 fixed indent 2014-11-09 00:01:46 -05:00
barisusakli
8fdc03eaad categories.js refactor 2014-11-08 23:54:21 -05:00
barisusakli
daebc322eb meh 2014-11-08 23:36:38 -05:00
barisusakli
7823416410 err check, assignPostsToCategory is sync 2014-11-08 23:22:10 -05:00
barisusakli
af4cbfb20d closes #2368 2014-11-08 18:40:38 -05:00
barisusakli
d2735c8558 closes #2370 2014-11-08 17:38:03 -05:00
barisusakli
3f12d363f7 plugins fireHook refactor
(drunk)
2014-11-08 17:12:38 -05:00
barisusakli
e93b2b6aa1 removed action:app.load 2014-11-08 16:15:24 -05:00
barisusakli
41ae8b61a7 static:app.load change closes #1527 2014-11-08 15:20:56 -05:00
barisusakli
220c82a8f2 filter:register.complete change #1527 2014-11-08 15:01:56 -05:00
barisusakli
76c16c0383 filter:register.check change #1527 2014-11-08 14:57:04 -05:00
barisusakli
166f353aaa filter:register.build change #1527 2014-11-08 14:51:05 -05:00
barisusakli
8be9e6d413 action:user.verify change #1527 2014-11-08 14:41:49 -05:00
barisusakli
9363741231 action:user.set change #1527 2014-11-08 14:38:56 -05:00
barisusakli
2e1a098cfa fix multi selection if category has sub categories 2014-11-08 14:35:51 -05:00
barisusakli
db979d7a20 filter:category.get change #1527 2014-11-08 14:21:58 -05:00
Julian Lam
f3ea8d1cff closed #2367 2014-11-08 10:22:31 -05:00
Julian Lam
74630b3a79 closed #2360 2014-11-08 10:20:40 -05:00
barisusakli
c56b9aafff closes #2289, replace Infinity with '+inf' 2014-11-07 19:40:41 -05:00
barisusakli
dcba272dc5 fix not validated messages on manage/users on IS 2014-11-07 19:25:57 -05:00
barisusakli
5f8781c88e 1 less db call in togglePin 2014-11-07 19:15:26 -05:00
barisusakli
467fb1ab4a dont deselect on delete/purge closes #2352 2014-11-07 18:48:57 -05:00
Julian Lam
93f414892b closed #2361 2014-11-07 18:38:03 -05:00
Julian Lam
e0436d73c3 #2361 2014-11-07 18:22:27 -05:00
barisusakli
c95f151bfc closes #2364
dont crash if icon is not found
2014-11-07 18:13:08 -05:00
barisusakli
69ed00fc14 added mainPid to topic restore/edit hooks 2014-11-07 17:50:16 -05:00
barisusakli
642136f6f8 closes #2357 2014-11-07 17:46:03 -05:00
barisusakli
b60ed95d20 Merge remote-tracking branch 'origin/master' 2014-11-07 17:15:06 -05:00
barisusakli
1ae39d638a closes #2356 2014-11-07 17:15:01 -05:00
Julian Lam
f0b104fef0 possible fix to #2365 2014-11-07 17:05:25 -05:00
psychobunny
d77bd638c4 don't re-enable selectable on elements that were already enabled #2336 2014-11-07 16:16:32 -05:00
psychobunny
6ae5b09a01 closes #2336 2014-11-07 16:09:47 -05:00
Julian Lam
52285239e9 fixed client-side so semver doesn't explode when nbbpm returns 'latest', fixed tests so they pass again, #2363 2014-11-07 15:04:07 -05:00
Julian Lam
19297e2d22 plugin installation takes a version now, and queries nbbpm, #2363
better error handling for #2363

upgrades now also call the suggestion route from nbbpm

upgrade button will show alert now if you try to upgrade past the suggested version, #2363
2014-11-07 14:45:40 -05:00
Julian Lam
0f66077bf5 fixed issue where purged posts would cause the upgrader to fail, closed #2359 2014-11-07 10:50:25 -05:00
Barış Soner Uşaklı
b6ee472276 Merge pull request #2358 from joe1chen/0.6.x-fix-file-upload
Bug fix - File upload broken due to api changes in 0.6.x.
2014-11-06 22:08:24 -05:00
Joseph Chen
cd41df5677 Pass in req.user.uid into uploadFile 2014-11-06 19:03:53 -08:00
Joseph Chen
a1e54fda23 Bug fix - File upload broken due to api changes in 0.6.x. 2014-11-06 17:33:58 -08:00
Julian Lam
11c9b74faf upgrade script for #2355, closes #2355 2014-11-06 18:58:00 -05:00
Julian Lam
a12907512f refactored a bunch of methods so that you can pass in an author argument in querystring to see posts by just that author, #2355 2014-11-06 18:57:52 -05:00
barisusakli
3272ca34ee 0.6.0 cleanup 2014-11-06 17:33:10 -05:00
barisusakli
4440260f8f closes #2275 2014-11-06 17:06:58 -05:00
barisusakli
1004fb2822 closes #2354 2014-11-06 16:29:14 -05:00
barisusakli
72bb74cf46 canMessage 2014-11-06 12:57:59 -05:00
psychobunny
fa2f03aeca closes #2339 2014-11-06 00:53:18 -05:00
psychobunny
2e4198b8f1 removing unnecessary markup 2014-11-06 00:53:17 -05:00
barisusakli
f3d485bd58 filter:user.account 2014-11-06 00:29:06 -05:00
barisusakli
719290cd2b dont display email/fullname if they are private 2014-11-05 23:58:49 -05:00
Julian Lam
97633fe01e updating markdown and mentions minvers 2014-11-05 23:46:05 -05:00
psychobunny
6452596312 if sigs are disabled, actually disable them 2014-11-05 23:32:57 -05:00
barisusakli
9e1789dc58 closes #2297 2014-11-05 20:41:31 -05:00
barisusakli
39b679705b closes #2248 2014-11-05 19:29:45 -05:00
barisusakli
595ff1f4b1 closes #2303
see
https://community.nodebb.org/topic/3039/filter-post-parse-and-filter-post-parsesignature-changes
2014-11-05 18:59:20 -05:00
barisusakli
a6e498bb5d error check 2014-11-05 16:48:12 -05:00
Barış Soner Uşaklı
b89b960f86 Merge pull request #2328 from dwendt/master
Made hiding widgets for guests/registered sensible.
2014-11-05 16:44:54 -05:00
barisusakli
608943255b better check 2014-11-05 16:42:32 -05:00
barisusakli
ec0624918f possible fix for #2351 2014-11-05 13:35:15 -05:00
barisusakli
e5cc45a95b if category is not found return
if cid is a child category it wont be on home
2014-11-04 23:55:42 -05:00
barisusakli
70657251b9 no need for return 2014-11-04 23:30:11 -05:00
Julian Lam
44175188c4 handling case where user does not satisfy any of the privilege thresholds given to the hasEnoughReputationFor method 2014-11-04 23:19:28 -05:00
barisusakli
06f66337fb anon checks
less db calls for uid 0
2014-11-04 19:06:01 -05:00
Julian Lam
0a38a783c7 TravisCI is TOO DAMN FAST 2014-11-04 18:59:26 -05:00
Julian Lam
8e0e2a04be restored the toolbar on mobile composer, #2293 2014-11-04 18:54:48 -05:00
barisusakli
37d7756271 hasEnoughRep can take an array
user follow uid checks
2014-11-04 18:44:08 -05:00
Julian Lam
9a8fa35d8d flushing db after every test group that touches the db 2014-11-04 18:39:25 -05:00
Julian Lam
4125a087b5 closed #2349, removed use of deprecated -d flag in executable 2014-11-04 18:33:20 -05:00
Julian Lam
783481e644 Support for reloading nodebb via the nodebb executable 2014-11-04 18:33:20 -05:00
barisusakli
df4b555717 less db calls
no db call for settings if uid 0
no db call for isFollowing if uid 0
2014-11-04 18:31:21 -05:00
barisusakli
b7dcc29638 log error path as well 2014-11-04 18:06:11 -05:00
barisusakli
cdfaa941b1 error checks missing return 2014-11-04 17:57:31 -05:00
barisusakli
04c83dbdcc update deprecated sendfile 2014-11-04 17:34:05 -05:00
Julian Lam
dfc7c7aa7f #2350 :shipit: 2014-11-04 17:28:24 -05:00
Julian Lam
0e9fdc9a09 fixed #2350 -- chat modal now opens, but input is disabled 2014-11-04 17:23:39 -05:00
barisusakli
e09328c74d #2346
dont bring modal to front if u receive a message
2014-11-04 17:03:31 -05:00
barisusakli
38874345b7 closes #2346 2014-11-04 16:49:02 -05:00
barisusakli
e769ebe668 closes #2347 2014-11-04 15:56:33 -05:00
barisusakli
dd135b875b #2347
dont show flag on deleted posts
dont allow flag on deleted posts
dont allow upvote downvote favourite on deleted posts
2014-11-04 15:19:30 -05:00
barisusakli
268ecd5157 single call to get slug and postcount 2014-11-04 14:54:30 -05:00
barisusakli
f21b313848 reload/restart notices side by side 2014-11-04 13:55:20 -05:00
Julian Lam
ac2cc8cae6 updating development versioning for master branch 2014-11-03 16:48:45 -05:00
barisusakli
5f3f4ef74e closes #2266 2014-11-03 15:37:25 -05:00
barisusakli
d492339841 closes #2315 2014-11-03 15:31:41 -05:00
barisusakli
7bfc36ff56 dont call isAdmin if not logged in 2014-11-03 15:09:24 -05:00
barisusakli
209edf182f 404 pages that are out of range 2014-11-01 17:55:42 -04:00
Barış Soner Uşaklı
80d04e2de5 Merge pull request #2343 from datagutt/patch-1
Update translator mapping for norwegian
2014-11-01 17:46:24 -04:00
barisusakli
9440f8f8cd #2344 2014-11-01 17:32:56 -04:00
barisusakli
84b7a2c92d checks in socket.io/user
reset doesnt need socket
2014-11-01 16:55:50 -04:00
barisusakli
8e84e47578 if a user is deleted remove from banned sorted set as well 2014-11-01 15:11:47 -04:00
barisusakli
fd70ba5647 fix titles on ajaxify 2014-11-01 15:08:12 -04:00
Thomas Lekanger
e0975b85df Update translator mapping for norwegian 2014-11-01 18:46:58 +01:00
barisusakli
f83dd956eb check if post exists on up/down vote favourite 2014-10-31 22:27:50 -04:00
barisusakli
fcc42883ab some checks for purge 2014-10-31 22:04:09 -04:00
barisusakli
d43e8beb60 fix acp topic graph disappearing
clear usedColors on ajaxify, once it was filling up the graph was never
updating after ajaxify
2014-10-31 20:30:07 -04:00
barisusakli
56d16d1792 fix topic titles in search results
titles were being escaped twice if two or more posts were from the same
topic
2014-10-31 19:57:32 -04:00
barisusakli
7c7be2e0c1 closes #2337 2014-10-31 19:21:37 -04:00
barisusakli
6353ed57a9 duh fixing my fail from last night 2014-10-31 17:44:06 -04:00
barisusakli
1fe82ee452 added 2 new methods to dbal
getSortedSetRangeWithScores
getSortedSetRangeByScoreWithScores
2014-10-31 17:19:55 -04:00
Julian Lam
c44068db52 latest translations and fallbacks 2014-10-31 17:12:21 -04:00
Julian Lam
a7bc05aeb6 less formal language for #2335 2014-10-31 17:07:32 -04:00
Julian Lam
a7d028e29b bundling spam-be-gone with all nodebb install, ping @akhoury, closes #2332 2014-10-31 14:54:17 -04:00
Julian Lam
ec309333be closed #2335 2014-10-31 13:31:25 -04:00
Julian Lam
de0da80040 Merge branch 'master' of github.com:NodeBB/NodeBB 2014-10-31 13:25:30 -04:00
Julian Lam
b91d39a0d3 almost everything for #2335 2014-10-31 13:22:42 -04:00
heart
c38ca146c7 Made hiding widgets for guests/registered sensible. 2014-10-31 02:10:40 -04:00
psychobunny
0a1b31e6bc small change to gitignore re: logs 2014-10-31 01:56:45 -04:00
barisusakli
fb1095fc28 added allowed true to /chats 2014-10-31 01:50:24 -04:00
psychobunny
de8c1ece14 adding to contributing.md 2014-10-31 00:48:29 -04:00
barisusakli
e97bfc139b #1848 2014-10-30 23:14:33 -04:00
barisusakli
0ede4abe18 possible fix for #1848 2014-10-30 22:47:15 -04:00
barisusakli
0bb0424998 bubble error 2014-10-30 22:19:11 -04:00
barisusakli
e93398b647 use currentTime when someone up/down votes 2014-10-30 19:37:22 -04:00
Julian Lam
61aaff025b adding in 'allowed' to template, re: #2321 2014-10-30 18:05:48 -04:00
barisusakli
b12e3562d5 hide category icons if they are not set 2014-10-30 18:04:49 -04:00
Julian Lam
adfb89a2ad closed #2321 2014-10-30 17:50:27 -04:00
Julian Lam
28f87cc776 added tests for messaging method .canMessage 2014-10-30 17:50:27 -04:00
Julian Lam
a992638ef3 removed level from testmock error msg 2014-10-30 17:50:27 -04:00
barisusakli
41d806f67f removed unused language string 2014-10-30 16:52:09 -04:00
barisusakli
433769eb36 closes #2146
first tab (recent) shows last 50 messages instead of just last 24 hours
2014-10-30 16:51:15 -04:00
barisusakli
121de11400 closes #2323 2014-10-30 14:21:44 -04:00
psychobunny
ca87bc1577 Merge pull request #2320 from lpeachl/patch-1
Update language.json
2014-10-30 09:26:28 -04:00
lpeachl
9b481b23f3 Update language.json 2014-10-30 19:31:20 +07:00
psychobunny
50b264ac7d prevent deleted users belonging to a group from breaking edit functionality 2014-10-29 21:07:46 -04:00
psychobunny
4d4dc344a6 temporary fix until remarkable is updated in markdown plugin
https://github.com/jonschlinkert/remarkable/issues/88#issuecomment-60885589
2014-10-29 21:07:45 -04:00
psychobunny
2c555687e7 removed old copy from when we used to have ubuntu instructions on the main page 2014-10-29 01:55:26 -04:00
barisusakli
189eaf2bea escape output 2014-10-29 00:47:16 -04:00
barisusakli
fbd478812e fail modeon 2014-10-29 00:33:09 -04:00
barisusakli
1b268c94c0 if there is no postData.tid dont notify, ie topic post 2014-10-29 00:10:57 -04:00
barisusakli
cbedc762fd no rooms.enter for anons check tid on topic enter 2014-10-28 23:56:33 -04:00
barisusakli
0fba1e37a7 no need for double trim :P 2014-10-28 18:41:34 -04:00
barisusakli
5be1c17aa7 refactor user.create
dont fire filter:user.create if there userData is invalid
2014-10-28 18:28:26 -04:00
barisusakli
bce96d04c7 forkWorker function, pipe new worker output to log 2014-10-28 16:33:14 -04:00
barisusakli
4c8287251a added stderr piping to output 2014-10-28 16:12:05 -04:00
barisusakli
50a06f9369 log signal as well 2014-10-28 15:48:03 -04:00
barisusakli
f19bc2e2be removed error.log everything will go to output.log 2014-10-28 15:30:52 -04:00
barisusakli
20314991a4 tmp error check 2014-10-28 00:33:58 -04:00
barisusakli
a4533703d4 fix sort by vote insertion 2014-10-28 00:17:28 -04:00
barisusakli
c5ba327d8f fix empty pages 2014-10-27 23:20:40 -04:00
barisusakli
b12476c422 if a post is purged, remove it from flagged posts as well 2014-10-27 21:44:15 -04:00
barisusakli
1bcdae41b8 make images in manage/flags responsive 2014-10-27 21:28:46 -04:00
barisusakli
9e77960ee1 #2308 check if latest is greater by semver 2014-10-27 20:35:03 -04:00
psychobunny
25c7dfbc12 fix crash if socket.handshake is null 2014-10-27 20:23:16 -04:00
barisusakli
3d5e72bbc8 fix null parents 2014-10-27 02:58:20 -04:00
barisusakli
9909f8ba79 more err checks 2014-10-27 01:49:57 -04:00
barisusakli
18462c4190 derp 2014-10-27 00:59:52 -04:00
barisusakli
698d113857 error checks in middleware/admin 2014-10-27 00:54:26 -04:00
barisusakli
eaf89dc316 use parseSignature 2014-10-26 22:02:44 -04:00
barisusakli
a4d671f8b8 fix popular pill selection 2014-10-26 21:44:09 -04:00
barisusakli
238fb0bd4b removed logout log 2014-10-26 21:02:51 -04:00
barisusakli
c74370bfb1 removed recent/day week month
it starts with most recent 20 topics now and goes back instead of
showing empty if there are no new replies in the past 24 hours
2014-10-26 20:26:56 -04:00
barisusakli
c4a39c8163 use processSortedSet instead of getting all users 2014-10-26 20:10:57 -04:00
barisusakli
782896997d post count fix for post move 2014-10-26 19:13:48 -04:00
barisusakli
56947b999e added timestamps to winston logs 2014-10-26 18:46:50 -04:00
barisusakli
d2cc4b8516 possibly fixes 2301 2014-10-26 18:02:40 -04:00
barisusakli
35e2e1462b closes #2295 2014-10-26 17:04:55 -04:00
barisusakli
63cf8d674d listen disconnect event, display unknow socket method name on dev 2014-10-26 14:30:13 -04:00
barisusakli
dfae2ea0d7 fix new topics showing up in all categories on post 2014-10-26 14:26:21 -04:00
barisusakli
699b74603b only for logged in users 2014-10-25 19:22:13 -04:00
barisusakli
4c90c9a759 closes #2291 2014-10-25 19:19:47 -04:00
barisusakli
ca9cc6b32f show latest plugin version for uninstalled plugins as well 2014-10-24 17:47:27 -04:00
barisusakli
081efd22e2 prevent crash if category is not found 2014-10-24 15:35:10 -04:00
barisusakli
a7bb5893e8 fix dupe event listeners on category
only happens if you navigate from category to category
2014-10-24 15:05:37 -04:00
Julian Lam
0a81898810 grammar fix 2014-10-24 00:16:27 -04:00
Julian Lam
a9c528eb23 added instructions for responsible disclosure, and use of git bisect for regression testing, closed #2280 2014-10-24 00:12:18 -04:00
Julian Lam
9215930cfc fixed #2292 2014-10-24 00:01:08 -04:00
barisusakli
6e62c48f41 call package manager
get latest version from versions object
2014-10-23 22:38:28 -04:00
barisusakli
89613d2346 closes #2287 2014-10-23 22:26:52 -04:00
barisusakli
a8760cd2bc only ban once for low rep
also only check on downvotes
2014-10-23 18:05:40 -04:00
barisusakli
c753edab1d fix duplicate event listeners
they were duplicated if you navigated from topic to topic
2014-10-23 16:32:16 -04:00
Julian Lam
ffdc4b5d24 fixed places where site_title was being referenced in config, instead of the correct "title" 2014-10-23 15:47:25 -04:00
Julian Lam
8112ca73c8 reloading on plugin activation click instead of restart 2014-10-23 15:21:44 -04:00
barisusakli
f295083a08 fix upload error messages 2014-10-23 15:01:36 -04:00
barisusakli
802c8b15e2 fix upgrade script to include main post, and fix post indices 2014-10-22 19:33:47 -04:00
barisusakli
9a21e9646f only use multipart on upload routes,
delete temp files if there is an error in admin,
admin/mods should see topic reply
2014-10-22 18:26:01 -04:00
Julian Lam
67770e568f removed some console logging 2014-10-22 17:59:21 -04:00
Julian Lam
b95710b2c9 french typo 2014-10-22 17:50:26 -04:00
Julian Lam
a9a32bff50 latest french translations 2014-10-22 17:46:08 -04:00
barisusakli
c5224d099e parseInt show title 2014-10-22 17:22:47 -04:00
barisusakli
fd00dddd62 admin/mods always gets the reply privs 2014-10-22 16:12:29 -04:00
Julian Lam
aac923fb03 fised #2272 2014-10-22 13:47:05 -04:00
Julian Lam
62d85b0e26 updated installation data to only create four categories by default, and altered colour to be less stark (heh, what does that mean anyway...). Also added an intro post 2014-10-22 13:26:34 -04:00
Julian Lam
8468a84047 latest fallbacks 2014-10-22 12:30:15 -04:00
Julian Lam
07a54b9510 latest translations 2014-10-22 11:54:36 -04:00
Julian Lam
afa86c03c4 fixing language for nb -- closed #2288 2014-10-22 11:30:50 -04:00
barisusakli
ec9bf48477 admins/mods can always read topics 2014-10-21 18:09:32 -04:00
Julian Lam
a28b4bb8b9 fixed maintenance mode assets not being loaded properly 2014-10-21 15:58:30 -04:00
Julian Lam
1a90de7dd6 added new --from-file flag that will load js/css from the precompiled file instead of recompiling it on startup 2014-10-21 15:36:13 -04:00
barisusakli
ebfb953069 responsive images in group page 2014-10-21 15:24:50 -04:00
barisusakli
dcf2691a12 fix indent 2014-10-21 14:42:18 -04:00
Barış Soner Uşaklı
591a8b6b12 Merge pull request #2270 from stevelacy/master
Add user.updateProfile - hook user profile updates
2014-10-21 14:40:45 -04:00
barisusakli
1b80e6dbb2 fix email update on mongo 2014-10-21 14:17:30 -04:00
barisusakli
55a5d56989 fixed view count for guests 2014-10-21 13:59:40 -04:00
barisusakli
3e4b6c97a0 closes #2286 2014-10-21 13:48:50 -04:00
barisusakli
b5fe2c7b91 closes #2255
if user is banned log them out on header render
2014-10-20 16:36:00 -04:00
barisusakli
b23373c265 parseInt maintenance mode 2014-10-20 16:14:31 -04:00
barisusakli
f15631c3e1 topic notification nid doesn't need post id 2014-10-19 18:41:54 -04:00
barisusakli
6dd035a5af prevent crash if topic graph is clicked while not loaded 2014-10-19 18:37:11 -04:00
barisusakli
7de9b998b5 fix typo in ajaxify, closes #2279 2014-10-19 17:11:05 -04:00
barisusakli
3f28dbb1be update ACP every 10 seconds 2014-10-19 16:47:52 -04:00
barisusakli
224218f519 fix missing callback 2014-10-19 16:39:36 -04:00
barisusakli
e9ec225d5b removed isConnected check 2014-10-19 16:13:10 -04:00
barisusakli
4db31be7e3 #2200 actually fix dupe colors, show 10 topics 2014-10-19 15:59:33 -04:00
barisusakli
304f5b1c76 removed duped and empty bodyLong 2014-10-18 17:02:37 -04:00
barisusakli
6802bf7ce9 closes #2284 2014-10-18 16:45:39 -04:00
Steve Lacy
2d238e61ac correct object 2014-10-17 23:15:13 -07:00
Julian Lam
c2fb1eaabf updated master to report 0.5.3-dev 2014-10-18 00:29:20 -04:00
barisusakli
b209fb563e #2218 2014-10-17 23:29:28 -04:00
barisusakli
794d6eb9ab closes #2200 2014-10-17 23:14:17 -04:00
barisusakli
94ffe5d170 closes #2276 2014-10-17 23:04:50 -04:00
barisusakli
02f74ca032 fix browsing users removal 2014-10-17 20:49:16 -04:00
psychobunny
1eb1eb6844 #2278 2014-10-17 19:38:49 -04:00
psychobunny
ded8de905d closes #2278 2014-10-17 19:37:13 -04:00
barisusakli
d2334fbb4a dont search empty string, get 20 tags instead of 10 2014-10-17 19:12:18 -04:00
barisusakli
93d4a7c1f1 fix notifications to actually get recent 2014-10-17 18:51:58 -04:00
barisusakli
6cb5f9c098 emit stats to registered users only 2014-10-17 18:46:17 -04:00
barisusakli
c5e1f8e0aa user onlineUsers instead of calculating from rooms 2014-10-17 18:40:20 -04:00
barisusakli
7bf655541c cleanup and optimize notifications 2014-10-17 18:31:20 -04:00
barisusakli
cfd7edbf34 added nid 2014-10-17 17:23:47 -04:00
barisusakli
24de757549 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-10-17 17:20:48 -04:00
barisusakli
b5fb7691cd optimize getUnreadByField
only get the most recent 100 notifications
dont call UserNotifications.getNotifications which does alot more work,
call the db directly
2014-10-17 17:20:45 -04:00
Julian Lam
75aa3f1006 updating markdown minimum version to 0.7.x and up 2014-10-17 13:44:47 -04:00
psychobunny
8ef4ad6f14 Revert "reverting #2259 temporarily until we figure out why logs aren't showing up"
This reverts commit 59b3e6f78f.
2014-10-17 01:47:13 -04:00
psychobunny
59b3e6f78f reverting #2259 temporarily until we figure out why logs aren't showing up 2014-10-17 01:43:00 -04:00
barisusakli
3ba4d2aa2b get correct count only from one of the active users elements 2014-10-17 01:11:55 -04:00
barisusakli
fec84821b7 removed this wasn't the problem after all 2014-10-16 20:03:22 -04:00
barisusakli
762b2fff37 display user count in browsing 2014-10-16 18:04:04 -04:00
barisusakli
df590d01e6 set key as well
not sure if this fixes dupe keys
2014-10-16 02:02:16 -04:00
barisusakli
9e8be432b3 notification changes
-only send a notification when the person you follow creates a topic
-you still get a notification per post if you are following a topic
-changed notifications.push so that it sends the notifications over a
period of time, currently to 50 users per second
-optimized topics.notifyFollowers and
user.notifications.sendTopicNotification, they no longer query the
database for the topic and post data instead they get it as params
-you can no longer follow yourself :)
-changed mongo sortedSetRemove so that it doesn't use $in if there is
only a single value to remove
2014-10-15 21:55:31 -04:00
Steve Lacy
d01497dde3 Merge branch 'master' of https://github.com/stevelacy/NodeBB 2014-10-15 16:27:01 -07:00
Steve Lacy
3ff7719cd4 add hook: filter: user.updateProfile 2014-10-15 16:26:40 -07:00
barisusakli
eb546dfaab temp until package manager is in place 2014-10-15 16:26:50 -04:00
barisusakli
834c4f8ff0 log stack 2014-10-15 16:19:27 -04:00
barisusakli
80489c6564 log post purges 2014-10-15 15:57:37 -04:00
barisusakli
90224d2de3 removed unique for now 2014-10-15 15:25:51 -04:00
barisusakli
f2883c2c9f createIndex helper 2014-10-15 15:11:01 -04:00
barisusakli
1be6a253bf make _key value index unique 2014-10-15 15:07:30 -04:00
barisusakli
72a919e416 time based check 2014-10-15 14:49:11 -04:00
barisusakli
f318f2f815 move out update, should work even if post isnt in dom 2014-10-14 23:57:27 -04:00
barisusakli
b3e83d2f9a update post count on purge 2014-10-14 23:41:58 -04:00
barisusakli
8471fcbd79 fixed typo 2014-10-14 23:36:59 -04:00
barisusakli
4b1adba9ec removed || 1 2014-10-14 23:35:32 -04:00
barisusakli
ffbefda5f7 #2265 upgrade script 2014-10-14 23:35:11 -04:00
barisusakli
761f56aeb1 removed most of the db.sortedSetCards 2014-10-14 23:12:47 -04:00
barisusakli
09bd42b9f6 removed deleted 2014-10-14 22:52:41 -04:00
barisusakli
b1d48df6d8 dont modify counts on soft post delete 2014-10-14 22:51:48 -04:00
barisusakli
5de74914bd moved updateCounters to purge 2014-10-14 22:18:24 -04:00
barisusakli
b65c17c5bc parseInt score 2014-10-14 20:56:52 -04:00
barisusakli
29fcb6c366 fix images in manage/flags and fadeout 2014-10-14 17:03:14 -04:00
barisusakli
040d7b8424 limit unread to 100 tids 2014-10-14 14:27:45 -04:00
barisusakli
0eae679bcd crash fix if field is undefined 2014-10-14 13:52:47 -04:00
barisusakli
be287740f9 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-10-14 13:29:26 -04:00
barisusakli
62503c16c6 mark category read only if unread 2014-10-14 13:29:23 -04:00
Julian Lam
b5481ceed2 property fixed #2087 2014-10-14 11:48:31 -04:00
Julian Lam
08d4d6b5bf changed indentation for continueLogin method in authentication.js 2014-10-14 11:48:31 -04:00
barisusakli
f463030e76 closes #2264 2014-10-14 03:00:24 -04:00
barisusakli
835c58d27d mark read after infinite scroll
dont mark read if already read
2014-10-14 02:39:20 -04:00
barisusakli
6ff00a935f dont reverse infinite load admin/events 2014-10-13 23:36:08 -04:00
barisusakli
2b0957b8c7 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-10-13 22:25:40 -04:00
barisusakli
40fe40deac removed users:online set
using websockets.getConnectedClients directly
2014-10-13 22:25:34 -04:00
Julian Lam
62d0e08d6a stopped loader from crashing whenever NodeBB restarts 2014-10-13 19:46:42 -04:00
Barış Soner Uşaklı
129a438ebe Merge pull request #2256 from Spiritlebon/master
lint fix
2014-10-13 15:14:35 -04:00
barisusakli
fced152e41 read total from global object 2014-10-13 15:06:21 -04:00
barisusakli
be0d043b2b Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-10-13 14:20:11 -04:00
barisusakli
27833a3e91 min-width for user boxes in admin/manage 2014-10-13 14:20:08 -04:00
Julian Lam
97dba9ae39 fixed #2259 2014-10-13 13:03:17 -04:00
barisusakli
3c25204fdd removed clear log, doesnt work with logrotate-stream 2014-10-13 13:01:16 -04:00
barisusakli
e699c02b65 get less data 2014-10-12 23:46:58 -04:00
barisusakli
10ead05d4b another unused require 2014-10-12 18:04:16 -04:00
barisusakli
8cc1cc0f1b removed unused require 2014-10-12 18:02:28 -04:00
barisusakli
1eb95a71ae no need for $in 2014-10-12 17:40:59 -04:00
Spiritlebon
2b15de63c0 checked number before parseInt 2014-10-12 04:01:35 +02:00
Spiritlebon
35fc175ff6 Lint fix 2014-10-12 03:36:38 +02:00
psychobunny
2c95d8d82e fixed ajaxifying to advanced/logs 2014-10-11 16:30:07 -04:00
psychobunny
91e11e304f added link to forum homepage 2014-10-11 16:25:58 -04:00
barisusakli
feed33f6e2 closes #2100 2014-10-10 22:53:01 -04:00
barisusakli
035c32df66 dont need to pass value on upserts 2014-10-10 19:21:47 -04:00
psychobunny
b0ec0f52a4 cleanup 2014-10-10 16:56:44 -04:00
psychobunny
e6b8c0b32f fixed infinitescroll on flags & tags 2014-10-10 16:43:54 -04:00
psychobunny
7ee6f1d01c added cache buster to all scripts/css in acp 2014-10-10 16:41:03 -04:00
psychobunny
1226a2462a closes #2250 2014-10-10 16:40:05 -04:00
psychobunny
a24dde863b moved src/client/modules/admin/selectable to src/admin/modules/selectable #2250 2014-10-10 16:37:58 -04:00
psychobunny
4268d424a3 fixes require.js error in ACP 2014-10-10 16:34:30 -04:00
barisusakli
e052d8e5c1 log topic move 2014-10-10 15:44:02 -04:00
psychobunny
ffcb324d91 oh bootbox, I forgive you. (I lost hope in this actually being resolved upstream) 2014-10-10 03:17:50 -04:00
psychobunny
cad3f3017c moved iconSelect to admin/modules 2014-10-10 03:12:04 -04:00
barisusakli
e95c68e7d6 fix bookmark 2014-10-09 20:47:27 -04:00
barisusakli
29d90bc67d only use unique cids in isModerator 2014-10-09 19:53:10 -04:00
barisusakli
07a5aeaf15 closes #2251 2014-10-09 19:20:53 -04:00
psychobunny
e9c48f50f9 moved admin search into its own modules 2014-10-09 18:48:35 -04:00
psychobunny
dcd47f7ec5 removed admin/footer.js, moved code to admin.js instead 2014-10-09 18:42:42 -04:00
barisusakli
3819d11be2 #2110 2014-10-09 18:42:08 -04:00
psychobunny
4cbb7e9832 closes #2230
and I actually tested every single one. go me!
2014-10-09 18:26:59 -04:00
psychobunny
c787cd671b migrating tag editing #2230 2014-10-09 18:21:44 -04:00
psychobunny
2f150649ae migrating infinitescroll #2230 2014-10-09 18:19:50 -04:00
barisusakli
142ffc2920 fixed other post 2014-10-09 18:16:29 -04:00
psychobunny
b7bba928a4 migrating home page to new partials #2230 2014-10-09 18:13:24 -04:00
barisusakli
0d95089bfe send array of posts 2014-10-09 18:12:40 -04:00
barisusakli
4190b3c41c sort plugins alphabetically 2014-10-09 17:44:48 -04:00
barisusakli
97b9ba983c read both 2014-10-09 17:31:51 -04:00
psychobunny
00ff032060 migrating categories to new partial templating #2230 2014-10-09 17:25:54 -04:00
psychobunny
73220aaa3d didn't realize mousetrap was being used elsewhere in the code, added back to client again 2014-10-09 17:13:22 -04:00
psychobunny
2906ac9ecf removing the welcome to nodebb panel because...
Well we only originally put it there because we didn't have anything
useful to show on the homepage initially.  Now we have STATS
2014-10-09 17:08:43 -04:00
psychobunny
ce30379c25 fix panel layout on dashboard 2014-10-09 17:07:10 -04:00
barisusakli
4126fcfce4 i fail at this 2014-10-09 16:56:13 -04:00
barisusakli
1a04d8f07d removed duped banned, its in user:banned 2014-10-09 16:41:58 -04:00
barisusakli
5dbd4bcda9 fix status if it was never set before 2014-10-09 16:16:28 -04:00
barisusakli
5d79d2a75a closes #2191
added unique visitors analytics
only update it every hour
2014-10-09 15:06:20 -04:00
barisusakli
cb934acb5d #2111
need latest version from api
2014-10-09 13:50:25 -04:00
psychobunny
206b54c35d nitpicking en_GB 2014-10-09 03:21:58 -04:00
psychobunny
424efbeb06 Yo not enough rep mah homie. 2014-10-09 03:13:52 -04:00
psychobunny
124576f843 this is the canadian i8n, we have a duty to be extra polite. 2014-10-09 03:13:08 -04:00
psychobunny
5dcd610c1a grandma ma grammar
we should really run this stuff through a spellchecker before committing
2014-10-09 03:09:59 -04:00
psychobunny
3f876548ba linting
I also want to lint the rest of this file but I have no idea what will
explode and it's almost 1AM. Next time ;)
2014-10-09 00:44:16 -04:00
psychobunny
7a53205c76 linting and removed unnecessary comment 2014-10-09 00:42:30 -04:00
psychobunny
b17740f8d7 return error message if config is not ready 2014-10-09 00:38:43 -04:00
psychobunny
b42e57bfdd removing leveldb from our dbal
a) It isn't being maintained, especially not by me
b) I haven't seen anybody actually interested in this db software so
there's no real point in supporting it unless we have a few people who
are interested

If you ARE interested though - please contact me and we can figure
something out in future :)
2014-10-09 00:33:09 -04:00
psychobunny
daf967399f fixing my todos so that @barisusakli will sleep tonight. and linting. 2014-10-09 00:18:04 -04:00
psychobunny
d63f2ccd28 removed legacy version of ACP menu code 2014-10-09 00:11:28 -04:00
Julian Lam
c4a5af3b1b fixed issue where a missing config.json would end up suggesting 'undefined' as a base_url 2014-10-08 23:27:31 -04:00
barisusakli
e1c3bc9713 fix teasers 2014-10-08 19:28:36 -04:00
psychobunny
8abf2835a5 removed modules/admin and moved mousetrap + keybindings out of client #2245 2014-10-08 17:06:35 -04:00
psychobunny
339d2b0143 closes #2246 2014-10-08 16:53:22 -04:00
psychobunny
ffc07ff6d2 moved settings module deps into ACP #2245 2014-10-08 16:20:22 -04:00
psychobunny
d759a7d9dd moved semver out of client js files #2245 2014-10-08 16:15:43 -04:00
psychobunny
a2377d4682 removed unused asset 2014-10-08 16:11:56 -04:00
psychobunny
ed60deb3f5 fixed ACP from previous commit 2014-10-08 16:08:35 -04:00
psychobunny
0f759f9df4 ... not sure why that didn't all go through in one commit 2014-10-08 15:37:10 -04:00
psychobunny
b51c90dcb3 doing some reshuffling in public/src
public/src/admin and public/src/client; also some cleanup in
src/meta/js, no need to filter out admin files anymore
2014-10-08 15:36:47 -04:00
barisusakli
006322f386 much faster sitemap
no need to load all the data, when we only use slug and lastposttime
2014-10-08 15:26:18 -04:00
barisusakli
e1f67052d0 closes #2244 2014-10-08 15:06:40 -04:00
psychobunny
0d741f0031 commenting out the reconnection messages, it's annoying if you have 500 users online
not sure if we do need it though, so just leaving it there for now
2014-10-08 15:05:36 -04:00
psychobunny
f35a51e48d making the loading sequence less verbose
in particular, the js stuff all happened sequentially at the same time
so there was no need for multiple messages
2014-10-08 15:05:02 -04:00
psychobunny
6418948570 only need one "meta/css done" message 2014-10-08 14:52:52 -04:00
psychobunny
ae635a0083 minifier.css isn't used 2014-10-08 14:49:23 -04:00
psychobunny
2f53a3acc9 adding .gitignore public/uploads 2014-10-08 14:24:17 -04:00
psychobunny
3a069e028b refactored meta/js
yay I haz sourcemaps on windows now
2014-10-08 14:20:47 -04:00
barisusakli
61c73b7761 fix urls 2014-10-08 14:04:48 -04:00
barisusakli
4dcecbb310 gitignore and folders 2014-10-08 13:48:50 -04:00
barisusakli
1d1625f5c4 closes #2157 2014-10-08 13:46:36 -04:00
psychobunny
b1b25ada4d started removing ajaxify.loadTemplate #2230 2014-10-08 13:17:21 -04:00
psychobunny
2b5c3275f3 upping templates.js, please run npm install 2014-10-08 13:17:02 -04:00
psychobunny
396fecb94a removing an old comment 2014-10-08 12:32:17 -04:00
psychobunny
f149fb0191 linting, TIL that obj.$key is valid syntax 2014-10-08 12:22:39 -04:00
psychobunny
729ed6fbda all your semi-colons are belongs to me 2014-10-08 12:18:32 -04:00
psychobunny
f4b5090738 more linting 2014-10-08 12:11:06 -04:00
psychobunny
27496a08c4 fix emailer crash (line 35) 2014-10-08 12:08:35 -04:00
psychobunny
94ec07eb73 linting 2014-10-08 12:07:33 -04:00
psychobunny
fd95ac096d doing our US friends a favOUr 2014-10-08 03:03:43 -04:00
psychobunny
c2d21de9ac show my full name
wonder why we implemented this. lmao
2014-10-08 03:02:16 -04:00
psychobunny
61b8c7f673 moar typos 2014-10-08 03:01:34 -04:00
psychobunny
5376f07f6c @julianlam is an administator 2014-10-08 02:59:58 -04:00
psychobunny
85e0d1c03f more user-friendly error messages 2014-10-08 02:58:03 -04:00
psychobunny
01b8d1472e closes #2116 2014-10-08 02:40:27 -04:00
psychobunny
d632ba2242 fix post crash from 712bd3938f 2014-10-08 00:32:43 -04:00
psychobunny
4b295decf8 forgot to update meta.title.build in socket.io/meta.js 2014-10-08 00:28:16 -04:00
psychobunny
eb4baf62b5 closes #2235 2014-10-08 00:18:02 -04:00
psychobunny
298625225a use default 403 message for accounts 2014-10-08 00:06:43 -04:00
psychobunny
7bd49a96b2 #2235 2014-10-08 00:02:00 -04:00
psychobunny
3b511b59cb found a duplicate language string 2014-10-08 00:01:40 -04:00
psychobunny
1bdb80ce0a and so does 403 2014-10-07 23:55:56 -04:00
psychobunny
3c97829e85 404 now properly reads error messages 2014-10-07 23:55:13 -04:00
barisusakli
712bd3938f parse post in Topics.reply not in Posts.create
makes importer faster if md plugin is enabled
2014-10-07 20:36:48 -04:00
Julian Lam
e0fd24c087 adding contributing.md to root 2014-10-07 20:33:02 -04:00
Julian Lam
ea2fbcfcfc closed #2242 2014-10-07 19:49:29 -04:00
psychobunny
cf22fad6fd made the acp search a bit more cooler 2014-10-07 17:42:07 -04:00
psychobunny
8a978e46de #2241 2014-10-07 17:07:42 -04:00
psychobunny
7396c363d7 press / to highlight search input box 2014-10-07 17:01:57 -04:00
psychobunny
b2866abf5c another fix for express deprecations 2014-10-07 17:01:55 -04:00
barisusakli
f6f6ca7f76 closes #2132 2014-10-07 16:21:16 -04:00
psychobunny
c57dc25ea7 closes #2241 2014-10-07 15:46:15 -04:00
barisusakli
0912c7a2aa closes #2240 2014-10-07 13:55:40 -04:00
barisusakli
ad4fff649c closes #2234 2014-10-07 13:08:28 -04:00
barisusakli
26cfe4a3c3 fix ban upgrade closes #2239 2014-10-07 12:34:41 -04:00
Julian Lam
0772e8c41f fixed #2236 - using !gte instead of lte 2014-10-07 02:12:22 -04:00
Julian Lam
b481a28b6e sendFile instead of sendfile 2014-10-07 01:54:16 -04:00
barisusakli
394a01fdef closes #2188 2014-10-06 18:19:37 -04:00
psychobunny
c827485de5 more user-friendly message for installing/uninstalling plugins 2014-10-06 18:01:45 -04:00
psychobunny
d7c796fba5 closes #2228 2014-10-06 18:00:42 -04:00
psychobunny
53fdef1d17 fixing deprecation notice for morgan 2014-10-06 17:40:56 -04:00
psychobunny
345896e8eb remove intervals if navigating to a different page in ACP 2014-10-06 17:25:55 -04:00
barisusakli
85da5fb054 closes #2189 2014-10-06 16:48:32 -04:00
barisusakli
6ca06a8e54 closes #2233 2014-10-06 16:16:31 -04:00
barisusakli
348911fd2d closes #2195 2014-10-06 16:03:59 -04:00
barisusakli
bc1281a201 update deps
dbsearch, string, underscore, validator
2014-10-06 14:00:10 -04:00
barisusakli
e35dd60f8f closes #1940 2014-10-06 13:43:41 -04:00
barisusakli
ccf58ed40e closes #2213 2014-10-06 13:11:12 -04:00
barisusakli
258e14e20c closes #2225 2014-10-06 12:41:56 -04:00
psychobunny
2a2490541f some minor linting elsewhere 2014-10-04 18:56:33 -04:00
psychobunny
31b2faf2c5 oops, this one was my bad 2014-10-04 18:54:23 -04:00
psychobunny
84b9b86dd1 no better way to spend your saturday
inb4 linting bonanza
2014-10-04 18:52:39 -04:00
psychobunny
d70aab6a1e more linting 2014-10-04 18:51:18 -04:00
psychobunny
89e4a67e95 linting 2014-10-04 18:50:03 -04:00
psychobunny
1b2ccda40b closes #2231; see #2218 2014-10-04 18:47:56 -04:00
psychobunny
bf852d8329 closes #2078 2014-10-04 18:30:21 -04:00
psychobunny
c14b5e3d3a updating templates.js to 0.1.0 2014-10-04 18:25:50 -04:00
psychobunny
319defd1d2 moved meta:js.compiled event to after minfile is committed to disk, closes #2173 2014-10-04 16:19:45 -04:00
psychobunny
fa8613d09d moving meta:css.compiled further down, currently it gets emitted twice 2014-10-04 16:19:44 -04:00
psychobunny
872e28099f fixing previous commit properly 2014-10-04 16:19:43 -04:00
psychobunny
edf37f3e0c wow, logic fail
if you called the same event twice, it will reduce count anyways (so I
could have event.any(a,b,c) and call a three times and it would
complete.
2014-10-04 16:19:41 -04:00
barisusakli
27c214486b closes #2226 2014-10-04 16:13:37 -04:00
psychobunny
5681d51778 pressing enter in acp search will search for the first match 2014-10-04 16:04:50 -04:00
psychobunny
39de76fa5c rearranging manage/users routes 2014-10-04 15:52:20 -04:00
psychobunny
901ef3d382 fix false positives from showing up in search 2014-10-04 15:48:20 -04:00
psychobunny
39e59ee918 fixed link to plugins page on widgets 2014-10-04 15:40:57 -04:00
psychobunny
ced0087347 hide the plugins and authentication tabs if no plugins detected 2014-10-04 15:38:48 -04:00
psychobunny
307a04c162 closes #2227 2014-10-04 15:35:31 -04:00
psychobunny
ba4392cda0 selectable - shift clicking deselects items in a group 2014-10-04 01:45:46 -04:00
barisusakli
cf5ac4fb74 filter before getting topics 2014-10-03 21:37:43 -04:00
barisusakli
31a1f85a7e removed year from popular 2014-10-03 20:39:10 -04:00
Julian Lam
3accfaebc9 fixing dashboard ACP js to show a more informative message for people running master branch 2014-10-03 20:22:50 -04:00
Julian Lam
03f926c560 updating some deps #2218 2014-10-03 20:22:50 -04:00
barisusakli
bc016321ac closes #2226 2014-10-03 19:34:05 -04:00
psychobunny
ba9da2b256 fixed selectable init for search 2014-10-03 19:00:07 -04:00
psychobunny
a4f7ad3161 admin/manage/users styling 2014-10-03 18:57:33 -04:00
psychobunny
eb5630caa7 refactored selectable to use 'selected' instead of 'dropped'; fixed position relative bug 2014-10-03 18:43:20 -04:00
psychobunny
44b39bc69d forgot tpl in previous commit 2014-10-03 18:43:18 -04:00
psychobunny
04b7dfeb02 updated manage/users to use new drag and drop selector 2014-10-03 18:43:17 -04:00
psychobunny
a6481aefe3 cleanup 2014-10-03 18:43:16 -04:00
psychobunny
7a2ccf6031 hardcoded parentElement by accident
so that's why it doesn't work on other pages. derp
2014-10-03 18:43:15 -04:00
psychobunny
a474f111a3 cleanup 2014-10-03 18:43:14 -04:00
psychobunny
9c67d5742e added event callbacks for onSelected and onUnselected 2014-10-03 18:43:12 -04:00
Julian Lam
cea23454c6 fixed #2220 2014-10-03 18:42:51 -04:00
psychobunny
13c9da6bff selectable - click/shiftclick to select as well 2014-10-03 18:01:50 -04:00
psychobunny
a23b0baf25 closes #2221 2014-10-03 17:58:44 -04:00
psychobunny
bcdb87f488 fixed selectable 2014-10-03 17:56:07 -04:00
psychobunny
06db3c1c3d fixed tag selectability after search 2014-10-03 17:56:05 -04:00
psychobunny
16a4824017 fixed tag searching 2014-10-03 17:56:04 -04:00
psychobunny
e86697b36f closes #2223, ability to select multiple tags 2014-10-03 17:56:03 -04:00
Julian Lam
4b9e4a0109 closed #2224 2014-10-03 17:29:51 -04:00
psychobunny
1644c1f9e9 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-10-03 17:26:19 -04:00
psychobunny
e211628419 moved module less files out of components and into a separate folder 2014-10-03 17:26:15 -04:00
psychobunny
2db93c9219 created selectable module for selecting / grouping elements 2014-10-03 17:24:27 -04:00
psychobunny
2148e24969 added jquery drag and drop event libs 2014-10-03 16:55:00 -04:00
Julian Lam
60c45d8b9b fixed issue where non-admins would get maintenance mode header if maintenance mode was NOT enabled (logic errors, grrr..) 2014-10-03 16:39:27 -04:00
barisusakli
5db24fbe68 closes #2175 2014-10-03 16:31:53 -04:00
barisusakli
c37cfe4b3f closes #2209 2014-10-03 15:28:51 -04:00
Julian Lam
f5f84d9946 fixing upgrade text to use nodebb executable, removed exposure of option to run without upgrading 2014-10-03 15:28:02 -04:00
barisusakli
740c336480 typo 2014-10-03 15:16:04 -04:00
barisusakli
dba20160ce check length 2014-10-03 15:15:38 -04:00
Julian Lam
1b3b13716a 0.5.2-dev in ACP, just so people know it's not a released version 2014-10-03 15:13:12 -04:00
Julian Lam
19c69980ef Revert "bumping to 0.5.2 for dev purposes"
This reverts commit e6824fd727.
2014-10-03 15:12:58 -04:00
barisusakli
33780e6fdb closes #2133 2014-10-03 14:14:41 -04:00
barisusakli
73d358edc5 faster getTeasers
got rid of getPostIndices
2014-10-03 13:43:51 -04:00
barisusakli
43806e5921 replay ie host fix
https://github.com/NodeBB/NodeBB/pull/2216
2014-10-03 11:48:47 -04:00
barisusakli
0e3c5195db closes #2219 2014-10-03 11:34:12 -04:00
Julian Lam
b7ba6a0d8f fixed #2214 - each individual thread will create its own logrotate write handler, because if one is closed, everything crashes in a cascade effect because we're calling .write() after .end(), bleh. 2014-10-03 01:09:35 -04:00
Julian Lam
ee289c3226 latest translations and fallbacks 2014-10-02 23:51:51 -04:00
psychobunny
b4fb2d62a3 closes #2201 2014-10-02 20:47:59 -04:00
barisusakli
6a996bd718 closes #2210 2014-10-02 20:21:43 -04:00
barisusakli
8737c5a56d removed debug 2014-10-02 19:15:52 -04:00
barisusakli
eab180f305 crash fix 2014-10-02 19:03:03 -04:00
barisusakli
c72c876b04 check value 2014-10-02 18:57:21 -04:00
Julian Lam
4c70a0da4f removing postgres file from databases/ 2014-10-02 18:54:20 -04:00
barisusakli
c12b159bb5 temp debug 2014-10-02 18:51:08 -04:00
psychobunny
806b115782 don't attempt to update graphs if we're not connected 2014-10-02 18:33:08 -04:00
psychobunny
6a6f0a3b78 app.isConnected check 2014-10-02 18:32:36 -04:00
psychobunny
e20747c191 closes #2202 2014-10-02 18:30:51 -04:00
psychobunny
9c8395808c use page visibility api instead of window.onblur
this lib supports most major browsers
2014-10-02 18:29:47 -04:00
Julian Lam
24ac7ba316 better templating and styling for #2099 2014-10-02 18:26:43 -04:00
barisusakli
6f40a731f5 trigger posts loaded so masonry kicks in 2014-10-02 18:18:55 -04:00
barisusakli
2af077544b make sure postcount isnt NaN 2014-10-02 18:10:10 -04:00
barisusakli
32d0e0d7e5 dont update category post coint if topic post count is invalid 2014-10-02 18:06:19 -04:00
psychobunny
974a091f1b Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-10-02 17:55:33 -04:00
psychobunny
7243aebee0 fixed supervisor to ignore committed minified file 2014-10-02 17:55:30 -04:00
barisusakli
6aa53b8323 nextStart changes, fixed move topic notification text 2014-10-02 17:46:43 -04:00
Julian Lam
5ba88b7152 fixed #2208 2014-10-02 17:08:49 -04:00
psychobunny
e5681097f4 added error to minification step 2014-10-02 17:02:14 -04:00
psychobunny
bc4969be5b disable chart tooltips if mobile 2014-10-02 16:40:46 -04:00
psychobunny
9d53de5f70 oops 2014-10-02 16:00:17 -04:00
psychobunny
42d3656ecc fixing 2014-10-02 15:59:05 -04:00
Julian Lam
85048a5f75 closed #2203 2014-10-02 15:58:13 -04:00
Julian Lam
1eb9016a77 fixed #2207 2014-10-02 14:38:52 -04:00
barisusakli
043a73b4ae changed none to hidden 2014-10-02 14:30:54 -04:00
barisusakli
de98df842d priv fix 2014-10-02 13:55:01 -04:00
psychobunny
a67c501eb8 temporary solution for #2206 2014-10-02 13:38:42 -04:00
barisusakli
7b8656ef8b facebook share doesn't display &amp; 2014-10-01 19:00:26 -04:00
barisusakli
b8df95da98 check message 2014-10-01 16:58:04 -04:00
Barış Soner Uşaklı
6165db3e00 Merge pull request #2198 from Schamper/fix/settings-message
Fix settings save message
2014-10-01 16:42:40 -04:00
Schamper
883422760d Fix settings save message 2014-10-01 22:30:22 +02:00
barisusakli
cf252a29a7 closes #2196 2014-10-01 15:32:54 -04:00
barisusakli
977cd98a79 dont crash if user doesn't have email 2014-10-01 00:29:51 -04:00
Julian Lam
e6824fd727 bumping to 0.5.2 for dev purposes 2014-10-01 00:01:57 -04:00
Julian Lam
f082849126 removing console.log 2014-09-30 23:59:28 -04:00
Julian Lam
43db2289c2 moving db selection into db.connect, where it should be 2014-09-30 23:57:03 -04:00
Julian Lam
35ac6600ba Revert "prematurely bumping next version up, for development purposes"
This reverts commit c792fc68d3.
2014-09-30 23:37:03 -04:00
psychobunny
f41b0fe3ce removing packages 2014-09-30 23:35:18 -04:00
barisusakli
5ff293109d fix getUnreadByField 2014-09-30 23:20:25 -04:00
Julian Lam
4f2603afd1 closed #2185 2014-09-30 21:48:39 -04:00
barisusakli
31db0d78b1 return empty array instead of undefined 2014-09-30 18:27:23 -04:00
psychobunny
7cde61f4d6 logger styling first pass 2014-09-30 17:06:57 -04:00
psychobunny
b31feac253 events page first pass 2014-09-30 17:05:04 -04:00
psychobunny
ab915b6ed7 first pass advanced/database 2014-09-30 17:02:53 -04:00
psychobunny
05ff80b2e0 widgets page first pass 2014-09-30 16:52:16 -04:00
psychobunny
52229113b6 plugins page first pass, separated list of plugins 2014-09-30 16:37:41 -04:00
barisusakli
3865fd3ab9 fixes crash is sets is empty 2014-09-30 16:10:26 -04:00
psychobunny
bfc9cae1b2 groups first pass 2014-09-30 15:37:53 -04:00
psychobunny
0aa08f8bd9 users page first pass 2014-09-30 15:31:33 -04:00
psychobunny
178aa473fc categories page first pass 2014-09-30 15:28:36 -04:00
psychobunny
3e7f0531b4 language page 2014-09-30 15:25:35 -04:00
psychobunny
199a13d730 closes #2186
I think I missed that lesson in grade 3
2014-09-30 01:03:31 -04:00
Julian Lam
c792fc68d3 prematurely bumping next version up, for development purposes 2014-09-29 20:00:39 -04:00
Julian Lam
6b786012d8 removed console.log 2014-09-29 19:50:57 -04:00
Julian Lam
c9228f1483 0.5.1 2014-09-29 19:41:23 -04:00
Julian Lam
343ff18014 closed #2179 2014-09-29 19:31:41 -04:00
barisusakli
2b115e75c6 fix login days value 2014-09-29 19:29:13 -04:00
barisusakli
62084a012e closes #2179 2014-09-29 19:28:25 -04:00
Julian Lam
30b2f55ebc closed #2149 2014-09-29 19:05:38 -04:00
psychobunny
2b5d0e89a5 up'ing templates.js 2014-09-29 19:05:38 -04:00
psychobunny
1e5c172f5e up'ing templates.js 2014-09-29 18:55:08 -04:00
barisusakli
a505896185 forgot db require 2014-09-29 18:36:14 -04:00
barisusakli
18cfdd9dde possible fix to travis 2014-09-29 18:32:09 -04:00
barisusakli
653865a214 moved up trace 2014-09-29 18:13:32 -04:00
barisusakli
e79e370e59 check undefined middleware 2014-09-29 18:09:47 -04:00
psychobunny
d0452fb93f random attempt to fix traviscl 2014-09-29 17:59:39 -04:00
Julian Lam
632fb3a618 closed #2184 2014-09-29 17:51:29 -04:00
psychobunny
b877a4e7b4 linting 2014-09-29 16:59:58 -04:00
psychobunny
f86e4256a1 semicolon 2014-09-29 16:58:23 -04:00
psychobunny
7b9815aa3b linting 2014-09-29 16:58:11 -04:00
barisusakli
29d99a0ecf closes #2177 2014-09-29 16:54:40 -04:00
barisusakli
9c996e4b99 on config save update meta.config on all workers
also dont make 20 socket.emit calls for each setting field, everything
will be send in 1 socket call.
2014-09-29 16:35:13 -04:00
psychobunny
219cd9661f improved menu sliding 2014-09-29 14:29:34 -04:00
psychobunny
4b5112e60a mobile swipe-in sidemenu for acp 2014-09-29 14:14:30 -04:00
psychobunny
95740ae8f9 stop. hammer time! 2014-09-29 13:56:25 -04:00
psychobunny
6867c10058 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-09-29 13:21:53 -04:00
psychobunny
b9ac2a3207 I can smell feature creep coming from around the corner
title tags for legend
2014-09-29 13:21:48 -04:00
barisusakli
2a1f9600e6 less event logs for notif pruning 2014-09-29 13:09:34 -04:00
psychobunny
8c9d362535 fixed responsive pie charts 2014-09-29 13:09:08 -04:00
psychobunny
456f087dea adding some padding between legend columns 2014-09-29 13:08:04 -04:00
psychobunny
6a8ccf1ad5 now getting topic names for topics presence chart; adjusted layout to make it more responsive 2014-09-29 12:59:34 -04:00
Julian Lam
dedf7a6715 closed #2087 2014-09-29 12:47:52 -04:00
barisusakli
d303dea6c7 closes #1986 2014-09-29 12:30:07 -04:00
psychobunny
8b0685754e push pie charts down if container is too compact 2014-09-29 12:25:09 -04:00
psychobunny
2388f8b815 hopefully baris stops bugging me about responsive dashboard 2014-09-29 12:16:49 -04:00
Julian Lam
625247611b closed #1959 2014-09-29 12:13:20 -04:00
psychobunny
318e4b5f6b moving the legend up a bit for pie charts 2014-09-29 12:01:15 -04:00
psychobunny
2f9193c419 closes #2174 2014-09-29 11:51:18 -04:00
psychobunny
8d149cb2ee moved admin related partials from vanilla into core 2014-09-29 11:27:04 -04:00
psychobunny
3b48668385 mobile optimizations for acp header 2014-09-29 10:24:36 -04:00
psychobunny
587f805763 don't download the acp search index on mobile 2014-09-29 10:18:37 -04:00
psychobunny
186790f2ba increased interval to 5s, should be okay 2014-09-29 04:28:51 -04:00
psychobunny
cb84b79bbc 'no users browsing' feature for presence chart 2014-09-29 04:26:49 -04:00
psychobunny
3634cebff7 added legend for topics presence chart 2014-09-29 04:07:36 -04:00
psychobunny
a46006ba64 cleanup 2014-09-29 03:43:55 -04:00
psychobunny
6fb596c1c6 click on pie chart to take you to topics page 2014-09-29 03:41:52 -04:00
psychobunny
51c3f0d77a topic presence graph, coolest one yet imo 2014-09-29 03:39:28 -04:00
psychobunny
4fafc6804a adding some predefined colors 2014-09-29 02:30:40 -04:00
psychobunny
c260d4e1c0 fix horizontal scrollbar 2014-09-29 02:20:18 -04:00
psychobunny
3104cfb26b no, I am not smarter than a 5th grader 2014-09-29 02:17:16 -04:00
psychobunny
c18f4998fd legends for the pie charts 2014-09-29 02:11:20 -04:00
psychobunny
b34ec8d732 user presence pie chart 2014-09-29 02:00:35 -04:00
psychobunny
f549ef8e26 responsive pie chart 2014-09-29 01:10:14 -04:00
psychobunny
af0cdeef14 removing the mystery #taskbar 2014-09-29 01:08:48 -04:00
Julian Lam
37c64e9a11 apparently, the "compress" option doesn't play nice with socket.io, so I'm disabling it 2014-09-29 01:08:26 -04:00
psychobunny
744c55e776 piecharts ftw, also started re-arranging the dashboard 2014-09-29 00:33:28 -04:00
Julian Lam
e012479ab5 adding socket.io client lib into the minfile 2014-09-29 00:26:43 -04:00
Julian Lam
a59934fd65 only the cluster_setup thread will commit css to file 2014-09-29 00:26:43 -04:00
Julian Lam
c2fd89e050 committing of compiled js and css to file on startup 2014-09-29 00:26:43 -04:00
barisusakli
e8dc9fed3c remove unnecessary index
the _key:1 score:-1 index already handles reverse sorting on score
2014-09-29 00:20:54 -04:00
psychobunny
81bc481efc removing page views from the dashboard stats 2014-09-28 23:52:19 -04:00
psychobunny
ca4047dc4a fixed tag modal styling 2014-09-28 21:22:48 -04:00
psychobunny
ad47874bd3 cleanup 2014-09-28 21:20:52 -04:00
psychobunny
ed35e4bcef switching /admin/index to /admin/dashboard 2014-09-28 21:20:34 -04:00
psychobunny
341959be82 ultimate acp route refactorizationing 2014-09-28 21:09:40 -04:00
psychobunny
6a9b131223 did some much needed spring cleaning of the admin less files 2014-09-28 20:39:10 -04:00
psychobunny
2cebeeb1ca don't need appearance header/footer tpls anymore 2014-09-28 20:25:43 -04:00
psychobunny
385632e173 moved over admin/appearance/widgets into extend namespace
cleaning up my own todo's in record time, @barisusakli will be proud
2014-09-28 20:22:04 -04:00
psychobunny
0ebe4381b2 legend for graphs
(duh, apparently I'm the only person who would have known what this
graph represents)
2014-09-28 20:02:15 -04:00
psychobunny
df2227259b realigning menu 2014-09-28 19:49:26 -04:00
psychobunny
d4b5ea4e1a responsive graphs 2014-09-28 15:08:27 -04:00
Julian Lam
668b17082d latest translations 2014-09-28 13:32:24 -04:00
barisusakli
4af54d48f6 closes #2169 2014-09-27 19:23:52 -04:00
psychobunny
2ec93ba911 some more styling to dashboard 2014-09-27 19:15:16 -04:00
psychobunny
0d01b0a734 styling active users modal to look like the other stats 2014-09-27 19:07:09 -04:00
barisusakli
cd99654477 closes #2046 2014-09-27 18:53:57 -04:00
psychobunny
dfcb8b9427 fixing graph labels 2014-09-27 18:52:50 -04:00
psychobunny
348f1cdbc7 no need for plugins/themes link anymore 2014-09-27 18:41:55 -04:00
psychobunny
d5dbc367fb rejigging dashboard layout 2014-09-27 18:41:53 -04:00
barisusakli
6f3fafba46 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-09-27 18:35:14 -04:00
barisusakli
212e15b2c2 fixin redis zrevrangebyscore to return value score 2014-09-27 18:35:11 -04:00
psychobunny
1d4710edce graphs - update hour labels when a new hour passes 2014-09-27 18:14:18 -04:00
barisusakli
e2e71da4e1 Merge remote-tracking branch 'origin/unread-refactor' 2014-09-27 18:10:45 -04:00
barisusakli
2bc7007953 removed sendUnread function 2014-09-27 18:09:25 -04:00
psychobunny
70831f5888 graph pm/am fix 2014-09-27 18:02:57 -04:00
barisusakli
c2d97d8ea7 Merge remote-tracking branch 'origin/master' into unread-refactor 2014-09-27 18:02:48 -04:00
psychobunny
d79b6b3803 forum traffic graph - unique visitors vs pageviews 2014-09-27 18:00:12 -04:00
barisusakli
6535a730fd upgrade script to delete tid:<tid>:read_by_uid 2014-09-27 17:57:56 -04:00
barisusakli
34106aa209 fix fields 2014-09-27 17:46:39 -04:00
barisusakli
5fc760c6c4 unread changes 2014-09-27 17:41:49 -04:00
psychobunny
2b329b8337 charts baby 2014-09-27 16:15:47 -04:00
psychobunny
144992426d converted pageviews tracking to sorted set, and using pre-built getStatsForSet function
thanks @barisusakli
2014-09-27 16:06:01 -04:00
barisusakli
80ca6bb0a2 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-09-27 15:48:18 -04:00
barisusakli
9d25772b53 added sortedSetIncrBy 2014-09-27 15:48:16 -04:00
psychobunny
0b99244dfc forgot to remove while moving 2014-09-27 15:00:17 -04:00
psychobunny
99d98a7016 forgot to import alerts css 2014-09-27 14:58:30 -04:00
psychobunny
077dcaf704 moved site logo and favicon uploading to its own panel 2014-09-27 14:56:34 -04:00
barisusakli
176023d712 read poolsize from config 2014-09-27 13:27:03 -04:00
psychobunny
1e016d1aff styling tags.tpl 2014-09-27 13:22:22 -04:00
psychobunny
34a2444f07 refactored admin/tags a bit, now inputs are hidden behind a modal so we can see moar tags 2014-09-27 12:34:46 -04:00
psychobunny
0fa04cf9a0 ux - tags 2014-09-27 02:35:11 -04:00
psychobunny
9ae1675701 no need for this code anymore 2014-09-27 02:32:25 -04:00
psychobunny
d6757c1085 acp - sounds panel, completified 2014-09-27 02:16:50 -04:00
psychobunny
4b1afa8a8c ACP'ing the header title 2014-09-27 02:11:45 -04:00
psychobunny
3a34f508f1 email.tpl formatting 2014-09-27 02:07:31 -04:00
barisusakli
c5f9a8a111 increase poolSize to 10 from default 5 2014-09-27 01:20:42 -04:00
barisusakli
c5c97c784a optimize getPostIndices
only use 1 set when its in a topic
2014-09-26 22:19:26 -04:00
barisusakli
998ed24589 check topic cid 2014-09-26 20:53:29 -04:00
psychobunny
00269853f3 revert button (which doesn't work thanks to #2162) 2014-09-26 20:16:55 -04:00
psychobunny
3635cd21aa adding back a settings header so I can put the save buttons on the right side 2014-09-26 20:14:26 -04:00
psychobunny
2b90180e01 themed skins/themes pages 2014-09-26 20:07:19 -04:00
psychobunny
104b1daf2d formatting 2014-09-26 19:58:49 -04:00
psychobunny
10a683f369 theming customize page 2014-09-26 19:53:46 -04:00
psychobunny
59dae5eac0 removing pills from appearance pages 2014-09-26 19:48:54 -04:00
psychobunny
070039f8b8 more formatting 2014-09-26 19:47:19 -04:00
psychobunny
e4d51fbca0 formatting 2014-09-26 19:44:48 -04:00
psychobunny
c3336e4713 prevent panels from going too ridiculously large 2014-09-26 19:43:37 -04:00
psychobunny
1952149b4c settings pages done! 2014-09-26 19:43:12 -04:00
psychobunny
a348eded57 removed settings/header.tpl 2014-09-26 19:21:52 -04:00
psychobunny
eecf7b9dd5 put settings in its own category 2014-09-26 19:21:51 -04:00
psychobunny
89592618e3 deprecated {plugins.icon} and {authentication.icon}; moved icons to menu category 2014-09-26 19:21:49 -04:00
psychobunny
6a389e1d1c this menu is now badass 2014-09-26 19:21:48 -04:00
Barış Soner Uşaklı
eb9b628a75 Merge pull request #2161 from EisFrei/master
require plugins for the hooks to work
2014-09-26 18:57:49 -04:00
Martin Freisen
a258f2b20b include plugins for the hooks to work 2014-09-27 00:54:51 +02:00
psychobunny
362b57a88e languages done 2014-09-26 18:37:52 -04:00
psychobunny
d201f0fd23 fixed padding 2014-09-26 18:37:50 -04:00
Julian Lam
f44213ea97 Merge pull request #2160 from EisFrei/master
added hooks `action:groups.join` and `action:groups.leave`
2014-09-26 18:30:15 -04:00
Martin Freisen
ab90d7b9d4 added hooks action:groups.join and action:groups.leave 2014-09-27 00:23:44 +02:00
psychobunny
1616b8d3dd acp breadcrumbs 2014-09-26 18:04:03 -04:00
psychobunny
4880e2328d fixing active state on menu 2014-09-26 17:34:43 -04:00
psychobunny
e13537facd fixes to main menu 2014-09-26 17:28:45 -04:00
psychobunny
e63a7c462c minor styling 2014-09-26 16:58:12 -04:00
psychobunny
06b4e84fc1 acp - nanoscroller ftw 2014-09-26 16:56:04 -04:00
psychobunny
bc574b0e2b removing unnecessary links on acp header 2014-09-26 16:16:19 -04:00
psychobunny
3cf833acb9 nodebb logo 2014-09-26 16:15:52 -04:00
psychobunny
e91b7a1677 fixing accordion 2014-09-26 15:52:20 -04:00
psychobunny
a832af231a adding some pizza pizzaz 2014-09-26 15:50:11 -04:00
psychobunny
c60cbce14a acp menu - theming completified 2014-09-26 15:46:11 -04:00
psychobunny
2f6a123d32 acp menu - accordion effect 2014-09-26 15:46:09 -04:00
psychobunny
660cd184f4 deleting NOTES.md
clearly nobody maintains this, last updated half a year ago lmao
2014-09-26 15:33:50 -04:00
psychobunny
a621d4212e acp main menu themed 2014-09-26 15:25:31 -04:00
psychobunny
15b3437dba acp search messaging 2014-09-26 14:36:10 -04:00
psychobunny
d902ac1efe accidentally deleted bootstrap.js lolol
who needs bootstrap anyways
2014-09-26 14:31:53 -04:00
psychobunny
3854c883a2 eh, github for windows failing hard 2014-09-26 14:17:40 -04:00
psychobunny
8b9d58a72f moved BS out of vendor into admin 2014-09-26 14:17:31 -04:00
psychobunny
d5316dbe7a started theming acp 2014-09-26 14:17:04 -04:00
psychobunny
74c69842d1 ensure acp search box shows up if you start typing 2014-09-26 13:21:49 -04:00
Julian Lam
958432ca4a closing julianlam/nodebb-plugin-sso-oauth#8 -- if a templates directory is defined without that directory being present, NodeBB will no longer crash 2014-09-26 13:19:23 -04:00
Julian Lam
6e8bd4d615 adding a client-side hook, closes #2159 2014-09-26 11:18:59 -04:00
Julian Lam
9240d38c4c updated widgets minver @psychobunny 2014-09-25 17:16:49 -04:00
Julian Lam
3554887f10 back to using redis.auth 2014-09-25 17:13:09 -04:00
barisusakli
ebfc6d9785 #2152 dont pass undefined into parser 2014-09-25 16:58:59 -04:00
barisusakli
5f55cc947c watch unwatch
update on toggle, moved isFollowing to api return and template
2014-09-25 16:46:00 -04:00
psychobunny
b27af65f18 closes #2153 2014-09-25 16:12:26 -04:00
psychobunny
606263ace4 #2153 prevent jquery from attempting to load images that don't exist 2014-09-25 16:10:50 -04:00
barisusakli
97e4f13a4d fix page count 2014-09-25 15:53:53 -04:00
barisusakli
1202322700 fix acp users page 2014-09-25 15:13:54 -04:00
psychobunny
f53d783d3d fixed users view 2014-09-25 14:59:44 -04:00
psychobunny
3be951367f removed prev editor 2014-09-25 14:55:08 -04:00
psychobunny
06fd0fa34b ace editor 2014-09-25 14:54:22 -04:00
psychobunny
c2c569695f settings - allowing hidden inputs to be saved 2014-09-25 14:54:20 -04:00
psychobunny
a17cd6aacc ace editor 2014-09-25 14:54:18 -04:00
barisusakli
0eb4b93882 moved hasPassword to edit route
its only used there no need to display it everywhere user info is
retrieved
2014-09-25 14:11:03 -04:00
psychobunny
d4f47f4157 fixes to appearance/widgets page 2014-09-25 13:39:07 -04:00
psychobunny
62312638ed fixing pills 2014-09-25 13:35:07 -04:00
psychobunny
b468404506 refactored admin/themes.js 2014-09-25 13:29:08 -04:00
psychobunny
f98e3aaf64 segregated the "theme" route (now "appearance") into their own separate routes 2014-09-25 13:12:51 -04:00
psychobunny
27bd23ca5c more branding stuff 2014-09-25 13:01:26 -04:00
psychobunny
cf35423a20 this panel is actually custom html not custom JS 2014-09-25 12:44:26 -04:00
psychobunny
6af1e4f6d0 removing "branding" until I can figure out how to do this properly
(tbh, even I don't know how it works anymore)
2014-09-25 12:41:16 -04:00
psychobunny
0340f699a0 redirect /categories to /active 2014-09-25 12:34:07 -04:00
psychobunny
0a4deeabf8 improving search more 2014-09-25 12:32:49 -04:00
psychobunny
4e7f22a674 cleanup 2014-09-25 12:32:48 -04:00
psychobunny
282dc64fa5 improving the acp search experience 2014-09-25 12:32:46 -04:00
psychobunny
27a2af89c8 better styling for ACP search 2014-09-25 12:32:45 -04:00
Julian Lam
5a36c33fac fixed #2142 -- passing in cached (pre-required) redis module into socket.io so it uses the same redis module... why? who bloody knows. 2014-09-25 11:56:33 -04:00
psychobunny
1a18bf22aa linting 2014-09-25 11:41:13 -04:00
psychobunny
5d1906cd0c linting 2014-09-25 11:40:52 -04:00
psychobunny
12af6a33b5 closes #2037 2014-09-25 11:39:17 -04:00
psychobunny
467d486e58 closes #2145 2014-09-25 11:29:53 -04:00
psychobunny
99a56acab8 #1999 sending ajaxify-data to client on cold loads
commented out until we figure out what we're doing with the renamed
properties (see issue)
2014-09-25 11:22:11 -04:00
Julian Lam
b0323e4d3b closed #2150 2014-09-25 10:57:37 -04:00
psychobunny
dfccf6675a closes #1906 - please use require('templates.js'); instead 2014-09-25 10:49:51 -04:00
psychobunny
d081ecf368 fixed chatModal centering 2014-09-25 10:35:50 -04:00
psychobunny
da0eff6a4e double click the chat header to maximize 2014-09-25 10:30:17 -04:00
psychobunny
c692f7e8fe closes #2148 2014-09-25 10:28:16 -04:00
Julian Lam
05b8b4b43a latest translations 2014-09-25 10:01:28 -04:00
psychobunny
fe444ccac7 Merge pull request #2090 from akhoury/patch-1
cloning widgets Elements is dropping all events handlers
2014-09-25 09:59:20 -04:00
psychobunny
366c7841fe fixed tag styling in acp 2014-09-24 22:48:10 -04:00
psychobunny
9a1fe2e2cc apparently this line is moot too, then 2014-09-24 21:52:01 -04:00
psychobunny
6f937c59fb gitignore check for config.json too strict 2014-09-24 21:48:42 -04:00
psychobunny
11fada047e fixing search menu 2014-09-24 21:48:41 -04:00
barisusakli
1fe5a8788f check err 2014-09-24 21:37:36 -04:00
Barış Soner Uşaklı
412263f430 Update defaults.json 2014-09-24 20:09:42 -04:00
psychobunny
af2b66f438 closes #2107 2014-09-24 18:43:02 -04:00
psychobunny
e336188ccc admin/header.tpl use admin.css instead of stylesheet.css 2014-09-24 18:36:59 -04:00
psychobunny
81ce7f93ad compile admin stylesheet separately 2014-09-24 18:36:58 -04:00
psychobunny
28efeef844 latest bs3 2014-09-24 18:36:57 -04:00
psychobunny
bb9a0d8cab moving acp styling to core - now unaffected by selected themes 2014-09-24 18:36:55 -04:00
barisusakli
c000e852b5 closes #1935 2014-09-24 17:13:17 -04:00
psychobunny
016a98e7b1 make sure search dropdown is open if active 2014-09-24 16:25:22 -04:00
psychobunny
7c896768ce case insensitive acp searching 2014-09-24 16:01:34 -04:00
psychobunny
13dd686521 only add divider if there are results 2014-09-24 16:00:23 -04:00
psychobunny
027e8eb54c acp searching, closes #2140 2014-09-24 15:55:45 -04:00
psychobunny
977bc014f9 index acp files 2014-09-24 15:55:44 -04:00
barisusakli
73faa79a69 fix edit page csrf, category slug optional 2014-09-24 15:53:39 -04:00
barisusakli
da64eb0873 closes #2117 2014-09-24 15:42:49 -04:00
psychobunny
5d344b3dac linting 2014-09-24 14:49:16 -04:00
psychobunny
9f40cd03e8 on /admin/settings, render general 2014-09-24 14:47:58 -04:00
psychobunny
117b8dece4 settings acp refactor for dedicated routes 2014-09-24 14:45:49 -04:00
psychobunny
9b17ec9f26 updating database mock for core templates 2014-09-24 13:54:10 -04:00
psychobunny
bd4ab2a24c moving database mock into tests folder 2014-09-24 13:54:09 -04:00
barisusakli
6abb0ff4c8 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-09-24 13:50:45 -04:00
barisusakli
1a26cb0938 #2139 2014-09-24 13:50:43 -04:00
psychobunny
64b43d58ea moved core templates into nodebb core (admin, status pages, emails) 2014-09-24 13:45:11 -04:00
barisusakli
4eabf41a21 dont allow invalid status to be set 2014-09-24 13:36:32 -04:00
barisusakli
bedadd8b5f #2137 2014-09-24 00:07:24 -04:00
barisusakli
23197af725 closes #2114 2014-09-23 23:05:46 -04:00
Julian Lam
da2725ec8a upped markdown minver 2014-09-23 23:01:20 -04:00
Julian Lam
bc116c16e9 Merge branch 'hashtalk' 2014-09-23 22:28:47 -04:00
Julian Lam
ecea917d11 closed #2097 -- NodeBB will prefer using Redis as session store if at all possible 2014-09-23 17:18:44 -04:00
Julian Lam
20819e3dfd Revert "use redis session storage instead of connect-mongo"
This reverts commit 056f89d6cf.
2014-09-23 17:18:43 -04:00
barisusakli
8abb247870 fix mention regression 2014-09-23 17:12:37 -04:00
Julian Lam
f41be4ae8b exposed redis' "connect" method, so socket.io can call it from outside database/redis.js, fixed NodeBB requiring Redis as a socket.io store. It will now go back to using in-memory store per process, if no redis config is found in the NodeBB configuration. re: #2097 2014-09-23 17:09:46 -04:00
barisusakli
b1f492dec3 fix redis bulk zadd 2014-09-23 17:07:22 -04:00
Julian Lam
e1211527b0 Merge branch '0.5.1' into hashtalk
Conflicts:
	src/controllers/topics.js
2014-09-23 16:16:45 -04:00
Julian Lam
d7a69e51c1 Merge branch '0.5.1' into hashtalk 2014-09-23 16:13:50 -04:00
Julian Lam
528ee3ad05 Merge remote-tracking branch 'origin/hashtalk' into hashtalk 2014-09-23 16:02:38 -04:00
barisusakli
64c51d5cba check nid before pusing and marking read 2014-09-23 16:02:23 -04:00
Julian Lam
50a7c42f15 Merge remote-tracking branch 'origin/hashtalk' into hashtalk 2014-09-23 16:02:22 -04:00
Julian Lam
05e147b440 Merge branch 'master' of github.com:chronize/NodeBB into chronize-master 2014-09-23 16:00:11 -04:00
Julian Lam
abdcb32ad2 Merge pull request #2119 from Fusselwurm/patch-1
default for missing post_index parameter when topic pagination is used
2014-09-23 15:47:48 -04:00
psychobunny
a0da73dabd don't pass back err if plugin.json is corrupted 2014-09-23 15:03:13 -04:00
psychobunny
180625ece3 forgot to return just posts array 2014-09-23 14:00:28 -04:00
psychobunny
77dfc7378b filter:post.getPostSummaryByPids 2014-09-23 13:58:16 -04:00
psychobunny
0eb4fd89ef don't blow up nodebb if plugin.json is broken 2014-09-23 13:58:14 -04:00
barisusakli
fb764472dd closes #2125 2014-09-23 13:48:19 -04:00
Julian Lam
901470ce05 always pipe child output to parent 2014-09-23 13:44:32 -04:00
barisusakli
0767998022 closes #2124 2014-09-23 13:34:53 -04:00
psychobunny
99bacf910c oops - #2126 2014-09-23 13:33:36 -04:00
psychobunny
7f2254c9da closes https://github.com/NodeBB/NodeBB/issues/2126 2014-09-23 13:08:53 -04:00
Julian Lam
b6f7014a9d fixed infinite scroller so that it takes the height of OP into account when detecting when to load more posts while scrolling up 2014-09-23 13:05:43 -04:00
Julian Lam
a6abde2a2b fixed upward infinite scrolling so that it is less jarring 2014-09-23 13:05:43 -04:00
barisusakli
48c3619028 lowered chat zindex 2014-09-22 22:17:50 -04:00
barisusakli
2d5dc44ce5 closes #2123 2014-09-22 21:54:28 -04:00
barisusakli
515e663f85 getObjectsFix
return empty array if keys is empty or not an array
2014-09-22 21:47:20 -04:00
barisusakli
39392672a2 moved static
removed pageRouter middleware into routes,
helper method to setup page routes
2014-09-22 21:39:02 -04:00
Julian Lam
9b9e79ef27 re: #2099 2014-09-22 20:31:57 -04:00
Julian Lam
bfdc32a9c3 typo 2014-09-22 19:03:59 -04:00
psychobunny
0db93504ce forgot comma 2014-09-22 16:09:27 -04:00
psychobunny
2b90add560 fix for topics without category data (?)
@barisusakli lemme know if this is legit, if not, see line 195 as well
2014-09-22 16:08:40 -04:00
barisusakli
8b64e65095 cleaned up admin routes 2014-09-22 15:43:41 -04:00
barisusakli
21f65cbb6a crash fix 2014-09-22 12:39:25 -04:00
barisusakli
c640e01969 show stack 2014-09-21 22:07:08 -04:00
barisusakli
8c600ae15d stop tag autocomplete ajaxify 2014-09-21 19:24:51 -04:00
barisusakli
ba90b5d113 widget render change 2014-09-21 18:56:36 -04:00
Julian Lam
7597c654a0 refactored plugin and auth init a bit, and fixed issue where successive reloads caused old login strategies to be inadvertently preserved 2014-09-21 14:29:27 -04:00
barisusakli
5f2a66295c check keys 2014-09-21 13:30:20 -04:00
barisusakli
0914004e12 crash fix 2014-09-21 11:29:09 -04:00
Moritz Schmidt
d1273516b5 default for missing post_index parameter
Avoid getting NaN if post_index param is not set (NaN is passed through to redis, redis complains, and the user ends up at /404)
2014-09-21 10:12:20 +02:00
barisusakli
7d9054c2cf derp 2014-09-20 23:57:33 -04:00
barisusakli
7d93926ef7 removed async.map 2014-09-20 23:04:49 -04:00
barisusakli
5323934cc2 calculate page count in controller 2014-09-20 19:09:45 -04:00
barisusakli
b7fd4c22d4 removed checkPostIndex middleware
1 less call to get topic post count
2014-09-20 18:51:32 -04:00
barisusakli
a19c306f49 guest fixes 2014-09-20 18:07:46 -04:00
barisusakli
e2707353e9 dont return unnecessary data 2014-09-20 16:05:57 -04:00
psychobunny
a52c69d2a1 only send noscript paginator data on cold loads 2014-09-20 15:04:14 -04:00
Julian Lam
f891f49339 removing console.logs 2014-09-19 22:58:01 -04:00
Julian Lam
dab3667773 re: #2108, auth re-routing 2014-09-19 22:53:57 -04:00
barisusakli
ac301eaabe changed default to 1 2014-09-19 20:14:20 -04:00
barisusakli
4de658e096 checks 2014-09-19 19:45:16 -04:00
barisusakli
3d4dad226e crash fix 2014-09-19 19:24:28 -04:00
barisusakli
59120df71c bulk fix 2014-09-19 18:59:11 -04:00
barisusakli
630977fb99 added parentCid 0 to new categories 2014-09-19 18:42:26 -04:00
barisusakli
89e56794e8 check cid 2014-09-19 18:40:51 -04:00
Julian Lam
d13fcd3529 closed #2109 2014-09-19 16:17:51 -04:00
barisusakli
f3f4711a60 wait for callback 2014-09-19 15:54:16 -04:00
Julian Lam
aee8b87385 composer tweaks, hiding navbar when mobile composer is open 2014-09-19 14:39:48 -04:00
barisusakli
327d1c1bec some cleanup and callbacks for post 2014-09-19 14:25:48 -04:00
Julian Lam
f0d3b5dd00 updated package.json to use 0.5.1-ready themes 2014-09-19 09:12:13 -04:00
Julian Lam
2bcd43531a updated package.json to use 0.5.1-ready themes 2014-09-19 09:11:55 -04:00
Julian Lam
4393907ff6 closed #2112 2014-09-19 08:27:43 -04:00
Julian Lam
bae634e124 closed #2112 2014-09-19 08:27:27 -04:00
barisusakli
1bad2f79ee show megabyte values 2014-09-18 22:24:14 -04:00
barisusakli
7652f2bf39 escape input tag 2014-09-18 21:49:13 -04:00
Julian Lam
c32fdabc43 minor refactor 2014-09-18 21:20:05 -04:00
barisusakli
803a2436de wait for increment to complete before expire 2014-09-18 18:12:16 -04:00
barisusakli
1844250967 check err 2014-09-18 17:59:09 -04:00
barisusakli
93b83060be fix expireAt using millis 2014-09-18 17:56:03 -04:00
psychobunny
251351e245 forgot to require plugins 2014-09-18 17:44:24 -04:00
psychobunny
efe11a63a3 woops, wrong property name 2014-09-18 17:40:15 -04:00
psychobunny
9e7f929029 updated filter:sockets.sendNewPostToUids and added type 2014-09-18 17:36:34 -04:00
barisusakli
55cbaf6a19 #2032 2014-09-18 17:22:24 -04:00
psychobunny
8f916ed066 filter:sockets.sendNewPostsToUids 2014-09-18 17:09:40 -04:00
psychobunny
6844c828ca added a hook I didn't end up needing, but here it is anyway filter:posts.modifyUserInfo 2014-09-18 17:05:30 -04:00
barisusakli
926acd16b2 closes #2032 2014-09-18 14:04:22 -04:00
barisusakli
f377868764 closes #2064 2014-09-18 12:01:39 -04:00
barisusakli
63a7766ac1 closes #2027 2014-09-17 19:39:59 -04:00
barisusakli
0f258859a7 closes #2067 2014-09-17 19:01:00 -04:00
Julian Lam
309ac6fec5 adding semver lib to scripts 2014-09-17 18:41:03 -04:00
Julian Lam
7a61e9d0f8 latest translations 2014-09-17 18:38:36 -04:00
psychobunny
16accf6cd0 fixing groups.leave 2014-09-17 18:32:38 -04:00
barisusakli
6f3cb55709 closes #2071 2014-09-17 18:31:31 -04:00
psychobunny
2c1bab2b9a filter:post.getPosts now passes in uid 2014-09-17 18:10:19 -04:00
psychobunny
45383ce21e posts.getPostsByTid and posts.getPostsByPids now require a uid passed in 2014-09-17 18:10:01 -04:00
barisusakli
c1f3b94d67 closes #2073 2014-09-17 17:16:03 -04:00
barisusakli
a0cc2ee6a9 duh 2014-09-17 16:57:10 -04:00
barisusakli
3abbeb8795 show recent posts of child categories 2014-09-17 16:55:34 -04:00
Julian Lam
2e16306dc2 updated modules translations 2014-09-17 16:31:27 -04:00
barisusakli
4066607388 closes #2052 2014-09-17 16:29:07 -04:00
Julian Lam
cd135dda13 renamed middleware to applyCSRF, re: #2082 2014-09-17 16:11:11 -04:00
Julian Lam
0b7a21b8d1 Merge branch 'hashtalk' of github.com:NodeBB/NodeBB into hashtalk 2014-09-17 16:07:43 -04:00
Julian Lam
8bac0bf361 Merge branch 'csrf-excision' into hashtalk 2014-09-17 16:07:36 -04:00
Julian Lam
a061079995 fixed all POST routes to use new csrf middleware 2014-09-17 16:07:26 -04:00
psychobunny
1caf4806e8 closes https://github.com/NodeBB/NodeBB/issues/2103 2014-09-17 14:58:16 -04:00
psychobunny
004758f5bd closes https://github.com/NodeBB/NodeBB/issues/2104 2014-09-17 14:53:01 -04:00
psychobunny
91293350b5 closes https://github.com/NodeBB/NodeBB/issues/2101 2014-09-17 14:47:35 -04:00
Julian Lam
4f6b3055ff Merge branch '0.5.1' into csrf-excision 2014-09-17 14:39:51 -04:00
psychobunny
d6e0be52ce companion to 48c123592e - prevent deleting your own account if you're admin 2014-09-17 12:59:34 -04:00
Julian Lam
aa116e6b4d latest translations and fallbacks 2014-09-17 09:27:17 -04:00
Julian Lam
e9b373438d latest translations and fallbacks
Conflicts:
	public/language/de/user.json
	public/language/nl/user.json
	public/language/pl/user.json
	public/language/sv/user.json
	public/language/vi/user.json
	public/language/zh_CN/user.json
2014-09-17 09:25:11 -04:00
Julian Lam
74c438dc71 latest translations and fallbacks 2014-09-17 09:21:22 -04:00
psychobunny
a6089ba4aa closes https://github.com/NodeBB/NodeBB/issues/2096 2014-09-17 00:41:19 -04:00
psychobunny
ca7f35dd5e trimming alert title/message 2014-09-17 00:28:19 -04:00
barisusakli
40fff367d1 faster topic move 2014-09-16 23:28:04 -04:00
barisusakli
4b80bbb9c4 optimized user.delete 2014-09-16 22:25:12 -04:00
barisusakli
6a64a3ab92 check err 2014-09-16 21:45:46 -04:00
barisusakli
b48d81310c #2095 2014-09-16 21:43:11 -04:00
barisusakli
aae7f2434d closes #2088 2014-09-16 16:10:02 -04:00
Julian Lam
b80b0e1e99 re: #2098, chat message emails are now opt-in 2014-09-16 13:54:03 -04:00
Julian Lam
b85ff61de6 refactored chat notification system to wait a bit before sending notif/email, closes #2098 2014-09-16 13:28:21 -04:00
barisusakli
451c5b40fd removed debug 2014-09-16 13:10:30 -04:00
barisusakli
97cb138cfc doesnt seem to be used 2014-09-16 12:58:57 -04:00
psychobunny
a224e531f8 added a confirmation dialog that asks you to type in your username before being able to delete account 2014-09-16 12:58:38 -04:00
psychobunny
ae88eee8e3 improving the warning message before deleting account 2014-09-16 12:58:37 -04:00
barisusakli
ca486a1b07 update unread count
only for logged in users
2014-09-16 12:45:22 -04:00
barisusakli
0a936e5dd1 unreadTids 2014-09-16 12:38:31 -04:00
psychobunny
48c123592e prevent administrators from being deleted - first remove them from admin group 2014-09-16 12:20:06 -04:00
Julian Lam
45a0d0196b Merge branch '0.5.1' into hashtalk 2014-09-16 11:32:37 -04:00
Julian Lam
101288c75c Merge branch 'master' into 0.5.1 2014-09-16 11:32:00 -04:00
psychobunny
e60d88afa6 cluster by default is now opt-in 2014-09-16 11:17:57 -04:00
psychobunny
101ac701ef removed hardcoded silent flag from cluster setup 2014-09-16 11:11:25 -04:00
psychobunny
32a35164d4 ability to set # of workers to run via config or command line (default = max cpus) 2014-09-16 11:08:38 -04:00
barisusakli
51eac70f67 fixed derp 2014-09-16 11:07:59 -04:00
barisusakli
32257c9b2f updateUnreadCount 2014-09-16 11:06:10 -04:00
psychobunny
22577917da closes https://github.com/NodeBB/NodeBB/issues/2093 2014-09-16 10:37:10 -04:00
psychobunny
ab1c231b84 re-enabling updateLastOnlineTime - calling that middleware for page loads only instead of every API call 2014-09-16 10:17:27 -04:00
psychobunny
ecd00bb679 refactored widgets api call to render all at once rather than one area at a time, closes https://github.com/NodeBB/NodeBB/issues/2062 2014-09-16 10:12:12 -04:00
psychobunny
0ecaa05c76 rearranging routers to prevent multiple hits on incrementPageViews
and potentially updateLastOnlineTime
2014-09-16 09:32:42 -04:00
psychobunny
76fb2c3378 daily + monthly pageview analytics middleware 2014-09-16 09:31:44 -04:00
psychobunny
e5978e09f4 switching back to bcryptjs 2014-09-16 09:31:06 -04:00
Julian Lam
963428174b fixed #2091 2014-09-16 09:18:21 -04:00
Julian Lam
52bb7ebe52 0.5.0 2014-09-15 22:12:12 -04:00
Julian Lam
6ade1e858d updating default config so the site title is shown 2014-09-15 22:10:32 -04:00
Aziz Khoury
31631ca538 cloning widgets Elements is dropping all events handlers
Adding true will clone the handlers.

You might want to do the same for L150 and L161 's clone() usage, but I'll let you decide on that :)
2014-09-15 20:30:39 -04:00
barisusakli
ce0fdc201a closes #2086 2014-09-15 17:51:08 -04:00
barisusakli
31eccb8e7f configurable post delay before first post 2014-09-15 17:01:20 -04:00
barisusakli
9a96458f79 closes #2053 2014-09-15 16:26:25 -04:00
barisusakli
da86c46b4c Merge remote-tracking branch 'origin/0.5.1' into hashtalk 2014-09-15 14:36:27 -04:00
barisusakli
7c3dc4877a closes #2089 2014-09-15 14:34:01 -04:00
Julian Lam
84d4035597 Child categories no longer show up on homepage, re: #2080 2014-09-15 10:50:58 -04:00
Julian Lam
6e21b7a830 disabled parents no longer show up as parents of a category, re: #2080 2014-09-15 10:47:38 -04:00
Julian Lam
9cba8d7ecb latest translations and fallbacks, closes #2085" 2014-09-15 08:35:10 -04:00
Julian Lam
d22fe4ad1e removing disabled categories from being listed as children, #2080 2014-09-14 21:25:21 -04:00
barisusakli
51cefb00d2 add support to set parentCid to 0 2014-09-14 19:59:44 -04:00
Julian Lam
cca365432b closes #2084 2014-09-14 19:35:10 -04:00
Julian Lam
6bb924f25a removed theme-rocket folder, closed #2076 2014-09-14 15:24:39 -04:00
barisusakli
82e721e854 send new post/topic to users who can read it 2014-09-14 14:19:36 -04:00
barisusakli
655f5087d9 Merge remote-tracking branch 'origin/master' into hashtalk 2014-09-14 12:08:44 -04:00
barisusakli
e10fbfa0d2 Merge remote-tracking branch 'origin/0.5.1' into hashtalk 2014-09-14 12:08:23 -04:00
barisusakli
f1d5db6be0 pagination fix 2014-09-14 12:07:29 -04:00
barisusakli
ddb02978c8 cleanup 2014-09-14 12:07:28 -04:00
barisusakli
e56b18822b added topic titles to notifs
upvote, favourite and flag has topic titles now
2014-09-14 12:07:28 -04:00
barisusakli
b3d9db10f2 notification fixes
made post notifications unique per post so they dont overwrite other
types.
2014-09-14 12:07:27 -04:00
barisusakli
9466d7ced4 faster notif prune
no need to loop tru and check datetime since notifications is a sorted
set now
2014-09-14 12:07:27 -04:00
barisusakli
35a903f9c8 closes #2074
when new notifications are pushed to uids clear their old notifications.
2014-09-14 12:07:26 -04:00
barisusakli
5204dc1e23 removed total count 2014-09-14 12:07:26 -04:00
barisusakli
523f245cd8 removed derp 2014-09-14 12:07:25 -04:00
barisusakli
7a61645256 less db calls 2014-09-14 12:07:25 -04:00
barisusakli
dc441c2873 check err 2014-09-14 12:07:24 -04:00
barisusakli
4e6719e0aa added filterUids method to privileges
used to filter uids on a single category
2014-09-14 12:07:24 -04:00
barisusakli
493d0dea1e part 1 of notif refactor 2014-09-14 12:07:23 -04:00
Julian Lam
f231b500d7 Merge branch '0.5.1' into csrf-excision 2014-09-14 10:29:35 -04:00
Julian Lam
40e5ad075f started work on #2082 2014-09-14 10:21:32 -04:00
barisusakli
6bde9a1656 prevent getTopicsByTids crash if a topic is null 2014-09-13 19:33:09 -04:00
barisusakli
e34ef71acd fixed resetLockout 2014-09-12 19:07:06 -04:00
barisusakli
01f983e29c markAsRead improvement
takes in an array of tids instead of marking topics read 1 by 1
same for the category.markAsRead function
2014-09-10 21:44:19 -04:00
barisusakli
ae02c1a06c closes #2068 2014-09-10 18:48:43 -04:00
psychobunny
61871fae77 merging #2077 2014-09-10 16:14:01 -04:00
psychobunny
e738d592dc fixed potential NaN issue https://github.com/NodeBB/NodeBB/issues/2077 2014-09-10 16:10:53 -04:00
psychobunny
52b58b441e closes https://github.com/NodeBB/NodeBB/issues/2077 2014-09-10 16:04:33 -04:00
barisusakli
25ed131b13 show stack trace of error 2014-09-10 13:04:57 -04:00
barisusakli
e9798028de show error 2014-09-09 22:10:17 -04:00
barisusakli
5696ea2396 check errors on decodeURIComponent 2014-09-09 22:09:27 -04:00
barisusakli
b7eddda8c8 one more fix 2014-09-09 18:32:09 -04:00
barisusakli
20eb4def1d possible fix to online guest count
using socket io rooms instead of syncing between workers.
2014-09-09 18:05:21 -04:00
barisusakli
e79c980421 delete anything older than 1 week 2014-09-08 18:09:35 -04:00
barisusakli
5222edb624 sortedSetsAdd
using mullti/bulk for redis/mongo
lets you add a score/value pair to multiple sorted sets at once
2014-09-08 16:13:48 -04:00
Baris Usakli
f16ced6bcc removed path from notif, its created on the fly when retrieveing the notifications 2014-09-08 01:22:47 -04:00
barisusakli
aed9a9f76f removed console.log 2014-09-07 21:41:39 -04:00
barisusakli
9b26b60082 fixed cron 2014-09-07 20:45:31 -04:00
barisusakli
61e1c51ef6 run notif prune every 30mins
disabled post edit log
2014-09-07 20:03:29 -04:00
barisusakli
a56ab7f15a closes #2061 2014-09-07 16:41:27 -04:00
barisusakli
242721c73f using websockets 2014-09-07 14:13:05 -04:00
barisusakli
6cd84ebe81 removed parseInt from sorts 2014-09-07 13:03:06 -04:00
barisusakli
3c8ca63608 fixed getCidsByPids 2014-09-07 12:36:50 -04:00
barisusakli
ec32a3d243 mising reuqire 2014-09-07 12:16:01 -04:00
psychobunny
0727c2a0bf forgot winston 2014-09-07 12:12:12 -04:00
barisusakli
2252ab7479 notifications.prune
run every hour
dont get more than 500 notifications
2014-09-07 03:17:51 -04:00
barisusakli
273db693e7 closes #2051 2014-09-06 23:57:51 -04:00
barisusakli
cc3786e22d closes #2055 2014-09-06 22:28:09 -04:00
barisusakli
b7ee875b12 user.isOnline fix
wont hit db on every user socket connect or user disconnect
2014-09-06 22:08:55 -04:00
barisusakli
fe58ea55d4 moved debugs 1 level up increased key limit to 100 2014-09-06 20:47:20 -04:00
barisusakli
57e204df8e removed most of the debug
dont get more than 6 usernames for upvote tooltips
generatePostPaths wont check null pids
2014-09-06 20:46:18 -04:00
barisusakli
0ad42873d5 nasty 2014-09-06 04:30:25 -04:00
barisusakli
4b20e78de2 hopefully final fix 2014-09-06 04:29:20 -04:00
barisusakli
3f4ede0778 parseInt 2014-09-06 04:11:44 -04:00
barisusakli
518d731562 one more time 2014-09-06 04:09:13 -04:00
barisusakli
f9c9f58561 post_index fix 2014-09-06 03:56:15 -04:00
barisusakli
34a4a2103f isNan check 2014-09-06 03:45:34 -04:00
barisusakli
edd73b5be2 again 2014-09-06 03:35:28 -04:00
barisusakli
5160a4f90f getTopicwithposts 2014-09-06 03:25:32 -04:00
barisusakli
ef329c95df fix 2014-09-06 03:21:00 -04:00
barisusakli
0b83657868 more trace 2014-09-06 03:19:13 -04:00
barisusakli
0d5605ab35 trace in addPostData 2014-09-06 03:09:41 -04:00
barisusakli
126b1c4f4c only get 20 chats 2014-09-06 02:59:40 -04:00
barisusakli
0cfa430444 crash fix 2014-09-06 02:46:43 -04:00
barisusakli
017f6bde2c 50 2014-09-06 02:45:38 -04:00
barisusakli
7405051924 50 2014-09-06 02:41:04 -04:00
barisusakli
5fd199ae8a check privs pids 2014-09-06 02:39:54 -04:00
barisusakli
51cafe075c only get 25 posts 2014-09-06 02:34:39 -04:00
psychobunny
099a04c1c8 disabling pushUnreadCount for now, perhaps this might be good on redis too? 2014-09-06 02:22:26 -04:00
psychobunny
07376c9a4c look for unread only for today 2014-09-06 02:22:25 -04:00
psychobunny
6aa47efc06 we don't trust user.isOnline, waiting on an optimization (disabling for now) 2014-09-06 02:22:25 -04:00
psychobunny
0de458141b separated the sockets.emit to socket.emit + broadcast so OP gets action right away. moved callback sooner. 2014-09-06 02:22:24 -04:00
psychobunny
61895633b3 disabling updateLastOnlineTime until we can move this key to redis 2014-09-06 02:22:24 -04:00
psychobunny
056f89d6cf use redis session storage instead of connect-mongo 2014-09-06 02:22:23 -04:00
psychobunny
071be4ae7f cache popular route for anons 2014-09-06 02:22:22 -04:00
psychobunny
15052143d3 that preloader, will blow up your datacenter. 2014-09-06 02:22:22 -04:00
psychobunny
6c7d7a45e8 their plugins, in package.json 2014-09-06 02:22:21 -04:00
psychobunny
4fd9b58a55 give mongo room to breathe 2014-09-06 02:22:20 -04:00
psychobunny
a4c625a4d6 use compiled bcrypt 2014-09-06 02:22:20 -04:00
barisusakli
bf67424fd6 if there are no uids return 2014-09-06 01:55:56 -04:00
barisusakli
e2697030ec removed reuqire 2014-09-06 01:10:46 -04:00
barisusakli
3f96532c3f disabled 2 calls 2014-09-06 01:07:03 -04:00
barisusakli
072db27a3c dont add more than 10 2014-09-06 01:05:20 -04:00
barisusakli
a48e95b910 check keys 2014-09-06 01:04:20 -04:00
barisusakli
779b2a8d73 optimize queries 2014-09-06 00:58:03 -04:00
barisusakli
421d091828 optimizing browsing users 2014-09-06 00:19:46 -04:00
barisusakli
0dc780148a removed global room
socket.io already puts everyone into a room named ''
2014-09-05 22:11:21 -04:00
barisusakli
8e86f4b787 crash fix 2014-09-05 20:35:24 -04:00
barisusakli
a6f8bcd7be dont show new posts on popular
doesnt makse sense
2014-09-05 19:10:21 -04:00
barisusakli
9fac18c4b6 derp 2014-09-05 17:39:24 -04:00
barisusakli
ff44819d6b add support to set parentCid to 0 2014-09-05 14:14:45 -04:00
Julian Lam
9ee4c90548 test route back to 404 2014-09-05 14:04:50 -04:00
barisusakli
bc00d7d159 check just in case 2014-09-05 13:51:02 -04:00
barisusakli
ba32a4dc4f crash fix 2014-09-05 13:45:36 -04:00
Julian Lam
7255ce3dbe primary worker support, and added notif pruning to primary worker jobs 2014-09-05 13:44:56 -04:00
Julian Lam
2efb816da3 restarted threads now grab a copy of the minified js and map from the loader 2014-09-05 13:23:30 -04:00
barisusakli
1075305444 crash fix 2014-09-05 03:00:53 -04:00
barisusakli
7361aec709 update every 3 seconds 2014-09-05 01:37:38 -04:00
barisusakli
877cf1e15c derp 2014-09-05 01:36:30 -04:00
barisusakli
95d1bd3058 crash fix 2014-09-05 01:30:08 -04:00
barisusakli
769d6ed57c removed console.log 2014-09-05 00:32:54 -04:00
barisusakli
2008bf28ff auto update user counts dont transmit all room data 2014-09-05 00:28:27 -04:00
barisusakli
190647a074 only update room text if its topic
will fix this in a better way
2014-09-04 23:26:55 -04:00
barisusakli
e28d778c0c fixed my derp 2014-09-04 22:41:02 -04:00
barisusakli
31fb0efbd9 crash fix 2014-09-04 22:32:50 -04:00
barisusakli
707a062661 one more fix 2014-09-04 22:11:21 -04:00
Julian Lam
fae169697e removing listener for templates compilation, in order to resolve race condition that was causing slow servers to not actually end up binding to the port as expected 2014-09-04 21:22:34 -04:00
barisusakli
94a3ecdbd1 cluster socket.io fixes
getUserRooms
getUidsInRoom
getAnonCountInRoom
2014-09-04 20:21:03 -04:00
Julian Lam
2d0877f80e better handling of port in use errors with cluster 2014-09-04 20:07:55 -04:00
barisusakli
9a908c1651 filter users who are already on dom 2014-09-04 17:49:35 -04:00
Julian Lam
fd0622a1a3 removed console.log 2014-09-04 17:49:13 -04:00
Julian Lam
fec3ae7e5e better integration with nodebb executable 2014-09-04 17:48:33 -04:00
barisusakli
0b2df849bd Merge remote-tracking branch 'origin/cluster' into cluster
Conflicts:
	loader.js
2014-09-04 17:43:44 -04:00
barisusakli
98f338b41c online count fixes for cluster 2014-09-04 17:41:00 -04:00
Julian Lam
e5a35ce378 js propagation for cluster module, so only 1 thread minifies the js 2014-09-04 17:39:53 -04:00
Julian Lam
08abbe19bc zero downtime and reload support with cluster module 2014-09-04 17:09:57 -04:00
Julian Lam
3918b29233 removed /test route 2014-09-04 16:39:24 -04:00
Julian Lam
8a996c4524 changing silent value based on environment variable 2014-09-04 15:13:16 -04:00
barisusakli
c62f251afc added index and fixed vote button in infinite scroll 2014-09-04 01:48:57 -04:00
barisusakli
e5795687bb fix settings on mongo 2014-09-04 01:34:31 -04:00
Julian Lam
0bc9437642 Merge branch 'cluster' of github.com:NodeBB/NodeBB into cluster 2014-09-04 00:56:55 -04:00
Julian Lam
956a431950 properly handling SIGHUP 2014-09-04 00:56:50 -04:00
barisusakli
45afe2e831 cast return to bool 2014-09-04 00:20:50 -04:00
Julian Lam
8baea1a251 crash timer 2014-09-04 00:01:08 -04:00
barisusakli
c8692f0562 Merge remote-tracking branch 'origin/0.5.1' into cluster 2014-09-03 23:43:52 -04:00
barisusakli
f81acd37db added indices on search key and id for mongo 2014-09-03 23:43:07 -04:00
Evan Lucas
3360752c5c Added action:post.downvote hook 2014-09-03 22:31:09 -04:00
barisusakli
84d0e64361 fix topic move 2014-09-03 20:19:51 -04:00
barisusakli
10b30e303b mongo posting fix 2014-09-03 19:38:48 -04:00
psychobunny
dc9754d77a Merge branch 'cluster' of https://github.com/NodeBB/NodeBB into cluster 2014-09-03 18:13:20 -04:00
psychobunny
baaac66d77 Merge remote-tracking branch 'origin/0.5.1' into cluster 2014-09-03 18:12:34 -04:00
barisusakli
705bdcdd69 Merge remote-tracking branch 'origin/0.5.1' into cluster 2014-09-03 18:12:34 -04:00
psychobunny
f609b1e45d calololback
(how the hell was this working?)
2014-09-03 18:08:47 -04:00
barisusakli
05a9e8b1d6 chat typing notif use room 2014-09-03 18:07:56 -04:00
barisusakli
20b951b9d9 added back num cpus 2014-09-03 17:23:47 -04:00
barisusakli
fdafb72c34 removed getUserSockets for chat
emit to users rooms directly
2014-09-03 17:22:29 -04:00
barisusakli
999da9183d Merge remote-tracking branch 'origin/0.5.1' into cluster 2014-09-03 16:14:15 -04:00
Julian Lam
de41896770 restart handling and crash detection 2014-09-03 15:24:47 -04:00
barisusakli
4736a68534 dont create term object on each call 2014-09-03 15:16:45 -04:00
psychobunny
9f0fff4434 closes #2039 2014-09-03 14:40:44 -04:00
barisusakli
c40355b816 removed debug 2014-09-03 14:07:12 -04:00
Julian Lam
b5da0e515b upping mentions minver for 0.5.1 2014-09-03 13:18:15 -04:00
Julian Lam
a5423aff16 getPidIndex callback if none specified 2014-09-03 12:55:31 -04:00
Julian Lam
baf72249b6 made uid parameter optional in getPidIndex 2014-09-03 12:54:26 -04:00
Julian Lam
063d270f1a introducing "sort" querystring parameter in topic route, so that sorting can be overridden via query string. 2014-09-03 12:50:06 -04:00
barisusakli
298f14ad27 removed cluster from app.js 2014-09-03 12:31:37 -04:00
barisusakli
0f46051fcf Merge remote-tracking branch 'origin/cluster-loader' into cluster 2014-09-03 12:28:51 -04:00
barisusakli
5362863588 debug 2014-09-03 12:28:24 -04:00
barisusakli
2073d994fc limit topicsperpage postsPerPage to 20 2014-09-03 12:00:25 -04:00
barisusakli
6926552e66 load 50 topics in sitemap instead of all 2014-09-03 11:30:07 -04:00
barisusakli
1b58fb3104 Merge remote-tracking branch 'origin/0.5.1' into cluster 2014-09-03 01:44:18 -04:00
Julian Lam
58a73b52b5 work-in-progress commit to get cluster module working with loader.js 2014-09-03 01:24:26 -04:00
barisusakli
94d050fd4f removed helpers.done 2014-09-03 01:13:28 -04:00
barisusakli
e00124007f testing 2 2014-09-03 01:06:17 -04:00
barisusakli
cbe3b5b6dc testing 2014-09-02 23:35:24 -04:00
Julian Lam
e6d0eede4f pruning empy notifications for daily emailer 2014-09-02 18:36:58 -04:00
barisusakli
4f48f1865f removed updateLastOnlineTime from every socket call 2014-09-02 17:36:59 -04:00
barisusakli
6b39e328f5 chat fix 2014-09-02 16:01:45 -04:00
barisusakli
e495db3065 dont make a copy of chat message 2014-09-02 15:50:02 -04:00
Julian Lam
c56a7bf475 Merge branch 'GAWMiners-feature/favourite-hook' into 0.5.1 2014-09-02 14:31:18 -04:00
Julian Lam
77475bb7a3 Merge branch 'feature/favourite-hook' of github.com:GAWMiners/NodeBB into GAWMiners-feature/favourite-hook 2014-09-02 14:30:08 -04:00
barisusakli
625766ba85 dont send typing notif on each keyup 2014-09-02 14:29:22 -04:00
Evan Lucas
440c78c949 match object.action nomenclature 2014-09-02 13:26:56 -05:00
Evan Lucas
fb45aa92fd Add upvote hook
adhere to similar project style
2014-09-02 13:20:00 -05:00
barisusakli
26c0b097cf removed realtime update of anon count 2014-09-02 13:49:48 -04:00
barisusakli
74282ffeea removed another unnecessary socket call 2014-09-02 13:23:36 -04:00
Julian Lam
a7736d1926 removed setTimeout when someone tries to log in with a non-existant username 2014-09-02 11:49:06 -04:00
barisusakli
171f02101d closes #2035, closes #2036 2014-09-02 05:04:39 -04:00
barisusakli
ff46d1211d removed populateONline users
not sure why this was called inside updateBrowsingUsers
2014-09-02 02:29:42 -04:00
barisusakli
6672f17fc2 part 1 of online user fix
don't call getOnlineUsers when a single person comes online
2014-09-02 02:26:56 -04:00
barisusakli
761d59f5ec each limit on pushUnreadCount 2014-09-02 01:34:26 -04:00
barisusakli
b8dfbdaff2 small optimization to online users 2014-09-01 23:33:32 -04:00
barisusakli
8b4c61241f query change 2014-09-01 20:45:24 -04:00
barisusakli
0c8c6632d9 create index on key value 2014-09-01 20:12:34 -04:00
barisusakli
487793e692 create index on score field 2014-09-01 19:44:43 -04:00
barisusakli
13bdd939e3 crash fix 2014-09-01 18:51:48 -04:00
barisusakli
619ca103c7 crash fix 2014-09-01 18:46:42 -04:00
barisusakli
1ed4c984bb Merge remote-tracking branch 'origin/master' into 0.5.1 2014-09-01 17:36:00 -04:00
barisusakli
0b79a73732 crash fix
if composer is opened in a topic that was deleted/purged
2014-09-01 17:24:23 -04:00
Barış Soner Uşaklı
43ca61de8c Update README.md 2014-09-01 14:42:11 -04:00
barisusakli
ae6d5e72f4 closes #2015 2014-09-01 14:09:47 -04:00
barisusakli
a252bf409c Merge remote-tracking branch 'origin/master' into 0.5.1 2014-09-01 13:30:50 -04:00
barisusakli
6c2ae0302d closes #2030 2014-09-01 13:29:49 -04:00
Julian Lam
fa2bf7c908 added disabled class back when form is submitting... aka clickspam handling 2014-09-01 00:05:19 -04:00
Julian Lam
ff24339b38 added back error:no-user 2014-08-31 23:49:22 -04:00
Julian Lam
4edceb0f92 allowing /user to also work in addition to /users 2014-08-31 23:02:24 -04:00
Julian Lam
caa9c8c157 more stuff using new returnTo behaviour 2014-08-31 22:51:02 -04:00
Julian Lam
08c9cbdf70 changing admin API calls to return 404 if unauthenticated, and redirect user to login for regular URL. closes #1885 2014-08-31 22:43:00 -04:00
Julian Lam
7572c9a803 added connect-ensure-login and allowed npm to alphabetize the dependencies listing 2014-08-31 22:42:29 -04:00
Julian Lam
298d904d45 refactored login process to be a form submit instead of ajax-redirect, implemented error message parsing using req.flash 2014-08-31 22:41:13 -04:00
Julian Lam
9ea081deb3 sending 'bind' message to child proc instead of SIGCONT signal, which is not understood by Windows installs 2014-08-31 16:13:05 -04:00
barisusakli
14fcd36134 closes #2028 2014-08-30 15:39:20 -04:00
barisusakli
603cddc687 closes #1934 2014-08-30 15:19:18 -04:00
barisusakli
4f5c78d675 merge 2014-08-30 14:44:43 -04:00
barisusakli
537dea4e4b crash fix 2014-08-30 14:42:48 -04:00
barisusakli
e6b3da18f2 merge 2014-08-30 11:58:19 -04:00
barisusakli
87c8cd2fb0 another crash fix 2014-08-30 11:56:29 -04:00
barisusakli
73bef8168f another crash fix 2014-08-30 11:54:43 -04:00
barisusakli
0473e7f25b crash fix 2014-08-30 11:50:45 -04:00
barisusakli
6b286a8f07 fix, dont display duped topics on category view 2014-08-29 18:18:31 -04:00
barisusakli
6ac8d9d349 check uid 2014-08-29 17:55:44 -04:00
barisusakli
576081e25f delete user ignored cids on account delete 2014-08-29 16:40:06 -04:00
barisusakli
197226eea6 closes #1742 2014-08-29 15:57:20 -04:00
barisusakli
acef614147 removed 2 BS classes 2014-08-29 14:50:24 -04:00
barisusakli
14fb171072 Merge remote-tracking branch 'origin/master' into 0.5.1 2014-08-29 14:10:21 -04:00
barisusakli
5f2380fdcd dont display all categories 2014-08-29 14:08:13 -04:00
Julian Lam
1f06e4f5a2 added secret key bindings for admins to reload and restart their NodeBBs :shipit: 2014-08-29 12:29:00 -04:00
Julian Lam
063a4e5628 finished up UX integration for in-topic searching, added mousetrap lib to capture ctrl-F only in topic view, closed #1800 2014-08-29 11:48:30 -04:00
Julian Lam
5d22806ded more topic searching work (working example, needs UX tie-in) 2014-08-29 11:18:02 -04:00
Julian Lam
cc930e4042 Merge branch '0.5.1' into topic_searching
Conflicts:
	src/socket.io/topics.js
2014-08-29 09:59:18 -04:00
Julian Lam
fa6daa37eb updated regex to match admin route with no trailing slash 2014-08-29 09:57:13 -04:00
Julian Lam
fa545c5bfd 0.5.0-4
Conflicts:
	package.json
2014-08-28 21:14:37 -04:00
barisusakli
43432e8bbb Merge remote-tracking branch 'origin/master' into 0.5.1 2014-08-28 15:34:58 -04:00
psychobunny
ad00c3cb50 updating font path 2014-08-28 14:29:22 -04:00
psychobunny
20da1b37a5 updating fontawesome, closes #2024 2014-08-28 14:29:09 -04:00
barisusakli
94c765fa25 closes #1996 2014-08-27 18:03:53 -04:00
psychobunny
8f3f409e0f documentation status badge 2014-08-27 16:27:55 -04:00
barisusakli
ba4b98de0e email and username checks on profile update 2014-08-27 16:06:49 -04:00
barisusakli
ed294dd414 Merge remote-tracking branch 'origin/master' into 0.5.1 2014-08-27 15:58:13 -04:00
Julian Lam
cd10248226 basic topic searching via search bar working 2014-08-27 15:26:44 -04:00
Julian Lam
df5283cbae Merge remote-tracking branch 'origin/0.5.1' into topic_searching 2014-08-27 15:04:43 -04:00
barisusakli
347fc05376 getPidIndex socket call 2014-08-27 15:03:36 -04:00
Julian Lam
1d3aafc08f adding sourceRoot to minified mapping 2014-08-27 14:42:10 -04:00
barisusakli
d67cd489cd crash fix 2014-08-27 14:09:15 -04:00
Julian Lam
347d7de25b an ajaxify.go 302 will pass callback and quiet arguments along as well now 2014-08-27 14:04:31 -04:00
Julian Lam
5d32073f2c Merge branch '0.5.1' into topic_searching 2014-08-27 12:29:02 -04:00
barisusakli
fdf19f9025 closes #2022 2014-08-27 01:27:17 -04:00
barisusakli
8eecf59c47 closes #2020 2014-08-26 18:47:52 -04:00
barisusakli
69ce425ae5 closes #2021 2014-08-26 18:45:03 -04:00
barisusakli
42f87a1db7 closes #2017 2014-08-26 15:55:21 -04:00
Julian Lam
2d9ca83ae0 better error messaging when js fails to compile when reloading 2014-08-26 15:31:27 -04:00
psychobunny
4384958bf2 passwords can now contain spaces 2014-08-26 15:05:42 -04:00
psychobunny
6a4bcf8ab8 fixed password error message 2014-08-26 14:57:20 -04:00
Julian Lam
e497290dbc removed commented-out code 2014-08-26 14:51:22 -04:00
Julian Lam
fcbdc5e271 added recompilation of templates to NodeBB Reloading - #2010 2014-08-26 14:48:43 -04:00
barisusakli
eef200be10 closes #1284 2014-08-26 13:47:53 -04:00
Julian Lam
124a4ce89c Merge branch 'hotreload' into 0.5.1
Conflicts:
	public/src/forum/admin/index.js
	src/meta.js
2014-08-26 13:12:25 -04:00
Julian Lam
5f96823f66 allowed the "forum updated" message to show up for reloads as well 2014-08-26 11:41:31 -04:00
psychobunny
1f6f2c13d5 apparently this was confusing 2014-08-26 11:35:54 -04:00
Julian Lam
ff38394f96 latest translations 2014-08-26 10:32:16 -04:00
barisusakli
dc0cec0352 merge 2014-08-25 20:01:12 -04:00
barisusakli
b856ddb98f closes #2018 2014-08-25 19:59:03 -04:00
barisusakli
c57b0a2199 closes #2013 2014-08-25 12:36:32 -04:00
Julian Lam
2bfa7d5b97 closed #2012 2014-08-25 11:57:35 -04:00
Julian Lam
ab77e6767e closed #2011 2014-08-25 11:57:35 -04:00
Julian Lam
0c4a788698 added callbacks to css and js reloading, issue #2010 2014-08-25 11:57:35 -04:00
Julian Lam
3e033043f3 on-demand reloading of client-side assets 2014-08-25 11:57:34 -04:00
Julian Lam
5886ccc419 framework for reloading 2014-08-25 11:57:34 -04:00
Julian Lam
ba91d7aba6 proof-of-concept for hot-swapping of routes 2014-08-25 11:57:34 -04:00
Julian Lam
c9e80b6f64 closed #2012 2014-08-25 11:56:48 -04:00
Julian Lam
4e55707652 closed #2011 2014-08-25 10:46:48 -04:00
Julian Lam
013dfd0ceb added callbacks to css and js reloading, issue #2010 2014-08-25 10:13:01 -04:00
Julian Lam
841c755bb7 on-demand reloading of client-side assets 2014-08-24 17:46:22 -04:00
Julian Lam
aca163d067 framework for reloading 2014-08-24 14:25:26 -04:00
barisusakli
e751a0c0cf closes #2003 2014-08-24 12:58:13 -04:00
Julian Lam
943874805d proof-of-concept for hot-swapping of routes 2014-08-24 12:30:49 -04:00
barisusakli
f11601d70f Merge remote-tracking branch 'origin/master' into 0.5.1 2014-08-23 22:36:26 -04:00
barisusakli
7019618863 closes #2003 2014-08-23 22:34:39 -04:00
barisusakli
62dd056faa tag search 2014-08-23 21:53:16 -04:00
Julian Lam
851ebc2a6e more translations... heh 2014-08-23 19:10:21 -04:00
Julian Lam
36752f94dc latest translations 2014-08-23 14:15:38 -04:00
barisusakli
ab0d31bef1 closes #2005 2014-08-22 19:21:20 -04:00
barisusakli
95c839579e closes #2007 2014-08-22 19:10:26 -04:00
barisusakli
5a42b6a7ea closes #2009 2014-08-22 18:05:50 -04:00
Julian Lam
69b9e57daf completing subcategory integration in backend, closed #1299 2014-08-21 09:52:21 -04:00
Julian Lam
b7c7dd98c3 ACP setting and API return for subcats 2014-08-21 00:11:39 -04:00
psychobunny
2ced285f89 closes #2004 2014-08-20 14:21:23 -04:00
psychobunny
91e29d7bb2 updated latest templates.js 2014-08-20 14:08:14 -04:00
psychobunny
eed57603ef templates.js 0.0.10 2014-08-19 13:29:27 -04:00
psychobunny
6d580df8b1 temporarily dropping templates.js to 0.0.8, closes #2001 2014-08-19 13:28:48 -04:00
barisusakli
83de5ba5a4 added topic owner uid 2014-08-18 19:04:49 -04:00
barisusakli
06119510b7 merge 2014-08-18 16:20:12 -04:00
barisusakli
22fdf9f4ed getMainPost uses getMainPosts 2014-08-18 16:18:51 -04:00
barisusakli
b858b120da closes #1998 2014-08-18 16:03:25 -04:00
Julian Lam
74e5524492 fixing request to /api not returning api result 2014-08-18 13:44:27 -04:00
psychobunny
4dd32e1024 filter:category.get applies to all category-like API calls now
@a5mith
https://gist.github.com/psychobunny/572d867935469774c6e8#comment-1281883
2014-08-18 13:05:20 -04:00
Julian Lam
dd5424ff38 Merge pull request #1997 from nchase/patch-1
fix link to travis-ci build in README.md
2014-08-18 00:03:39 -04:00
nchase
01f5acea9b fix link to travis-ci build in README.md 2014-08-17 23:34:08 -04:00
barisusakli
77a7c5caef eachLimit notifications.push 2014-08-17 22:12:43 -04:00
barisusakli
24ea74dc41 lol
O(log(n)) to O(1) and away
2014-08-17 22:10:16 -04:00
barisusakli
d411ed5c28 closes #1995 2014-08-17 19:26:24 -04:00
Julian Lam
e19e6cd3f0 Merge pull request #1961 from RefinedSoftwareLLC/patch-4
Corrected node.js version requirement.
2014-08-17 11:28:55 -04:00
barisusakli
179e1e6143 Merge remote-tracking branch 'origin/master' into 0.5.1 2014-08-17 01:29:59 -04:00
Barış Soner Uşaklı
02889f2e70 call callback on follow/unfollow 2014-08-17 01:29:20 -04:00
barisusakli
05fdc945f3 closes #1993 2014-08-17 00:14:45 -04:00
barisusakli
5ae7c92d55 notifications refactor
added getMultiple which works with an array of nids
2014-08-16 23:25:30 -04:00
barisusakli
dd9a383f46 removed unused functions 2014-08-16 21:40:41 -04:00
barisusakli
ca90afd544 #1992
(drunk) not even done yet
2014-08-16 21:33:42 -04:00
barisusakli
3011491863 merge conflcit 2014-08-15 18:16:45 -04:00
barisusakli
a9ca035e1e gotto check read after each pass 2014-08-15 18:15:10 -04:00
barisusakli
b2f8a65bc8 removed slice 2014-08-15 18:12:43 -04:00
barisusakli
522fda2e58 closes #1936 2014-08-15 18:11:57 -04:00
psychobunny
e097ac1fa7 latest templates.js 2014-08-15 17:26:49 -04:00
barisusakli
d852f284da closes #1948 2014-08-15 15:45:01 -04:00
barisusakli
cd096f8832 sortedSetScores for tag counts 2014-08-15 11:48:01 -04:00
barisusakli
e10eaf0d50 added tag counts to api return 2014-08-14 21:12:12 -04:00
barisusakli
931d46fe7e merge 2014-08-14 18:01:22 -04:00
barisusakli
b50b5e4787 satifying my OCD
fire hook after successful follow/unfollow
2014-08-14 17:59:33 -04:00
psychobunny
0c17ee15f7 action:user.follow and action:user.unfollow 2014-08-14 17:52:17 -04:00
psychobunny
1036ba4636 removing timestamp from thread hooks... completely pointless 2014-08-14 17:47:05 -04:00
barisusakli
d91fa5747d closes #1964 2014-08-14 15:19:57 -04:00
barisusakli
60624eedec small tweak 2014-08-14 10:16:43 -04:00
barisusakli
5c91bc4335 optimized home 2014-08-14 09:59:40 -04:00
barisusakli
c58712e2a9 closes #1971 2014-08-14 08:34:38 -04:00
barisusakli
d0d1ebb28c Merge remote-tracking branch 'origin/master' into 0.5.1 2014-08-14 07:52:11 -04:00
barisusakli
2d0637d7c6 fix user online status on profile page 2014-08-14 07:51:21 -04:00
barisusakli
c9c454825e closes #1369 2014-08-13 21:42:04 -04:00
barisusakli
d12a526e82 check against 0 first 2014-08-13 19:44:59 -04:00
barisusakli
e909e46786 closes #1989 2014-08-13 19:25:58 -04:00
barisusakli
3ab2e70e07 Merge remote-tracking branch 'origin/master' into 0.5.1 2014-08-13 18:46:07 -04:00
barisusakli
dda0322968 getUsersInCategory 2014-08-13 18:44:40 -04:00
barisusakli
299d7bfee3 Merge remote-tracking branch 'origin/master' into 0.5.1 2014-08-13 18:33:34 -04:00
barisusakli
5c84a3adb5 closes #1974 2014-08-13 18:25:26 -04:00
barisusakli
f562caaa61 callback 2014-08-13 17:11:17 -04:00
Julian Lam
a2fb4a66b0 migrated ACP themes page from html rendered via js to template engine 2014-08-13 16:55:41 -04:00
psychobunny
5bf9c6db7b closes #1975 2014-08-13 16:28:18 -04:00
psychobunny
544afd4e4c importing latest templates.js client-side 2014-08-13 16:27:29 -04:00
barisusakli
37115ea3d6 Merge remote-tracking branch 'origin/master' into 0.5.1 2014-08-13 16:25:56 -04:00
barisusakli
1a97302d68 fix double anchors around images
if the image is already inside an anchor dont wrap again
2014-08-13 16:25:34 -04:00
Julian Lam
b48571ceb8 fixed #1988 2014-08-13 16:03:33 -04:00
barisusakli
464be4f7cc Merge remote-tracking branch 'origin/master' into 0.5.1 2014-08-13 15:33:42 -04:00
barisusakli
0847eb2c3d added uid to filter:header.build 2014-08-13 15:32:31 -04:00
barisusakli
dae3ef49be show user names who upvoted a post on mouse over 2014-08-13 13:35:55 -04:00
barisusakli
005405b16c closes #1976 2014-08-12 21:41:23 -04:00
barisusakli
9511e4a633 Merge remote-tracking branch 'origin/master' into 0.5.1 2014-08-12 15:11:47 -04:00
barisusakli
b16932a676 check mainPid 2014-08-12 15:08:42 -04:00
barisusakli
5dd90880d4 Merge remote-tracking branch 'origin/master' into 0.5.1 2014-08-12 14:59:34 -04:00
barisusakli
c358ff3d83 fix isSortedSetMembers on mongo 2014-08-12 14:39:58 -04:00
Julian Lam
4fa80263b0 fixed #1981 2014-08-12 14:15:01 -04:00
barisusakli
b50a6d8f34 Merge remote-tracking branch 'origin/master' into 0.5.1 2014-08-12 14:06:12 -04:00
Julian Lam
cf6acf6b41 sacrificing a goat to ensure this doesn't come back to bite me 2014-08-12 14:02:40 -04:00
Julian Lam
5936c72f96 further fix to #1957 2014-08-12 13:57:30 -04:00
barisusakli
ac43ff3c3d closes #1970 2014-08-12 13:45:18 -04:00
barisusakli
ceaedf9e2f closes #1941 2014-08-12 13:02:07 -04:00
barisusakli
1cf5c3145a doing it properly this time
mainPost always has index 0
2014-08-12 12:32:38 -04:00
barisusakli
8584da75f2 reverted main post change, breaks indices 2014-08-12 11:49:28 -04:00
barisusakli
32d46f3889 crash fix 2014-08-12 11:41:18 -04:00
barisusakli
851d5c0f32 send uids to isOnline in messaging 2014-08-12 11:36:36 -04:00
barisusakli
c07d9121df small optimizations
user.isOnline works with an array of uids
do not make 2 trips to db to get main post and first 10 posts
2014-08-12 11:19:17 -04:00
Julian Lam
c818a37f0f possible fix for #1981 2014-08-12 09:56:04 -04:00
Julian Lam
0e28b6f2d5 fixed #1980 -- missing pass-through 2014-08-12 09:17:41 -04:00
barisusakli
c4b083330c closes #1978 2014-08-11 18:07:56 -04:00
barisusakli
c8084e9b2e closes #1978 2014-08-11 16:26:20 -04:00
barisusakli
5e68e0b009 same deal as previous commit 2014-08-11 15:41:45 -04:00
barisusakli
e137baccd9 fixed ip:recent weird 2014-08-11 13:47:24 -04:00
barisusakli
c991997552 removed off from search button 2014-08-11 12:16:01 -04:00
barisusakli
7642be3608 closes #1939 2014-08-10 14:52:23 -04:00
barisusakli
53d20cf058 parse variables before rendering widgets 2014-08-09 21:05:59 -04:00
barisusakli
b5cc852551 do a single filter after getting all unread tids 2014-08-09 16:15:22 -04:00
barisusakli
41ed52a414 moved newlines from language file to core 2014-08-09 13:30:13 -04:00
barisusakli
b8279dc737 optimize getUserGroups to work with multiple user ids 2014-08-09 02:07:03 -04:00
barisusakli
5b681678b1 could use async.apply here hm 2014-08-08 17:42:03 -04:00
barisusakli
4e4a583d9d took out the meta config check from image.js 2014-08-08 17:30:37 -04:00
barisusakli
ea2975cb3f eachLimit on expire nids 2014-08-08 16:28:29 -04:00
barisusakli
a2bb8029fe use utils.toISOString 2014-08-08 15:28:44 -04:00
psychobunny
193832ea9b closes #1957 2014-08-08 13:15:35 -04:00
barisusakli
5c6e26832e removed console.logs 2014-08-07 21:31:34 -04:00
barisusakli
df0a5e780a prevent edit to change title length above max 2014-08-07 20:03:56 -04:00
psychobunny
025403b9a8 optimizing data transfer *rolls eyes* 2014-08-07 17:52:03 -04:00
psychobunny
ee108ed963 bumping up templates.js version 2014-08-07 17:44:50 -04:00
barisusakli
46398fa924 removed unused require 2014-08-07 16:20:50 -04:00
psychobunny
db2ef15a09 linting 2014-08-07 16:06:23 -04:00
psychobunny
e77491fcbb closes #1956 2014-08-07 16:02:25 -04:00
barisusakli
049d7f766e use getSetsMembers instead of async.map 2014-08-07 13:48:07 -04:00
RefinedSoftwareLLC
215ec041bb Corrected node.js version requirement.
package.json was being told that nodebb only required version >=0.8.x of node. Per documentation and communication with developers this should be >=0.10.x
Changing this should help users who accidentally run nodebb on node.js 0.8 to run it on a supported version of 0.10.x or highter.
2014-08-07 09:14:28 -06:00
Julian Lam
84f3fee488 latest translations 2014-08-07 10:25:10 -04:00
barisusakli
7d179b68df faster notif prune 2014-08-07 00:44:25 -04:00
barisusakli
f39d772a40 if notification is purged delete from user mapping as well 2014-08-07 00:17:26 -04:00
barisusakli
cb519d53a1 isArray check 2014-08-07 00:06:13 -04:00
barisusakli
8e8b678d40 small tweak 2014-08-07 00:02:20 -04:00
barisusakli
84aadc03fd fix filter condition 2014-08-06 22:04:35 -04:00
psychobunny
90513be321 send callback directly
except this time I'm fixing my own derps instead of @barisusakli
2014-08-06 21:42:23 -04:00
barisusakli
7ffad7e0d1 send callback directly 2014-08-06 21:30:41 -04:00
barisusakli
528ee335d5 optimize getTopicsByTids and getTeasers 2014-08-06 21:30:11 -04:00
psychobunny
c6ced111b5 quotes are better 2014-08-06 18:53:00 -04:00
psychobunny
9a5ed0bf27 forgot err, thanks @barisusakli 2014-08-06 18:52:04 -04:00
psychobunny
b1ef42889d updated site title for tags page to be more user friendly 2014-08-06 18:51:32 -04:00
psychobunny
38dc35f480 console.log 2014-08-06 18:49:11 -04:00
psychobunny
3a32058be1 closes #1958 2014-08-06 18:48:46 -04:00
psychobunny
4cda8207e2 adding uid to filter:category.get 2014-08-06 13:56:05 -04:00
psychobunny
c88327d075 added filter:category.get 2014-08-06 13:51:46 -04:00
barisusakli
76b257f7b8 optimized User.getUsers 2014-08-06 12:39:14 -04:00
barisusakli
59d4d2880f fixed markAsUnreadForAll permissions 2014-08-05 23:47:17 -04:00
barisusakli
906e1a3846 removed unused meta 2014-08-05 23:29:49 -04:00
barisusakli
90ac399f6d fix topics.loadMore so it checks read permission 2014-08-05 23:22:21 -04:00
barisusakli
805e6934b9 derp this function should only return err 2014-08-05 23:10:45 -04:00
barisusakli
f55d1897c8 fix categories.loadMore so it checks read permission 2014-08-05 22:59:29 -04:00
barisusakli
100328ef06 shorter markAsUnread 2014-08-05 22:52:33 -04:00
barisusakli
f49c95c16f closes #1950 2014-08-05 18:18:39 -04:00
psychobunny
d4dc716acd filter:templates.get_config, allows you to modify template config
as found here
https://github.com/NodeBB/nodebb-theme-vanilla/blob/master/templates/config.json
@Schamper
2014-08-05 17:17:13 -04:00
psychobunny
a880ac6e9f do one api call for template configs rather than two on cold load 2014-08-05 17:17:13 -04:00
psychobunny
631edc92d3 extra var 2014-08-05 17:17:12 -04:00
barisusakli
5ce0ebb4ac single socket call on topic enter 2014-08-05 17:09:56 -04:00
psychobunny
39d6941603 remove chat/flag for new incoming posts 2014-08-05 16:25:02 -04:00
psychobunny
eb297d7eab client side hooks: action:composer.topics.post, action:composer.posts.reply, action:composer.posts.edit 2014-08-05 16:00:52 -04:00
psychobunny
bb48bdb008 closes #1942 2014-08-05 15:12:23 -04:00
Barış Soner Uşaklı
f9631ae8c0 Merge pull request #1949 from filipsalpe/master
Leave the chat window within the screen
2014-08-05 14:39:45 -04:00
Filips Alpe
378fd095eb Leave the chat window within the screen
On smaller screens, the top of the chat window can appear so high that it is outside the screen, this fixes that.
2014-08-05 21:31:51 +03:00
barisusakli
95979d9d97 closes #1947 2014-08-05 13:38:50 -04:00
Julian Lam
1e6eaffd43 0.5.0-2 2014-08-05 11:42:09 -04:00
barisusakli
d3e57d0930 on entry to topic mark notifications read 2014-08-05 10:44:30 -04:00
barisusakli
473310d42d use empty string if referer is undefined 2014-08-05 10:12:09 -04:00
Julian Lam
3df591a118 latest french translations 2014-08-04 16:30:08 -04:00
Julian Lam
33c4211ac2 latest fallbacks for new assets 2014-08-04 16:00:00 -04:00
Julian Lam
074489020f added missing configs for email, search, and groups, latest fallbacks, removed footer from language strings 2014-08-04 15:57:53 -04:00
Julian Lam
2a4717c80c latest translations from tx 2014-08-04 15:48:12 -04:00
barisusakli
b4182f57fe simplified callback 2014-08-04 13:00:42 -04:00
barisusakli
b0b78c3092 minor fix to prevent err when trying to mark null nid 2014-08-03 12:40:46 -04:00
barisusakli
214f6af324 parseInt 2014-08-02 19:46:28 -04:00
barisusakli
e420ee5fb6 privilege fix for single category check 2014-08-02 19:45:13 -04:00
barisusakli
e7700a3fde minor refactor 2014-08-02 16:53:42 -04:00
barisusakli
c6c23aad5e eachLimit on move all topics 2014-08-02 16:48:34 -04:00
barisusakli
115598f382 minor refactor 2014-08-02 16:41:44 -04:00
barisusakli
4fd2973c53 closes #1938 2014-08-02 16:03:28 -04:00
barisusakli
62681c36ef if notif is deleted don't push, prevent crash 2014-08-02 15:10:32 -04:00
chronize
efe938b392 fix upgrade.js according to CodeClimate recommendation, remove BOM 2014-08-02 15:03:15 -04:00
chronize
a2f8f54061 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-08-02 14:54:57 -04:00
barisusakli
97909a6cac err checks 2014-08-01 18:21:39 -04:00
Julian Lam
9dead8ec9e latest translations... again 2014-08-01 18:03:02 -04:00
Julian Lam
770ea77cac latest translations 2014-08-01 17:52:42 -04:00
psychobunny
e14a1e90c3 linting emitter.js 2014-08-01 17:02:07 -04:00
psychobunny
533659e2fd unnecessary property check 2014-08-01 16:56:35 -04:00
psychobunny
be21e11b69 cleanup / lint 2014-08-01 16:55:35 -04:00
Julian Lam
77e0cb170f removed console.log 2014-08-01 16:35:39 -04:00
barisusakli
3424288f0a actually set url #1926 2014-08-01 15:57:46 -04:00
Julian Lam
87a20b1816 0.5.0-1 2014-08-01 15:50:55 -04:00
psychobunny
53ae0c586d closes #1926 2014-08-01 15:41:50 -04:00
barisusakli
3163f70ef2 add tid to post notification so its marked read on entry 2014-08-01 14:07:01 -04:00
barisusakli
0773f51260 closes #1932 2014-07-31 23:16:12 -04:00
barisusakli
25483e376f fix online users page
insert users before the anon box if there is one
2014-07-31 20:25:52 -04:00
barisusakli
76ad2b8fb2 fixed to account header 2014-07-31 20:15:11 -04:00
chronize
c456714440 revert package.json 2014-07-31 18:16:27 -04:00
barisusakli
c217834165 fixed typo 2014-07-31 17:44:13 -04:00
barisusakli
1398937dd8 early outs for privs
no need to check if empty array is passed in, happens if there are no
unread topics
remove dupe cids before checking for privileges
2014-07-31 17:29:20 -04:00
chronize
6ed4e8ab48 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-07-31 16:51:04 -04:00
barisusakli
7bfec99df1 permission fix for popular page 2014-07-31 16:32:17 -04:00
chronize
4e4187417e optimize ACP groups screen, jQuery caching 2014-07-31 16:25:48 -04:00
chronize
945b5cd09c Merge branch 'master' of https://github.com/NodeBB/NodeBB
Conflicts:
	src/groups.js
2014-07-31 15:21:39 -04:00
chronize
a49aee9d3d Merge master 2014-07-31 15:20:41 -04:00
barisusakli
aa4089e6d7 #1930
simple solution for now, wraps images with <a> that opens in new tab
2014-07-31 13:36:05 -04:00
barisusakli
de6e74c50e #1914 2014-07-31 08:57:27 -04:00
barisusakli
e0be4d146f closes #1913 2014-07-31 08:47:37 -04:00
barisusakli
3ff91b8c50 closes #1912 2014-07-31 08:23:07 -04:00
barisusakli
d9a0af712d group null and err check 2014-07-31 08:01:11 -04:00
barisusakli
dc68dce27f check err 2014-07-31 07:38:19 -04:00
Barış Soner Uşaklı
63a92fee84 Merge pull request #1928 from chronize/master
fix fatal error when renaming new group with no users
2014-07-31 07:35:22 -04:00
root---
da7a161245 fluidized ACP groups modal dialog 2014-07-31 03:19:47 -04:00
root---
f2d07d3182 fix fatal error when renaming group with no users 2014-07-31 01:39:41 -04:00
barisusakli
a0ded64394 db search 0.0.13 2014-07-30 19:07:43 -04:00
barisusakli
38b6c4ce55 #1925 2014-07-30 18:52:58 -04:00
barisusakli
d97af5020a small cleanup to postSummary 2014-07-30 18:40:00 -04:00
barisusakli
9312675a77 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-07-30 17:45:20 -04:00
barisusakli
5a2b02e798 fix var name, #1925 2014-07-30 17:45:12 -04:00
Julian Lam
925cd99afb Merge branch 'master' into topic_searching 2014-07-30 17:14:57 -04:00
Julian Lam
89a9d4b7f2 logic for #1837 2014-07-30 17:12:11 -04:00
barisusakli
cfc67d4e90 closes #1924 2014-07-30 15:14:04 -04:00
barisusakli
7e82d3d9a5 fix guest priv 2014-07-30 14:47:04 -04:00
barisusakli
efdd795084 closes #1922 2014-07-30 14:29:48 -04:00
barisusakli
da780cdee7 closes #1920 2014-07-30 02:45:41 -04:00
barisusakli
8caedc935b online users fix
and jshint cleanup
2014-07-29 23:49:49 -04:00
Julian Lam
bb7a71389e using websocketAddress config if supplied 2014-07-29 22:24:57 -04:00
barisusakli
fed8cc6d53 optimize privileges and assorted fixes.
* new methods
privileges.categories.filter
privileges.topics.filter
privileges.posts.filter

they take a list of ids and a privilege, and return the filtered list of
ids, faster than doing  async.filter and calling the db for each id.

* remove event listeners on recent page before adding
* group.exists works for both single group names and arrays
* helpers.allowedTo works for both a single cid and an array of cids
* moved filter:topic.post hook right before topic creation.
* moved filter:topic.reply hook right before topic reply.
2014-07-29 21:51:46 -04:00
barisusakli
eeb4c9f487 optimize getPostSummaryByPids 2014-07-29 17:33:28 -04:00
barisusakli
1a68fe5a26 possible fix for #1909 2014-07-29 17:12:02 -04:00
barisusakli
68cf064b1e cleaned up a bit 2014-07-29 02:37:33 -04:00
barisusakli
d0a0d02d31 mongodb list fix 2014-07-29 02:34:55 -04:00
barisusakli
e8b767d0dd get recent poster uids 2014-07-29 01:36:33 -04:00
barisusakli
783926687c reduced active users 2014-07-29 00:50:53 -04:00
barisusakli
96b0b449b9 closes #1911 2014-07-29 00:42:33 -04:00
barisusakli
f31978aa2c moved core notifications all the way to the end 2014-07-28 19:09:08 -04:00
barisusakli
6e335ff29a removed debug 2014-07-28 18:18:23 -04:00
barisusakli
f71bd41408 more fixes 2014-07-28 18:18:22 -04:00
barisusakli
dfb6606432 one more fix 2014-07-28 18:18:21 -04:00
barisusakli
08ba683c7d fix callback 2014-07-28 18:18:21 -04:00
barisusakli
d7520508e3 #1375 part1 2014-07-28 18:18:20 -04:00
Julian Lam
4d73a563c5 closed #1850 2014-07-28 15:25:04 -04:00
Julian Lam
e5be1d2840 closed #1910 2014-07-28 14:40:02 -04:00
psychobunny
947c9b6eea you're now logged out server-side when you're banned, so csrf token doesn't work in app.logout 2014-07-28 14:28:59 -04:00
psychobunny
3f9e6e7d86 closes #1901 2014-07-28 14:23:25 -04:00
psychobunny
60e74cc2c3 LTRIM support for mongo 2014-07-28 14:20:29 -04:00
psychobunny
7327730252 LTRIM support for redis 2014-07-28 14:20:24 -04:00
psychobunny
cf031be904 better error handling for custom langauge files 2014-07-27 23:21:42 -04:00
barisusakli
8146358aac closes #1905
fixed translator.load, it wasn't passing in language and was trying to
load undefined.json
2014-07-26 23:41:22 -04:00
barisusakli
093e373025 removed console.log 2014-07-26 22:38:04 -04:00
barisusakli
2d94df93b8 isArray is enough 2014-07-26 14:55:17 -04:00
barisusakli
0792731873 new hook filter:topics.get 2014-07-25 19:58:44 -04:00
Julian Lam
0b01a780f8 registering static:app.load in core 2014-07-25 19:28:27 -04:00
Julian Lam
0bad6198d4 firing new third type of hook, static. New hook: static:app.load, closed #1812 2014-07-25 19:16:06 -04:00
barisusakli
eea987d8dd removed console.log 2014-07-25 19:02:10 -04:00
barisusakli
5a0e99956e some cleanup 2014-07-25 18:35:33 -04:00
psychobunny
20ca31d6b1 moved documentation out of core and into https://github.com/NodeBB/nodebb-english 2014-07-25 17:11:53 -04:00
Julian Lam
b7d27fe48b god damnit @barisusakli :P 2014-07-25 16:57:36 -04:00
Julian Lam
91ce3634fc fixed #1904 2014-07-25 16:46:04 -04:00
Julian Lam
086ebb7e5a closed #1874 2014-07-25 15:37:57 -04:00
Julian Lam
b273d07ce5 Merge pull request #1903 from RefinedSoftwareLLC/patch-3
Update smartos.rst
2014-07-25 14:40:57 -04:00
Julian Lam
cff30dbe79 latest translations and fallbacks 2014-07-25 12:53:27 -04:00
Julian Lam
87465ae090 merged latest French translations in, closed #1891 2014-07-25 12:52:48 -04:00
RefinedSoftwareLLC
bd1942ee21 Update smartos.rst
Minor fixes.
2014-07-25 08:17:48 -06:00
barisusakli
3829019bfa removed optional params 2014-07-24 23:33:33 -04:00
barisusakli
c7de38f28e closes #1902
messages:<uid>:<uid> list changed to messages:uid:<uid>:to:<uid>
sortedset
2014-07-24 22:38:35 -04:00
Julian Lam
a79bb29216 partial fix to #1874 2014-07-24 22:04:41 -04:00
barisusakli
3bfad766b3 closes #1900 2014-07-24 21:11:46 -04:00
Barış Soner Uşaklı
385d714dab Merge pull request #1897 from Aure77/master
Allow session cookie domain customization
2014-07-24 19:22:36 -04:00
Aure77
965d6a0d66 Allow cookie domain customization from meta config 2014-07-25 00:45:36 +02:00
psychobunny
7b27c349ae closes #1867 2014-07-25 00:45:36 +02:00
psychobunny
c3843a0564 closes #1892 2014-07-25 00:45:36 +02:00
psychobunny
ff7ce55ae2 #1892 2014-07-25 00:45:35 +02:00
psychobunny
57770b3d38 #1892 2014-07-25 00:45:35 +02:00
RefinedSoftwareLLC
f3ca87d139 Update smartos.rst
Fixed glitch with line being bolded.
2014-07-25 00:45:34 +02:00
RefinedSoftwareLLC
89a630a705 Update smartos.rst
Many small updates
2014-07-25 00:45:34 +02:00
barisusakli
d7bd35ab08 #1741 2014-07-25 00:45:34 +02:00
barisusakli
297f523f18 closes #1899 2014-07-24 18:45:01 -04:00
psychobunny
4f868f99c1 closes #1867 2014-07-24 18:43:09 -04:00
psychobunny
8769f791bc closes #1892 2014-07-24 18:38:46 -04:00
psychobunny
5fba8f541d #1892 2014-07-24 18:37:56 -04:00
psychobunny
1cd2f060aa #1892 2014-07-24 18:34:18 -04:00
Julian Lam
0ab3a2099a Merge pull request #1898 from RefinedSoftwareLLC/patch-3
Update Docs / Install / SmartOS
2014-07-24 18:03:28 -04:00
RefinedSoftwareLLC
570ccb631d Update smartos.rst
Fixed glitch with line being bolded.
2014-07-24 15:52:49 -06:00
RefinedSoftwareLLC
6624b1f64a Update smartos.rst
Many small updates
2014-07-24 15:35:44 -06:00
Julian Lam
8296dc5630 beginning topic searching + new hook 2014-07-24 17:30:37 -04:00
barisusakli
d25300043c #1741 2014-07-24 16:44:45 -04:00
Aure77
e28ed490ee Allow session cookie domain customization 2014-07-24 22:26:19 +02:00
psychobunny
b604a4961c thanks @barisusakli 2014-07-24 16:17:49 -04:00
barisusakli
e459592ac9 closes #1893 2014-07-24 16:12:57 -04:00
psychobunny
bb997e18a0 updating docs 2014-07-24 16:04:24 -04:00
psychobunny
47a86662de adding timestamp to topic action hooks 2014-07-24 16:04:22 -04:00
psychobunny
df37c1e235 translator.compile 2014-07-24 16:04:21 -04:00
psychobunny
5428ea635c updating docs 2014-07-24 16:04:19 -04:00
psychobunny
788b16fa62 adding uid to the topic hooks, so plugins can know the user that did the action 2014-07-24 16:04:18 -04:00
Julian Lam
fd78085c59 Merge pull request #1894 from JonathanMH/patch-2
added info about MongoDB 2.4 user setup
2014-07-24 15:18:36 -04:00
Jonathan
3f85ddb98a added info about MongoDB 2.4 user setup 2014-07-24 20:59:11 +02:00
psychobunny
63df69f4fb documenting hooks 2014-07-24 14:24:34 -04:00
psychobunny
2e7d1f33dc action:topic.lock, action:topic.pin, action:topic.move 2014-07-24 14:22:48 -04:00
psychobunny
640c4a1063 added hook to doc 2014-07-24 14:17:33 -04:00
psychobunny
1a37176a9d filter:topic.get, surprisingly never implemented till today 2014-07-24 14:16:41 -04:00
barisusakli
8dce99250b final fix for #1884
fix mongo functions so they return correct data if duplicate keys are
passed. getObjects(['post:1', 'post:1'], callback) was only returning
one object.
2014-07-24 12:41:22 -04:00
barisusakli
3557aa2f9a fixed tags page search 2014-07-24 11:57:34 -04:00
barisusakli
fa8fcc00ec fix tag counts
if a tag is removed from a topic, update number of topics in that tag
2014-07-24 03:46:45 -04:00
barisusakli
bc2f7339ee getLatestUndeletedPid will return string #1884 2014-07-24 03:30:17 -04:00
Julian Lam
73e9a7fec0 backticks are italics? wtf. 2014-07-23 21:30:14 -04:00
Julian Lam
700519ddf2 added new FAQ entry re: Recently Logged IPs, re: https://community.nodebb.org/topic/2062/forwarding-ips-on-nginx-proxy/3, ping @a5mith 2014-07-23 21:28:17 -04:00
psychobunny
685cd38162 calculate levenshtein distance between recent chat messages and temporarily ban if determined to be spam 2014-07-23 18:23:03 -04:00
psychobunny
4723b6d68b danger instead of warning for banned alert 2014-07-23 17:29:22 -04:00
psychobunny
e95bc35240 Merge branch 'master' of https://github.com/NodeBB/NodeBB
Conflicts:
	src/upgrade.js
2014-07-23 17:26:59 -04:00
psychobunny
b209af1e32 info instead of error 2014-07-23 17:26:00 -04:00
Julian Lam
12f954f4bd Merge pull request #1890 from derrg/master
Fixed Typo
2014-07-23 17:13:21 -04:00
Julian Lam
883cee31bc added support for showSiteTitle in ACP, closes #1519 2014-07-23 17:12:41 -04:00
Ken Van Dalsum
f38949d185 Fixed Typo 2014-07-23 17:05:52 -04:00
barisusakli
7454fd53b9 possible fix for #1741 2014-07-23 16:49:32 -04:00
barisusakli
7c20e38556 updated vanilla and lavender to latest 2014-07-23 15:43:56 -04:00
barisusakli
dc30d94ff8 info 2014-07-23 15:41:51 -04:00
Julian Lam
440a19ed57 Merge branch 'sourcemap-windows' 2014-07-23 14:37:52 -04:00
barisusakli
e961e3c552 reduced hightlight duration by 2 seconds 2014-07-23 14:33:35 -04:00
Julian Lam
ce8bec5edb fixed mapping in web inspector 2014-07-23 14:27:01 -04:00
Barış Soner Uşaklı
485f14ef7f Merge pull request #1873 from frissdiegurke/patch-2
[Settings] fixed data-empty usage within checkboxes
2014-07-23 13:40:15 -04:00
Barış Soner Uşaklı
6f728f1eb0 Merge pull request #1887 from derrg/master
Added ImageMagic to Windows 8 prerequisites
2014-07-23 13:39:31 -04:00
Ken Van Dalsum
0c8253b23a Added ImageMagic to Windows 8 prerequisites 2014-07-23 13:34:18 -04:00
barisusakli
fde8e9d90f on group destroy, remove it from all groups
previously if a group was destroyed it was left behind in privilege
groups
2014-07-23 13:32:23 -04:00
barisusakli
5c57ed5ea0 install db dependencies in upgrade script 2014-07-23 13:30:12 -04:00
Julian Lam
7cdcb83a98 fixed #1640 2014-07-23 13:18:32 -04:00
barisusakli
d565de60d0 updated passport-local dependency 2014-07-23 10:50:59 -04:00
barisusakli
7887c0934b updated dependencies 2014-07-23 10:45:48 -04:00
barisusakli
238d6602a2 check for valid content, #1884 2014-07-23 09:40:07 -04:00
barisusakli
8113ed6a4d closes #1883, no upgrade script #successkid 2014-07-23 03:09:07 -04:00
barisusakli
054ceab0be isMemberOfGroups fix 2014-07-23 00:36:03 -04:00
barisusakli
6c48cbe6ce regFormEntry array 2014-07-22 22:00:39 -04:00
barisusakli
20df6fd5cd small fix 2014-07-22 18:00:59 -04:00
barisusakli
2bf38ec84b handle pinned topics 2014-07-22 17:58:27 -04:00
barisusakli
5292bdad5a closes #1871 2014-07-22 15:39:23 -04:00
barisusakli
1e6d589080 show topics on home instead of replies
no template changes, instead of showing the latest x posts under
categories, we are now showing the latest x posts of the latest x
topics.
2014-07-22 14:35:30 -04:00
barisusakli
3e252187ad closes #1868
updated out of date dependencies expect socket.io
2014-07-22 13:43:43 -04:00
barisusakli
a3fecee781 removed console.log err check 2014-07-22 13:00:04 -04:00
barisusakli
89bb11a58c closes #1880 2014-07-22 12:56:34 -04:00
barisusakli
0e241456e4 less code 2014-07-22 12:02:15 -04:00
Julian Lam
8e0bc0257d fixed #1869 2014-07-22 11:21:39 -04:00
Julian Lam
5546b4e04d closed #1877 2014-07-22 11:05:12 -04:00
Julian Lam
8be7ab55f9 latest translatios 2014-07-22 10:15:55 -04:00
frissdiegurke
021e5bfcc5 [Settings] fixed data-empty usage within checkboxes 2014-07-22 12:01:05 +02:00
barisusakli
82ffaad939 parseint 2014-07-21 19:39:06 -04:00
barisusakli
ed18ac7fdf category recent post fix
if a category is not displaying any recent posts dont render new posts
2014-07-21 18:14:44 -04:00
barisusakli
c9fb5b3e11 changed user posted notification to include title
dont send 2 notifications if you are already following topic
2014-07-21 17:43:42 -04:00
psychobunny
67c5477fb2 testing transition speed change without waiting for widgets to render 2014-07-21 17:30:57 -04:00
psychobunny
310dbc754e closes #1839 2014-07-21 16:20:17 -04:00
psychobunny
224dd49102 no need to delay prefetcher anymore 2014-07-21 16:10:35 -04:00
psychobunny
829dcb134e logic fail, time for coffee 2014-07-21 16:06:48 -04:00
psychobunny
e382e34656 unnecessary brackets 2014-07-21 15:50:55 -04:00
psychobunny
2851a9a96b don't ajaxify in until animation is completed; reduced minimum wait duration for preloader 2014-07-21 15:49:27 -04:00
barisusakli
9aeab08109 removed stop 2014-07-21 15:33:02 -04:00
barisusakli
81018d1305 closes #1863 2014-07-21 15:03:04 -04:00
psychobunny
cb08d4b04f getting rid of this one for good 2014-07-21 14:44:27 -04:00
psychobunny
1b2de8d7af updating docs for adding i8n to plugin/themes 2014-07-21 14:41:19 -04:00
psychobunny
b5d3186120 plugins and themes can now define their own custom language strings. closes #1865 2014-07-21 14:37:46 -04:00
barisusakli
1920f88f31 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-07-21 14:22:16 -04:00
barisusakli
0a84d49a6d docs update 2014-07-21 14:22:14 -04:00
Barış Soner Uşaklı
3e7420333d Update README.md 2014-07-21 14:19:31 -04:00
barisusakli
ab9af6202d Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-07-21 14:18:45 -04:00
barisusakli
d00740703b use the new $text query from mongo 2.6 2014-07-21 14:18:42 -04:00
psychobunny
423da904de allow core to tap into NodeBB's hook system, closes #989 2014-07-21 13:42:33 -04:00
psychobunny
e10307426d optional callback for registerHook 2014-07-21 13:25:25 -04:00
psychobunny
7e82393d9f plugins:loaded - using emitter class instead 2014-07-21 13:14:12 -04:00
psychobunny
bab995626c some unused vars 2014-07-21 13:10:45 -04:00
Julian Lam
bee4feff12 updated module deps for widget-essentials and markdown 2014-07-21 12:35:48 -04:00
Julian Lam
be8e63cd50 special handling for filter:app.load 2014-07-21 10:36:05 -04:00
barisusakli
ef8bbdd359 closes #1864
doing andrew's //todo's since 1991
2014-07-20 21:10:23 -04:00
barisusakli
04c6ca2ebb closes #1862 2014-07-20 18:44:12 -04:00
Julian Lam
045dc220ac latest translations 2014-07-20 17:40:15 -04:00
barisusakli
b1e93c4558 fix for wrapper 2014-07-20 14:53:29 -04:00
barisusakli
341a0c8190 closes #1855 2014-07-20 14:35:25 -04:00
Barış Soner Uşaklı
ec9cc52d03 Merge pull request #1857 from a5mith/patch-1
In response to lukelarris bug report
2014-07-19 22:01:09 -04:00
Barış Soner Uşaklı
ea85ebe016 Merge pull request #1858 from lukelarris/patch-1
Made it easier to paste command in MongoDB console
2014-07-19 22:00:17 -04:00
lukelarris
d35ac87128 Made it easier to paste command in MongoDB console
It's a pain to paste MongoDB console commands with linebreaks, as the console adds its own linebreaks. I removed the linebreaks to make it easier.
2014-07-19 20:46:52 -05:00
Aaron Smith
45518d620b In response to lukelarris bug report
Configure is in docs, not installing, so needs to go up another directory. (I think, I'm on my iPad)
2014-07-20 02:15:51 +01:00
barisusakli
7a60d478f4 small tweak to chat height 2014-07-19 18:02:35 -04:00
barisusakli
6e66911ef7 delete unread chats on account delete 2014-07-19 11:01:54 -04:00
barisusakli
a4975cab33 closes #1825, closes #1674 2014-07-19 10:33:27 -04:00
barisusakli
a69973e7a7 topics.getPids will return mainPid as well 2014-07-19 08:59:59 -04:00
barisusakli
523b3db3f1 no header tooltips in xs 2014-07-18 20:43:52 -04:00
Julian Lam
bf2cba028d fixed #1851 2014-07-18 19:12:09 -04:00
Julian Lam
14d7461252 updated deprecation notice for social network sso icons 2014-07-18 19:10:53 -04:00
Julian Lam
2f9fd620d7 fixed #1849 2014-07-18 11:10:47 -04:00
psychobunny
d78fdb1520 more confusing, works perfectably 2014-07-17 22:26:50 -04:00
psychobunny
a67e0ea3c2 less confusing 2014-07-17 19:01:46 -04:00
psychobunny
de5a564780 hinting 2014-07-17 18:59:56 -04:00
barisusakli
2c890ad609 moved pushUnreadCount 2014-07-17 18:50:03 -04:00
barisusakli
e6a5199174 pass router to app.load closes #1845
add a render method to router that forwards it to app
2014-07-17 18:34:30 -04:00
barisusakli
206acab1bf added posted data back whoops 2014-07-17 17:49:28 -04:00
barisusakli
afb62c7484 optional timestamp to post.create 2014-07-17 17:48:24 -04:00
psychobunny
7401744112 trigger action:ajaxify.contentLoaded on cold load as well 2014-07-17 15:48:28 -04:00
barisusakli
bb0223897f closes #1843 2014-07-17 11:56:07 -04:00
Julian Lam
21637a1513 Merge pull request #1836 from unixfox/master
Update guide openshift with redis and added nitrous.io
2014-07-17 10:30:44 -04:00
Emilien Devos
55a47b56e3 Added Nitrous.IO #2 2014-07-17 13:47:18 +02:00
Emilien Devos
341525c58c Added Nitrous.io 2014-07-17 13:46:41 +02:00
psychobunny
803b6f64b8 ability to disable sitemap.xml 2014-07-17 01:38:20 -04:00
psychobunny
704d81fe53 disable category RSS 2014-07-17 01:34:15 -04:00
psychobunny
b6a8845d52 disable topic RSS 2014-07-17 01:34:14 -04:00
psychobunny
dab44e0768 ability to disable rss feed 2014-07-17 01:34:13 -04:00
barisusakli
8ff34e4dc2 parseint tid 2014-07-16 21:48:21 -04:00
Julian Lam
021e31a03a better comments 2014-07-16 21:19:25 -04:00
barisusakli
7212f95582 small fix to routes 2014-07-16 21:12:10 -04:00
Julian Lam
645eb051ec added new hook filter:app.load, and deprecated action:app.load, hopefully fixes #1822 2014-07-16 21:09:55 -04:00
barisusakli
67d5307a8f small change to tag search 2014-07-16 20:46:49 -04:00
psychobunny
08df29e4dd random console.log 2014-07-16 20:43:35 -04:00
barisusakli
161069c390 closes #1840 2014-07-16 20:16:50 -04:00
barisusakli
8cfce1c91c dont select hidden br 2014-07-16 19:51:28 -04:00
Emilien Devos
e168d117e1 The last update commit of openshift guide 2014-07-16 23:20:32 +02:00
Emilien Devos
06886caf18 Update openshift.rst 2014-07-16 22:57:44 +02:00
Emilien Devos
e28abefd5c Update openshift.rst 2014-07-16 22:52:05 +02:00
Emilien Devos
f9b5249a49 Update guide openshift with redis 2014-07-16 22:43:15 +02:00
psychobunny
7132df8590 Merge pull request #1835 from unixfox/master
Added openshift
2014-07-16 16:12:09 -04:00
Emilien Devos
0766f56ed2 Update cloud.rst 2014-07-16 21:56:51 +02:00
Emilien Devos
d7050718db Update openshift.rst 2014-07-16 21:55:24 +02:00
Emilien Devos
6e0d7160db Added openshift second correction
if there are mistakes thank you to correct them.
2014-07-16 21:54:30 +02:00
Emilien Devos
d1ed7d6746 Added openshift
if there are mistakes, thank you to correct them.
2014-07-16 21:53:28 +02:00
Julian Lam
04ea475f0b Update heroku.rst
updated redis dependencies
2014-07-16 13:46:22 -04:00
barisusakli
90392025e6 small fix to router 2014-07-16 13:43:02 -04:00
Emilien Devos
8ff2581e6a #1 2014-07-16 19:05:11 +02:00
barisusakli
6d8cc5648c some tag hooks/filters 2014-07-15 21:26:02 -04:00
psychobunny
9f6c05bb24 closes #1830 2014-07-15 16:32:51 -04:00
barisusakli
42ea8652f1 possible fix for #1830 2014-07-15 16:16:35 -04:00
Barış Soner Uşaklı
7f093bccfd Merge pull request #1829 from akhoury/master
Group.join() callback made optional
2014-07-15 13:42:07 -04:00
Aziz Khoury
ed7631cab5 tab indent fix 2014-07-15 13:39:02 -04:00
Aziz Khoury
d1f97723e7 Group.join() callback made optional 2014-07-15 13:32:21 -04:00
barisusakli
943f3814e5 closes #1813 2014-07-15 13:00:22 -04:00
Julian Lam
49d29db347 latest translations and fallbacks 2014-07-14 14:39:38 -04:00
barisusakli
e036c20072 closes #1808 2014-07-14 14:28:23 -04:00
psychobunny
4385ec5e8c latest templates.js, fixes #1823 2014-07-14 13:55:50 -04:00
barisusakli
61f7f0f889 fixed file upload checks 2014-07-14 13:48:37 -04:00
barisusakli
ebaf8df0a9 #1824 2014-07-14 13:28:04 -04:00
barisusakli
fcd460438d closes #1824 2014-07-14 13:25:44 -04:00
barisusakli
d3312f1b8e fixer or in jobs and users redefinition 2014-07-13 16:25:54 -04:00
barisusakli
d999116541 wait for widgets to render to send ajaxify end
possible fix for broken masonry on f5
2014-07-13 15:38:17 -04:00
barisusakli
633980ce4b active users cleanup 2014-07-13 14:57:55 -04:00
barisusakli
93a6402879 removed stop increase timeout to 100ms 2014-07-11 23:14:50 -04:00
barisusakli
0362c1a3b0 show day/week/month/year popular topics 2014-07-11 18:43:26 -04:00
psychobunny
13f94ee32a updating copyright 2014-07-11 16:26:26 -04:00
Julian Lam
fe689908bc latest translations 2014-07-11 15:40:23 -04:00
Julian Lam
061eadb595 requiring v0.4.2 of markdown plugin, and removed marked dep from core, as it didn't seem to be used. 2014-07-10 21:43:11 -04:00
barisusakli
b2ece27263 topic post hook 2014-07-10 15:45:25 -04:00
psychobunny
1d8aeda9c2 closes #1814 2014-07-10 14:16:46 -04:00
Julian Lam
23c4b8ca35 only showing ACP setting saved alert if no callback is passed in 2014-07-10 13:35:48 -04:00
Julian Lam
84832f57cc firing action:settings.set hook AFTER the object is saved in the db. What was I thinking?! 2014-07-10 13:27:11 -04:00
Barış Soner Uşaklı
c72d0232f4 Merge pull request #1811 from Fastinyoh/master
Change user.delete hook from action to filter
2014-07-10 01:39:38 -04:00
dhingey
9d45373b59 Change user.delete hook from action to filter
The user.delete hook is now a filter, giving plugins a chance to access
the user's data before it's deleted from Redis.
2014-07-09 22:20:49 -07:00
psychobunny
5b6acbad1e optimized widget call by bundling all queries into one for #1428; fixes active users widget crash
also fixes b3819fd076 properly
2014-07-09 19:23:10 -04:00
barisusakli
9fbd535b79 fixes vote buttons on infinite scroll and new posts 2014-07-09 16:59:39 -04:00
Julian Lam
2bd99e2d16 properly did #1809, lol, whoops 2014-07-09 16:27:24 -04:00
psychobunny
b3819fd076 temporary fix for acp, need to reconsider how I'm doing this 2014-07-09 16:14:37 -04:00
Julian Lam
5aabe47e2e closed #1809 2014-07-09 16:14:15 -04:00
Julian Lam
b3e04ed2bc closed #1744 2014-07-09 15:56:53 -04:00
psychobunny
4cbe97a466 don't need this file anymore 2014-07-09 15:56:21 -04:00
Julian Lam
5f68b8f657 passing in all environment variables when forking, #1714 2014-07-09 15:49:04 -04:00
psychobunny
c6183f1a82 closes #1428 2014-07-09 15:41:03 -04:00
psychobunny
ecbb05ccca widgets.render doesn't actually use the url 2014-07-09 15:20:59 -04:00
barisusakli
9d7a8fcc0b getSortedSetRevRangeWithScores 2014-07-09 13:45:33 -04:00
barisusakli
b5df5c0a91 closes #1562, level session 2014-07-09 13:26:39 -04:00
barisusakli
53d68be7c0 level sortedSetsRemove 2014-07-09 12:57:04 -04:00
barisusakli
0f5c1d1892 added messaging hook #1798 2014-07-09 12:43:02 -04:00
barisusakli
75bf9e62be cleaned languages.js 2014-07-09 12:21:40 -04:00
Julian Lam
cac3ebc9e5 vertically centering modal when opened 2014-07-09 11:05:50 -04:00
Julian Lam
c259e0407e closed #1807 2014-07-09 11:03:32 -04:00
Julian Lam
cd8c1eeff6 started #1807 2014-07-09 10:55:22 -04:00
Julian Lam
dae2e14aac epic hax to make the chat message list resize #1788 2014-07-08 21:54:31 -04:00
Julian Lam
4404387218 Merge branch 'master' into chat-route 2014-07-08 20:09:09 -04:00
barisusakli
bb9caa7228 removed dupe 2014-07-08 14:15:53 -04:00
psychobunny
46d3e4a6eb undo 2014-07-08 13:26:18 -04:00
psychobunny
615b81a447 closes #1797 2014-07-08 13:14:59 -04:00
psychobunny
0c55417df2 purge topic if it's the post is purged in that topic 2014-07-08 12:37:31 -04:00
psychobunny
0aef2d2be9 closes #1805 2014-07-08 12:31:44 -04:00
psychobunny
3f81aaafb0 Merge pull request #1804 from Fastinyoh/master
Added a hook: action:user.delete
2014-07-08 12:19:24 -04:00
Julian Lam
7b3159292f added some utility functions for #1798, fixed chat notifications bodyLong value 2014-07-08 11:55:55 -04:00
Julian Lam
2b15f46638 removed console.log, fixing language key reference error #1788 2014-07-08 10:05:59 -04:00
dhingey
f7372ba8d5 Added a hook: action:user.delete
Allows plugins to access the uid of the user being deleted.
2014-07-08 00:21:58 -07:00
Julian Lam
95102f7e74 jshinting 2014-07-07 20:02:26 -04:00
Julian Lam
71916f0691 marathon bugfixing with @barisusakli re: #1788 2014-07-07 19:47:03 -04:00
barisusakli
5497b8c419 striptags 2014-07-07 17:56:58 -04:00
barisusakli
64d04f7aa6 closes #1803 2014-07-07 17:36:14 -04:00
Julian Lam
d9cdd2f165 limiting recent chats to 20 2014-07-07 17:02:35 -04:00
Julian Lam
13e4e8dad7 a couple final tweaks to contact list and such... #1788 2014-07-07 16:59:46 -04:00
Julian Lam
ac9f104b39 Merge remote-tracking branch 'origin/chat-route' into chat-route
How in the seven hells do I manage to conflict myself?

Conflicts:
	public/src/forum/chats.js
	public/src/modules/chat.js
	src/middleware/middleware.js
2014-07-07 16:06:56 -04:00
Julian Lam
c684ec8958 Merge remote-tracking branch 'origin/master' 2014-07-07 15:57:29 -04:00
Julian Lam
186473fa7b adding undefined check to hrefEmpty 2014-07-07 15:57:21 -04:00
Julian Lam
55afa17651 getting chats working between both page and modal, yay #1788 2014-07-07 15:55:34 -04:00
Julian Lam
a031bc2721 highlighting of the user with whom you are currently chatting with #1788 2014-07-07 13:09:09 -04:00
barisusakli
80e69bc210 missing ; 2014-07-07 12:57:31 -04:00
Julian Lam
07a82ec12c more WIP 2014-07-07 12:31:11 -04:00
Julian Lam
1db96dc627 typing notifcation socket implementation for chat page, #1788 2014-07-07 12:31:10 -04:00
Julian Lam
84e046185b WIP 2014-07-07 12:31:10 -04:00
Julian Lam
4d85df5bae issue #1788 - start 2014-07-07 12:31:10 -04:00
Julian Lam
3d90ca6a46 more WIP 2014-07-07 12:26:17 -04:00
Julian Lam
404ab4878b typing notifcation socket implementation for chat page, #1788 2014-07-06 16:28:49 -04:00
barisusakli
bc257c1c10 removed dupe version 2014-07-06 15:12:13 -04:00
barisusakli
c5ccf4333b translate helpers 2014-07-05 16:59:02 -04:00
Julian Lam
d18461c8eb wtf. Merge remote-tracking branch 'origin/chat-route' into chat-route
Conflicts:
	public/language/en_GB/modules.json
	src/controllers/accounts.js
	src/middleware/middleware.js
	src/routes/index.js
2014-07-05 15:46:37 -04:00
Julian Lam
89acec13dc latest translations from transifex 2014-07-05 15:05:47 -04:00
Zurg
f430feec65 Update users.json 2014-07-05 15:05:47 -04:00
Zurg
76aa16ce30 Update the error.json 2014-07-05 15:05:47 -04:00
Barış Soner Uşaklı
2bdf9713c9 Update README.md 2014-07-05 15:05:09 -04:00
Julian Lam
89dc8c490a WIP 2014-07-05 15:01:25 -04:00
barisusakli
43c1787754 dont exist if cant parse css 2014-07-05 14:27:21 -04:00
barisusakli
4ab6a5d4b2 removed double meta require 2014-07-05 00:19:19 -04:00
barisusakli
04144ed75d missing semicolon 2014-07-05 00:11:40 -04:00
barisusakli
f5232dbc96 check db errors on start and upgrade 2014-07-05 00:11:21 -04:00
barisusakli
37b73e1c02 cleaner mongo setRemoveRandom 2014-07-04 23:36:40 -04:00
Julian Lam
0dad7adb8d issue #1788 - start 2014-07-04 22:04:20 -04:00
Julian Lam
b03bb3a32b issue #1788 - start 2014-07-04 19:54:47 -04:00
barisusakli
5097526ae0 pass express app to plugins, closes #1789 2014-07-04 18:25:08 -04:00
barisusakli
f288f80da6 meta.js refactor 2014-07-04 18:20:44 -04:00
Julian Lam
49b4af42e1 latest translations for Chinese Simplified 2014-07-04 16:01:42 -04:00
Julian Lam
507fc2cc56 latest persian translations 2014-07-04 16:01:42 -04:00
Julian Lam
ae37cdb048 latest chinese translations 2014-07-04 16:01:42 -04:00
barisusakli
80cb0cf7e0 plugins.js jslint 2014-07-04 14:43:08 -04:00
psychobunny
ddcca28cf0 pass allowRegistration in login API for #1786 2014-07-04 11:41:03 -04:00
Julian Lam
8432e3ff82 latest translations for persian 2014-07-03 15:02:37 -04:00
barisusakli
3e75a4397a fixes guest post data in topics 2014-07-03 09:42:39 -04:00
barisusakli
dcbed4e935 closes #1763
show alert if email not confirmed, clicking alert will send confirmation
email
2014-07-03 09:36:46 -04:00
Julian Lam
a960f53f92 latest translations 2014-07-03 09:21:18 -04:00
Julian Lam
699795621a Merge branch 'master' of github.com:nodebb/NodeBB 2014-07-03 09:19:47 -04:00
barisusakli
586aeaf53f added error checking to install.js for categories 2014-07-02 21:55:05 -04:00
barisusakli
5ea74ae9e9 closes #1776 2014-07-02 16:19:55 -04:00
barisusakli
5d0755c4a8 package.json 2014-07-02 16:13:28 -04:00
barisusakli
119d13053d move static to end 2014-07-02 16:13:27 -04:00
barisusakli
ec1196d288 use router for relative path 2014-07-02 16:13:27 -04:00
barisusakli
38494a2af0 pass in session directly 2014-07-02 16:13:26 -04:00
barisusakli
78c977e8f6 removed trailing slash 2014-07-02 16:13:26 -04:00
barisusakli
9e8584eee7 uploads 2014-07-02 16:13:25 -04:00
barisusakli
24ebf20d7e first commit 2014-07-02 16:13:25 -04:00
barisusakli
4b005a4037 crash fix 2014-07-02 15:01:14 -04:00
Julian Lam
9a9ce8684c latest translations and fallbacks 2014-07-02 12:24:52 -04:00
Barış Soner Uşaklı
c0227b46f5 Merge pull request #1775 from frissdiegurke/patch-1
fixed no href-attribute handled as external link
2014-07-01 16:52:31 -04:00
frissdiegurke
2d9bc7eee7 fixed no href-attribute handled as external link 2014-07-01 22:45:00 +02:00
barisusakli
e6c9647acf display user post topic stats in admin index 2014-07-01 16:30:06 -04:00
barisusakli
684f858415 closes #1772 2014-07-01 15:40:21 -04:00
barisusakli
64f680a0a3 action:chat.loaded hook 2014-07-01 15:05:07 -04:00
barisusakli
9a4e6aa01c closes #1774 2014-07-01 14:49:51 -04:00
Julian Lam
6057da57a2 Merge pull request #1771 from heidar/patch-1
Enable the correct modules in apache instructions
2014-06-30 22:21:49 -04:00
Heidar Bernhardsson
ea45500079 Enable the correct modules in apache instructions
See #1770 for more information.
2014-06-30 16:39:52 -07:00
barisusakli
6389bc762c fire post edit after hook after post is saved 2014-06-30 17:33:31 -04:00
barisusakli
c29dcc0ec9 fire topic edit action after topic is saved 2014-06-30 16:59:36 -04:00
barisusakli
b8b6ae7b2f moved upload route into API namespace 2014-06-30 16:33:10 -04:00
barisusakli
b41b311d94 another eachLimit 2014-06-30 15:45:39 -04:00
Julian Lam
7bb7bc8630 updated lithuanian 2014-06-30 15:21:10 -04:00
Julian Lam
ffd2ddc3e7 Revert "moved meta up"
This reverts commit 8c9feb85a4.
2014-06-30 14:55:23 -04:00
Julian Lam
cda3f9376d updated error text to show proper setup command 2014-06-30 14:55:21 -04:00
barisusakli
5ec289eee2 closes #1769 2014-06-30 14:19:06 -04:00
barisusakli
efcc42f170 added eachLimit to upgrade script 2014-06-30 14:07:30 -04:00
barisusakli
9ddff0ec4a fix language string 2014-06-29 23:29:13 -04:00
barisusakli
1b31f5b2ca single arrows wont go all the way to bottom 2014-06-29 22:35:22 -04:00
barisusakli
c9c68f8cbe move cursor to end 2014-06-29 16:47:11 -04:00
barisusakli
105acc0197 not used 2014-06-29 14:35:32 -04:00
barisusakli
8c9feb85a4 moved meta up 2014-06-29 14:30:51 -04:00
barisusakli
82a1215128 setOnEmpty 2014-06-29 14:29:32 -04:00
barisusakli
56830d773e cleaned up resizeStop 2014-06-29 14:19:07 -04:00
barisusakli
9aacb5e259 remove dupe code 2014-06-29 14:10:20 -04:00
barisusakli
7d3d9f5ae1 blockquote fix again 2014-06-28 17:04:09 -04:00
barisusakli
e6371ad539 remove listeners before adding 2014-06-28 16:36:30 -04:00
barisusakli
24aa166ed5 dont error when no teaser data 2014-06-28 16:18:29 -04:00
barisusakli
9157708b45 Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-06-28 15:05:50 -04:00
barisusakli
d57f183f42 privileges.posts.get takes an array of pids now 2014-06-28 14:59:01 -04:00
Barış Soner Uşaklı
018022412a Merge pull request #1764 from daxingplay/master
missing comma fix
2014-06-28 01:39:52 -04:00
daxingplay
ce13e8b64f missing comma fix 2014-06-28 13:36:50 +08:00
barisusakli
6cd29a31a4 removed timing 2014-06-28 01:14:24 -04:00
barisusakli
c3a9767bf6 late night optimizations
-isMemberOfSets returns true/false instead of 1/0
-when loading the posts of a topic only get the userdata for each user
once, before this commit if a topic had 10 posts from 2 different users
we were getting the user data for each user 5 times (drunk)
-getVoteStatusByPostIDs and getFavouritesByPostIDs no longer make
pids.length calls to the db, they use isMemberOfSets now
-getUserInfoForPost renamed to getUserInfoForPosts and doesnt make
uids.length calls to db, uses getMultipleUserFields instead
2014-06-28 01:03:26 -04:00
barisusakli
d3fc71529a callback 2014-06-27 23:23:27 -04:00
Julian Lam
b338ac2a4c fixing space-indentation, modifying behaviour a little bit so that the maximized position is not saved, and minimizing can return back to the previous saved position 2014-06-27 21:07:49 -04:00
Julian Lam
517c70951f Merge branch 'patch-3' of github.com:mani95lisa/NodeBB into mani95lisa-patch-3 2014-06-27 20:49:46 -04:00
Julian Lam
11f40d1580 fallbacks for #1763 2014-06-27 20:49:23 -04:00
Julian Lam
74be49d46f new language strings for #1763 2014-06-27 20:47:20 -04:00
barisusakli
a9e5e82431 closes #1758 2014-06-27 15:35:58 -04:00
Julian Lam
181613e946 tag fallbacks 2014-06-27 15:19:29 -04:00
Julian Lam
d6d3a5d8cc added tags to translation index 2014-06-27 15:18:56 -04:00
Julian Lam
190b3b518b latest translations 2014-06-27 15:04:59 -04:00
Julian Lam
46f9a7860c applying translator to messages. 2014-06-27 14:52:30 -04:00
Julian Lam
c8e3433fa4 new language strings for outgoing emails, and changing the anchor text to not be an URL, closed #1759, closed #1760 2014-06-27 14:52:30 -04:00
Mani Wang
1050efbe65 make expand postContainer more easier
If user don't know drag to expand and move 0 after down, then think user clicked and toggle postContainer's height between max and default 400.
2014-06-28 02:38:48 +08:00
Julian Lam
d706c390bb Merge branch 'master' of github.com:nodebb/NodeBB 2014-06-27 13:10:54 -04:00
psychobunny
92c0bd07c9 Ability to enable/disable the upvote/downvote system, closes #1672 2014-06-27 13:05:05 -04:00
psychobunny
b040201764 prevent hax voting via websockets if system disabled 2014-06-27 13:05:04 -04:00
psychobunny
a2f85648c5 allow voting system to be disabled 2014-06-27 13:05:03 -04:00
Julian Lam
17d33a6720 Added Romanian to NodeBB. Mulțumesc! 2014-06-27 13:04:02 -04:00
barisusakli
fb72b4c8e0 only search tag value 2014-06-26 23:05:47 -04:00
barisusakli
94dbb15b21 search tags 2014-06-26 22:57:49 -04:00
barisusakli
1cabf885a2 closes #1730
postCount != lastPostIndex unfortunately, that will need some rethinking
2014-06-26 22:11:16 -04:00
barisusakli
49a9601a04 closes #1752 2014-06-26 13:44:02 -04:00
psychobunny
b3c9323026 use admin setting for downvote privileges, closes #1757 2014-06-26 13:37:34 -04:00
psychobunny
2e1cda3532 added lang strings for not having enough rep to downvote 2014-06-26 13:30:43 -04:00
psychobunny
8a03b42d62 prevent a user from downvoting if at negative rep 2014-06-26 13:28:58 -04:00
psychobunny
6685e140c3 pass err through 2014-06-26 12:53:40 -04:00
psychobunny
f4955ffb8d closes #1729 2014-06-26 12:51:47 -04:00
barisusakli
b822e8babc render preview on image upload 2014-06-26 11:25:21 -04:00
barisusakli
67186edda7 fix drag drop 2014-06-26 11:22:37 -04:00
Julian Lam
c1444903c4 latest translations 2014-06-26 10:54:08 -04:00
psychobunny
61519277f9 Merge pull request #1754 from Chocobozzz/patch-1
Fix typo debian install doc
2014-06-26 03:45:12 -04:00
Bigard Florian
113044b452 Fix typo debian install doc
Bash commands didn't appear as code
2014-06-26 09:17:27 +02:00
psychobunny
426e992030 Merge pull request #1753 from ruvata-code/patch-1
Update windows8.rst
2014-06-26 02:04:07 -04:00
ruvata-code
6d421b7f07 Update windows8.rst
missed double backslash (UTP specifics shielded characters) at "The default location of Redis Server is" path
2014-06-26 09:38:11 +04:00
psychobunny
876cb878a9 added action:posts.loaded client-side hook 2014-06-25 21:28:03 -04:00
psychobunny
4b248804bd deprecation message for 0.6 2014-06-25 18:55:43 -04:00
psychobunny
0e92c7ed94 use templates.js module instead 2014-06-25 18:55:42 -04:00
psychobunny
e235cd5288 added templates.js to package.json 2014-06-25 18:55:41 -04:00
barisusakli
f80b3c3b66 simpler union 2014-06-25 18:27:22 -04:00
barisusakli
7f534cc7b8 sorted set refactor 2014-06-25 18:16:42 -04:00
barisusakli
9240f65f20 moved resize code, removed old tab code 2014-06-25 17:50:06 -04:00
barisusakli
9d11ca8cfe not used 2014-06-25 16:40:41 -04:00
barisusakli
197300b347 moved populateOnline users out of app.js 2014-06-25 16:27:39 -04:00
barisusakli
aecd3b4653 handlebookmark func 2014-06-25 16:21:33 -04:00
barisusakli
d5b36518a2 moved out scrollTo 2014-06-25 16:17:14 -04:00
Julian Lam
391b5eaf73 latest translations 2014-06-25 16:15:06 -04:00
barisusakli
7af597d7c2 closes #1750 2014-06-25 12:57:09 -04:00
Barış Soner Uşaklı
2d734c1648 fixed move recent replies 2014-06-24 21:57:33 -04:00
barisusakli
eb9b4a62dc fix topic move, fix moveAll
move topic wasnt moving mainPid, also fixed crash on move all
clicking permissions on admin/categories no longer goes to top of page
2014-06-24 17:40:41 -04:00
barisusakli
c3e4d11f69 closes #1719 2014-06-24 15:49:59 -04:00
xizhao
c7897250bd Add LICENSE information to Readme.md & summary 2014-06-24 14:42:08 -04:00
barisusakli
0d0af7ba96 closes #1721 2014-06-24 14:09:16 -04:00
psychobunny
207ad4d859 Merge pull request #1746 from flipflopsimsommer/master
Update docs/os/debian.rst
2014-06-24 13:52:55 -04:00
flipflopsimsommer
37e356284d Update debian.rst
improve formatting
2014-06-24 19:39:24 +02:00
barisusakli
f4dfae7fcb fixed lock icon side 2014-06-24 13:31:22 -04:00
barisusakli
c191aa079f closes #1735 2014-06-24 13:27:37 -04:00
barisusakli
0cbb440629 fix blockquote toggle and use different icons 2014-06-24 12:52:04 -04:00
Julian Lam
94a4abc80f latest translations 2014-06-24 10:06:29 -04:00
barisusakli
d90d45261e fixed on edit #1400 2014-06-24 10:01:46 -04:00
barisusakli
c642493bce guest post fix 2014-06-24 09:53:19 -04:00
barisusakli
836540ff78 replaceSelfLinks on new posts and reload 2014-06-24 09:29:12 -04:00
barisusakli
e6d8e9c959 searchIndex callbacks 2014-06-24 09:15:44 -04:00
Julian Lam
aac2dd47af latest translations and fallbacks 2014-06-23 21:03:04 -04:00
barisusakli
397fc4f4f1 closes #1581 2014-06-23 20:09:20 -04:00
barisusakli
1296cd58b9 closes #1723 2014-06-23 19:45:49 -04:00
Julian Lam
3e73e17502 latest translations 2014-06-23 19:45:20 -04:00
barisusakli
c296aaeb8a discard language string 2014-06-23 19:15:58 -04:00
barisusakli
3c3ad7d115 closes #1728 2014-06-23 19:10:59 -04:00
barisusakli
36ed21ad72 closes #1739 2014-06-23 18:47:52 -04:00
barisusakli
bd4722665d closes #1725
removed move button from main post, disable moving main post, fixed
moving posts.
2014-06-23 18:06:59 -04:00
barisusakli
9af12819e3 closes #1731 2014-06-23 17:26:02 -04:00
barisusakli
a9adfe9428 fix crash in topic move 2014-06-23 16:22:05 -04:00
barisusakli
ae72d8ab7e fixes block quote toggles on dynamic posts 2014-06-23 15:39:51 -04:00
barisusakli
0987aed0e6 callback undefined error 2014-06-23 14:46:47 -04:00
barisusakli
12a51ee2f3 fixed username 2014-06-23 12:35:44 -04:00
barisusakli
1d91ce4c6b fixed typo in english translation 2014-06-23 12:34:24 -04:00
psychobunny
f6838ef51e only use passport.authenticate if a strategy url is defined 2014-06-23 10:20:29 -04:00
barisusakli
b7e04239e9 use water in post edit 2014-06-22 18:14:48 -04:00
barisusakli
35d1aacc45 no success alert on posting and editing #1721 2014-06-22 17:34:27 -04:00
barisusakli
93149cebb9 fixed thread tools inside topic, closes #1732 2014-06-22 17:26:43 -04:00
barisusakli
ab6429c578 closes #1734 2014-06-22 17:08:55 -04:00
barisusakli
78509b4ad0 use sortedSetsRemove to remove tid from tags 2014-06-21 22:43:02 -04:00
barisusakli
fd12ec763a sortedSetsRemove
instead of calling sortedSetRemove() one at a time for each id remove
value from multiple sortedSets with one db call
2014-06-21 22:37:46 -04:00
barisusakli
a4d4e53f45 speed up category purge
using eachLimit
dont emit stats on every topic delete
2014-06-21 22:11:44 -04:00
barisusakli
dceeed22f7 closes #1724 2014-06-21 19:54:21 -04:00
Julian Lam
458e294293 switched validator library out in favour of String lib 2014-06-21 17:17:08 -04:00
barisusakli
7d1ba0eb7c closes #1718 2014-06-21 11:52:04 -04:00
Julian Lam
d229cd21b2 parsing the post content that's passed into bodyLong in notifs #1720 2014-06-21 01:16:08 -04:00
barisusakli
f9b5bf83ad added search to admin/plugins 2014-06-20 19:35:12 -04:00
barisusakli
6303ac4a90 closes #1716, #1717 2014-06-20 19:18:17 -04:00
Julian Lam
c41bb05711 final pass #1720, closed #1720 2014-06-20 17:53:40 -04:00
Julian Lam
d257632878 first pass #1720, updating existing calls to notifications.create, backwards compatibility in case plugins create notifications too. 2014-06-20 16:54:34 -04:00
Julian Lam
454c05c391 fixed missing var in user profile 2014-06-20 15:55:17 -04:00
barisusakli
9151040250 side by side preview 2014-06-20 14:51:06 -04:00
Julian Lam
a3d01aea58 added error handling if bad LESS is written in ACP. closes #1715 2014-06-20 14:36:25 -04:00
barisusakli
13854e8774 closes #1603 2014-06-19 18:46:01 -04:00
barisusakli
03ec1c3216 added group.hide back into groups.join 2014-06-18 20:00:01 -04:00
Julian Lam
b1faca3614 saving portless hostNAME into server config, not the host! Argh. closed #1713 2014-06-18 19:34:33 -04:00
Julian Lam
adc2fcc649 added deserialize library to frontend 2014-06-18 13:11:52 -04:00
barisusakli
27f9929ac8 hook 2014-06-18 12:42:13 -04:00
barisusakli
f8afb8da3e allow plugins to add new links to user profile menu 2014-06-18 12:40:49 -04:00
Julian Lam
6f218857cb added connect-flash package. npm also alphabetically re-ordered the deps... thanks npm? 2014-06-18 10:17:50 -04:00
Julian Lam
fb504473e1 latest translations 2014-06-18 09:16:36 -04:00
Julian Lam
dedc6d8154 added new hook for notification pushing 2014-06-17 21:10:21 -04:00
barisusakli
15c16c2502 closes #1311, set category post counts to 0 before starting upgrade 2014-06-17 15:33:40 -04:00
barisusakli
7c84680b06 closes #1709 2014-06-17 13:11:13 -04:00
psychobunny
bbd4201a38 closes #1704 2014-06-17 12:58:06 -04:00
Barış Soner Uşaklı
09861cbc0e Merge pull request #1712 from char101/PR/update-global-counters-on-topic-delete-v2
Update global counters when deleting/restoring topic
2014-06-17 11:42:10 -04:00
Charles
b811bef42c Don't decrease postCount when purging post from a deleted topic 2014-06-17 12:34:09 +07:00
Charles
1448bed057 Remove console.log 2014-06-17 11:57:55 +07:00
Charles
31f1914ec8 Update global postCount when deleting/restoring topic 2014-06-17 11:56:47 +07:00
psychobunny
0c7a8b3908 no need to reset global widget areas, closes #1701 2014-06-16 15:21:15 -04:00
barisusakli
2479a34c56 closes #1710, closes #1700 2014-06-16 14:13:55 -04:00
psychobunny
db3523b10b #1701 2014-06-16 14:08:42 -04:00
barisusakli
3c44beb4bb group userTitle default 2014-06-16 13:10:00 -04:00
psychobunny
c8de2c02b4 Merge pull request #1703 from char101/patch-8
Fix widget drafts position
2014-06-16 13:09:38 -04:00
psychobunny
d2e1cc3371 Merge pull request #1707 from char101/PR/dont-reset-widgets-on-changing-skins
Don't reset widgets when changing skin
2014-06-16 13:07:43 -04:00
Barış Soner Uşaklı
da1baee511 Merge pull request #1708 from char101/PR/redirect-to-category-after-purging-topic
Redirect to category after purging topic
2014-06-16 12:51:13 -04:00
Charles
0cba152516 Redirect to category after purging topic 2014-06-16 15:49:43 +07:00
Charles
51fb7786f5 Don't reset widgets when changing skin 2014-06-16 13:01:37 +07:00
Charles
86634415da Fix widget drafts position 2014-06-16 11:59:30 +07:00
barisusakli
76190718d3 indents 2014-06-15 23:30:40 -04:00
Barış Soner Uşaklı
5b45b3395d Merge pull request #1699 from char101/patch-7
Fix client side template mapping
2014-06-15 23:29:50 -04:00
Charles
6e50016a11 Cleanup the vars 2014-06-16 10:28:57 +07:00
Charles
23a88492a6 Get template mapping after removing relative path 2014-06-16 10:25:48 +07:00
Charles
be06d386e5 Revert change to ajaxify.js 2014-06-16 10:25:03 +07:00
Charles
b748a832a2 Fix client side template mapping 2014-06-16 10:21:54 +07:00
barisusakli
39886c8545 removed unread total route 2014-06-15 21:08:43 -04:00
barisusakli
d1b4efeaa3 filter files before minify, removed unused ctime 2014-06-14 20:34:26 -04:00
barisusakli
ab80016910 fixed group hide for privilege groups 2014-06-14 18:26:16 -04:00
barisusakli
1908f7b57a filter missing less and css files from plugins 2014-06-14 18:10:38 -04:00
barisusakli
501c81e357 closes #1687 2014-06-14 14:38:48 -04:00
barisusakli
3bd4d0e418 closes #1692 2014-06-14 14:12:33 -04:00
barisusakli
bf18e70d66 small fix to title escape 2014-06-14 13:55:06 -04:00
barisusakli
07275b5fc4 some checks to make last admin isnt removed 2014-06-13 22:48:24 -04:00
barisusakli
842a1f90cf fix crash on push 2014-06-13 18:55:53 -04:00
barisusakli
42d03cc491 closes #1678 2014-06-13 18:27:03 -04:00
barisusakli
9d4f1e18e1 #1688 removed length check 2014-06-13 15:58:32 -04:00
barisusakli
cd5c24efe3 possible fix for #1688 2014-06-13 15:35:35 -04:00
barisusakli
4c2765a79c closes #1679 2014-06-13 15:33:22 -04:00
barisusakli
ce1934e566 closes #1684 2014-06-13 13:57:42 -04:00
psychobunny
8402c3edc3 closes #1680 2014-06-13 12:21:00 -04:00
barisusakli
3b1e373e7b group titles 2014-06-12 18:53:58 -04:00
barisusakli
e8b89513d4 some cleanup in addUserInfoToPost 2014-06-12 16:45:00 -04:00
barisusakli
b9139ef263 some escaping and fixed uploads in progress 2014-06-12 13:58:21 -04:00
psychobunny
3198275209 use "undo" icon instead of comment for restoring posts 2014-06-11 16:47:20 -04:00
psychobunny
b12ca5ab9f closes #1673 2014-06-11 16:42:13 -04:00
barisusakli
870bf95e5b deleted topic feed fix 2014-06-11 13:04:24 -04:00
psychobunny
eeabae5738 closes https://github.com/NodeBB/NodeBB/issues/1668 2014-06-11 12:04:22 -04:00
psychobunny
b5a06e58fd Merge pull request #1667 from a5mith/patch-1
Few changes to the Ubuntu Installation Guide
2014-06-11 11:28:20 -04:00
barisusakli
3f9fa0137c taskbar text incase <script> is title 2014-06-11 03:38:42 -04:00
barisusakli
4fa79dc821 closes #1281
category purge, deletes all topics and posts in the category
2014-06-10 17:48:48 -04:00
barisusakli
311a7ad5b9 #1281 topic purge 2014-06-10 16:57:00 -04:00
Aaron Smith
72f9605414 Few changes to the Ubuntu Installation Guide
Changes: 

Removed `cd/path/to/nodebb/install` as we haven't instructed how to create the directory before changing to it. The git pull will create the nodebb directory in their root/profile folder anyway, which is fine for most installs. 

Added sudo to the base stack install.

Added command for checking Node.js version. 

The guide at the minute might seem a bit daunting for newer users, so if psychobunny doesn't mind, I could create a post over on the community for an up to date noobs guide on how to install using digital ocean as an example. Then if it helps, add it to the docs. (Also, changes in this github aren't showing up in docs.nodebb, the update to sudo apt-get update && sudo apt-get dist-upgrade aren't displayed.

Hope this helps.
2014-06-10 21:40:58 +01:00
psychobunny
b43602f5b6 closes https://github.com/NodeBB/NodeBB/issues/1631 2014-06-10 15:32:08 -04:00
psychobunny
2688ea9733 upgrading topics take a while, so let the user know 2014-06-10 15:14:25 -04:00
psychobunny
35e72dbb37 load composer-mobile.tpl if in xs/sm environment, for https://github.com/NodeBB/NodeBB/issues/1657 2014-06-10 14:45:56 -04:00
barisusakli
a65d612907 #1281 post purge 2014-06-10 14:24:56 -04:00
barisusakli
eb1b48092d closes #1666 2014-06-10 14:24:56 -04:00
psychobunny
e5d465392f closes #1639 2014-06-10 13:40:37 -04:00
psychobunny
8443ae58ff users.getXbyEmail - lowercase before searching 2014-06-10 13:35:31 -04:00
Barış Soner Uşaklı
3b55e65714 Merge pull request #1664 from char101/patch-6
Fix callback execution in redis search
2014-06-10 11:57:44 -04:00
Charles
90b2d766f7 Fix callback execution in redis search
`callback` should be passed to `reds.search` otherwise the execution will be overlapped. 

For example in the plugin `nodebb-plugin-dbsearch':

```javascript
db.searchRemove('topic', tid, function() {
	if (typeof title === 'string' && title.length) {
		db.searchIndex('topic', title, tid);
	}

	if (typeof callback === 'function') {
		callback();
	}
});
```

The actual execution is like this

```
1402387863.625553 [0 127.0.0.1:16660] "zrevrangebyscore" "nodebbtopicsearch:object:6" "+inf" "0"
1402387863.625891 [0 127.0.0.1:16660] "MULTI"
1402387863.626043 [0 127.0.0.1:16660] "zadd" "nodebbtopicsearch:word:123" "1" "6"
1402387863.626052 [0 127.0.0.1:16660] "zadd" "nodebbtopicsearch:object:6" "1" "123"
1402387863.626060 [0 127.0.0.1:16660] "zadd" "nodebbtopicsearch:word:TST" "1" "6"
1402387863.626065 [0 127.0.0.1:16660] "zadd" "nodebbtopicsearch:object:6" "1" "TST"
1402387863.626071 [0 127.0.0.1:16660] "zadd" "nodebbtopicsearch:word:AN0" "1" "6"
1402387863.626076 [0 127.0.0.1:16660] "zadd" "nodebbtopicsearch:object:6" "1" "AN0"
1402387863.626083 [0 127.0.0.1:16660] "zadd" "nodebbtopicsearch:word:TPK" "1" "6"
1402387863.626092 [0 127.0.0.1:16660] "zadd" "nodebbtopicsearch:object:6" "1" "TPK"
1402387863.626104 [0 127.0.0.1:16660] "zadd" "nodebbtopicsearch:word:ETTT" "1" "6"
1402387863.626116 [0 127.0.0.1:16660] "zadd" "nodebbtopicsearch:object:6" "1" "ETTT"
1402387863.626130 [0 127.0.0.1:16660] "EXEC"
1402387863.626253 [0 127.0.0.1:16660] "del" "topic:6:tags"
1402387863.626281 [0 127.0.0.1:16660] "MULTI"
1402387863.626515 [0 127.0.0.1:16660] "del" "nodebbtopicsearch:object:6"
1402387863.626524 [0 127.0.0.1:16660] "EXEC"
```

The key nodebbtopicsearch:object is added and then just being deleted again.
2014-06-10 15:30:53 +07:00
Barış Soner Uşaklı
a7bd83a549 Merge pull request #1663 from char101/patch-5
Fix relative path on topic replaceState
2014-06-09 22:51:56 -04:00
Charles
c7b308d65e Fix relative path on topic replaceState 2014-06-10 09:46:38 +07:00
barisusakli
b9c30aa42d possible fix to #1660
modified the tagsinput source to use keypress instead of keydown for the
confirmKeys
2014-06-09 22:46:04 -04:00
Julian Lam
a40b06c304 latest translations 2014-06-09 20:18:56 -04:00
Julian Lam
d66bead245 Merge remote-tracking branch 'origin/master' 2014-06-09 19:56:14 -04:00
Julian Lam
b655474150 fixed #1661 2014-06-09 19:56:05 -04:00
barisusakli
833aa0f738 derp 2014-06-09 12:51:49 -04:00
barisusakli
b81f3552bb fixed typo 2014-06-09 02:34:21 -04:00
barisusakli
b5071d504f removed timing #1654 2014-06-09 02:33:07 -04:00
barisusakli
d4b48cd2ac closes #1654 2014-06-09 02:32:32 -04:00
barisusakli
aadca3a675 fix calls to removeRelativePath in ajaxify.js 2014-06-09 02:13:19 -04:00
barisusakli
db84ced78f removeRelativePath public 2014-06-09 02:03:36 -04:00
barisusakli
4bdbce9cd8 use removeRelativePath in app.js too 2014-06-09 01:28:58 -04:00
Barış Soner Uşaklı
26309b5d65 Merge pull request #1658 from char101/patch-4
Fix removeRelativePath
2014-06-09 01:26:58 -04:00
Charles
9734403114 Fix removeRelativePath
Instead of checking the existence of relative_path (without /) anywhere on the url, it really should check that the url only starts with the relative_path.

Example

```
relative_path = /forum
without / = forum
url = /category/forum/5
removeRelativePath = ory/forum/5
```
2014-06-09 12:21:58 +07:00
barisusakli
974e0823d8 copyright 2014-06-08 17:48:33 -04:00
barisusakli
ee88693448 callback 2014-06-08 16:06:42 -04:00
barisusakli
178f567659 closes #1655 2014-06-07 15:34:25 -04:00
barisusakli
b7f71ca0b4 fixes removePostFromTopic
remove the pid from the votes set too
2014-06-07 13:04:30 -04:00
barisusakli
bf04749f5e fixes posttools.ismain 2014-06-07 11:38:43 -04:00
barisusakli
d32dfd98b7 remove main post if page is greater than 1
this fixes pagination after the main post change
2014-06-06 23:09:05 -04:00
barisusakli
7610c11cd1 closes #450
backup database before upgrade!
upgrade script will take the first post of each topic and set the
`mainPid` property on the topic. then it will remove that pid from the
sorted sets for that topic, this was done to make alternative sorting
work.

added a new sorted set called `tid:<id>:posts:votes` that is used to
sort topic posts by vote count, the original sorted set `tid:<id>:posts`
is used to sort by oldest first or newest first.

the main post is added to the returned posts array on topic load and is
always at the top.
theme changes are minimal just a few new data properties on the posts
and the sorting dropdown.
hopefully didn't miss anything too critical.
2014-06-06 22:12:19 -04:00
psychobunny
c5b8a7b163 filter:templates.get_virtual for ajaxifying to virtual templates 2014-06-06 17:30:23 -04:00
Julian Lam
b648e84836 latest translations and fallbacks 2014-06-06 16:50:32 -04:00
Julian Lam
57f40e1e1c Merge pull request #1648 from char101/patch-1
Add relative_path to authentication redirects
2014-06-06 16:27:33 -04:00
Julian Lam
b44cbc89ad Merge branch 'master' of github.com:Fastinyoh/NodeBB into Fastinyoh-master 2014-06-06 15:47:03 -04:00
Julian Lam
8587dd11d8 closed #1653 -- removed that spinner thing npm uses now. 2014-06-06 15:44:14 -04:00
Charles
5f1b1ad2bf Also add relative_path to destination
Because the destination url does not include the relative_path
2014-06-06 18:36:02 +07:00
Charles
ce083573a9 Fix typo 2014-06-06 18:06:42 +07:00
Charles
f26a250b01 Add relative_path to authentication redirects 2014-06-06 18:05:26 +07:00
dhingey
b57dbc37cd Fix relative path URL bugs in the plugin API.
Fixes plugin-related 404 URLs, as well as the plugin directory URL
for installations which use a relative path.
2014-06-05 23:12:46 -07:00
psychobunny
d5c6b6c334 modifying installation instructions as per @a5mith 2014-06-05 15:41:47 -04:00
psychobunny
201a309801 added documentation for the hooks I created yesterday 2014-06-05 13:18:44 -04:00
barisusakli
f609098ca7 moved secondry db config message #1645 2014-06-05 10:59:21 -04:00
barisusakli
8d0c659f08 small fix to redirect 2014-06-04 19:54:29 -04:00
barisusakli
61b79de3e8 closes #1641 2014-06-04 19:35:08 -04:00
psychobunny
a0bdd06a6a filter:user.custom_fields - ability to add custom fields into userData 2014-06-04 18:55:37 -04:00
psychobunny
013f62cd7d action:user.verify & filter:user.verify.code - plugins can now override the verification system 2014-06-04 18:55:35 -04:00
psychobunny
31adf7084d filter:register.complete - plugins can redirect the user elsewhere post-registration 2014-06-04 18:55:34 -04:00
psychobunny
4bb8762746 send in the entire registration form for userData 2014-06-04 18:55:33 -04:00
barisusakli
d1c2c87510 fixed double index in post notification 2014-06-04 16:56:40 -04:00
psychobunny
5ac788565f eventEmitter.any 2014-06-04 15:57:08 -04:00
barisusakli
e1491e4182 fixed wrong admin tags on admin/user/search 2014-06-04 11:58:05 -04:00
barisusakli
7d0eb9afaa closes #1463 2014-06-04 11:14:36 -04:00
barisusakli
6b93095204 more link fixes 2014-06-03 18:55:58 -04:00
barisusakli
efe04c12d3 closes #1635
if email isnt confirmed, show a warning in account/edit and let users
resend confirm email
2014-06-03 18:39:54 -04:00
barisusakli
930f1e4789 default off 2014-06-03 17:23:58 -04:00
barisusakli
65e9f68d73 change requireEmail default to off 2014-06-03 17:23:36 -04:00
barisusakli
4aec62f3eb #1636
👼
2014-06-03 16:42:45 -04:00
psychobunny
87a08c9528 closes #1636 2014-06-03 16:34:50 -04:00
barisusakli
b537666e5c closes #1592, closes #1634 2014-06-03 16:10:28 -04:00
psychobunny
d7eb89336d add logo to windows live tile 2014-06-03 15:38:51 -04:00
psychobunny
cf3f33a23d closes #1633 2014-06-03 15:27:08 -04:00
barisusakli
b2e48b21a2 pass url to onAjaxError 2014-06-03 14:58:24 -04:00
psychobunny
e88abcc1d9 fixed updated language strings 2014-06-03 14:38:33 -04:00
psychobunny
b881131a65 fixes #1632 2014-06-03 14:32:41 -04:00
barisusakli
6bd4524a79 fixed share for category 2014-06-03 13:16:19 -04:00
barisusakli
573cb4b4d7 fixed share links 2014-06-03 13:12:28 -04:00
barisusakli
123d1e06f1 closes #1578 2014-06-03 13:02:44 -04:00
barisusakli
e20920c536 closes #1630 2014-06-03 12:30:36 -04:00
barisusakli
0574022e02 fixes to infinitescroll 2014-06-02 20:41:08 -04:00
psychobunny
c342e75f6e Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-06-02 17:42:52 -04:00
psychobunny
94312cfda8 closes #1595 2014-06-02 17:42:29 -04:00
psychobunny
f6cf36ca29 emit nodebb:ready 2014-06-02 17:40:08 -04:00
psychobunny
646f0f00b3 move "NodeBB Ready" message to when it's actually ready 2014-06-02 17:34:13 -04:00
psychobunny
5891246700 emitter.all 2014-06-02 17:33:44 -04:00
barisusakli
55dbc5c823 closes #1612
changed post links to "topic/<topic_id>/<topic_slug>/<post_id>"
2014-06-02 17:31:14 -04:00
psychobunny
46028e49f7 closes #1600 2014-06-02 16:58:38 -04:00
psychobunny
aafbb55572 closes #1616 2014-06-02 16:52:16 -04:00
psychobunny
ee1e869ccb add loggedIn state to template parsing 2014-06-02 15:57:24 -04:00
psychobunny
0816928949 unset preloader cache after loading url 2014-06-02 15:00:43 -04:00
psychobunny
22d459d4cc temporary fixes for chrome users who have cookies disabled 2014-06-02 14:58:27 -04:00
barisusakli
aa0b9f9029 semicolon 2014-06-02 14:03:01 -04:00
barisusakli
ee9fae581e closes #1618 2014-06-02 13:12:48 -04:00
barisusakli
09d4f4b47b leaving tags box will create tag 2014-06-02 13:10:52 -04:00
barisusakli
4570edb122 closes #1623 2014-06-02 12:44:37 -04:00
barisusakli
d0c468c190 new language string 2014-06-02 12:36:15 -04:00
psychobunny
92b0b926c7 instructions on how to reset plugins 2014-06-01 22:55:59 -04:00
barisusakli
69ac63ed4e updated repo link in admin 2014-06-01 11:57:44 -04:00
barisusakli
364d55938c if no categories found return empty array 2014-05-31 22:24:22 -04:00
psychobunny
257491801d optimizing template compilation 2014-05-31 17:08:24 -04:00
psychobunny
c97d6635fc plugin templates now have higher priority than theme templates 2014-05-31 17:06:27 -04:00
psychobunny
85aa88e6ed show correct path on windows 2014-05-31 16:53:18 -04:00
Julian Lam
ef831cca9a Merge branch 'patch-1' of github.com:giorgiochiodi/NodeBB into giorgiochiodi-patch-1
closes #1614
2014-05-31 15:33:19 -04:00
psychobunny
8c735ce4dd updating credits in the docs to the people who deserve it ;) 2014-05-31 03:10:20 -04:00
psychobunny
b21d6c76cf closes #1615 2014-05-31 01:58:26 -04:00
psychobunny
09c632330b render widgets sooner 2014-05-30 17:52:33 -04:00
psychobunny
cad10a3f9e implemented caching for widgets 2014-05-30 17:38:03 -04:00
psychobunny
28dcb9e33d pair programming ftw 2014-05-30 17:27:57 -04:00
psychobunny
a1815b41c7 I still don't know what I'm fixing, I'm just doing as @barisusakli says 2014-05-30 17:25:23 -04:00
psychobunny
7197f9b621 fixes... something, whatever it is @barisusakli 2014-05-30 17:23:35 -04:00
psychobunny
f2bf9f9383 fixes for windows (flex) @julianlam 2014-05-30 17:13:20 -04:00
Julian Lam
b0464ff912 fixed another hardcoded prefix value 2014-05-30 17:11:37 -04:00
Julian Lam
86457558b0 no more hardcoding of the prefix value for minification mapping 2014-05-30 16:27:42 -04:00
psychobunny
bfcd13144e Merge branch 'master' of https://github.com/NodeBB/NodeBB 2014-05-30 15:35:30 -04:00
psychobunny
4ee055c3ea closes #1608 2014-05-30 15:30:37 -04:00
psychobunny
bbcff6a0a5 moved widget rendering up a bit 2014-05-30 15:29:17 -04:00
psychobunny
ff25c4600a yeah.. woops 2014-05-30 15:27:50 -04:00
barisusakli
e035d8f1de closes #1497
fixes user images in subfolder installs, if user image has https dont
append relative_path,
also removes relative_path in ajaxify.loadData so it doesnt call
/forum/api/forum/category etc.
2014-05-30 15:22:52 -04:00
psychobunny
c7691a8cdc Merge remote-tracking branch 'origin/master' into require.js
Conflicts:
	src/meta.js
2014-05-30 15:18:17 -04:00
Julian Lam
be19222817 en_US will no longer throw js error from missing timeago file 2014-05-30 14:45:55 -04:00
Barış Soner Uşaklı
125b18f704 Merge pull request #1610 from JonathanMH/patch-1
backup instructions for mongodb
2014-05-30 14:27:56 -04:00
Jonathan
fceb4ca134 backup instructions for mongodb 2014-05-30 19:53:34 +02:00
Julian Lam
b553d44107 plugin source mapping fix -- closes #1609 2014-05-30 09:17:10 -04:00
Julian Lam
53f5dbfeca updating package.json to use my fork 2014-05-30 09:17:10 -04:00
Julian Lam
256fa937d8 added last two missing options to source map config 2014-05-30 09:17:10 -04:00
Julian Lam
f8061e23ec source map support, first pass 2014-05-30 09:17:10 -04:00
psychobunny
3ba51b05f7 fixing the minified version of string.js instead 2014-05-29 17:46:44 -04:00
psychobunny
65f3fa1bbc fixing string.js compatibility 2014-05-29 17:44:41 -04:00
psychobunny
f0811f7a2f added buzz; cleanup 2014-05-29 17:42:53 -04:00
psychobunny
f98a52013a Merge remote-tracking branch 'origin/master' into require.js 2014-05-29 17:25:16 -04:00
psychobunny
281aa0049c init, attempt to increase cold load speed 2014-05-29 17:24:38 -04:00
barisusakli
5ae29ef33a fix sitemap 2014-05-29 15:36:28 -04:00
barisusakli
652e1ef574 closes #1597
turns out clicking back causes double script.init() calls and
ajaxify.variables.get('topic_id') can be undefined in one of those
calls.
2014-05-29 12:09:54 -04:00
Julian Lam
584fe60284 fixed #1554, redis error handling will go back to crashing the error (though the error will be logged at least) 2014-05-28 20:40:40 -04:00
psychobunny
5b17f9a7a4 added caching per url + rate limiting mechanism to prefetcher, closes #1576 2014-05-28 19:03:54 -04:00
psychobunny
1e05a92c1e no need to send prefetched state anymor 2014-05-28 18:24:30 -04:00
psychobunny
b2b76f701d woops, okay actually fixing it properly this time 2014-05-28 18:23:59 -04:00
psychobunny
d5e55d27ed fix for previous commit 2014-05-28 18:22:34 -04:00
psychobunny
d81351579d don't require passing in uid for topics.markAsRead 2014-05-28 18:21:15 -04:00
psychobunny
791fde7904 fixing #1587 properly for unread count 2014-05-28 18:20:02 -04:00
psychobunny
08bbf7fdd8 console.log 2014-05-28 18:16:26 -04:00
psychobunny
0334a487b5 fixing #1587 properly for profile views 2014-05-28 18:15:53 -04:00
psychobunny
74097be2e4 additional fix for #1587 2014-05-28 17:49:31 -04:00
psychobunny
71214c6255 fixed preloader 2014-05-28 17:48:03 -04:00
psychobunny
fee591e551 fixes #1587 2014-05-28 17:43:03 -04:00
psychobunny
1fecbd0b90 fixed function signature for ajaxify.loadData 2014-05-28 17:26:28 -04:00
psychobunny
bfa3b0f22f global header widgets 2014-05-28 16:30:29 -04:00
barisusakli
351e376812 hide area if there are no widgets 2014-05-28 16:24:10 -04:00
barisusakli
9c0446d416 closes #1593 2014-05-28 14:18:00 -04:00
barisusakli
e1ad2537b6 fixes navigator progress bar 2014-05-28 13:13:29 -04:00
barisusakli
c852574cef closes #1572 2014-05-28 13:04:19 -04:00
barisusakli
fbdff5bb43 name too short error string 2014-05-28 12:09:25 -04:00
barisusakli
60742ce316 closes #1590, closes #1589 2014-05-27 21:12:57 -04:00
barisusakli
0dce8647ba closes #1476 2014-05-27 15:15:06 -04:00
Barış Soner Uşaklı
50d37d65f9 Merge pull request #1583 from tomcheung789/patch-1
Update mongo.rst
2014-05-27 14:55:37 -04:00
barisusakli
eb0a06b777 closes #1577 2014-05-27 14:53:51 -04:00
Julian Lam
667a78902e closed #1586 2014-05-27 13:30:27 -04:00
barisusakli
48aba5fc64 category widget changes 2014-05-27 12:44:28 -04:00
Julian Lam
640500bc5f closed #1437 2014-05-27 09:52:27 -04:00
Julian Lam
93e3eb4d28 fixed #1584 2014-05-27 09:20:03 -04:00
Chong Cheung
6c17fb49ef Update mongo.rst
1. Use db.createUser() instead of db.addUser() to add users to MongoDB. Deprecated since version 2.6
2. NodeBB causes mongo error during setup procedure. Change the role from "userAdmin" to "readWrite".
2014-05-27 14:12:49 +08:00
Julian Lam
eb2929f497 removing slufigication when checking for group existence 2014-05-26 21:37:50 -04:00
Julian Lam
64c6546daa updating mentions minver #1331 2014-05-26 21:22:06 -04:00
Julian Lam
3baf00208f slugifying group name when checking for existence 2014-05-26 21:13:18 -04:00
Julian Lam
8efb930ec0 site title fallbacks for daily digest titles 2014-05-26 18:50:08 -04:00
barisusakli
e685e7c376 removed console.log 2014-05-26 14:52:48 -04:00
barisusakli
4e8a9fbe27 closes #1582 2014-05-26 14:49:08 -04:00
psychobunny
9c2bb027d3 fire action:widgets.loaded regardless of callback 2014-05-26 12:26:41 -04:00
psychobunny
bf63c927c6 trigger ajaxify.loadingData regardless of cached state 2014-05-26 12:00:37 -04:00
psychobunny
6aeec3a399 action:widgets.loaded 2014-05-26 11:38:04 -04:00
Julian Lam
b0b28fad8e removing console logs 2014-05-25 15:57:00 -04:00
Julian Lam
753779296b increased sitemap cache time -- #1578 2014-05-25 15:39:54 -04:00
Julian Lam
d948f2a29d moved login via email detection into the internal login block 2014-05-25 13:08:56 -04:00
barisusakli
04309ac09c show error message if password empty 2014-05-25 13:04:58 -04:00
barisusakli
18810e7203 allow dots in tags 2014-05-25 12:49:41 -04:00
barisusakli
9079d7f26f fix create tags crash if no callback is passed 2014-05-25 12:38:49 -04:00
Julian Lam
d0d5c5a8a5 added FAQ entry for #1537 -- closed #1537 2014-05-24 20:33:58 -04:00
psychobunny
7f011fe583 calling it ajaxify.preloader instead 2014-05-24 18:54:55 -04:00
psychobunny
eb69d898ce use cache-buster in translator instead of timestamp 2014-05-24 17:58:49 -04:00
psychobunny
d5bf83f43f closes #1570 2014-05-24 17:35:29 -04:00
Julian Lam
b1eb5b175c Merge remote-tracking branch 'origin/master' into groups-pages
Conflicts:
	src/topics/tags.js
2014-05-24 12:38:16 -04:00
Barış Soner Uşaklı
16304ced50 Merge pull request #1568 from akhoury/patch-2
my bad
2014-05-24 10:36:47 -04:00
Aziz Khoury
e0a5cb2b44 my bad
:/
2014-05-24 10:21:20 -04:00
barisusakli
1a753bf64d fixes forking
if there are no tags just return
2014-05-24 06:29:44 -04:00
barisusakli
b6e0a2ecce parseInt 2014-05-23 22:55:58 -04:00
Julian Lam
d74de798fc removing backwards compatibility fixed in preparation for 0.5.0. Prepare for stuff to break!!!!! 2014-05-23 19:13:22 -04:00
barisusakli
e505a9a6ac changed order of cleanup 2014-05-23 19:07:39 -04:00
barisusakli
b7fcde446b proper score aggregation #1562 2014-05-23 17:03:53 -04:00
barisusakli
5e51895982 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2014-05-23 15:36:58 -04:00
barisusakli
7585b72644 remove duplicates 2014-05-23 15:36:54 -04:00
psychobunny
7895bf3e2f updated logo again 2014-05-23 15:34:20 -04:00
psychobunny
d728c54b30 updated logo 2014-05-23 15:32:43 -04:00
psychobunny
4cd86affae update all files with new url 2014-05-23 15:21:51 -04:00
psychobunny
5f6217e831 update all docs with new url 2014-05-23 15:21:36 -04:00
barisusakli
dbf07f786d closes #1565 2014-05-23 15:01:54 -04:00
Julian Lam
4ca04067f0 updated badges 2014-05-23 14:42:50 -04:00
psychobunny
abe01ba720 Update README.md 2014-05-23 14:38:07 -04:00
barisusakli
b32bb76429 #1562 2014-05-23 14:30:59 -04:00
Julian Lam
f20926f93d finished up group list and group details pages - closed #1563 2014-05-23 09:49:18 -04:00
Julian Lam
7afe3bea59 added getSortedSetRevUnion... just because. 2014-05-23 09:49:18 -04:00
Julian Lam
6e597a9cdb fixed tests, and added getSortedSetUnion method to redis db, added test for new redis method 2014-05-23 09:49:18 -04:00
Julian Lam
840a56006c added missing files for #1563 2014-05-23 09:49:18 -04:00
Julian Lam
7425b72245 most of the work for #1563 2014-05-23 09:49:18 -04:00
Julian Lam
7bdbb966aa groups pages WIP 2014-05-23 09:49:18 -04:00
barisusakli
66701afdaa closes #1559
fixes the notification image too, the property was called image not
picture
2014-05-22 21:31:52 -04:00
Julian Lam
4be979f88d Merge pull request #1564 from MrHohenheim/patch-1
Update user.json
2014-05-22 21:17:34 -04:00
Pénzes Tamás
9d0672f193 Update user.json 2014-05-23 03:04:34 +02:00
barisusakli
ee1495a44d fixes reply/quote buttons on new posts 2014-05-22 18:24:58 -04:00
barisusakli
e003582289 fixes redirect loop for empty slugs 2014-05-22 15:05:29 -04:00
barisusakli
b8b482e287 closes #1555 2014-05-22 14:56:15 -04:00
barisusakli
fa1275c03a closes #1557 2014-05-22 14:41:11 -04:00
barisusakli
746df87d89 upgrade tags to sorted set 2014-05-22 13:06:19 -04:00
barisusakli
853acaa6c7 closes #1558 2014-05-22 11:42:55 -04:00
Julian Lam
8a510c340b limiting user and group creation so that their slugs can't intersect. 2014-05-22 10:21:27 -04:00
barisusakli
51e07e197b added isSelf to account route 2014-05-21 21:52:10 -04:00
barisusakli
a1de4cb2dd added no tags language key 2014-05-21 21:27:49 -04:00
Julian Lam
8df40c4b74 latest translations and fallbacks 2014-05-21 21:26:27 -04:00
barisusakli
3f43db090b return topics tags #1557 2014-05-21 21:15:11 -04:00
barisusakli
87fe5bf1bb delete tag if it has no topics left 2014-05-21 20:25:35 -04:00
barisusakli
56f442f283 remove punctuation and limit tag length 2014-05-21 20:20:44 -04:00
barisusakli
90cea84af9 max 5 tags per topic
asdasd
2014-05-21 19:50:27 -04:00
barisusakli
d8fd29581e deleting a user will delete topic tags too 2014-05-21 19:39:10 -04:00
barisusakli
df73ceaeb7 closes #1556
added tag input box to composer when creating a topic
added new routes for viewing tags 'tags' and 'tags/:tagname'
respectively
post_bar.tpl shows the tags of the topic
can edit the main post to remove or add new tags
added a new menu item to header to go to the tags page
2014-05-21 16:13:51 -04:00
Julian Lam
1d7c293197 added option to remove ephemeralGroups from groups listing 2014-05-21 11:30:32 -04:00
Julian Lam
3849b2d6b3 added pushGroup method to notifications object #1331 2014-05-21 11:30:32 -04:00
barisusakli
dfa1150709 fix missing category data 2014-05-21 00:03:22 -04:00
barisusakli
c7c54560bc fixes going into deleted topics for admins 2014-05-20 20:21:57 -04:00
barisusakli
1e68974f50 small refactor 2014-05-20 17:46:17 -04:00
Julian Lam
9bb13a0d29 closed #1552 2014-05-20 14:45:04 -04:00
psychobunny
7f7cc8dc62 merging in latest templates.js 2014-05-20 13:52:12 -04:00
barisusakli
b30dee2601 no need to store titleEl 2014-05-20 13:23:09 -04:00
barisusakli
4397b7ab4b removed meta.scripts.get warning #1544 2014-05-20 12:38:33 -04:00
barisusakli
9ba0dc3363 closes #1539 2014-05-20 12:35:46 -04:00
giorgiochiodi
6d50ae7624 Update ubuntu.rst 2014-05-20 16:34:34 +02:00
barisusakli
05872ad458 closes #1545 2014-05-19 21:28:26 -04:00
barisusakli
cd08a16f77 return post count to with categories 2014-05-19 19:24:06 -04:00
barisusakli
4acc264cb8 added upload error string 2014-05-19 18:42:21 -04:00
barisusakli
20a707e6c1 uploads cleanup 2014-05-19 15:33:41 -04:00
Julian Lam
152a307b51 Merge pull request #1543 from akhoury/patch-1
Update hooks.rst
2014-05-19 14:08:02 -04:00
Aziz Khoury
2a333fddeb Update hooks.rst 2014-05-19 14:01:26 -04:00
Aziz Khoury
a62fe8d4e2 Update hooks.rst 2014-05-19 14:00:29 -04:00
Barış Soner Uşaklı
75d018a35f Merge pull request #1541 from akhoury/master
filter:register.build now returns what it was passed, in order.
2014-05-19 12:38:53 -04:00
Aziz Khoury
8d6a8dc928 filter:register.build now returns what it was passed, in order. fixes #1540, we seriously need to consider standarizing the hooks arguments, maybe some ideas here #1527 2014-05-19 12:29:52 -04:00
barisusakli
5cf9b0a3bd fix feed crash 2014-05-18 16:21:34 -04:00
barisusakli
e869a6a15a composer refactor 2014-05-18 15:09:58 -04:00
Julian Lam
2e49fe9f50 fixed meta property to name, for keywords 2014-05-18 12:09:47 -04:00
Julian Lam
58b6a2e9ea Merge branch 'master' of github.com:designcreateplay/NodeBB 2014-05-17 22:21:50 -04:00
Julian Lam
e9252ca745 fixing language code for viet and thai 2014-05-17 22:21:43 -04:00
barisusakli
472e6b5206 privilege cleanup 2014-05-17 18:59:34 -04:00
barisusakli
ff2bad635c infinite scroll refactor 2014-05-17 17:55:55 -04:00
Julian Lam
e43ebb0423 Merge pull request #1533 from akhoury/master
captcha support
2014-05-17 16:01:44 -04:00
Julian Lam
6ec36a00ad Merge branch 'master' of github.com:chiehwen/NodeBB into chiehwen-master 2014-05-17 15:19:07 -04:00
Julian Lam
dfe34cafb8 latest translations for slovak 2014-05-17 15:17:31 -04:00
Chieh-Wen Yang
d56b05bd90 I have translated to zh_TW. 2014-05-18 00:57:00 +08:00
Barış Soner Uşaklı
485c908510 Update README.md 2014-05-16 17:27:27 -04:00
Julian Lam
5f89293301 upgrade script for #1282 2014-05-16 16:48:26 -04:00
Julian Lam
b1534b7798 removing allowGuestPosting logic in NodeBB 2014-05-16 16:29:43 -04:00
Julian Lam
3474cdc5ea added new privilege "find", added guest meta group, closed #1282 2014-05-16 15:47:04 -04:00
Julian Lam
c297e2f2f8 ephemeral groups - guests 2014-05-16 15:10:06 -04:00
Julian Lam
118723e185 force update translations. 2014-05-16 14:38:51 -04:00
barisusakli
629648bc7d closes #1535 2014-05-16 13:28:38 -04:00
Aziz Khoury
0e0f66ba9e minor cleanups. 2014-05-16 09:39:46 -04:00
Aziz Khoury
230b4a0952 now really fix topic/1503 2014-05-16 01:55:13 -04:00
Aziz Khoury
c7734937fb added a bunch of useful utils functions 2014-05-16 01:38:47 -04:00
Aziz Khoury
611fd380eb fixes topic/1503 2014-05-16 01:38:20 -04:00
Aziz Khoury
d3a11f7ad8 Merge remote-tracking branch 'upstream/master' 2014-05-16 00:12:14 -04:00
Julian Lam
81bf5e4ad2 updated package.json back to tildes... 2014-05-15 23:37:07 -04:00
barisusakli
b1aae05a08 closes #1518 2014-05-15 20:49:47 -04:00
psychobunny
033364a2a9 move code from footer.js into admin.js 2014-05-15 17:16:24 -04:00
Julian Lam
33601af7cd Merge branch 'master' of github.com:designcreateplay/NodeBB 2014-05-15 16:33:50 -04:00
Julian Lam
7dffc2a2e9 moving chat timestamp to top of message, not end 2014-05-15 16:33:36 -04:00
Julian Lam
f63b9af86c missed a backtick 2014-05-15 16:20:58 -04:00
Julian Lam
b2b3723fd5 updated instructions for upgrading nodebb 2014-05-15 16:17:25 -04:00
barisusakli
29420d6f82 fixed indents 2014-05-15 10:49:53 -04:00
barisusakli
bb34834742 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2014-05-15 10:38:52 -04:00
barisusakli
3e86bdb38f more work on #1518
still needs more work, category is next
2014-05-15 10:38:02 -04:00
Julian Lam
45926b308c added korean language files to NodeBB, thanks @g6123! 2014-05-15 09:43:14 -04:00
유성매직
e600bee52b added Korean translation 2014-05-15 22:22:04 +09:00
barisusakli
822cf56af1 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2014-05-15 07:48:46 -04:00
barisusakli
292e4bbdd6 fixed post privilege privilege 2014-05-15 07:48:21 -04:00
Aziz Khoury
bab88893f1 changing 'filter:register.check' hook signature to provide req, res and data 2014-05-15 03:10:15 -04:00
Aziz Khoury
aff3c9558a hook error print to console in dev env 2014-05-15 03:08:24 -04:00
Aziz Khoury
61a5d4768a global var 2014-05-15 03:07:38 -04:00
Aziz Khoury
086013829b added 'filter:register.build' hook to augment register template data 2014-05-15 03:06:47 -04:00
psychobunny
9040813b0d closes #1530 2014-05-14 19:00:05 -04:00
psychobunny
3b00417d99 added colorPicker to branding inputs 2014-05-14 18:51:06 -04:00
psychobunny
4cf6ebda7b updated enableColorPicker to accept either a jQ obj or a string; updated it to be able to initialize several inputs at once 2014-05-14 18:50:50 -04:00
psychobunny
29137299c2 added public/src/admin.js; moved enableColorPicker into admin.enableColorPicker 2014-05-14 18:46:11 -04:00
psychobunny
e2312c8330 branding settings on ajaxify fixed 2014-05-14 18:30:25 -04:00
psychobunny
a5a2e6f04e update BS brand colors in ACP 2014-05-14 18:05:28 -04:00
barisusakli
4234057821 first pass for #1518
this only handles postTools privileges, topic and category will follow
2014-05-14 17:53:27 -04:00
psychobunny
ec5cdd178a added function to update branding colors 2014-05-14 17:15:22 -04:00
psychobunny
70b5f9addc some regex to scour the CSS and figure out the branding colors 2014-05-14 17:07:31 -04:00
psychobunny
d734f9f230 removed unused faq.rst 2014-05-14 15:33:32 -04:00
psychobunny
a48403dd22 updated faq 2014-05-14 15:33:31 -04:00
barisusakli
f29dda4b92 fixed 1 more 2014-05-14 14:59:35 -04:00
barisusakli
3643fbc212 fixes 2 privilege issues 2014-05-14 14:56:46 -04:00
Julian Lam
52cb62960f added reset code to disable ONE plugin, updated FAQ 2014-05-14 11:20:23 -04:00
Julian Lam
cd9abcde74 updated package deps in 0.4.x branch so it doesn't pull theme versions that are too new
Conflicts:
	package.json
2014-05-14 00:30:10 -04:00
Julian Lam
66225237a0 view_deleted fix for privs 2014-05-13 21:22:06 -04:00
Julian Lam
34b522f36d missed a bunch of "editable" checks 2014-05-13 21:21:24 -04:00
barisusakli
ac65655384 fixed missing return 2014-05-13 21:13:54 -04:00
Julian Lam
6604a29f74 upgrade script for new privilege system 2014-05-13 19:03:20 -04:00
Julian Lam
b5d4e62e70 fixed bug in privileges system, thanks TravisCI! 2014-05-13 18:18:08 -04:00
Julian Lam
759775ecbe Merge remote-tracking branch 'origin/master' 2014-05-13 18:00:01 -04:00
Julian Lam
87cb1699fd arbitrarily increasing lavender's minver too 2014-05-13 17:59:42 -04:00
Julian Lam
2d20478b8d updated vanilla version req. 2014-05-13 17:59:07 -04:00
Julian Lam
5b3318608e updated text copy -- closed #933 2014-05-13 17:58:01 -04:00
Julian Lam
87f4566e06 more fixed to privs, and ACP modal 2014-05-13 17:06:58 -04:00
Julian Lam
d54ecea506 more privilege changes 2014-05-13 17:06:58 -04:00
Julian Lam
7c8b442dcd more updates to privileges revamp 2014-05-13 17:06:58 -04:00
Julian Lam
72ca0d6d40 got privilege selection working for users and groups 2014-05-13 17:06:58 -04:00
Julian Lam
186943ced1 removing old html in js 2014-05-13 17:06:58 -04:00
Julian Lam
7fe0ab6022 migrated views in js into partials 2014-05-13 17:06:58 -04:00
barisusakli
4f11ac9664 fixed missing comma 2014-05-13 16:45:37 -04:00
barisusakli
da72924187 removed duplication 2014-05-13 16:44:44 -04:00
Julian Lam
0e20350ca7 0.4.3 2014-05-13 16:40:19 -04:00
Julian Lam
ea6576c6f3 latest translations and fallbacks 2014-05-13 16:39:56 -04:00
psychobunny
97d256c372 cleanup 2014-05-13 12:09:21 -04:00
barisusakli
c5d9a68b4b closes #1445 2014-05-12 18:42:13 -04:00
barisusakli
fc00586f0e 0 disables flags for ban 2014-05-12 14:53:53 -04:00
barisusakli
c7744d7a64 closes #1483 2014-05-12 14:51:39 -04:00
psychobunny
9efc341772 updated docs for alert closefn/clickfn 2014-05-12 13:03:49 -04:00
psychobunny
240932dd80 add cursor: pointer if alert's clickfn is defined 2014-05-12 13:02:48 -04:00
psychobunny
3c7b433e3a linting settings.js 2014-05-12 12:59:34 -04:00
psychobunny
a121ec716a Merge pull request #1517 from frissdiegurke/patch-1
fix call of expandObjBy with undefined
2014-05-12 12:17:15 -04:00
frissdiegurke
b1257f6291 fix call of expandObjBy with undefined 2014-05-12 13:40:19 +02:00
Julian Lam
41c5a90914 latest language strings 2014-05-11 23:08:28 -04:00
barisusakli
2bd15e155f remove listener before adding 2014-05-11 20:31:42 -04:00
barisusakli
1a9ab9d1d2 fixes default gravatar images if they are uploaded locally 2014-05-11 19:39:52 -04:00
barisusakli
78ccca4f63 removed comment 2014-05-11 18:57:23 -04:00
psychobunny
f2a692add7 some linting of settings.js 2014-05-11 16:41:26 -04:00
psychobunny
c3e4c7dea1 using var instead of const for < IE10 compatibility
@frissdiegurke
2014-05-11 16:34:21 -04:00
psychobunny
2b4da7ebcd Merge pull request #1514 from frissdiegurke/master
added number-type to settings framework. persist expanded object on serv...
2014-05-11 16:30:57 -04:00
barisusakli
d311995c16 closes #1516 2014-05-11 14:06:15 -04:00
FrissDieGurke
f618a9405e added settings number-field to docs 2014-05-11 18:58:01 +02:00
Julian Lam
e64c1bfec3 closed #1453 2014-05-11 11:45:20 -04:00
Julian Lam
bab140c396 added pexpire and pexpireAt methods for redis and mongo. Added emoticons for leveldb (as per existing implementation by @psychobunny LOL) 2014-05-11 10:31:32 -04:00
Julian Lam
4e0ccbf0c6 fixed #1515 2014-05-10 23:56:45 -04:00
Julian Lam
65dd79c84e socket logic for #1149 -- handling of help tab in ACP 2014-05-10 23:43:15 -04:00
barisusakli
f65998f4c2 fixes guest name on home 2014-05-10 18:41:31 -04:00
psychobunny
2649e6a385 use secure image instead 2014-05-10 16:24:44 -04:00
psychobunny
f7fe0aa680 moved documentation out of alerts 2014-05-10 16:16:56 -04:00
psychobunny
74aabb9c60 modules documentation - alerts 2014-05-10 16:16:35 -04:00
psychobunny
db27a30005 better alert for ban message 2014-05-10 16:01:58 -04:00
barisusakli
d0be73a4d4 closes #1503 2014-05-10 15:48:09 -04:00
FrissDieGurke
ab2c0cfa9f added number-type to settings framework. persist expanded object on server-side sync if changed 2014-05-10 19:49:50 +02:00
barisusakli
8ee866fc9d closes #1513 2014-05-09 17:57:39 -04:00
barisusakli
4c28de659c closes #1504 2014-05-09 17:46:10 -04:00
barisusakli
274acc8eec moved base_templates_path to load config #1511 2014-05-09 13:47:33 -04:00
psychobunny
643dd74e43 initially hide the account setting menus (prevents the brief flashing of the buttons)
5589e1e148
2014-05-09 12:56:51 -04:00
psychobunny
99b34d5990 allow translator variables to not require a space, see #1512 2014-05-09 12:47:42 -04:00
Julian Lam
025db831f4 Update heroku.rst 2014-05-09 12:01:31 -04:00
Julian Lam
a5537cb8ae Update heroku.rst 2014-05-09 12:01:04 -04:00
barisusakli
43bbc00be8 closes #1512
spaces are required
2014-05-09 11:50:53 -04:00
Julian Lam
f876ba91b8 Update heroku.rst 2014-05-09 11:50:46 -04:00
barisusakli
d304bab4f1 dont change height if sizing horizontally #1508 2014-05-09 11:41:41 -04:00
barisusakli
c2fb4700de fixes infinite scroll on account pages 2014-05-08 22:44:34 -04:00
Julian Lam
2dd2d7a269 defaulting daily digest frequency to null -- digests should be opt IN, not OUT. Bad idea on my part... re: #1499 2014-05-08 20:54:00 -04:00
barisusakli
66abd20647 moved add commas to process page 2014-05-08 19:17:35 -04:00
psychobunny
e22e0c7503 Merge pull request #1506 from BitBangersCode/master
Fix Settings Framework example to display proper object path
2014-05-08 14:40:05 -04:00
psychobunny
2ba2ef5320 closes #1498 2014-05-08 14:38:46 -04:00
Schamper
d1079c00bc Fix Settings Framework example to display proper object path 2014-05-08 20:37:10 +02:00
psychobunny
a0fcdfe629 closes #1502 2014-05-08 14:27:46 -04:00
psychobunny
10716c37d3 closes #1376 2014-05-08 14:16:40 -04:00
barisusakli
7280567d21 closes #1505 2014-05-08 13:24:34 -04:00
barisusakli
ed57edde3b fixed undefined next 2014-05-08 01:03:07 -04:00
Julian Lam
4f5b3cc934 changing update script to only directly update vanilla and lavender 2014-05-08 00:50:44 -04:00
barisusakli
933aa5dfcb #1501 2014-05-07 16:11:58 -04:00
barisusakli
efaa1e62c1 added back ttl :) 2014-05-07 14:12:53 -04:00
barisusakli
672bde7066 removed ttl 2014-05-07 13:27:11 -04:00
barisusakli
62d487e0a8 use current user uid for feed generation 2014-05-07 12:46:58 -04:00
barisusakli
f714c713f3 fixes deactivate text on plugin buttons 2014-05-07 12:30:58 -04:00
Julian Lam
b56df975e0 fixed 1495 2014-05-07 11:46:32 -04:00
barisusakli
883978007d closes #1482
removed updateHeader, the header is using template values in from the
api, update menu partial in vanilla theme as well
2014-05-06 18:42:42 -04:00
psychobunny
678f0f436e importing latest templates.js @Schamper 2014-05-06 17:50:06 -04:00
barisusakli
1f7fd51b40 some work for #1482 2014-05-06 17:46:34 -04:00
barisusakli
57f0ee8a38 removed whitespace 2014-05-06 17:28:42 -04:00
barisusakli
7a25f0bb36 fix for #1496 2014-05-06 16:28:35 -04:00
psychobunny
14db999684 closes #1494 2014-05-06 15:51:21 -04:00
psychobunny
f697b5a2b8 addBlockquoteEllipses to newly created posts #1491 2014-05-06 15:09:35 -04:00
psychobunny
3b7d222ec3 prevent duplicate blockquotes #1491 2014-05-06 15:04:10 -04:00
barisusakli
f89afd92b9 fix for plugin page access issue closes #1493 2014-05-06 13:12:19 -04:00
barisusakli
89225c80ca related to #1493 2014-05-06 13:05:31 -04:00
Julian Lam
08cf6bc5e6 fixed #1489 -- made checkReplace error-first, added missing callback, added missing object field to db query 2014-05-06 10:23:39 -04:00
barisusakli
7f6ae6df9f possible fix to active users 2014-05-05 18:17:12 -04:00
psychobunny
b3940cd7cd enabling view cache, since we require server restart on theme changes it doesn't hurt 2014-05-05 16:56:08 -04:00
barisusakli
967b486ce1 closes #1487
ban and delete user admin actions takes an array of uids now.
2014-05-05 16:48:13 -04:00
Julian Lam
590082709f fixed #1488 - emails are processed 100 at a time 2014-05-05 16:25:55 -04:00
psychobunny
dfe010d97d caps 2014-05-05 15:34:38 -04:00
psychobunny
14431f7913 closes #1486 2014-05-05 15:19:37 -04:00
psychobunny
8fc818e07c closes https://github.com/designcreateplay/NodeBB/issues/1473 2014-05-05 13:25:06 -04:00
psychobunny
7033fa7563 closes https://github.com/designcreateplay/NodeBB/issues/1474 2014-05-05 13:17:34 -04:00
psychobunny
38a3ab6365 fixes routes for https://github.com/designcreateplay/NodeBB/issues/1485 2014-05-05 12:59:27 -04:00
psychobunny
a51b357e67 removed deprecated categories.background property 2014-05-05 12:18:53 -04:00
psychobunny
3934f2ec88 collapsible blockquotes, closes #1359 2014-05-05 12:15:17 -04:00
psychobunny
be16f0dae7 Merge pull request #1484 from frissdiegurke/master
Settings Framework docs + slight changes
2014-05-05 10:24:34 -04:00
barisusakli
d272a87c8a cleanup toggleFollow 2014-05-05 09:33:47 -04:00
barisusakli
8afcf44732 gravatars will be generated on demand
changing the setting in ACP will affect all default gravatars now.
2014-05-04 17:27:00 -04:00
Julian Lam
ac9bd0859f fixed #1477 2014-05-04 16:47:21 -04:00
barisusakli
6f40393b99 added err check 2014-05-04 14:33:12 -04:00
FrissDieGurke
c4606e7009 minified settings-framework wrapper-length 2014-05-04 13:08:20 +02:00
FrissDieGurke
cbef92bb62 Added settings-framework documentation 2014-05-04 12:37:49 +02:00
FrissDieGurke
c23df60e1b removed unnecessary method + doc within Settings Framework 2014-05-04 12:34:22 +02:00
barisusakli
aea8d50200 removed console.log 2014-05-03 20:59:38 -04:00
barisusakli
d43d363a7a refactored topics.js
removed ajaxify.register_events using removeListener now
2014-05-03 20:56:26 -04:00
barisusakli
ec399d8b3b moved all account related files to account folder
update nodebb-theme-vanilla too to get the update tpl files
2014-05-03 17:21:07 -04:00
barisusakli
3c96857123 closes #1461
fixed disabled category grey out, added plural move topics string
2014-05-03 00:07:01 -04:00
1191 changed files with 50072 additions and 22549 deletions

View File

@@ -1,4 +1,8 @@
root = true
[*.js, *.css, *.tpl]
[*.js, *.css, *.tpl, *.json]
indent_style = tab
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = false

14
.gitignore vendored
View File

@@ -3,7 +3,7 @@ node_modules/
sftp-config.json
config.json
public/src/nodebb.min.js
public/config.json
!src/views/config.json
public/css/*.css
*.sublime-project
*.sublime-workspace
@@ -17,12 +17,18 @@ provision.sh
.DS_Store
feeds/recent.rss
# winston?
error.log
events.log
logs/
pidfile
# templates
/public/templates
/public/sounds
/public/uploads
# compiled files
/public/stylesheet.css
/public/admin.css
/public/nodebb.min.js
/public/nodebb.min.js.map

View File

@@ -1,12 +1,12 @@
services:
- redis-server
- 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}"
- npm i --production
- node app --setup="{\"url\":\"http://127.0.0.1:4567/\",\"secret\":\"abcdef\",\"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"
- "0.11"
- "0.10"
branches:
only:
- master
only:
- master

View File

@@ -6,8 +6,10 @@ 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.bn = public/language/bn/category.json
trans.cs = public/language/cs/category.json
trans.de = public/language/de/category.json
trans.el = public/language/el/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
@@ -19,6 +21,7 @@ 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.ko = public/language/ko/category.json
trans.lt = public/language/lt/category.json
trans.ms = public/language/ms/category.json
trans.nb = public/language/nb/category.json
@@ -26,6 +29,7 @@ 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.ro = public/language/ro/category.json
trans.sc = public/language/sc/category.json
trans.sk = public/language/sk/category.json
trans.sv = public/language/sv/category.json
@@ -41,8 +45,10 @@ 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.bn = public/language/bn/login.json
trans.cs = public/language/cs/login.json
trans.de = public/language/de/login.json
trans.el = public/language/el/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
@@ -54,6 +60,7 @@ 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.ko = public/language/ko/login.json
trans.lt = public/language/lt/login.json
trans.ms = public/language/ms/login.json
trans.nb = public/language/nb/login.json
@@ -61,6 +68,7 @@ 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.ro = public/language/ro/login.json
trans.sc = public/language/sc/login.json
trans.sk = public/language/sk/login.json
trans.sv = public/language/sv/login.json
@@ -75,8 +83,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/recent.json
source_lang = en_GB
trans.ar = public/language/ar/recent.json
trans.bn = public/language/bn/recent.json
trans.cs = public/language/cs/recent.json
trans.de = public/language/de/recent.json
trans.el = public/language/el/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
@@ -88,6 +98,7 @@ 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.ko = public/language/ko/recent.json
trans.lt = public/language/lt/recent.json
trans.ms = public/language/ms/recent.json
trans.nb = public/language/nb/recent.json
@@ -95,6 +106,7 @@ 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.ro = public/language/ro/recent.json
trans.sc = public/language/sc/recent.json
trans.sk = public/language/sk/recent.json
trans.sv = public/language/sv/recent.json
@@ -109,8 +121,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/unread.json
source_lang = en_GB
trans.ar = public/language/ar/unread.json
trans.bn = public/language/bn/unread.json
trans.cs = public/language/cs/unread.json
trans.de = public/language/de/unread.json
trans.el = public/language/el/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
@@ -122,6 +136,7 @@ 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.ko = public/language/ko/unread.json
trans.lt = public/language/lt/unread.json
trans.ms = public/language/ms/unread.json
trans.nb = public/language/nb/unread.json
@@ -129,6 +144,7 @@ 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.ro = public/language/ro/unread.json
trans.sc = public/language/sc/unread.json
trans.sk = public/language/sk/unread.json
trans.sv = public/language/sv/unread.json
@@ -143,8 +159,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/modules.json
source_lang = en_GB
trans.ar = public/language/ar/modules.json
trans.bn = public/language/bn/modules.json
trans.cs = public/language/cs/modules.json
trans.de = public/language/de/modules.json
trans.el = public/language/el/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
@@ -156,6 +174,7 @@ 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.ko = public/language/ko/modules.json
trans.lt = public/language/lt/modules.json
trans.ms = public/language/ms/modules.json
trans.nb = public/language/nb/modules.json
@@ -163,6 +182,7 @@ 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.ro = public/language/ro/modules.json
trans.sc = public/language/sc/modules.json
trans.sk = public/language/sk/modules.json
trans.sv = public/language/sv/modules.json
@@ -177,8 +197,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/register.json
source_lang = en_GB
trans.ar = public/language/ar/register.json
trans.bn = public/language/bn/register.json
trans.cs = public/language/cs/register.json
trans.de = public/language/de/register.json
trans.el = public/language/el/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
@@ -190,6 +212,7 @@ 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.ko = public/language/ko/register.json
trans.lt = public/language/lt/register.json
trans.ms = public/language/ms/register.json
trans.nb = public/language/nb/register.json
@@ -197,6 +220,7 @@ 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.ro = public/language/ro/register.json
trans.sc = public/language/sc/register.json
trans.sk = public/language/sk/register.json
trans.sv = public/language/sv/register.json
@@ -211,8 +235,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/user.json
source_lang = en_GB
trans.ar = public/language/ar/user.json
trans.bn = public/language/bn/user.json
trans.cs = public/language/cs/user.json
trans.de = public/language/de/user.json
trans.el = public/language/el/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
@@ -224,6 +250,7 @@ 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.ko = public/language/ko/user.json
trans.lt = public/language/lt/user.json
trans.ms = public/language/ms/user.json
trans.nb = public/language/nb/user.json
@@ -231,6 +258,7 @@ 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.ro = public/language/ro/user.json
trans.sc = public/language/sc/user.json
trans.sk = public/language/sk/user.json
trans.sv = public/language/sv/user.json
@@ -245,8 +273,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/global.json
source_lang = en_GB
trans.ar = public/language/ar/global.json
trans.bn = public/language/bn/global.json
trans.cs = public/language/cs/global.json
trans.de = public/language/de/global.json
trans.el = public/language/el/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
@@ -258,6 +288,7 @@ 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.ko = public/language/ko/global.json
trans.lt = public/language/lt/global.json
trans.ms = public/language/ms/global.json
trans.nb = public/language/nb/global.json
@@ -265,6 +296,7 @@ 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.ro = public/language/ro/global.json
trans.sc = public/language/sc/global.json
trans.sk = public/language/sk/global.json
trans.sv = public/language/sv/global.json
@@ -279,8 +311,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/notifications.json
source_lang = en_GB
trans.ar = public/language/ar/notifications.json
trans.bn = public/language/bn/notifications.json
trans.cs = public/language/cs/notifications.json
trans.de = public/language/de/notifications.json
trans.el = public/language/el/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
@@ -292,6 +326,7 @@ 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.ko = public/language/ko/notifications.json
trans.lt = public/language/lt/notifications.json
trans.ms = public/language/ms/notifications.json
trans.nb = public/language/nb/notifications.json
@@ -299,6 +334,7 @@ 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.ro = public/language/ro/notifications.json
trans.sc = public/language/sc/notifications.json
trans.sk = public/language/sk/notifications.json
trans.sv = public/language/sv/notifications.json
@@ -313,8 +349,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/reset_password.json
source_lang = en_GB
trans.ar = public/language/ar/reset_password.json
trans.bn = public/language/bn/reset_password.json
trans.cs = public/language/cs/reset_password.json
trans.de = public/language/de/reset_password.json
trans.el = public/language/el/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
@@ -326,6 +364,7 @@ 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.ko = public/language/ko/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
@@ -333,6 +372,7 @@ 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.ro = public/language/ro/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
@@ -347,8 +387,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/users.json
source_lang = en_GB
trans.ar = public/language/ar/users.json
trans.bn = public/language/bn/users.json
trans.cs = public/language/cs/users.json
trans.de = public/language/de/users.json
trans.el = public/language/el/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
@@ -360,6 +402,7 @@ 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.ko = public/language/ko/users.json
trans.lt = public/language/lt/users.json
trans.ms = public/language/ms/users.json
trans.nb = public/language/nb/users.json
@@ -367,6 +410,7 @@ 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.ro = public/language/ro/users.json
trans.sc = public/language/sc/users.json
trans.sk = public/language/sk/users.json
trans.sv = public/language/sv/users.json
@@ -381,8 +425,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/language.json
source_lang = en_GB
trans.ar = public/language/ar/language.json
trans.bn = public/language/bn/language.json
trans.cs = public/language/cs/language.json
trans.de = public/language/de/language.json
trans.el = public/language/el/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
@@ -394,6 +440,7 @@ 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.ko = public/language/ko/language.json
trans.lt = public/language/lt/language.json
trans.ms = public/language/ms/language.json
trans.nb = public/language/nb/language.json
@@ -401,6 +448,7 @@ 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.ro = public/language/ro/language.json
trans.sc = public/language/sc/language.json
trans.sk = public/language/sk/language.json
trans.sv = public/language/sv/language.json
@@ -415,8 +463,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/pages.json
source_lang = en_GB
trans.ar = public/language/ar/pages.json
trans.bn = public/language/bn/pages.json
trans.cs = public/language/cs/pages.json
trans.de = public/language/de/pages.json
trans.el = public/language/el/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
@@ -428,6 +478,7 @@ 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.ko = public/language/ko/pages.json
trans.lt = public/language/lt/pages.json
trans.ms = public/language/ms/pages.json
trans.nb = public/language/nb/pages.json
@@ -435,6 +486,7 @@ 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.ro = public/language/ro/pages.json
trans.sc = public/language/sc/pages.json
trans.sk = public/language/sk/pages.json
trans.sv = public/language/sv/pages.json
@@ -449,8 +501,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/topic.json
source_lang = en_GB
trans.ar = public/language/ar/topic.json
trans.bn = public/language/bn/topic.json
trans.cs = public/language/cs/topic.json
trans.de = public/language/de/topic.json
trans.el = public/language/el/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
@@ -462,6 +516,7 @@ 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.ko = public/language/ko/topic.json
trans.lt = public/language/lt/topic.json
trans.ms = public/language/ms/topic.json
trans.nb = public/language/nb/topic.json
@@ -469,6 +524,7 @@ 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.ro = public/language/ro/topic.json
trans.sc = public/language/sc/topic.json
trans.sk = public/language/sk/topic.json
trans.sv = public/language/sv/topic.json
@@ -483,8 +539,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/success.json
source_lang = en_GB
trans.ar = public/language/ar/success.json
trans.bn = public/language/bn/success.json
trans.cs = public/language/cs/success.json
trans.de = public/language/de/success.json
trans.el = public/language/el/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
@@ -496,6 +554,7 @@ 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.ko = public/language/ko/success.json
trans.lt = public/language/lt/success.json
trans.ms = public/language/ms/success.json
trans.nb = public/language/nb/success.json
@@ -503,6 +562,7 @@ 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.ro = public/language/ro/success.json
trans.sc = public/language/sc/success.json
trans.sk = public/language/sk/success.json
trans.sv = public/language/sv/success.json
@@ -517,8 +577,10 @@ type = KEYVALUEJSON
source_file = public/language/en_GB/error.json
source_lang = en_GB
trans.ar = public/language/ar/error.json
trans.bn = public/language/bn/error.json
trans.cs = public/language/cs/error.json
trans.de = public/language/de/error.json
trans.el = public/language/el/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
@@ -530,6 +592,7 @@ 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.ko = public/language/ko/error.json
trans.lt = public/language/lt/error.json
trans.ms = public/language/ms/error.json
trans.nb = public/language/nb/error.json
@@ -537,6 +600,7 @@ 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.ro = public/language/ro/error.json
trans.sc = public/language/sc/error.json
trans.sk = public/language/sk/error.json
trans.sv = public/language/sv/error.json
@@ -545,4 +609,156 @@ 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
[nodebb.tags]
source_file = public/language/en_GB/tags.json
source_lang = en_GB
trans.ar = public/language/ar/tags.json
trans.bn = public/language/bn/tags.json
trans.cs = public/language/cs/tags.json
trans.de = public/language/de/tags.json
trans.el = public/language/el/tags.json
trans.en_US = public/language/en_US/tags.json
trans.en@pirate = public/language/en@pirate/tags.json
trans.es = public/language/es/tags.json
trans.et = public/language/et/tags.json
trans.fa_IR = public/language/fa_IR/tags.json
trans.fi = public/language/fi/tags.json
trans.fr = public/language/fr/tags.json
trans.he = public/language/he/tags.json
trans.hu = public/language/hu/tags.json
trans.it = public/language/it/tags.json
trans.ja = public/language/ja/tags.json
trans.ko = public/language/ko/tags.json
trans.lt = public/language/lt/tags.json
trans.ms = public/language/ms/tags.json
trans.nb = public/language/nb/tags.json
trans.nl = public/language/nl/tags.json
trans.pl = public/language/pl/tags.json
trans.pt_BR = public/language/pt_BR/tags.json
trans.ru = public/language/ru/tags.json
trans.ro = public/language/ro/tags.json
trans.sc = public/language/sc/tags.json
trans.sk = public/language/sk/tags.json
trans.sv = public/language/sv/tags.json
trans.th = public/language/th/tags.json
trans.tr = public/language/tr/tags.json
trans.vi = public/language/vi/tags.json
trans.zh_CN = public/language/zh_CN/tags.json
trans.zh_TW = public/language/zh_TW/tags.json
type = KEYVALUEJSON
[nodebb.email]
source_file = public/language/en_GB/email.json
source_lang = en_GB
trans.ar = public/language/ar/email.json
trans.bn = public/language/bn/email.json
trans.cs = public/language/cs/email.json
trans.de = public/language/de/email.json
trans.el = public/language/el/email.json
trans.en_US = public/language/en_US/email.json
trans.en@pirate = public/language/en@pirate/email.json
trans.es = public/language/es/email.json
trans.et = public/language/et/email.json
trans.fa_IR = public/language/fa_IR/email.json
trans.fi = public/language/fi/email.json
trans.fr = public/language/fr/email.json
trans.he = public/language/he/email.json
trans.hu = public/language/hu/email.json
trans.it = public/language/it/email.json
trans.ja = public/language/ja/email.json
trans.ko = public/language/ko/email.json
trans.lt = public/language/lt/email.json
trans.ms = public/language/ms/email.json
trans.nb = public/language/nb/email.json
trans.nl = public/language/nl/email.json
trans.pl = public/language/pl/email.json
trans.pt_BR = public/language/pt_BR/email.json
trans.ru = public/language/ru/email.json
trans.ro = public/language/ro/email.json
trans.sc = public/language/sc/email.json
trans.sk = public/language/sk/email.json
trans.sv = public/language/sv/email.json
trans.th = public/language/th/email.json
trans.tr = public/language/tr/email.json
trans.vi = public/language/vi/email.json
trans.zh_CN = public/language/zh_CN/email.json
trans.zh_TW = public/language/zh_TW/email.json
type = KEYVALUEJSON
[nodebb.search]
source_file = public/language/en_GB/search.json
source_lang = en_GB
trans.ar = public/language/ar/search.json
trans.bn = public/language/bn/search.json
trans.cs = public/language/cs/search.json
trans.de = public/language/de/search.json
trans.el = public/language/el/search.json
trans.en_US = public/language/en_US/search.json
trans.en@pirate = public/language/en@pirate/search.json
trans.es = public/language/es/search.json
trans.et = public/language/et/search.json
trans.fa_IR = public/language/fa_IR/search.json
trans.fi = public/language/fi/search.json
trans.fr = public/language/fr/search.json
trans.he = public/language/he/search.json
trans.hu = public/language/hu/search.json
trans.it = public/language/it/search.json
trans.ja = public/language/ja/search.json
trans.ko = public/language/ko/search.json
trans.lt = public/language/lt/search.json
trans.ms = public/language/ms/search.json
trans.nb = public/language/nb/search.json
trans.nl = public/language/nl/search.json
trans.pl = public/language/pl/search.json
trans.pt_BR = public/language/pt_BR/search.json
trans.ru = public/language/ru/search.json
trans.ro = public/language/ro/search.json
trans.sc = public/language/sc/search.json
trans.sk = public/language/sk/search.json
trans.sv = public/language/sv/search.json
trans.th = public/language/th/search.json
trans.tr = public/language/tr/search.json
trans.vi = public/language/vi/search.json
trans.zh_CN = public/language/zh_CN/search.json
trans.zh_TW = public/language/zh_TW/search.json
type = KEYVALUEJSON
[nodebb.groups]
source_file = public/language/en_GB/groups.json
source_lang = en_GB
trans.ar = public/language/ar/groups.json
trans.bn = public/language/bn/groups.json
trans.cs = public/language/cs/groups.json
trans.de = public/language/de/groups.json
trans.el = public/language/el/groups.json
trans.en_US = public/language/en_US/groups.json
trans.en@pirate = public/language/en@pirate/groups.json
trans.es = public/language/es/groups.json
trans.et = public/language/et/groups.json
trans.fa_IR = public/language/fa_IR/groups.json
trans.fi = public/language/fi/groups.json
trans.fr = public/language/fr/groups.json
trans.he = public/language/he/groups.json
trans.hu = public/language/hu/groups.json
trans.it = public/language/it/groups.json
trans.ja = public/language/ja/groups.json
trans.ko = public/language/ko/groups.json
trans.lt = public/language/lt/groups.json
trans.ms = public/language/ms/groups.json
trans.nb = public/language/nb/groups.json
trans.nl = public/language/nl/groups.json
trans.pl = public/language/pl/groups.json
trans.pt_BR = public/language/pt_BR/groups.json
trans.ru = public/language/ru/groups.json
trans.ro = public/language/ro/groups.json
trans.sc = public/language/sc/groups.json
trans.sk = public/language/sk/groups.json
trans.sv = public/language/sv/groups.json
trans.th = public/language/th/groups.json
trans.tr = public/language/tr/groups.json
trans.vi = public/language/vi/groups.json
trans.zh_CN = public/language/zh_CN/groups.json
trans.zh_TW = public/language/zh_TW/groups.json
type = KEYVALUEJSON

46
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,46 @@
# Having problems installing NodeBB?
Chances are somebody has run into this problem before. After consulting our [documentation](https://docs.nodebb.org/en/latest/installing/os.html), please head over to our [community support forum](https://community.nodebb.org) for advice.
# Issues & Bugs
Thanks for reporting an issue with NodeBB! Please follow these guidelines in order to streamline the debugging process. The more guidelines you follow, the easier it will be for us to reproduce your problem.
In general, if we can't reproduce it, we can't fix it!
> #### **Important**
> If you believe you have identified a security vulnerability with NodeBB, report it as soon as possible via email to **security@nodebb.org**.
> A member of the NodeBB security team will respond to the issue.
> Please do not post it to the public bug tracker.
## Try the latest version of NodeBB
There is a chance that the issue you are experiencing may have already been fixed.
## Provide the NodeBB version number and git hash
You can find the NodeBB version number in the Admin Control Panel (ACP), as well as the first line output to the shell when running NodeBB
``` plaintext
info: NodeBB v0.5.2-dev Copyright (C) 2013-2014 NodeBB Inc.
info: This program comes with ABSOLUTELY NO WARRANTY.
info: This is free software, and you are welcome to redistribute it under certain conditions.
info:
info: Time: Tue Oct 07 2014 20:25:20 GMT-0400 (EDT)
```
If you are running NodeBB via git, it is also helpful to let the maintainers know what commit hash you are on. To find the commit hash, execute the following command:
``` bash
$ cd /path/to/my/nodebb
$ git rev-parse HEAD
```
If you have downloaded the `.zip` or `.tar.gz` packages from GitHub (or elsewhere), please let us know.
## Attempt to use `git bisect`
If you have installed NodeBB via GitHub clone, are familiar with utilising git, and are willing to help us narrow down the specific commit that causes a bug, consider running `git bisect`.
A full guide can be found here: [Debugging with Git/Binary Search](http://git-scm.com/book/en/Git-Tools-Debugging-with-Git#Binary-Search)

View File

@@ -1,15 +0,0 @@
## 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.

View File

@@ -1,14 +1,17 @@
# <img alt="NodeBB" src="http://i.imgur.com/3yj1n6N.png" />
[![Build Status](https://travis-ci.org/designcreateplay/NodeBB.svg?branch=master)](https://travis-ci.org/designcreateplay/NodeBB)
[![Dependency Status](https://david-dm.org/designcreateplay/nodebb.png)](https://david-dm.org/designcreateplay/nodebb)
[![Code Climate](https://codeclimate.com/github/designcreateplay/NodeBB.png)](https://codeclimate.com/github/designcreateplay/NodeBB)
# <img alt="NodeBB" src="http://i.imgur.com/mYxPPtB.png" />
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/NodeBB/NodeBB?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Build Status](https://travis-ci.org/NodeBB/NodeBB.svg?branch=master)](https://travis-ci.org/NodeBB/NodeBB)
[![Dependency Status](https://david-dm.org/nodebb/nodebb.svg)](https://david-dm.org/nodebb/nodebb)
[![Code Climate](https://codeclimate.com/github/NodeBB/NodeBB/badges/gpa.svg)](https://codeclimate.com/github/NodeBB/NodeBB)
[![Documentation Status](https://readthedocs.org/projects/nodebb/badge/?version=latest)](https://readthedocs.org/projects/nodebb/?badge=latest)
**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
* [Documentation & Installation Instructions](http://docs.nodebb.org)
* [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")
@@ -18,17 +21,17 @@
## Screenshots
[<img src="http://i.imgur.com/FLOUuIqb.png" />](http://i.imgur.com/FLOUuIq.png)&nbsp;[<img src="http://i.imgur.com/Ud1LrfIb.png" />](http://i.imgur.com/Ud1LrfI.png)&nbsp;[<img src="http://i.imgur.com/ZC8W39ab.png" />](http://i.imgur.com/ZC8W39a.png)&nbsp;[<img src="http://i.imgur.com/o90kVPib.png" />](http://i.imgur.com/o90kVPi.png)&nbsp;[<img src="http://i.imgur.com/AaRRrU2b.png" />](http://i.imgur.com/AaRRrU2.png)&nbsp;[<img src="http://i.imgur.com/LmHtPhob.png" />](http://i.imgur.com/LmHtPho.png)&nbsp;[<img src="http://i.imgur.com/paiJPJkb.jpg" />](http://i.imgur.com/paiJPJk.jpg)&nbsp;[<img src="http://i.imgur.com/ZfavPHDb.png" />](http://i.imgur.com/ZfavPHD.png)&nbsp;[<img src="http://i.imgur.com/8vc1Ytc.png" />](http://i.imgur.com/8vc1Ytc.png)
[<img src="http://i.imgur.com/FLOUuIqb.png" />](http://i.imgur.com/FLOUuIq.png)&nbsp;[<img src="http://i.imgur.com/Ud1LrfIb.png" />](http://i.imgur.com/Ud1LrfI.png)&nbsp;[<img src="http://i.imgur.com/ZC8W39ab.png" />](http://i.imgur.com/ZC8W39a.png)&nbsp;[<img src="http://i.imgur.com/o90kVPib.png" />](http://i.imgur.com/o90kVPi.png)&nbsp;[<img src="http://i.imgur.com/AaRRrU2b.png" />](http://i.imgur.com/AaRRrU2.png)&nbsp;[<img src="http://i.imgur.com/LmHtPhob.png" />](http://i.imgur.com/LmHtPho.png)&nbsp;[<img src="http://i.imgur.com/paiJPJkb.jpg" />](http://i.imgur.com/paiJPJk.jpg)&nbsp;[<img src="http://i.imgur.com/ZfavPHDb.png" />](http://i.imgur.com/ZfavPHD.png)&nbsp;[<img src="http://i.imgur.com/8OLssij.png" />](http://i.imgur.com/8OLssij.png)&nbsp;[<img src="http://i.imgur.com/JKOc0LZ.png"/>](http://i.imgur.com/JKOc0LZ.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)
* Our feature roadmap is hosted on the project wiki's [Version History / Roadmap](https://github.com/NodeBB/NodeBB/wiki/Version-History-%26-Roadmap)
* 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.
* If you know languages other than English you can help us translate NodeBB. We use [Transifex](https://www.transifex.com/projects/p/nodebb/) for internationalization.
* 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
@@ -36,7 +39,7 @@ Credit: [Convoe](http://www.convoe.com), [Kano](http://www.kano.me), [Manchester
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
* Redis, version 2.6 or greater **or** MongoDB, version 2.6 or greater
* nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB)
## Installation
@@ -56,4 +59,8 @@ It is important to ensure that your NodeBB and database servers are secured. Bea
## Upgrading NodeBB
Detailed upgrade instructions are listed in [Upgrading NodeBB](https://github.com/designcreateplay/NodeBB/wiki/Upgrading-NodeBB)
Detailed upgrade instructions are listed in [Upgrading NodeBB](https://docs.nodebb.org/en/latest/upgrading/index.html)
## License
NodeBB is licensed under the **GNU General Public License v3 (GPL-3)** (http://www.gnu.org/copyleft/gpl.html)

198
app.js
View File

@@ -1,6 +1,7 @@
/*
NodeBB - A forum powered by node in development by designcreateplay
Copyright (C) 2013 DesignCreatePlay Inc.
NodeBB - A better forum platform for the modern web
https://github.com/NodeBB/NodeBB/
Copyright (C) 2013-2014 NodeBB Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -16,7 +17,6 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
"use strict";
/*global require, global, process*/
@@ -25,6 +25,8 @@ nconf.argv().env();
var fs = require('fs'),
os = require('os'),
url = require('url'),
async = require('async'),
semver = require('semver'),
winston = require('winston'),
path = require('path'),
@@ -36,12 +38,12 @@ global.env = process.env.NODE_ENV || 'production';
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console, {
colorize: true
});
winston.add(winston.transports.File, {
filename: 'logs/error.log',
level: 'error'
colorize: true,
timestamp: function() {
var date = new Date();
return date.getDate() + '/' + (date.getMonth() + 1) + ' ' + date.toTimeString().substr(0,5) + ' [' + global.process.pid + ']';
},
level: global.env === 'production' ? 'info' : 'verbose'
});
// TODO: remove once https://github.com/flatiron/winston/issues/280 is fixed
@@ -57,21 +59,24 @@ if(os.platform() === 'linux') {
});
}
// Log GNU copyright info along with server info
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('');
if (!process.send) {
// If run using `node app`, log GNU copyright info along with server info
winston.info('NodeBB v' + pkg.version + ' Copyright (C) 2013-2014 NodeBB 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('');
}
// Alternate configuration file support
var configFile = __dirname + '/config.json',
var configFile = path.join(__dirname, '/config.json'),
configExists;
if (nconf.get('config')) {
configFile = path.resolve(__dirname, nconf.get('config'));
}
configExists = fs.existsSync(configFile);
if (!nconf.get('help') && !nconf.get('setup') && !nconf.get('install') && !nconf.get('upgrade') && !nconf.get('reset') && configExists) {
if (!nconf.get('setup') && !nconf.get('install') && !nconf.get('upgrade') && !nconf.get('reset') && configExists) {
start();
} else if (nconf.get('setup') || nconf.get('install') || !configExists) {
setup();
@@ -79,8 +84,6 @@ if (!nconf.get('help') && !nconf.get('setup') && !nconf.get('install') && !nconf
upgrade();
} else if (nconf.get('reset')) {
reset();
} else {
displayHelp();
}
function loadConfig() {
@@ -91,70 +94,125 @@ function loadConfig() {
nconf.defaults({
base_dir: __dirname,
themes_path: path.join(__dirname, 'node_modules'),
upload_url: '/uploads/',
views_dir: path.join(__dirname, 'public/templates')
});
if (!nconf.get('isCluster')) {
nconf.set('isPrimary', 'true');
nconf.set('isCluster', 'false');
}
// Ensure themes_path is a full filepath
nconf.set('themes_path', path.resolve(__dirname, nconf.get('themes_path')));
nconf.set('core_templates_path', path.join(__dirname, 'src/views'));
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') : '') : '';
// nconf defaults, if not set in config
if (!nconf.get('upload_path')) {
nconf.set('upload_path', '/public/uploads');
}
// Parse out the relative_url and other goodies from the configured URL
var urlObject = url.parse(nconf.get('url'));
var relativePath = urlObject.pathname !== '/' ? urlObject.pathname : '';
nconf.set('use_port', !!urlObject.port);
nconf.set('relative_path', relativePath);
nconf.set('port', urlObject.port || nconf.get('port') || nconf.get('PORT') || 4567);
nconf.set('upload_url', relativePath + '/uploads/');
winston.info('* using ' + nconf.get('database') +' store ' + storeLocation);
winston.info('* using themes stored in: ' + nconf.get('themes_path'));
if (nconf.get('isPrimary') === 'true') {
winston.info('Time: %s', (new Date()).toString());
winston.info('Initializing NodeBB v%s', pkg.version);
winston.verbose('* using configuration stored in: %s', configFile);
if (process.env.NODE_ENV === 'development') {
winston.info('Base Configuration OK.');
var host = nconf.get(nconf.get('database') + ':host'),
storeLocation = host ? 'at ' + host + (host.indexOf('/') === -1 ? ':' + nconf.get(nconf.get('database') + ':port') : '') : '';
winston.verbose('* using %s store %s', nconf.get('database'), storeLocation);
winston.verbose('* using themes stored in: %s', nconf.get('themes_path'));
}
var meta = require('./src/meta');
var webserver = require('./src/webserver');
require('./src/database').init(function(err) {
if (err) {
winston.error(err.stack);
process.exit();
}
var meta = require('./src/meta');
meta.configs.init(function () {
var templates = require('./public/src/templates'),
webserver = require('./src/webserver'),
var templates = require('templates.js'),
sockets = require('./src/socket.io'),
plugins = require('./src/plugins'),
upgrade = require('./src/upgrade')
meta = require('./src/meta');
upgrade = require('./src/upgrade');
templates.setGlobal('relative_path', nconf.get('relative_path'));
upgrade.check(function(schema_ok) {
if (schema_ok || nconf.get('check-schema') === false) {
webserver.init();
sockets.init(webserver.server);
plugins.init();
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'));
if (nconf.get('isPrimary') === 'true' && !nconf.get('jobsDisabled')) {
require('./src/notifications').init();
require('./src/user').startJobs();
}
plugins.ready(function() {
webserver.init();
async.waterfall([
async.apply(meta.themes.setupPaths),
async.apply(plugins.ready),
async.apply(meta.templates.compile),
async.apply(webserver.listen)
], function(err) {
if (err) {
winston.error(err.stack);
process.exit();
}
if (process.send) {
process.send({
action: 'ready'
});
}
});
process.on('SIGTERM', shutdown);
process.on('SIGINT', shutdown);
process.on('SIGHUP', restart);
process.on('message', function(message) {
switch(message.action) {
case 'reload':
meta.reload();
break;
case 'js-propagate':
meta.js.cache = message.cache;
meta.js.map = message.map;
meta.js.hash = message.hash;
winston.verbose('[cluster] Client-side javascript and mapping propagated to worker %s', process.pid);
break;
case 'css-propagate':
meta.css.cache = message.cache;
meta.css.acpCache = message.acpCache;
meta.css.hash = message.hash;
winston.verbose('[cluster] Stylesheets propagated to worker %s', process.pid);
break;
}
});
process.on('uncaughtException', function(err) {
winston.error(err.message);
winston.error(err.stack);
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');
winston.warn(' ./nodebb upgrade');
process.exit();
}
});
@@ -191,10 +249,12 @@ function setup() {
function upgrade() {
loadConfig();
var meta = require('./src/meta');
require('./src/database').init(function(err) {
meta.configs.init(function () {
if (err) {
winston.error(err.stack);
process.exit();
}
require('./src/meta').configs.init(function () {
require('./src/upgrade').upgrade();
});
});
@@ -209,8 +269,10 @@ function reset() {
process.exit();
}
if (nconf.get('themes')) {
if (nconf.get('theme')) {
resetThemes();
} else if (nconf.get('plugin')) {
resetPlugin(nconf.get('plugin'));
} else if (nconf.get('plugins')) {
resetPlugins();
} else if (nconf.get('widgets')) {
@@ -222,12 +284,16 @@ function reset() {
if (!err) {
winston.info('[reset] Reset complete.');
} else {
winston.error('[reset] Errors were encountered while resetting your forum settings: ' + err.message);
winston.error('[reset] Errors were encountered while resetting your forum settings: %s', err.message);
}
process.exit();
});
} else {
console.log('no match');
winston.warn('[reset] Nothing reset.');
winston.info('Use ./nodebb reset {theme|plugins|widgets|settings|all}');
winston.info(' or');
winston.info('Use ./nodebb reset plugin="nodebb-plugin-pluginName"');
process.exit();
}
});
}
@@ -260,6 +326,24 @@ function resetThemes(callback) {
});
}
function resetPlugin(pluginId) {
var db = require('./src/database');
db.setRemove('plugins:active', pluginId, function(err, result) {
if (err || result !== 1) {
winston.error('[reset] Could not disable plugin: %s', pluginId);
if (err) {
winston.error('[reset] Encountered error: %s', err.message);
} else {
winston.info('[reset] Perhaps it has already been disabled?');
}
} else {
winston.info('[reset] Plugin `%s` disabled', pluginId);
}
process.exit();
});
}
function resetPlugins(callback) {
var db = require('./src/database');
db.delete('plugins:active', function(err) {
@@ -287,6 +371,8 @@ function shutdown(code) {
winston.info('[app] Shutdown (SIGTERM/SIGINT) Initialised.');
require('./src/database').close();
winston.info('[app] Database connection closed.');
require('./src/webserver').server.close();
winston.info('[app] Web server closed to connections.');
winston.info('[app] Shutdown complete.');
process.exit(code || 0);
@@ -302,16 +388,4 @@ function restart() {
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)');
}
}

43
bcrypt.js Normal file
View File

@@ -0,0 +1,43 @@
'use strict';
var bcrypt = require('bcryptjs'),
async = require('async');
process.on('message', function(msg) {
if (msg.type === 'hash') {
hashPassword(msg.password, msg.rounds);
} else if (msg.type === 'compare') {
compare(msg.password, msg.hash);
}
});
function hashPassword(password, rounds) {
async.waterfall([
function(next) {
bcrypt.genSalt(parseInt(rounds, 10), next);
},
function(salt, next) {
bcrypt.hash(password, salt, next);
}
], function(err, hash) {
if (err) {
process.send({err: err.message});
return process.disconnect();
}
process.send({result: hash});
process.disconnect();
});
}
function compare(password, hash) {
bcrypt.compare(password, hash, function(err, res) {
if (err) {
process.send({err: err.message});
return process.disconnect();
}
process.send({result: res});
process.disconnect();
});
}

4
docs/.gitignore vendored
View File

@@ -1,4 +0,0 @@
*.sublime-build*
_build
_static
_templates

View File

@@ -1,177 +0,0 @@
# 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."

View File

@@ -1,17 +0,0 @@
"""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

View File

@@ -1,19 +0,0 @@
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="{{ pathto(master_doc) }}">Docs</a> &raquo;</li>
{% for doc in parents %}
<li><a href="{{ doc.link|e }}">{{ doc.title }}</a> &raquo;</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>

View File

@@ -1,32 +0,0 @@
<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 %}&copy; <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
{%- else %}
{% trans copyright=copyright|e %}&copy; 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>

View File

@@ -1,160 +0,0 @@
{# TEMPLATE VAR SETTINGS #}
{%- set url_root = pathto('', 1) %}
{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
{%- if not embedded and docstitle %}
{%- set titlesuffix = " &mdash; "|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>
&nbsp;
</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>

View File

@@ -1,205 +0,0 @@
{#
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 ' &raquo;' 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 = " &mdash; "|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 %}&copy; <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
{%- else %}
{% trans copyright=copyright|e %}&copy; 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>

View File

@@ -1,50 +0,0 @@
{#
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 %}

View File

@@ -1,7 +0,0 @@
<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>

View File

@@ -1 +0,0 @@
.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}}

File diff suppressed because one or more lines are too long

View File

@@ -1,414 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="fontawesomeregular" horiz-adv-x="1536" >
<font-face units-per-em="1792" ascent="1536" descent="-256" />
<missing-glyph horiz-adv-x="448" />
<glyph unicode=" " horiz-adv-x="448" />
<glyph unicode="&#x09;" horiz-adv-x="448" />
<glyph unicode="&#xa0;" horiz-adv-x="448" />
<glyph unicode="&#xa8;" horiz-adv-x="1792" />
<glyph unicode="&#xa9;" horiz-adv-x="1792" />
<glyph unicode="&#xae;" horiz-adv-x="1792" />
<glyph unicode="&#xb4;" horiz-adv-x="1792" />
<glyph unicode="&#xc6;" horiz-adv-x="1792" />
<glyph unicode="&#x2000;" horiz-adv-x="768" />
<glyph unicode="&#x2001;" />
<glyph unicode="&#x2002;" horiz-adv-x="768" />
<glyph unicode="&#x2003;" />
<glyph unicode="&#x2004;" horiz-adv-x="512" />
<glyph unicode="&#x2005;" horiz-adv-x="384" />
<glyph unicode="&#x2006;" horiz-adv-x="256" />
<glyph unicode="&#x2007;" horiz-adv-x="256" />
<glyph unicode="&#x2008;" horiz-adv-x="192" />
<glyph unicode="&#x2009;" horiz-adv-x="307" />
<glyph unicode="&#x200a;" horiz-adv-x="85" />
<glyph unicode="&#x202f;" horiz-adv-x="307" />
<glyph unicode="&#x205f;" horiz-adv-x="384" />
<glyph unicode="&#x2122;" horiz-adv-x="1792" />
<glyph unicode="&#x221e;" horiz-adv-x="1792" />
<glyph unicode="&#x2260;" horiz-adv-x="1792" />
<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
<glyph unicode="&#xf016;" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " />
<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 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" />
<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 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="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 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="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 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" />
<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
<glyph unicode="&#xf02b;" d="M448 1088q0 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.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 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.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" />
<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" />
<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" />
<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" />
<glyph unicode="&#xf035;" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" />
<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 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="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -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.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -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.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -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.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
<glyph unicode="&#xf053;" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
<glyph unicode="&#xf054;" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-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="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 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.5 t103 -385.5z" />
<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 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="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 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="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 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="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-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.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -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="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-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 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -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 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf077;" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
<glyph unicode="&#xf078;" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -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.5zM1536 0q0 -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.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 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.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
<glyph unicode="&#xf082;" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 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.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 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="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -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.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-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="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 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.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 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="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
<glyph unicode="&#xf09a;" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" />
<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 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" />
<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 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" />
<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 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" />
<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 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" />
<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-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 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
<glyph unicode="&#xf0c8;" d="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="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
<glyph unicode="&#xf0d4;" d="M678 -57q0 -38 -10 -71h-380q-95 0 -171.5 56.5t-103.5 147.5q24 45 69 77.5t100 49.5t107 24t107 7q32 0 49 -2q6 -4 30.5 -21t33 -23t31 -23t32 -25.5t27.5 -25.5t26.5 -29.5t21 -30.5t17.5 -34.5t9.5 -36t4.5 -40.5zM385 294q-234 -7 -385 -85v433q103 -118 273 -118 q32 0 70 5q-21 -61 -21 -86q0 -67 63 -149zM558 805q0 -100 -43.5 -160.5t-140.5 -60.5q-51 0 -97 26t-78 67.5t-56 93.5t-35.5 104t-11.5 99q0 96 51.5 165t144.5 69q66 0 119 -41t84 -104t47 -130t16 -128zM1536 896v-736q0 -119 -84.5 -203.5t-203.5 -84.5h-468 q39 73 39 157q0 66 -22 122.5t-55.5 93t-72 71t-72 59.5t-55.5 54.5t-22 59.5q0 36 23 68t56 61.5t65.5 64.5t55.5 93t23 131t-26.5 145.5t-75.5 118.5q-6 6 -14 11t-12.5 7.5t-10 9.5t-10.5 17h135l135 64h-437q-138 0 -244.5 -38.5t-182.5 -133.5q0 126 81 213t207 87h960 q119 0 203.5 -84.5t84.5 -203.5v-96h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" />
<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M876 71q0 21 -4.5 40.5t-9.5 36t-17.5 34.5t-21 30.5t-26.5 29.5t-27.5 25.5t-32 25.5t-31 23t-33 23t-30.5 21q-17 2 -50 2q-54 0 -106 -7t-108 -25t-98 -46t-69 -75t-27 -107q0 -68 35.5 -121.5t93 -84t120.5 -45.5t127 -15q59 0 112.5 12.5t100.5 39t74.5 73.5 t27.5 110zM756 933q0 60 -16.5 127.5t-47 130.5t-84 104t-119.5 41q-93 0 -144 -69t-51 -165q0 -47 11.5 -99t35.5 -104t56 -93.5t78 -67.5t97 -26q97 0 140.5 60.5t43.5 160.5zM625 1408h437l-135 -79h-135q71 -45 110 -126t39 -169q0 -74 -23 -131.5t-56 -92.5t-66 -64.5 t-56 -61t-23 -67.5q0 -26 16.5 -51t43 -48t58.5 -48t64 -55.5t58.5 -66t43 -85t16.5 -106.5q0 -160 -140 -282q-152 -131 -420 -131q-59 0 -119.5 10t-122 33.5t-108.5 58t-77 89t-30 121.5q0 61 37 135q32 64 96 110.5t145 71t155 36t150 13.5q-64 83 -64 149q0 12 2 23.5 t5 19.5t8 21.5t7 21.5q-40 -5 -70 -5q-149 0 -255.5 98t-106.5 246q0 140 95 250.5t234 141.5q94 20 187 20zM1664 1152v-128h-256v-256h-128v256h-256v128h256v256h128v-256h256z" />
<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
<glyph unicode="&#xf0e1;" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 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.5zM576 832q0 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.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 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.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 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.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
<glyph unicode="&#xf0f3;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1664 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5 q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf0f6;" horiz-adv-x="1280" d="M1024 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1024 608v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280z M768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z" />
<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 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.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -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="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -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="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
<glyph unicode="&#xf10c;" d="M768 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.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
<glyph unicode="&#xf110;" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -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.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" />
<glyph unicode="&#xf111;" d="M1536 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="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
<glyph unicode="&#xf113;" 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="&#xf114;" 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="&#xf115;" 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="&#xf116;" horiz-adv-x="1792" />
<glyph unicode="&#xf117;" horiz-adv-x="1792" />
<glyph unicode="&#xf118;" 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="&#xf119;" 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="&#xf11a;" 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" />
<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 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.5zM1664 640q0 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.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
<glyph unicode="&#xf129;" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
<glyph unicode="&#xf12b;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
<glyph unicode="&#xf12c;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf133;" 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="&#xf134;" 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="&#xf135;" 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="&#xf136;" 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="&#xf137;" 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="&#xf138;" 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="&#xf139;" 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" />
<glyph unicode="&#xf13a;" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-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="&#xf13b;" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
<glyph unicode="&#xf140;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 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" />
<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf142;" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf143;" d="M512 256q0 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.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-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="&#xf144;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-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 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
<glyph unicode="&#xf146;" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 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.5 t84.5 -203.5z" />
<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-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="&#xf148;" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
<glyph unicode="&#xf14a;" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
<glyph unicode="&#xf14b;" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-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="&#xf14c;" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-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="&#xf14d;" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 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="&#xf14e;" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf150;" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 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.5zM1536 1120 v-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="&#xf151;" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 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.5zM1536 1120v-960 q0 -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="&#xf152;" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-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="&#xf153;" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
<glyph unicode="&#xf155;" 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="&#xf156;" 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="&#xf157;" 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="&#xf158;" 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="&#xf159;" 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="&#xf15a;" 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="&#xf15b;" 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" />
<glyph unicode="&#xf15c;" horiz-adv-x="1280" d="M1024 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1024 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28 t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
<glyph unicode="&#xf162;" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
<glyph unicode="&#xf163;" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
<glyph unicode="&#xf166;" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-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="&#xf167;" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
<glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 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="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
<glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
<glyph unicode="&#xf16d;" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
<glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-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.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
<glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 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="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
<glyph unicode="&#xf172;" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-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="&#xf173;" horiz-adv-x="1024" d="M390 1408h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170v217q91 30 155 84q64 55 103 132q39 78 54 196z " />
<glyph unicode="&#xf174;" d="M1123 127v181q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49zM1536 1120 v-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="&#xf175;" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
<glyph unicode="&#xf176;" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
<glyph unicode="&#xf17c;" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
<glyph unicode="&#xf17d;" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.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="&#xf17e;" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
<glyph unicode="&#xf180;" horiz-adv-x="1664" d="M1483 512l-587 -587q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128t53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41 l619 619l2 -3q53 -53 53 -128t-53 -128zM1406 1138l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15v0q-4 0 -6 1q-18 2 -30 14l-407 408q-14 15 -14 36t14 35l121 120q13 15 35 15t36 -15l252 -252l574 575q15 15 36 15t36 -15z" />
<glyph unicode="&#xf181;" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
<glyph unicode="&#xf184;" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
<glyph unicode="&#xf186;" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
<glyph unicode="&#xf188;" 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="&#xf189;" 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="&#xf18a;" 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="&#xf18b;" 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="&#xf18c;" 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="&#xf18d;" 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="&#xf18e;" 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="&#xf190;" 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="&#xf191;" 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="&#xf192;" 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="&#xf193;" 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="&#xf194;" 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="&#xf195;" 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="&#xf196;" 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="&#xf197;" horiz-adv-x="1792" />
<glyph unicode="&#xf198;" horiz-adv-x="1792" />
<glyph unicode="&#xf199;" horiz-adv-x="1792" />
<glyph unicode="&#xf19a;" horiz-adv-x="1792" />
<glyph unicode="&#xf19b;" horiz-adv-x="1792" />
<glyph unicode="&#xf19c;" horiz-adv-x="1792" />
<glyph unicode="&#xf19d;" horiz-adv-x="1792" />
<glyph unicode="&#xf19e;" horiz-adv-x="1792" />
<glyph unicode="&#xf500;" horiz-adv-x="1792" />
</font>
</defs></svg>

Before

Width:  |  Height:  |  Size: 197 KiB

View File

@@ -1,47 +0,0 @@
$( 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
};
}($));

View File

@@ -1,8 +0,0 @@
[theme]
inherit = basic
stylesheet = css/theme.css
[options]
typekit_id = hiw1hhg
analytics_id =
sticky_navigation = False

View File

@@ -1,37 +0,0 @@
{% 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 %}

View File

@@ -1,140 +0,0 @@
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)

View File

@@ -1,45 +0,0 @@
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)

View File

@@ -1,33 +0,0 @@
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.

View File

@@ -1,258 +0,0 @@
# -*- 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

View File

@@ -1,39 +0,0 @@
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).

View File

@@ -1,19 +0,0 @@
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.

View File

@@ -1,126 +0,0 @@
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>`).

View File

@@ -1,9 +0,0 @@
**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).

View File

@@ -1,16 +0,0 @@
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>`

View File

@@ -1,84 +0,0 @@
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 youre 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.**

View File

@@ -1,59 +0,0 @@
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!

View File

@@ -1,37 +0,0 @@
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;
}
}

View File

@@ -1,76 +0,0 @@
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.

View File

@@ -1,11 +0,0 @@
Frequently Asked Questions
==========================
testing
testing
-------
testing

View File

@@ -1,50 +0,0 @@
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 :)

View File

@@ -1,34 +0,0 @@
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.

View File

@@ -1,125 +0,0 @@
.. 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
Plugin System
-------------
.. toctree::
:maxdepth: 2
plugins/create
plugins/hooks
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`

View File

@@ -1,21 +0,0 @@
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)

View File

@@ -1,75 +0,0 @@
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

View File

@@ -1,47 +0,0 @@
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``

View File

@@ -1,75 +0,0 @@
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

View File

@@ -1,47 +0,0 @@
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``

View File

@@ -1,25 +0,0 @@
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)

View File

@@ -1,177 +0,0 @@
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>`

View File

@@ -1,133 +0,0 @@
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>`.

View File

@@ -1,58 +0,0 @@
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>`.

View File

@@ -1,82 +0,0 @@
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.

View File

@@ -1,244 +0,0 @@
@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

View File

@@ -1,121 +0,0 @@
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.

View File

@@ -1,193 +0,0 @@
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.

View File

@@ -1,27 +0,0 @@
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
-------

View File

@@ -1,45 +0,0 @@
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

View File

@@ -1,61 +0,0 @@
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"
}

View File

@@ -1,194 +0,0 @@
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);
});

View File

@@ -1,148 +0,0 @@
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.

View File

@@ -1,78 +0,0 @@
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.

View File

@@ -2,7 +2,7 @@
{
"name": "Announcements",
"description": "Announcements regarding our community",
"bgColor": "#0059B2",
"bgColor": "#fda34b",
"color": "#fff",
"icon" : "fa-bullhorn",
"order": 1
@@ -10,89 +10,25 @@
{
"name": "General Discussion",
"description": "A place to talk about whateeeever you want",
"bgColor": "#0059B2",
"bgColor": "#59b3d0",
"color": "#fff",
"icon" : "fa-comment",
"icon" : "fa-comments-o",
"order": 2
},
{
"name": "NodeBB Development",
"description": "NodeBB development news and announcements",
"bgColor": "#0059B2",
"color": "#fff",
"icon" : "fa-github",
"order": 3
},
{
"name": "Blogs",
"description": "Blog posts from individual members",
"bgColor": "#0059B2",
"bgColor": "#86ba4b",
"color": "#fff",
"icon" : "fa-pencil",
"icon" : "fa-newspaper-o",
"order": 4
},
{
"name": "Feature Requests",
"description": "Got a feature request you'd like to see? Give us a shout here.",
"bgColor": "#ab1290",
"name": "Comments & Feedback",
"description": "Got a question? Ask away!",
"bgColor": "#e95c5a",
"color": "#fff",
"icon" : "fa-lightbulb-o",
"order": 5
},
{
"name": "Bug Reports",
"description": "Having trouble with NodeBB? Let us know...",
"bgColor": "#ab1290",
"color": "#fff",
"icon" : "fa-cogs",
"order": 6
},
{
"name": "NodeBB Plugins",
"description": "Enhance your NodeBB with plugins!",
"bgColor": "#ab1290",
"color": "#fff",
"icon" : "fa-plus-square",
"order": 7
},
{
"name": "NodeBB Link Exchange",
"description": "Link exchange",
"bgColor": "#ab1290",
"color": "#fff",
"icon" : "fa-exchange",
"order": 8
},
{
"name": "News",
"description": "News from around the world",
"bgColor": "#004C66",
"color": "#fff",
"icon" : "fa-globe",
"order": 9
},
{
"name": "Movies",
"description": "Discuss the latest movies here",
"bgColor": "#004C66",
"color": "#fff",
"icon" : "fa-film",
"order": 10
},
{
"name": "Games",
"description": "Discuss the latest games here",
"bgColor": "#004C66",
"color": "#fff",
"icon" : "fa-crosshairs",
"order": 11
},
{
"name": "Random",
"description": "Anything and (almost) everything welcome!",
"bgColor": "#004C66",
"color": "#fff",
"icon" : "fa-beer",
"order": 12
"icon" : "fa-question",
"order": 3
}
]

View File

@@ -3,17 +3,29 @@
"field": "title",
"value": "NodeBB"
},
{
"field": "showSiteTitle",
"value": "1"
},
{
"field": "postDelay",
"value": 10
},
{
"field": "minimumPostLength",
"value": 8
"field": "initialPostDelay",
"value": 10
},
{
"field": "allowGuestPosting",
"value": 0
"field": "newbiePostDelay",
"value": 120
},
{
"field": "newbiePostDelayThreshold",
"value": 3
},
{
"field": "minimumPostLength",
"value": 8
},
{
"field": "allowGuestSearching",
@@ -31,6 +43,10 @@
"field": "allowLocalLogin",
"value": 1
},
{
"field": "allowAccountDelete",
"value": 1
},
{
"field": "allowFileUploads",
"value": 0
@@ -68,7 +84,11 @@
"value": 256
},
{
"field": "chatMessagesToDisplay",
"value": 50
"field": "profileImageDimension",
"value": 128
},
{
"field": "requireEmailConfirmation",
"value": 0
}
]
]

View File

@@ -12,7 +12,7 @@ function success(err, config, callback) {
return callback(new Error('aborted'));
}
var database = (config.redis || config.mongo || config.level) ? config.secondary_database : config.database;
var database = (config.redis || config.mongo) ? config.secondary_database : config.database;
function dbQuestionsSuccess(err, databaseConfig) {
if (!databaseConfig) {
@@ -39,15 +39,11 @@ function success(err, config, callback) {
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));
var allQuestions = questions.redis.concat(questions.mongo);
for(var x=0;x<allQuestions.length;x++) {
delete config[allQuestions[x].name];
}
@@ -67,12 +63,6 @@ function success(err, config, callback) {
} 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));
}
@@ -91,19 +81,20 @@ function getSecondaryDatabaseModules(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) {
process.stdout.write('\n');
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) {
winston.info('Now configuring ' + config.secondary_database + ' database:');
getSecondaryDatabaseModules(config, next);
} else {
next(err, config);

324
loader.js
View File

@@ -1,118 +1,264 @@
"use strict";
'use strict';
var nconf = require('nconf'),
fs = require('fs'),
url = require('url'),
path = require('path'),
fork = require('child_process').fork,
async = require('async'),
logrotate = require('logrotate-stream'),
pkg = require('./package.json'),
pidFilePath = __dirname + '/pidfile',
start = function() {
var fork = require('child_process').fork,
// output = fs.openSync(__dirname + '/logs/output.log', 'a'),
output = fs.createWriteStream(__dirname + '/logs/output.log', {
flags: 'a',
encoding: 'utf-8'
}),
nbb_start = function() {
var silent = nconf.get('daemon') !== false;
output = logrotate({ file: __dirname + '/logs/output.log', size: '1m', keep: 3, compress: true }),
silent = process.env.NODE_ENV !== 'development',
numProcs,
workers = [],
if (timesStarted > 3) {
console.log('\n[loader] Experienced three start attempts in 10 seconds, most likely an error on startup. Halting.');
return nbb_stop();
Loader = {
timesStarted: 0,
js: {
cache: undefined,
map: undefined
},
css: {
cache: undefined,
acpCache: undefined
}
};
Loader.init = function(callback) {
if (silent) {
console.log = function(value) {
output.write(value + '\n');
};
}
process.on('SIGHUP', Loader.restart);
process.on('SIGUSR2', Loader.reload);
process.on('SIGTERM', Loader.stop);
callback();
};
Loader.displayStartupMessages = function(callback) {
console.log('');
console.log('NodeBB v' + pkg.version + ' Copyright (C) 2013-2014 NodeBB Inc.');
console.log('This program comes with ABSOLUTELY NO WARRANTY.');
console.log('This is free software, and you are welcome to redistribute it under certain conditions.');
console.log('For the full license, please visit: http://www.gnu.org/copyleft/gpl.html');
console.log('');
callback();
};
Loader.addWorkerEvents = function(worker) {
worker.on('exit', function(code, signal) {
if (code !== 0) {
if (Loader.timesStarted < numProcs*3) {
Loader.timesStarted++;
if (Loader.crashTimer) {
clearTimeout(Loader.crashTimer);
}
Loader.crashTimer = setTimeout(function() {
Loader.timesStarted = 0;
}, 10000);
} else {
console.log(numProcs*3 + ' restarts in 10 seconds, most likely an error on startup. Halting.');
process.exit();
}
}
timesStarted++;
if (startTimer) {
clearTimeout(startTimer);
}
startTimer = setTimeout(resetTimer, 1000*10);
console.log('[cluster] Child Process (' + worker.pid + ') has exited (code: ' + code + ', signal: ' + signal +')');
if (!(worker.suicide || code === 0)) {
console.log('[cluster] Spinning up another process...');
nbb = fork('./app', process.argv.slice(2), {
env: {
'NODE_ENV': process.env.NODE_ENV
},
silent: silent
});
forkWorker(worker.index, worker.isPrimary);
}
});
if (silent) {
nbb.stdout.pipe(output);
nbb.stderr.pipe(output);
}
nbb.on('message', function(message) {
if (message && typeof message === 'object' && message.action) {
if (message.action === 'restart') {
nbb_restart();
} else if (message.action === 'ready' && silent) {
// Output bind_address
process.stdout.write('\nNodeBB listening on ' + message.bind_address + '\n\n');
// Daemonize and record new pid
require('daemon')({
stdout: output
});
fs.writeFile(__dirname + '/pidfile', process.pid);
}
worker.on('message', function(message) {
if (message && typeof message === 'object' && message.action) {
switch (message.action) {
case 'ready':
if (Loader.js.cache) {
worker.send({
action: 'js-propagate',
cache: Loader.js.cache,
map: Loader.js.map,
hash: Loader.js.hash
});
}
});
nbb.on('exit', function(code, signal) {
if (code) {
nbb_start();
} else {
nbb_stop();
if (Loader.css.cache) {
worker.send({
action: 'css-propagate',
cache: Loader.css.cache,
acpCache: Loader.css.acpCache,
hash: Loader.css.hash
});
}
});
},
nbb_stop = function() {
if (startTimer) {
clearTimeout(startTimer);
}
break;
case 'restart':
console.log('[cluster] Restarting...');
Loader.restart();
break;
case 'reload':
console.log('[cluster] Reloading...');
Loader.reload();
break;
case 'js-propagate':
Loader.js.cache = message.cache;
Loader.js.map = message.map;
Loader.js.hash = message.hash;
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;
Loader.notifyWorkers({
action: 'js-propagate',
cache: message.cache,
map: message.map,
hash: message.hash
}, worker.pid);
break;
case 'css-propagate':
Loader.css.cache = message.cache;
Loader.css.acpCache = message.acpCache;
Loader.css.hash = message.hash;
process.on('SIGINT', nbb_stop);
process.on('SIGTERM', nbb_stop);
process.on('SIGHUP', nbb_restart);
Loader.notifyWorkers({
action: 'css-propagate',
cache: message.cache,
acpCache: message.acpCache,
hash: message.hash
}, worker.pid);
break;
}
}
});
};
nbb_start();
},
nbb;
Loader.start = function(callback) {
numProcs = getPorts().length;
console.log('Clustering enabled: Spinning up ' + numProcs + ' process(es).\n');
nconf.argv();
for (var x=0; x<numProcs; ++x) {
forkWorker(x, x === 0);
}
if (callback) {
callback();
}
};
function forkWorker(index, isPrimary) {
var ports = getPorts();
if(!ports[index]) {
return console.log('[cluster] invalid port for worker : ' + index + ' ports: ' + ports.length);
}
process.env.isPrimary = isPrimary;
process.env.isCluster = true;
process.env.port = ports[index];
var worker = fork('app.js', [], {
silent: silent,
env: process.env
});
worker.index = index;
worker.isPrimary = isPrimary;
workers[index] = worker;
Loader.addWorkerEvents(worker);
if (silent) {
var output = logrotate({ file: __dirname + '/logs/output.log', size: '1m', keep: 3, compress: true });
worker.stdout.pipe(output);
worker.stderr.pipe(output);
}
}
function getPorts() {
var urlObject = url.parse(nconf.get('url'));
var port = nconf.get('port') || nconf.get('PORT') || urlObject.port || 4567;
if (!Array.isArray(port)) {
port = [port];
}
return port;
}
Loader.restart = function() {
killWorkers();
Loader.start();
};
Loader.reload = function() {
workers.forEach(function(worker) {
worker.send({
action: 'reload'
});
});
};
Loader.stop = function() {
killWorkers();
// Clean up the pidfile
fs.unlinkSync(__dirname + '/pidfile');
};
function killWorkers() {
workers.forEach(function(worker) {
worker.suicide = true;
worker.kill();
});
}
Loader.notifyWorkers = function(msg, worker_pid) {
worker_pid = parseInt(worker_pid, 10);
workers.forEach(function(worker) {
if (parseInt(worker.pid, 10) !== worker_pid) {
try {
worker.send(msg);
} catch (e) {
console.log('[cluster/notifyWorkers] Failed to reach pid ' + worker_pid);
}
}
});
};
nconf.argv().file({
file: path.join(__dirname, '/config.json')
});
// 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);
console.log('\n Error: Another NodeBB is already running!');
process.exit();
} catch (e) {
fs.unlinkSync(pidFilePath);
}
}
start();
} else {
start();
require('daemon')({
stdout: process.stdout,
stderr: process.stderr
});
fs.writeFile(__dirname + '/pidfile', process.pid);
}
async.series([
Loader.init,
Loader.displayStartupMessages,
Loader.start
], function(err) {
if (err) {
console.log('[loader] Error during startup: ' + err.message);
}
});

View File

@@ -1,58 +1,80 @@
"use strict";
var uglifyjs = require('uglify-js'),
less = require('less'),
async = require('async'),
fs = require('fs'),
path = require('path'),
crypto = require('crypto'),
Minifier = {
js: {},
css: {}
js: {}
};
/* 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;
}, ''));
}
Minifier.js.minify = function (scripts, minify, callback) {
scripts = scripts.filter(function(file) {
return fs.existsSync(file);
});
if (minify) {
minifyScripts(scripts, function() {
callback.apply(this, arguments);
});
} else {
concatenateScripts(scripts, callback);
}
};
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);
case 'js':
Minifier.js.minify(payload.scripts, payload.minify, function(minified) {
process.send({
type: 'end',
minified: minified
});
});
break;
}
})
});
function minifyScripts(scripts, callback) {
try {
var minified = uglifyjs.minify(scripts, {
compress: false
}),
hasher = crypto.createHash('md5'),
hash;
// Calculate js hash
hasher.update(minified.code, 'utf-8');
hash = hasher.digest('hex');
process.send({
type: 'hash',
payload: hash.slice(0, 8)
});
callback(minified.code);
} catch(err) {
process.send({
type: 'error',
payload: err.message
});
}
}
function concatenateScripts(scripts, callback) {
async.map(scripts, fs.readFile, function(err, scripts) {
if (err) {
process.send({
type: 'error',
payload: err
});
}
scripts = scripts.join(require('os').EOL + ';');
callback(scripts);
});
}

39
nodebb
View File

@@ -12,10 +12,11 @@ fi
function pidExists() {
if [ -e "pidfile" ];
then
kill -s 0 $(cat pidfile);
if [ !$? ];
if ps -p $(cat pidfile) > /dev/null
then return 1;
else return 0;
else
rm ./pidfile;
return 0;
fi
else
return 0;
@@ -28,13 +29,8 @@ case "$1" in
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 "$@"
"$node" loader "$@"
;;
stop)
@@ -48,7 +44,7 @@ case "$1" in
fi
;;
reload|restart)
restart)
pidExists;
if [ 0 -eq $? ];
then
@@ -59,6 +55,17 @@ case "$1" in
fi
;;
reload)
pidExists;
if [ 0 -eq $? ];
then
echo "NodeBB could not be reloaded, as a running instance could not be found.";
else
echo "Reloading NodeBB.";
kill -12 $(cat pidfile);
fi
;;
status)
pidExists;
if [ 0 -eq $? ];
@@ -80,11 +87,11 @@ case "$1" in
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
# 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 nodebb-widget-essentials
"$node" app --upgrade
touch package.json
echo -e "\n\e[00;32mNodeBB Dependencies up-to-date!\e[00;00m";
;;
setup)
@@ -98,15 +105,15 @@ case "$1" in
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"
echo "More Information: https://docs.nodebb.org/en/latest/running/index.html"
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 "More Information: https://docs.nodebb.org/en/latest/running/index.html"
NODE_ENV=development supervisor -q --ignore public/templates,public/nodebb.min.js,public/nodebb.min.js.map --extensions 'node|js|tpl|less' -- app "$@"
;;
*)

2610
npm-shrinkwrap.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -2,11 +2,11 @@
"name": "nodebb",
"license": "GPLv3 or later",
"description": "NodeBB Forum",
"version": "0.4.2",
"version": "0.6.0",
"homepage": "http://www.nodebb.org",
"repository": {
"type": "git",
"url": "https://github.com/designcreateplay/NodeBB/"
"url": "https://github.com/NodeBB/NodeBB/"
},
"main": "app.js",
"scripts": {
@@ -15,51 +15,65 @@
"test": "mocha ./tests -t 10000"
},
"dependencies": {
"express": "3.2.0",
"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",
"marked": "0.2.8",
"async": "~0.2.8",
"gm": "1.14.2",
"gravatar": "1.0.6",
"nconf": "~0.6.7",
"sitemap": "~0.7.1",
"winston": "~0.7.2",
"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",
"async": "~0.9.0",
"bcryptjs": "~2.1.0",
"body-parser": "^1.9.0",
"compression": "^1.1.0",
"connect-ensure-login": "^0.1.1",
"connect-flash": "^0.1.1",
"connect-multiparty": "^1.2.4",
"cookie-parser": "^1.3.3",
"cron": "^1.0.5",
"csurf": "^1.6.1",
"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.19",
"nodebb-theme-lavender": "~0.0.25",
"express": "^4.9.5",
"express-session": "^1.8.2",
"gm": "1.17.0",
"gravatar": "^1.1.0",
"heapdump": "^0.3.0",
"less": "^2.0.0",
"logrotate-stream": "^0.2.3",
"mkdirp": "~0.5.0",
"morgan": "^1.3.2",
"nconf": "~0.7.1",
"nodebb-plugin-dbsearch": "^0.1.0",
"nodebb-plugin-markdown": "^0.8.0",
"nodebb-plugin-mentions": "^0.7.0",
"nodebb-plugin-soundpack-default": "~0.1.1",
"nodebb-plugin-dbsearch": "0.0.9"
"nodebb-plugin-spam-be-gone": "^0.4.0",
"nodebb-theme-lavender": "^0.2.0",
"nodebb-theme-vanilla": "^0.2.0",
"nodebb-widget-essentials": "~0.2.0",
"npm": "^2.1.4",
"passport": "^0.2.1",
"passport-local": "1.0.0",
"prompt": "^0.2.14",
"request": "^2.44.0",
"rimraf": "~2.2.6",
"rss": "^1.0.0",
"semver": "^4.0.3",
"serve-favicon": "^2.1.5",
"sitemap": "^0.7.4",
"socket.io": "^1.2.1",
"socket.io-client": "^1.2.1",
"socket.io-redis": "^0.1.3",
"socketio-wildcard": "~0.1.1",
"string": "^3.0.0",
"templates.js": "0.1.9",
"uglify-js": "git+https://github.com/julianlam/UglifyJS2.git",
"underscore": "~1.7.0",
"validator": "~3.26.0",
"winston": "^0.8.1",
"xregexp": "~2.0.0"
},
"devDependencies": {
"mocha": "~1.13.0"
},
"bugs": {
"url": "https://github.com/designcreateplay/NodeBB/issues"
"url": "https://github.com/NodeBB/NodeBB/issues"
},
"engines": {
"node": ">=0.8"
"node": ">=0.10"
},
"maintainers": [
{

BIN
public/images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -1,7 +1,8 @@
{
"new_topic_button": "موضوع جديد",
"no_topics": "<strong>لا توجد مواضيع في هذه الفئة</strong>لماذا لا تحاول نشر واحد؟<br />",
"browsing": "يتصفح",
"no_topics": "<strong>لا توجد مواضيع في هذه الفئة</strong>لم لا تحاول إنشاء موضوع؟<br />",
"browsing": "تصفح",
"no_replies": "لم يرد أحد",
"share_this_category": "Share this category"
"share_this_category": "انشر هذه الفئة",
"ignore": "تجاهل"
}

View File

@@ -0,0 +1,23 @@
{
"password-reset-requested": "تم طلب إعادة تعيين كلمة السر - %1!",
"welcome-to": "مرحبًا بك في %1",
"greeting_no_name": "مرحبًا",
"greeting_with_name": "مرحبًا بك يا %1",
"welcome.text1": "شكرًا على تسجيلك في %1!",
"welcome.text2": "لتفعيل حسابك، نحتاج إلى التأكد من صحة عنوان البريد الإلكتروني الذي تسجلت به.",
"welcome.cta": "انقر هنا لتفعيل عنوان بريدك الإلكتروني",
"reset.text1": "لقد توصلنا بطلب إعادة تعيين كلمة السرالخاصة بك، ربما لكونك قد نسيتها, إن لم يكن الأمر كذلك، المرجو تجاهل هذه الرسالة.",
"reset.text2": "لمواصلة طلب إعاة تعيين كلمة السر، المرجو تتبع هذا الرابط.",
"reset.cta": "انقر هنا لإعادة تعيين كلمة السر الخاصة بك.",
"digest.notifications": "لديك تنبيهات غير مقروءة من طرف %1:",
"digest.latest_topics": "آخر المستجدات من %1",
"digest.cta": "انقر هنا لمشاهدة %1",
"digest.unsub.info": "تم إرسال هذا الإشعار بآخر المستجدات وفقا لخيارات تسجيلكم.",
"digest.no_topics": "ليس هناك مواضيع نشيطة في %1 الماضي",
"notif.chat.subject": "هناك محادثة جديدة من %1",
"notif.chat.cta": "انقر هنا لمتابعة المحادثة",
"notif.chat.unsub.info": "تم إرسال هذا الإشعار بوجودة محادثة جديدة وفقا لخيارات تسجيلك.",
"test.text1": "هذه رسالة تجريبية للتأكد من صحة إعدادت الرسائل الإلكترونية في منتدى NodeBB خاصتك.",
"unsub.cta": "انقر هنا لتغيير تلك الإعدادات",
"closing": "شكرًا لك!"
}

View File

@@ -1,49 +1,67 @@
{
"invalid-data": "Invalid Data",
"not-logged-in": "You don't seem to be logged in.",
"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!"
"invalid-data": "بيانات غير صالحة",
"not-logged-in": "لم تقم بتسجيل الدخول",
"account-locked": "تم إقفال حسابكم مؤقتًا.",
"search-requires-login": "البحث في المنتدى يستلزم توفرك على حساب! المرجو تسجيل دخولك أو إنشاء حساب!",
"invalid-cid": "قائمة غير موجودة",
"invalid-tid": "موضوع غير متواجد",
"invalid-pid": "رد غير موجود",
"invalid-uid": "مستخدم غير موجود",
"invalid-username": "اسم المستخدم غير مقبول",
"invalid-email": "البريد الاكتروني غير مقبول",
"invalid-title": "عنوان غير صحيح",
"invalid-user-data": "بيانات المستخدم غير صحيحة",
"invalid-password": "كلمة السر غير مقبولة",
"invalid-username-or-password": "المرجود تحديد اسم مستخدم و كلمة مرور",
"invalid-search-term": "كلمة البحث غير صحيحة",
"invalid-pagination-value": "رقم الصفحة غير موجود",
"username-taken": "اسم المستخدم مأخوذ",
"email-taken": "البريد الالكتروني مأخوذ",
"email-not-confirmed": "عنوان بريدك الإلكتروني غير مفعل بعد. انقر هنا لتفعيله من فضلك.",
"username-too-short": "اسم المستخدم قصير.",
"username-too-long": "اسم المستخدم طويل",
"user-banned": "المستخدم محظور",
"user-too-new": "عذرًا، يجب الانتظار %1 ثواني قبل إضافة ردك الأول.",
"no-category": "قائمة غير موجودة",
"no-topic": "موضوع غير موجود",
"no-post": "رد غير موجود",
"no-group": "مجموعة غير موجودة",
"no-user": "اسم مستخدم غير موجود",
"no-teaser": "مقتطف غير موجود",
"no-privileges": "لاتملك الصلاحيات اللازمة للقيام بهذه العملية",
"no-emailers-configured": "لا يمكن إرسال رسالة إلكترونية تجريبية لعدم وجود قوالب خاصة بالرسائل الإلكترونية،",
"category-disabled": "قائمة معطلة",
"topic-locked": "الموضوع مقفول",
"still-uploading": "الرجاء انتظار الرفع",
"content-too-short": "المرجو إدخال موضوع أطول من هذا. يجب أن تتوفر المواضيع على %1 حروف على الأقل.",
"title-too-short": "المرجو إدخال عنوان أطول من هذا. يجب أن تتوفر العناوين على %1 حروف على الأقل.",
"title-too-long": "المرجو إدخال عنوان أقصر من هذا. يجب ألا تتجاوز العناوين %1 حرفًا.",
"too-many-posts": "يمكنك إنشاء المواضيع بمعدل موضوع واحد كل %1 ثانية - المرجو الانتظار قليلا.",
"too-many-posts-newbie": "بصفتك مستخدمًا جديدًا، يمكنك إنشاء المواضيع بمعدل موضوع واحد كل %1 ثانية حتى تحصل على سمعة %2 - المرجو الانتظار قليلا.",
"file-too-big": "حجم الملفات الأقصى المسموح به هو %1 كب - المرجو رفع ملف أقل حجمًا",
"cant-vote-self-post": "لايمكنك التصويت لردك",
"already-favourited": "لقد سبق وأضفت هذا الرد إلى المفضلة",
"already-unfavourited": "لقد سبق وحذفت هذا الرد من المفضلة",
"cant-ban-other-admins": "لايمكن حظر مدبر نظام آخر.",
"invalid-image-type": "نوع الصورة ممنوع",
"group-name-too-short": "اسم المجموعة قصير",
"group-already-exists": "المجموعة موجودة مسبقا",
"group-name-change-not-allowed": "لايسمح بتغيير أسماء المجموعات",
"post-already-deleted": "سبق وتم حذف هذا الرد",
"post-already-restored": "سبق وتم إلغاء حذف هذا الرد",
"topic-already-deleted": "سبق وتم حذف هذا الموضوع",
"topic-already-restored": "سبق وتم إلغاء حذف هذا الرد",
"topic-thumbnails-are-disabled": "الصور المصغرة غير مفعلة.",
"invalid-file": "ملف غير مقبول",
"uploads-are-disabled": "رفع الملفات غير مفعل",
"upload-error": "مشكلة في الرفع: 1%",
"signature-too-long": "عذرا، توقيعك يجب ألا يتجاوز %1 حرفًا",
"cant-chat-with-yourself": "لايمكنك فتح محادثة مع نفسك",
"chat-restricted": "هذا المستخدم عطل المحادثات الواردة عليه. يجب أن يتبعك حتى تتمكن من فتح محادثة معه.",
"reputation-system-disabled": "نظام السمعة معطل",
"downvoting-disabled": "التصويتات السلبية معطلة",
"not-enough-reputation-to-downvote": "ليس لديك سمعة تكفي لإضافة صوت سلبي لهذا الموضوع",
"not-enough-reputation-to-flag": "ليس لديك سمعة تكفي للإشعار بموضوع مخل",
"reload-failed": "المنتدى واجه مشكلة أثناء إعادة التحميل: \"%1\". سيواصل المنتدى خدمة العملاء السابقين لكن يجب عليك إلغاء أي تغيير قمت به قبل إعادة التحميل.",
"registration-error": "حدث خطأ أثناء التسجيل"
}

View File

@@ -1,7 +0,0 @@
{
"stats.online": "حالياً على الموقع",
"stats.users": "مستخدمين",
"stats.topics": "مواضيع",
"stats.posts": "مشاركات",
"success": "نجاح"
}

View File

@@ -10,61 +10,68 @@
"500.message": "عفوا! يبدو وكأنه شيء ذهب على نحو خاطئ!",
"register": "تسجيل",
"login": "دخول",
"please_log_in": "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",
"posting_restriction_info": "إضافة مشاركات جديد حكر على الأعضاء المسجلين، انقر هنا لتسجيل الدخول.",
"welcome_back": "مرحبًا بعودتك",
"you_have_successfully_logged_in": "تم سجيل الدخول بنجاح",
"save_changes": "حفظ التغييرات",
"close": "أغلق",
"pagination": "Pagination",
"header.admin": "مشرف",
"pagination": "الصفحات",
"pagination.out_of": "%1 من %2",
"pagination.enter_index": "أدخل الرقم التسلسلي",
"header.admin": "مدبر نظام",
"header.recent": "حديث",
"header.unread": "غير مقروء",
"header.popular": "Popular",
"header.tags": "وسم",
"header.popular": "الأكثر شهرة",
"header.users": "المستخدمين",
"header.chats": "Chats",
"header.notifications": "Notifications",
"header.chats": "المحادثات",
"header.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 are banned you will 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"
"previouspage": "الصفحة السابقة",
"nextpage": "الصفحة التالية",
"alert.success": "نجاح",
"alert.error": "خطأ",
"alert.banned": "محظور",
"alert.banned.message": "لقد تم حظر حسابك. سيتم تسجيل الخروج.",
"alert.unfollow": "أنت لا تتابع %1 بعد الآن!",
"alert.follow": "أنت الآن تتابع %1!",
"online": "المتواجدون حاليًّا",
"users": "الأعضاء",
"topics": "المواضيع",
"posts": "المشاركات",
"views": "المشاهدات",
"reputation": "السمعة",
"read_more": "اقرأ المزيد",
"posted_ago_by_guest": "كتب %1 من طرف زائر",
"posted_ago_by": "كتب %1 من طرف %2",
"posted_ago": "كتب %1",
"posted_in_ago_by_guest": "كتب في %1 %2 من طرف زائر",
"posted_in_ago_by": "كتب في %1 %2 من طرف %3",
"posted_in_ago": "كتب في %1 %2",
"replied_ago": "رد %1",
"user_posted_ago": "%1 كتب %2",
"guest_posted_ago": "كتب زائر %1",
"last_edited_by_ago": "آخر تعديل من طرف %1 %2",
"norecentposts": "لاوجود لمشاركات جديدة",
"norecenttopics": "لاوجود لمواضيع جديدة",
"recentposts": "آخر المشاركات",
"recentips": "آخر عناوين ال IP التي سجلت الدخول",
"away": "غير متواجد",
"dnd": "المرجو عدم الإزعاج",
"invisible": "مخفي",
"offline": "غير متصل",
"email": "عنوان البريد الإلكتروني",
"language": "اللغة",
"guest": "زائر",
"guests": "الزوار",
"updated.title": "تم تحديث المنتدى",
"updated.message": "لقد تم تحديث المنتدى إلى آخر نسخة للتو. المرجو إعادة تحميل الصفحة.",
"privacy": "الخصوصية",
"delete_all": "حذف الكل"
}

View File

@@ -0,0 +1,8 @@
{
"groups": "المجموعات",
"view_group": "معاينة المجموعة",
"details.title": "تفاصيل المجموعة",
"details.members": "لائحة الأعضاء",
"details.has_no_posts": "أعضاء هذه المجموعة لم يضيفوا أية مشاركة",
"details.latest_posts": "آخر المشاركات"
}

View File

@@ -1,8 +1,9 @@
{
"username": "Username / Email",
"username": "اسم المستخدم / عنوان البريد الإلكتروني",
"remember_me": "تذكرني؟",
"forgot_password": "نسيت كلمة المرور؟",
"alternative_logins": "تسجيلات الدخول البديلة",
"failed_login_attempt": "فشلت محاولة تسجيل الدخول، يرجى المحاولة مرة أخرى.",
"login_successful": "قمت بتسجيل الدخول بنجاح!"
"login_successful": "قمت بتسجيل الدخول بنجاح!",
"dont_have_account": "لم تفتح حسابك بعد؟"
}

View File

@@ -1,7 +1,21 @@
{
"chat.chatting_with": "الدردشة مع <span id=\"chat-with-name\"></span>",
"chat.placeholder": "اكتب رسالة دردشة هنا، وإضغط ENTER لإرسال",
"chat.placeholder": "أكتب رسالة دردشة هنا، اضغط ENTER للإرسال",
"chat.send": "أرسل",
"chat.no_active": "لا يوجد لديك دردشات نشطة.",
"chat.user_typing": "%1 is typing ..."
"chat.user_typing": "%1 يكتب رسالة...",
"chat.user_has_messaged_you": "%1 أرسل لك رسالة.",
"chat.see_all": "معاينة كل الدردشات",
"chat.no-messages": "المرجو اختيار مرسل إليه لمعاينة تاريخ الدردشات",
"chat.recent-chats": "آخر الدردشات",
"chat.contacts": "الأصدقاء",
"chat.message-history": "تاريخ الرسائل",
"chat.pop-out": "افتح الدردشة في نافذة خاصة",
"chat.maximize": "تكبير",
"chat.seven_days": "7 أيام",
"chat.thirty_days": "30 يومًا",
"chat.three_months": "3 أشهر",
"composer.user_said_in": "%1 كتب في %2",
"composer.user_said": "%1 كتب:",
"composer.discard": "هل أنت متأكد أنك تريد التخلي عن التغييرات؟"
}

View File

@@ -1,18 +1,27 @@
{
"title": "إعلام",
"no_notifs": "You have no new notifications",
"see_all": "See all Notifications",
"back_to_home": "العودة إلى NodeBB",
"title": "تنبيهات",
"no_notifs": "ليس لديك أية تنبيهات جديدة",
"see_all": "معاينة كل التنبيهات",
"back_to_home": "عودة إلى %1",
"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>"
"outgoing_link_message": "أنت تغادر %1 حاليا.",
"continue_to": "استمر إلى %1",
"return_to": "عودة إى %1",
"new_notification": "تنبيه جديد",
"you_have_unread_notifications": "لديك تنبيهات غير مقروءة.",
"new_message_from": "رسالة جديدة من <strong>%1</strong>",
"upvoted_your_post_in": "<strong>%1</strong> أضاف صوتًا إيجابيا إلى مشاركتك في <strong>%2</strong>.",
"moved_your_post": "<strong>%1</strong> نقل مشاركتك.",
"moved_your_topic": "<strong>%1</strong> نقل موضوعك.",
"favourited_your_post_in": "<strong>%1</strong> أضاف مشاركتك في <strong>%2</strong> إلى مفضلته.",
"user_flagged_post_in": "<strong>%1</strong> أشعَرَ بمشاركة مخلة في <strong>%2</strong>",
"user_posted_to": "<strong>%1</strong> أضاف ردا إلى: <strong>%2</strong>",
"user_posted_topic": "<strong>%1</strong> أنشأ موضوعًا جديدًا: <strong>%2</strong>",
"user_mentioned_you_in": "<strong>%1</strong> ذكرَ اسمك في <strong>%2</strong>",
"user_started_following_you": "<strong>%1</strong> صار يتابعك.",
"email-confirmed": "تم التحقق من عنوان البريد الإلكتروني",
"email-confirmed-message": "شكرًا على إثبات صحة عنوان بريدك الإلكتروني. صار حسابك مفعلًا بالكامل.",
"email-confirm-error": "حدث خطأ ما...",
"email-confirm-error-message": "حدث خطأ أثناء التحقق من عنوان بريدك الإلكتروني. ربما رمز التفعيل خاطئ أو انتهت صلاحيته.",
"email-confirm-sent": "تم إرسال بريد التفعيل."
}

View File

@@ -1,15 +1,18 @@
{
"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"
"home": "الصفحة الرئيسية",
"unread": "المواضيع غير المقروءة",
"popular": "المواضيع الأكثر شهرة",
"recent": "المواضيع الحديثة",
"users": "المستخدمون المسجلون",
"notifications": "التنبيهات",
"tags": "المواضيع المرتبطة بالوسم %1",
"user.edit": "تعديل \"%1\"",
"user.following": "المستخدمون الذين يتبعهم %1",
"user.followers": "المستخدمون الذين يتبعون %1",
"user.posts": "ردود %1",
"user.topics": "مواضيع %1",
"user.favourites": "مفضلات %1",
"user.settings": "خيارات المستخدم",
"maintenance.text": "جاري صيانة %1. المرجو العودة لاحقًا.",
"maintenance.messageIntro": "بالإضافة إلى ذلك، قام مدبر النظام بترك هذه الرسالة:"
}

View File

@@ -1,7 +1,9 @@
{
"title": "Recent",
"title": "الحديثة",
"day": "يوم",
"week": "أسبوع",
"month": "شهر",
"no_recent_topics": "There are no recent topics."
"year": "سنة",
"alltime": "دائمًا",
"no_recent_topics": "لاوجود لمشاركات جديدة"
}

View File

@@ -12,7 +12,7 @@
"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"
"alternative_registration": "طريقة تسجيل بديلة",
"terms_of_use": "قوانين الاستخدام",
"agree_to_terms_of_use": "أوافق على قوانين الاستخدام"
}

View File

@@ -3,12 +3,12 @@
"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>",
"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",
"enter_email_address": "ادخل عنوان البريد الإلكتروني",
"password_reset_sent": "إعادة تعيين كلمة السر أرسلت",
"invalid_email": "بريد إلكتروني غير صالح أو غير موجود"
}

View File

@@ -0,0 +1,4 @@
{
"results_matching": "%1 نتيجة (نتائج) موافقة ل \"%2\", (%3 ثواني)",
"no-matches": "لم يتم إيجاد أية مشاركات"
}

View File

@@ -1,6 +1,6 @@
{
"success": "Success",
"topic-post": "You have successfully posted.",
"authentication-successful": "Authentication Successful",
"settings-saved": "Settings saved!"
"success": "نجاح",
"topic-post": "لقد تمت الإضافة بنجاح.",
"authentication-successful": "تم تسجيل الدخول بنجاح",
"settings-saved": "تم حفظ التغييرات!"
}

View File

@@ -0,0 +1,7 @@
{
"no_tag_topics": "لاوجود لمواضيع تحمل هذا الوسم.",
"tags": "بطاقات",
"enter_tags_here": "أدخل البطاقات هنا. اضغط ENTER بعد كل بطاقة.",
"enter_tags_here_short": "أدخل البطاقات...",
"no_tags": "لاتوجد هناك بطاقات بعد."
}

View File

@@ -1,94 +1,96 @@
{
"topic": "موضوع",
"topic_id": "Topic ID",
"topic_id_placeholder": "Enter topic ID",
"topic_id": "معرف الموضوع",
"topic_id_placeholder": "أدخل معرف الموضوع",
"no_topics_found": "لا توجد مواضيع !",
"no_posts_found": "No posts found!",
"post_is_deleted": "This post is deleted!",
"profile": "ملف",
"posted_by": "Posted by %1",
"posted_by_guest": "Posted by Guest",
"no_posts_found": "لا توجد مشاركات!",
"post_is_deleted": "هذه المشاركة محذوفة!",
"profile": "الملف الشخصي",
"posted_by": "كتب من طرف %1",
"posted_by_guest": "كتب من طرف زائر",
"chat": "دردشة",
"notify_me": نبه من ردود جديدة في هذا الموضوع",
"notify_me": لق تنبيهات بالردود الجديدة في هذا الموضوع",
"quote": "اقتبس",
"reply": "رد",
"edit": "صحح",
"edit": "تعديل",
"delete": "حذف",
"restore": "Restore",
"purge": "تطهير",
"restore": "استعادة",
"move": "انقل",
"fork": "فرع",
"banned": "محظور",
"link": "رابط",
"share": "شارك",
"share": "نشر",
"tools": "أدوات",
"flag": "Flag",
"bookmark_instructions": "Click here to return to your last position or close to discard.",
"flag_title": "Flag this post for moderation",
"flag_confirm": "Are you sure you want to flag this post?",
"flag_success": "This post has been flagged for moderation.",
"deleted_message": "This thread has been deleted. Only users with thread management privileges can see it.",
"following_topic.message": "You will now be receiving notifications when somebody posts to this topic.",
"not_following_topic.message": "You will no longer receive notifications from this topic.",
"login_to_subscribe": "Please register or log in in order to subscribe to this topic.",
"markAsUnreadForAll.success": "Topic marked as unread for all.",
"watch": "Watch",
"watch.title": "Be notified of new replies in this topic",
"share_this_post": "Share this Post",
"flag": "اشعار بمشاركة مخلة",
"locked": "مقفل",
"bookmark_instructions": "انقر هنا للإكمال أو أغلق للإلغاء.",
"flag_title": "إشعار بمشاركة مخلة.",
"flag_confirm": "هل تريد حقًّا أن تشعر بهذه المشاركة على أنها مخلة؟",
"flag_success": "تم الإشعار بهذه المشاركة على أنها مخلة",
"deleted_message": "هذه المشاركة محذوفة. فقط من لهم صلاحية الإشراف على ا لمشاركات يمكنهم معاينتها.",
"following_topic.message": "ستستلم تنبيها عند كل مشاركة جديدة في هذا الموضوع.",
"not_following_topic.message": "لن تستلم أي تنبيه بخصوص عذا الموضوع بعد الآن.",
"login_to_subscribe": "المرجو إنشاء حساب أو تسجيل الدخول حتى يمكنك متابعة هذا الموضوع.",
"markAsUnreadForAll.success": "تم تحديد الموضوع على أنه غير مقروء.",
"watch": "مراقبة",
"unwatch": "الغاء المراقبة",
"watch.title": "استلم تنبيها بالردود الجديدة في هذا الموضوع",
"unwatch.title": "ألغ مراقبة هذا الموضوع",
"share_this_post": "انشر هذا الموضوع",
"thread_tools.title": "أدوات الموضوع",
"thread_tools.markAsUnreadForAll": "علم غير مقروء",
"thread_tools.pin": "علق الموضوع",
"thread_tools.unpin": "Unpin Topic",
"thread_tools.lock": "قفل الموضوع",
"thread_tools.unlock": "Unlock Topic",
"thread_tools.unpin": "إلغاء تعليق الموضوع",
"thread_tools.lock": "أقفل الموضوع",
"thread_tools.unlock": "إلغاء إقفال الموضوع",
"thread_tools.move": "نقل الموضوع",
"thread_tools.move_all": "Move All",
"thread_tools.fork": "تفرع الموضوع",
"thread_tools.move_all": "نقل الكل",
"thread_tools.fork": "إنشاء فرع الموضوع",
"thread_tools.delete": "حذف الموضوع",
"thread_tools.delete_confirm": "Are you sure you want to delete this thread?",
"thread_tools.restore": "Restore Topic",
"thread_tools.restore_confirm": "Are you sure you want to restore this thread?",
"topic_lock_success": "Topic has been successfully locked.",
"topic_unlock_success": "Topic has been successfully unlocked.",
"topic_pin_success": "Topic has been successfully pinned.",
"topic_unpin_success": "Topic has been successfully unpinned.",
"topic_move_success": "This topic has been successfully moved to %1",
"post_delete_confirm": "Are you sure you want to delete this post?",
"post_restore_confirm": "Are you sure you want to restore this post?",
"post_delete_error": "Could not delete this post!",
"post_restore_error": "Could not restore this post!",
"thread_tools.delete_confirm": "هل أنت متأكد أنك تريد حذف هذا الموضوع؟",
"thread_tools.restore": "استعادة الموضوع",
"thread_tools.restore_confirm": "هل أنت متأكد أنك تريد استعادة هذا الموضوع؟",
"thread_tools.purge": "تطهير الموضوع",
"thread_tools.purge_confirm": "هل أنت متأكد أنك تريد تطهير هذا الموضوع؟",
"topic_move_success": "تم نقل هذا الموضوع إلى %1 بنجاح",
"post_delete_confirm": "هل أنت متأكد أنك تريد حذف هذه المشاركة؟",
"post_restore_confirm": "هل أنت متأكد أنك تريد استعادة هذه المشاركة؟",
"post_purge_confirm": "هل أنت متأكد أنك تريد تطهير هذه المشاركة؟",
"load_categories": "تحميل الفئات",
"disabled_categories_note": "الفئات المجلدة رمادية",
"disabled_categories_note": "الفئات المعطلة رمادية",
"confirm_move": "انقل",
"confirm_fork": "فرع",
"favourite": "المفضل",
"favourite": "إضافة إلى المفضلة",
"favourites": "المفضلة",
"favourites.has_no_favourites": "ليس لديك أي ردود مفضلة. فضل بعد الردود لرؤيتهم هنا",
"favourites.has_no_favourites": "ليس لديك أي ردود مفضلة. أضف بعض المشاركات إلى المفضلة لرؤيتهم هنا",
"loading_more_posts": "تحميل المزيد من المشاركات",
"move_topic": "نقل الموضوع",
"move_post": "نقل الرد",
"post_moved": "Post moved!",
"move_topics": "نقل المواضيع",
"move_post": "نقل المشاركة",
"post_moved": "تم نقل المشاركة",
"fork_topic": "فرع الموضوع",
"topic_will_be_moved_to": "هذا الموضوع سوف ينقل إلى فئة",
"fork_topic_instruction": "إضغط على الردود لتفريعهم",
"fork_no_pids": "لم تختار أي رد",
"fork_success": "تفريع الموضوع بنجاح!",
"composer.title_placeholder": "Enter your topic title here...",
"composer.write": "Write",
"composer.preview": "Preview",
"composer.help": "Help",
"composer.discard": "Discard",
"composer.submit": "Submit",
"composer.replying_to": "Replying to %1",
"composer.new_topic": "New Topic",
"composer.uploading": "uploading...",
"composer.thumb_url_label": "Paste a topic thumbnail URL",
"composer.thumb_title": "Add a thumbnail to this topic",
"fork_topic_instruction": "إضغط على المشاركات التي تريد تفريعها",
"fork_no_pids": "لم تختر أي مشاركة",
"fork_success": م إنشاء فرع للموضوع بنجاح! إضغط هنا لمعاينة الفرع.",
"composer.title_placeholder": "أدخل عنوان موضوعك هنا...",
"composer.discard": "نبذ التغييرات",
"composer.submit": "حفظ",
"composer.replying_to": "الرد على %1",
"composer.new_topic": "موضوع جديد",
"composer.uploading": "جاري الرفع",
"composer.thumb_url_label": "ألصق رابط الصورة المصغرة للموضوع",
"composer.thumb_title": "إضافة صورة مصغرة للموضوع",
"composer.thumb_url_placeholder": "http://example.com/thumb.png",
"composer.thumb_file_label": "Or upload a file",
"composer.thumb_remove": "Clear fields",
"composer.drag_and_drop_images": "Drag and Drop Images Here",
"composer.upload_instructions": "Upload images by dragging & dropping them.",
"more_users_and_guests": "%1 more user(s) and %2 guest(s)",
"more_users": "%1 more user(s)",
"more_guests": "%1 more guest(s)"
"composer.thumb_file_label": "أو قم برفع ملف",
"composer.thumb_remove": "تفريغ الخانات",
"composer.drag_and_drop_images": "اسحب وأسقص الصور هنا",
"more_users_and_guests": "%1 مستخدم(ين) و %2 زائر(ين)",
"more_users": "%1 مستخدم(ين)",
"more_guests": "%1 زائر(ين)",
"users_and_others": "%1 و %2 آخرين",
"sort_by": "ترتيب حسب",
"oldest_to_newest": "من الأقدم إلى الأحدث",
"newest_to_oldest": "من الأحدث إلى الأقدم",
"most_votes": "الأكثر تصويتًا"
}

View File

@@ -1,9 +1,9 @@
{
"title": "Unread",
"title": "غير مقروء",
"no_unread_topics": "ليس هناك أي موضوع غير مقروء",
"load_more": "حمل المزيد",
"mark_as_read": "Mark as Read",
"selected": "Selected",
"all": "All",
"topics_marked_as_read.success": "Topics marked as read!"
"mark_as_read": "حدد غير مقروء",
"selected": "المختارة",
"all": "الكل",
"topics_marked_as_read.success": "تم تحديد المواضيع على أنها مقروءة!"
}

View File

@@ -3,60 +3,73 @@
"offline": "ليس موجود حالياً",
"username": "إسم المستخدم",
"email": "البريد الإلكتروني",
"confirm_email": "تأكيد عنوان البريد الإلكتروني",
"delete_account": "حذف الحساب",
"delete_account_confirm": "هل أن متأكد أنك تريد حذف حسابك؟<br /><strong> هذه العملية غير قابلة للإلغاء ولن يكون بالإمكان استعادة بياناتك</strong><br /><br />أدخل اسم المستخدم الخاص بك لتأكيد عملية الحذف",
"fullname": "الاسم الكامل",
"website": "الموقع الإلكتروني",
"location": "موقع",
"age": "عمر",
"location": "الموقع",
"age": "السن",
"joined": "تاريخ التسجيل",
"lastonline": "تاريخ أخر دخول",
"profile": "Profile",
"profile_views": "مشاهد الملف",
"reputation": "سمعة",
"favourites": "Favourites",
"followers": "أتباع",
"following": "يتبع",
"lastonline": "تاريخ آخر دخول",
"profile": "الملف الشخصي",
"profile_views": "عدد مشاهدات الملف الشخصي",
"reputation": "السمعة",
"favourites": "المفضلات",
"followers": "المتابعون",
"following": "يتابع",
"signature": "توقيع",
"gravatar": "Gravatar",
"birthday": "عيد ميلاد",
"chat": "Chat",
"follow": "Follow",
"unfollow": "Unfollow",
"profile_update_success": "Profile has been updated successfully!",
"chat": "محادثة",
"follow": "تابع",
"unfollow": "إلغاء المتابعة",
"profile_update_success": "تم تحديث الملف الشخصي بنجاح",
"change_picture": "تغيير الصورة",
"edit": "صحح",
"uploaded_picture": "صورة تم تحميلها",
"upload_new_picture": "تحميل صورة جديدة",
"current_password": "Current Password",
"edit": "تعديل",
"uploaded_picture": "الصورة المرفوعة",
"upload_new_picture": "رفع صورة جديدة",
"upload_new_picture_from_url": "رفع صورة جديدة بواسطة رابط",
"current_password": "كلمة السر الحالية",
"change_password": "تغيير كلمة السر",
"change_password_error": "Invalid Password!",
"change_password_error_wrong_current": "Your current password is not correct!",
"change_password_error_length": "Password too short!",
"change_password_error_match": "Passwords must match!",
"change_password_error_privileges": "You do not have the rights to change this password.",
"change_password_success": "Your password is updated!",
"change_password_error": "كلمة سر غير صحيحة",
"change_password_error_wrong_current": "كلمة السر الحالية ليست صحيحة",
"change_password_error_length": "كلمة السر قصيرة",
"change_password_error_match": "كلمة السر غير مطابقة لتأكيد كلمة السر",
"change_password_error_privileges": "ليس لديك الصلاحيات الكافية لتغيير كلمة السر هذه.",
"change_password_success": "تم تحديث كلمة السر خاصتك.",
"confirm_password": "تأكيد كلمة السر",
"password": "كلمة السر",
"username_taken_workaround": "The username you requested was already taken, so we have altered it slightly. You are now known as <strong>%1</strong>",
"upload_picture": "تحميل الصورة",
"upload_a_picture": "تحميل صورة",
"image_spec": "You may only upload PNG, JPG, or GIF files",
"max": "max.",
"settings": "Settings",
"username_taken_workaround": "اسم المستخدم الذي اخترته سبق أخذه، لذا تم تغييره قليلا. أن الآن مسجل تحت الاسم <strong>%1</strong>",
"upload_picture": "ارفع الصورة",
"upload_a_picture": "رفع صورة",
"image_spec": "لايمكنك رفع إلا الصور ذات الصيغ PNG أو JPG أو GIF.",
"max": "الحد الأقصى",
"settings": "خيارات",
"show_email": "أظهر بريدي الإلكتروني",
"digest_label": "Subscribe to Digest",
"digest_description": "Subscribe to email updates for this forum (new notifications and topics) according to a set schedule",
"digest_off": "Off",
"digest_daily": "Daily",
"digest_weekly": "Weekly",
"digest_monthly": "Monthly",
"has_no_follower": "هذا المستخدم ليس لديه أي أتباع :(",
"follows_no_one": "هذا المستخدم لا يتبع أحد :(",
"has_no_posts": "This user didn't post anything yet.",
"has_no_topics": "This user didn't post any topics yet.",
"show_fullname": "أظهر اسمي الكامل",
"restrict_chats": "لاتسمح بورود محادثات إلا من طرف المستخدمين الذين أتابعهم.",
"digest_label": "اشترك في النشرة الدورية",
"digest_description": "استلام اشعارات بآخر مستجدات هذا القسم (التنبيهات والمواضيع الجديدة) عبر البريد الإلكتروني وفقا لجدول زمني محدد.",
"digest_off": "غير مفعل",
"digest_daily": "يوميا",
"digest_weekly": "أسبوعيًّا",
"digest_monthly": "شهريًّا",
"send_chat_notifications": "استلام رسالة إلكترونية عند ورود محادثة وأنا غير متصل.",
"has_no_follower": "هذا المستخدم ليس لديه أي متابع :(",
"follows_no_one": "هذا المستخدم لا يتابع أحد :(",
"has_no_posts": "هذا المستخدم لم يكتب أي شيء بعد.",
"has_no_topics": "هذا المستخدم لم ينشئ أي موضوع بعد.",
"email_hidden": "البريد الإلكتروني مخفي",
"hidden": "مخفي",
"paginate_description": "Paginate topics and posts instead of using infinite scroll.",
"topics_per_page": "Topics per Page",
"posts_per_page": "Posts per Page",
"notification_sounds": "Play a sound when you receive a notification."
"paginate_description": "عرض المواضيع والردود موزعة على صفحات عوض صفحة واحدة.",
"topics_per_page": "المواضيع في كل صفحة",
"posts_per_page": "الردود في كل صفحة",
"notification_sounds": "تشغيل ملف صوتي عند استلام التنبيهات.",
"browsing": "خيارات التصفح",
"open_links_in_new_tab": "فتح الروابط الخارجية في تبويب جديد؟",
"enable_topic_searching": "تفعيل خاصية البحث داخل المواضيع",
"topic_search_help": "في حالة تفعيلها، ستعوض خاصيةُ البحث داخل المواضيع خاصيةَ البحث الخاصة بالمتصفح، فتمكنك بالتالي بالبحث في الموضوع بأكمله دون الاقتصار على مايظهر في الشاشة فحسب.",
"follow_topics_you_reply_to": "متابعة المشاركات التي ترد عليها",
"follow_topics_you_create": "متابعة المشاركات التي تكتبها"
}

View File

@@ -4,5 +4,6 @@
"most_reputation": "أعلى سمعة",
"search": "بحث",
"enter_username": "أدخل اسم مستخدم للبحث",
"load_more": "حمل المزيد"
"load_more": "حمل المزيد",
"users-found-search-took": "تم إيجاد %1 مستخدمـ(ين)! استغرق البحث %2 ميليثانية."
}

View File

@@ -0,0 +1,8 @@
{
"new_topic_button": "নতুন টপিক",
"no_topics": "<strong>এই বিভাগে কোন টপিক নেই! </strong><br /> আপনি চাইলে একটি পোষ্ট করতে পারেন।",
"browsing": "browsing",
"no_replies": "কোন রিপ্লাই নেই",
"share_this_category": "এই বিভাগটি অন্যের সাথে ভাগাভাগি করুন",
"ignore": "উপেক্ষা করুন"
}

View File

@@ -0,0 +1,23 @@
{
"password-reset-requested": "Password Reset Requested - %1!",
"welcome-to": "Welcome to %1",
"greeting_no_name": "Hello",
"greeting_with_name": "Hello %1",
"welcome.text1": "%1 এ নিবন্ধন করার জন্য আপনাকে ধন্যবাদ!",
"welcome.text2": "আপনার একাউন্ট এ্যাক্টিভেট করার জন্য, আপনি যে ইমেইল এড্রেস ব্যাবহার করে নিবন্ধন করেছেন তা যাচাই করতে হবে",
"welcome.cta": "আপনার ইমেইল এড্রেস নিশ্চিত করার জন্য এখানে ক্লিক করুন",
"reset.text1": "আমরা আপনার পাসওয়ার্ড রিসেট করার অনুরোধ পেয়েছি, সম্ভবত আপনি আপনার পাসওয়ার্ড ভুলে গিয়েছেন বলেই। তবে যদি তা না হয়ে থাকে, তাহলে এই মেইলকে উপেক্ষা করতে পারেন।",
"reset.text2": "পাসওয়ার্ড রিসেট করতে নিচের লিংকে ক্লিক করুন",
"reset.cta": "পাসওয়ার্ড রিসেট করতে এখানে ক্লিক করুন",
"digest.notifications": "You have unread notifications from %1:",
"digest.latest_topics": "Latest topics from %1",
"digest.cta": "Click here to visit %1",
"digest.unsub.info": "This digest was sent to you due to your subscription settings.",
"digest.no_topics": "There have been no active topics in the past %1",
"notif.chat.subject": "New chat message received from %1",
"notif.chat.cta": "Click here to continue the conversation",
"notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.",
"test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.",
"unsub.cta": "Click here to alter those settings",
"closing": "Thanks!"
}

View File

@@ -0,0 +1,67 @@
{
"invalid-data": "ভুল তথ্য",
"not-logged-in": "আপনি লগিন করেননি",
"account-locked": "আপনার অ্যাকাউন্ট সাময়িকভাবে লক করা হয়েছে",
"search-requires-login": "অনুসন্ধান করার জন্য একটি অ্যাকাউন্ট প্রয়োজন! অনুগ্রহপূর্বক প্রবেশ করুন অথবা নিবন্ধন করুন!",
"invalid-cid": "ভুল বিভাগ নাম্বার",
"invalid-tid": "ভুল টপিক নাম্বার",
"invalid-pid": "ভুল পোস্ট নাম্বার",
"invalid-uid": "ভুল ব্যবহারকারী নাম্বার",
"invalid-username": "ভুল ইউজারনেম",
"invalid-email": "ভুল ইমেইল",
"invalid-title": "ভুল শিরোনাম",
"invalid-user-data": "ভুল ব্যবহারকারী তথ্য",
"invalid-password": "ভুল পাসওয়ার্ড",
"invalid-username-or-password": "অনুগ্রহ পূর্বক ইউজারনেম এবং পাসওয়ার্ড উভয়ই প্রদান করুন",
"invalid-search-term": "অগ্রহনযোগ্য সার্চ টার্ম",
"invalid-pagination-value": "ভুল পৃষ্ঠা নাম্বার",
"username-taken": "ইউজারনেম আগেই ব্যবহৃত",
"email-taken": "ইমেইল আগেই ব্যবহৃত",
"email-not-confirmed": "আপনার ইমেইল এড্রেস নিশ্চিত করা হয় নি, নিশ্চিত করতে এখানে ক্লিক করুন।",
"username-too-short": "খুব ছোট ইউজারনেম",
"username-too-long": "ইউজারনেম বড় হয়ে গিয়েছে",
"user-banned": "ব্যবহারকারী নিষিদ্ধ",
"user-too-new": "দুঃখিত! প্রথম পোষ্ট করার জন্য আপনাকে %1 সেকেন্ড অপেক্ষা করতে হবে।",
"no-category": "বিভাগটি খুজে পাওয়া যায় নি",
"no-topic": "এই টপিক নেই",
"no-post": "এই পোষ্ট নেই",
"no-group": "এই গ্রুপ অস্তিত্বহীন",
"no-user": "এই নামে কোন সদস্য নেই",
"no-teaser": "টিজারটি খুজে পাওয়া যায় নি",
"no-privileges": "এই কাজটির জন্য আপনার পর্যাপ্ত অধিকার নেই",
"no-emailers-configured": "কোন ইমেল প্লাগইন লোড করা নেই, কাজেই টেস্ট মেইল পাঠানো সম্ভব হচ্ছে না",
"category-disabled": "বিভাগটি নিষ্ক্রিয়",
"topic-locked": "টপিক বন্ধ",
"still-uploading": "আপলোড সম্পূর্ণ জন্য অনুগ্রহ করে অপেক্ষা করুন",
"content-too-short": "অনুগ্রহকরে অপেক্ষকৃত বড় পোষ্ট করুন। একটি পোষ্টে নূন্যতম %1 অক্ষর থাকতে হবে।",
"title-too-short": "অনুগ্রহপূর্বক বড় শিরোনাম ব্যাবহার করুন। শিরোনামের জন্য নূন্যতম %1 অক্ষর ব্যাবহার করতে হবে।",
"title-too-long": "অনুগ্রহ করে সংক্ষিপ্ত শিরোনাম লিখুন। শিরোনাম %1 অক্ষরের বেশি হতে পারবে না।",
"too-many-posts": "আপনি প্রতি %1 সেকেন্ডে একবার পোষ্ট করতে পারবেন। পরবর্তী পোষ্ট করার জন্য অপেক্ষা করুন। ",
"too-many-posts-newbie": "নতুন সদস্য হিসাবে %2 সন্মানণা পাওয়া পর্যন্ত আপনি প্রতি %1 সেকেন্ডে একবার পোষ্ট করতে পারবেন। পরবর্তী পোষ্ট করার জন্য অপেক্ষা করুন। ",
"file-too-big": "সর্বোচ্চ গৃহীত ফাইলসাইজ হচ্ছে %1 kb - অনুগ্রহপূর্বক ছোট ফাইল আপলোড করুন",
"cant-vote-self-post": "আপনি নিজের পোস্টে ভোট দিতে পারবেন না।",
"already-favourited": "আপনি ইতিমধ্যে এই পোষ্টটি পছন্দের তালিকায় যোগ করেছেন",
"already-unfavourited": "আপনি ইতিমধ্যে এই পোষ্টটি আপনার পছন্দের তালিকা থেকে সরিয়ে ফেলেছেন",
"cant-ban-other-admins": "আপনি অন্য এ্যাডমিনদের নিষিদ্ধ করতে পারেন না!",
"invalid-image-type": "ভুল ছবির টাইপ",
"group-name-too-short": "গ্রুপের নাম খুব ছোট",
"group-already-exists": "গ্রুপ ইতিমধ্যেই বিদ্যমান",
"group-name-change-not-allowed": "গ্রুপের নাম পরিবর্তনের অনুমতি নেই",
"post-already-deleted": "এই পোস্টটি ইতিমধ্যে ডিলিট করা হয়ে গিয়েছে",
"post-already-restored": "এই পোষ্টটি ইতিমধ্যে পুনরোদ্ধার করা হয়েছে",
"topic-already-deleted": "এই টপিকটি ইতিমধ্যে ডিলিট করা হয়েছে",
"topic-already-restored": "এই টপিকটি ইতিমধ্যে পুনরোদ্ধার করা হয়েছে",
"topic-thumbnails-are-disabled": "টপিক থাম্বনেল নিষ্ক্রিয় করা। ",
"invalid-file": "ভুল ফাইল",
"uploads-are-disabled": "আপলোড নিষ্ক্রিয় করা",
"upload-error": "আপলোড ত্রুটিঃ %1",
"signature-too-long": "দুঃখিত, আপনার সাক্ষর %1 অক্ষরের বেশী হতে পারবে না। ",
"cant-chat-with-yourself": "আপনি নিজের সাথে চ্যাট করতে পারবেন না!",
"chat-restricted": "এই সদস্য তার বার্তালাপ সংরক্ষিত রেখেছেন। এই সদস্য আপনাকে ফলো করার পরই কেবলমাত্র আপনি তার সাথে চ্যাট করতে পারবেন",
"reputation-system-disabled": "সম্মাননা ব্যাবস্থা নিস্ক্রীয় রাখা হয়েছে",
"downvoting-disabled": "ঋণাত্মক ভোট নিস্ক্রীয় রাখা হয়েছে।",
"not-enough-reputation-to-downvote": "আপনার এই পোস্ট downvote করার জন্য পর্যাপ্ত সম্মাননা নেই",
"not-enough-reputation-to-flag": "এই পোষ্টকে ফ্লাগ করার জন্য আপনার পর্যাপ্ত সম্মাননা নেই",
"reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.",
"registration-error": "নিবন্ধন এরর!"
}

View File

@@ -0,0 +1,77 @@
{
"home": "নীড়পাতা",
"search": "অনুসন্ধান",
"buttons.close": "বন্ধ",
"403.title": "প্রবেশাধিকার প্রত্যাখ্যাত",
"403.message": "আপনি এমন একটি পাতায় যাওয়ার চেষ্টা করছেন যেখানে আপনার প্রবেশাধিকার নেই। আপনি কি <a href='/login'>প্রবেশ করে</a> আবার চেষ্টা করবেন?",
"404.title": "পাওয়া যায়নি",
"404.message": "আপনি এমন একটি পাতায় যাওয়ার চেষ্টা করছেন যার অস্তিত্ব নেই। <a href='/'>নীড়পাতায়</a> ফিরে যান। ",
"500.title": "অভ্যন্তরীণ ত্রুটি।",
"500.message": "ওহো! কিছু ভুল হয়েছে মনে হচ্ছে!",
"register": "নিবন্ধন",
"login": "প্রবেশ",
"please_log_in": "অনুগ্রহ করে প্রবেশ করুন",
"logout": "প্রস্থান",
"posting_restriction_info": "বর্তমানে নিবন্ধিত সদস্যরাই কেবল পোস্ট করতে পারেন, লগ ইন করতে এখানে ক্লিক করুন।",
"welcome_back": "আপনাকে স্বাগতম",
"you_have_successfully_logged_in": "আপনি সফলভাবে প্রবেশ করেছেন",
"save_changes": "পরিবর্তনগুলি সঞ্চয় করুন",
"close": "বন্ধ",
"pagination": "পাতা নং",
"pagination.out_of": "%2 এর মাঝে %1",
"pagination.enter_index": "সূচক লিখুন",
"header.admin": "অ্যাডমিন",
"header.recent": "সাম্প্রতিক",
"header.unread": "অপঠিত",
"header.tags": "ট্যাগ",
"header.popular": "জনপ্রিয়",
"header.users": "ব্যবহারকারীগণ",
"header.chats": "কথোপকথন",
"header.notifications": "বিজ্ঞপ্তি",
"header.search": "অনুসন্ধান",
"header.profile": "প্রোফাইল",
"notifications.loading": "বিজ্ঞপ্তিগুলি লোড হচ্ছে",
"chats.loading": "কথোপকথনগুলি লোড হচ্ছে ",
"motd.welcome": "ভবিষ্যতের আলোচনার প্লাটফর্ম, NodeBB তে স্বাগতম।",
"previouspage": "আগের পাতা",
"nextpage": "পরের পাতা",
"alert.success": "সফল",
"alert.error": "ত্রুটি",
"alert.banned": "নিষিদ্ধ",
"alert.banned.message": "আপনাকে কেবলই নিষিদ্ধ করা হয়েছে, আপনি এখন লগআউট হয়ে যাবেন।",
"alert.unfollow": "আপনি আর %1 কে অনুসরণ করছেন না!",
"alert.follow": "আপনি এখন %1 কে অনুসরণ করছেন!",
"online": "অনলাইন",
"users": "ব্যবহারকারীগণ",
"topics": "টপিক",
"posts": "পোস্টগুলি",
"views": "দেখেছেন",
"reputation": "সন্মাননা",
"read_more": "আরো পড়ুন",
"posted_ago_by_guest": "অতিথি পোস্ট করেছেন %1",
"posted_ago_by": " %1 %2 দ্বারা পোস্টকৃত",
"posted_ago": "পোস্ট করেছেন %1",
"posted_in_ago_by_guest": "%1 বিভাগে অতিথি পোস্ট করেছেন %2",
"posted_in_ago_by": "%3 %1 বিভাগে পোস্ট করেছেন %2",
"posted_in_ago": "%1 বিভাগে পোস্ট করা হয়েছে %2 আগে",
"replied_ago": "উত্তর দেয়া হয়েছে %1 ",
"user_posted_ago": "%1 পোস্ট করেছেন %2",
"guest_posted_ago": "অতিথি পোস্ট করেছেন %1",
"last_edited_by_ago": "সর্বশেষ সম্পাদনা করেছেন %1 %2",
"norecentposts": "কোনও সাম্প্রতিক পোস্ট নেই",
"norecenttopics": "কোনও সাম্প্রতিক টপিক নেই",
"recentposts": "সাম্প্রতিক পোস্ট",
"recentips": "সাম্প্রতিক প্রবেশকৃত আইপি সমুহ",
"away": "দূরে",
"dnd": "বিরক্ত করবেন না",
"invisible": "অদৃশ্য",
"offline": "অফলাইন",
"email": "ইমেইল",
"language": "ভাষা",
"guest": "অতিথি",
"guests": "অতিথি",
"updated.title": "ফোরাম আপডেট করা হয়েছে",
"updated.message": "এই ফোরামে এইমাত্র সর্বশেষ সংস্করণে আপডেট করা হয়েছে। পৃষ্ঠাটি রিফ্রেশ করতে এখানে ক্লিক করুন।",
"privacy": "নিরাপত্তা",
"delete_all": "সব মুছে ফেলুন"
}

View File

@@ -0,0 +1,8 @@
{
"groups": "Groups",
"view_group": "View Group",
"details.title": "Group Details",
"details.members": "Member List",
"details.has_no_posts": "This group's members have not made any posts.",
"details.latest_posts": "Latest Posts"
}

View File

@@ -0,0 +1,5 @@
{
"name": "বাংলা",
"code": "bn",
"dir": "ltr"
}

View File

@@ -0,0 +1,9 @@
{
"username": "ইউজারনেম / ইমেইল",
"remember_me": "মনে রাখুন",
"forgot_password": "পাসওয়ার্ড ভুলে গিয়েছেন?",
"alternative_logins": "বিকল্প প্রবেশ",
"failed_login_attempt": "ব্যর্থ প্রবেশের প্রচেষ্টা, আবার চেষ্টা করুন।",
"login_successful": "আপনি সফলভাবে প্রবেশ করেছেন!",
"dont_have_account": "কোন একাউন্ট নেই?"
}

Some files were not shown because too many files have changed in this diff Show More