Compare commits

...

710 Commits

Author SHA1 Message Date
Julian Lam
7eeadbc6e3 chore: bump version string 2023-02-17 17:46:00 -05:00
Barış Soner Uşaklı
9a0e1010d9 chore: up harmony 2023-02-17 12:26:02 -05:00
Barış Soner Uşaklı
4b0bfd3ec1 https://github.com/NodeBB/NodeBB/issues/11307
dont use li
2023-02-17 12:25:16 -05:00
Barış Soner Uşaklı
0349169879 fix: #11306, show proper error if queued post doesn't exist
was showing no-privileges if someone else accepted the post
2023-02-17 11:41:35 -05:00
Julian Lam
d6ed1e0f1e Revert "fix: update topics:recent zset when rescheduling a topic"
This reverts commit 737973cca9.
2023-02-16 14:10:26 -05:00
Barış Soner Uşaklı
bc23ae80cc closes #11218, 🚋 2023-02-16 11:51:07 -05:00
Barış Soner Uşaklı
e4446ae14a more sanity checks for bookmark
dont allow setting bookmark higher than topic postcount
2023-02-15 22:06:00 -05:00
Barış Soner Uşaklı
54505e7a47 refactor: remove glance
assorted fixes to navigator
dont reduce remaning count if user scrolls down and up quickly
only call topic.navigatorCallback when index changes
2023-02-15 21:28:37 -05:00
Barış Soner Uşaklı
5f4f45c44e fix: navigator not showing up on first load 2023-02-15 20:36:34 -05:00
Barış Soner Uşaklı
c90284626f fix: dupe quote button, increase delay, hide immediately on empty selection 2023-02-15 20:18:16 -05:00
Julian Lam
737973cca9 fix: update topics:recent zset when rescheduling a topic 2023-02-15 14:42:13 -05:00
Julian Lam
11ae661176 fix: closes #11183 2023-02-15 14:29:21 -05:00
Julian Lam
27a15e1247 fix: crash on navigator unread update when backing out of a topic 2023-02-15 13:08:03 -05:00
Julian Lam
2d773d5ea6 chore: bump harmony 2023-02-15 13:05:33 -05:00
Julian Lam
b82a0c7657 fix: update unread indicator on scroll, add unread count 2023-02-15 13:03:58 -05:00
Julian Lam
317eee9e18 Revert "fix: reset user bookmark when topic is marked unread"
This reverts commit 9bcd85c2c6.
2023-02-15 12:06:48 -05:00
Julian Lam
9bcd85c2c6 fix: reset user bookmark when topic is marked unread 2023-02-15 12:04:29 -05:00
Barış Soner Uşaklı
f2649f4eec better thumb top calculation 2023-02-15 11:57:49 -05:00
Julian Lam
dfbaa1ba5f fix: navigator crash on ajaxify 2023-02-15 11:09:52 -05:00
Barış Soner Uşaklı
3216c36b53 clear bookmark on mark unread 2023-02-15 10:27:20 -05:00
Julian Lam
d2c52d0e09 feat: add back unread indicator to navigator 2023-02-14 15:11:06 -05:00
Julian Lam
db5333bd6c fix: only invoke navigator click drag on left mouse button 2023-02-14 14:29:48 -05:00
Julian Lam
657ab45b47 fix: tweak table order in ACP dash searches 2023-02-13 14:05:44 -05:00
Julian Lam
6411bd659d fix: send back null values on ACP search dashboard for startDate and endDate if not expicitly passed in, fix tests 2023-02-13 13:54:47 -05:00
Julian Lam
edbdef6814 Merge branch 'develop' into bootstrap5 2023-02-13 12:16:04 -05:00
Julian Lam
9c0d75023a Merge branch 'develop' into bootstrap5 2023-02-13 12:03:33 -05:00
Julian Lam
b78e22b677 docs: update openapi spec to include info about passing in timestamps for topic creation, removing timestamp as valid request param for topic replying 2023-02-13 11:44:40 -05:00
Barış Soner Uşaklı
23593fb2c6 chore: up harmony 2023-02-11 21:31:56 -05:00
Barış Soner Uşaklı
d0ad183012 fix: filter disabled categories on user categories page count 2023-02-11 21:10:19 -05:00
Barış Soner Uşaklı
4a95129bf5 fix: closes #11287, destroy quick reply autocomplete
on navigation
2023-02-11 20:07:31 -05:00
Barış Soner Uşaklı
7dcf7906ba chore: up harmony 2023-02-11 00:00:36 -05:00
Barış Soner Uşaklı
fc260aeab3 refactor: navigator so it works with multiple thumbs/navigators 2023-02-10 23:48:26 -05:00
Julian Lam
65886c580f fix: placeholders for userFilter module 2023-02-10 16:44:22 -05:00
Julian Lam
fa044a5fbf chore: add caveat about hacky code block in userFilter module 2023-02-10 16:15:11 -05:00
Julian Lam
6c8f45a59b fix: remove old prepareEdit logic 2023-02-10 15:15:35 -05:00
Julian Lam
02359e4d8e refactor: flag note adding/editing, closes #11285 2023-02-10 11:58:23 -05:00
Barış Soner Uşaklı
52a56ede0a chore: up harmony 2023-02-09 20:14:53 -05:00
Barış Soner Uşaklı
b72d185211 fix: chats, allow multiple dropdowns like in harmony 2023-02-09 19:30:32 -05:00
Barış Soner Uşaklı
f11e72410c fix: https://github.com/NodeBB/NodeBB/issues/11283 2023-02-09 17:50:18 -05:00
Julian Lam
9f13ed5338 fix: wrong block name passed to userFilter 2023-02-09 15:06:55 -05:00
Julian Lam
09e1904eef fix: update userFilter to allow new option selectedBlock 2023-02-09 14:58:44 -05:00
Barış Soner Uşaklı
e907344efc chore: up harmony 2023-02-09 12:57:28 -05:00
Barış Soner Uşaklı
9797c1427b chore: up emoji 2023-02-09 12:27:25 -05:00
Barış Soner Uşaklı
efa87e22c8 chore: up harmony 2023-02-09 11:22:58 -05:00
Barış Soner Uşaklı
62401552d2 feat: lang key for x-topics 2023-02-09 10:52:44 -05:00
Barış Soner Uşaklı
651925d84d fix: closes #11282 2023-02-09 09:43:50 -05:00
Barış Soner Uşaklı
fe710fcbd5 remove log 2023-02-08 17:55:52 -05:00
Barış Soner Uşaklı
e6c9bdd97c use same var 2023-02-08 17:41:51 -05:00
Barış Soner Uşaklı
d9e245b6db fix: dont allow adding duplicates to userFilter 2023-02-08 17:40:16 -05:00
Julian Lam
22e92ccf1c fix(openapi): schema changes for updated flags page 2023-02-08 16:54:28 -05:00
Julian Lam
2da0c46344 fix: use userFilter module for assignee, reporterId, targetUid 2023-02-08 16:37:22 -05:00
Julian Lam
8a54418c08 fix: applyFilters to not take any arguments, update selectedCids in updateButton instead of onHidden 2023-02-08 14:39:59 -05:00
Julian Lam
1322faa3bf refactor: filter form client-side js to extract out some logic 2023-02-08 14:18:41 -05:00
Julian Lam
2fde4ae3f7 feat: send flags count to frontend on flags list page 2023-02-08 14:18:41 -05:00
Opliko
25c66eb37c feat(routes): allow remounting /categories (#11230) 2023-02-08 13:39:48 -05:00
Barış Soner Uşaklı
cdbfbc905b refactor: move userSearch filter to a module 2023-02-08 11:37:24 -05:00
Julian Lam
3e48fb331e fix: debug log 2023-02-06 17:19:28 -05:00
Julian Lam
cc1d216d1e fix: issue where repeated openings of the chats dropdown would continually add events for mark-read/unread 2023-02-06 17:19:10 -05:00
Julian Lam
8a0afd8683 fix: allow unread state toggling in chats dropdown too 2023-02-06 16:08:17 -05:00
Julian Lam
fb54c7e8c0 docs: openapi schema updates for chat marking 2023-02-06 16:01:40 -05:00
Julian Lam
b79627a8ed refactor: allow frontend to mark chats as unread, use new API v3 routes instead of socket calls, better frontend event handling 2023-02-06 15:56:07 -05:00
Julian Lam
f13c4ace70 feat: send event:chats.mark socket event on mark read or unread 2023-02-06 14:20:21 -05:00
Julian Lam
4a15b4ee51 feat: api v3 calls to mark chat read/unread 2023-02-06 13:55:35 -05:00
Julian Lam
1da13f254d feat: support for mark-read toggle on chats dropdown and recent chats list 2023-02-06 12:37:25 -05:00
Julian Lam
e6f5f2c169 fix: update users:search-user-for-chat source string 2023-02-06 10:45:16 -05:00
Barış Soner Uşaklı
c6d9cbb7d2 refactor: IS scrolltop 2023-02-03 22:05:06 -05:00
Barış Soner Uşaklı
92e4a36b0f chore: up harmony 2023-02-03 19:52:28 -05:00
Julian Lam
fc4751d7c7 Merge branch 'develop' into bootstrap5 2023-02-03 16:03:10 -05:00
Julian Lam
d04cb6f220 Merge remote-tracking branch 'origin/develop' into bootstrap5 2023-02-03 15:55:34 -05:00
Julian Lam
cd50c037b0 fix: bump harmony 2023-02-03 15:31:14 -05:00
Julian Lam
aca1c87b86 fix: bump harmony 2023-02-03 15:26:13 -05:00
Julian Lam
055a767817 fix: remove unused alert module import 2023-02-03 15:02:34 -05:00
Julian Lam
ae2e0a440a fix: bump harmony, closes #11206 2023-02-02 15:44:28 -05:00
Julian Lam
dfabe7b523 fix: btn-sm on post queue back button 2023-02-02 15:42:49 -05:00
Julian Lam
8361da723b fix: updated messaging for post-queue template, #11206 2023-02-02 15:39:09 -05:00
Julian Lam
16679a1eff Merge remote-tracking branch 'origin/develop' into bootstrap5 2023-02-02 15:35:24 -05:00
Julian Lam
df54a99832 fix: hide entire toolbar row if no posts or not singlePost 2023-02-02 15:33:27 -05:00
Julian Lam
a302d68d9d Merge branch 'develop' into bootstrap5 2023-02-02 13:36:36 -05:00
Barış Soner Uşaklı
8c3818b86e use old style for IS 2023-02-01 19:44:21 -05:00
Barış Soner Uşaklı
fccbbe3a1c chore: up harmony 2023-02-01 18:33:16 -05:00
Barış Soner Uşaklı
f971271ebe chore: up harmony 2023-02-01 18:20:27 -05:00
Barış Soner Uşaklı
000a585544 feat: add prev/next page and page count into mobile paginator 2023-02-01 18:19:32 -05:00
Barış Soner Uşaklı
f0c57a330d chore: up spam be gone 2023-02-01 10:12:45 -05:00
Barış Soner Uşaklı
778cbeee57 chore: up 54 2023-02-01 09:14:48 -05:00
Barış Soner Uşaklı
69597d6333 dont record searches made by composer 2023-01-31 23:07:49 -05:00
Barış Soner Uşaklı
ae048e1289 feat: allow hiding quicksearch results during search 2023-01-31 22:24:13 -05:00
Barış Soner Uşaklı
602beabf0e chore: up harmony/composer 2023-01-31 12:09:13 -05:00
Julian Lam
95b2fdaf47 fix: improve fix-lists mixin 2023-01-31 11:15:04 -05:00
Barış Soner Uşaklı
f28c25a08c Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2023-01-31 11:05:27 -05:00
Barış Soner Uşaklı
dd58e061b9 chore: up widgets 2023-01-31 11:05:25 -05:00
Julian Lam
586f40b82c fix: add top margin to merged and deleted alerts 2023-01-30 15:22:58 -05:00
Barış Soner Uşaklı
259e316031 remove group log 2023-01-30 14:36:54 -05:00
Barış Soner Uşaklı
0265243e0b dont scroll to top on back press 2023-01-30 13:57:56 -05:00
Barış Soner Uşaklı
9a479526cc fix: check thumb 2023-01-30 13:32:36 -05:00
Julian Lam
ca6642d1b7 test: support for anyOf and oneOf 2023-01-30 12:35:29 -05:00
Julian Lam
1dcb8c2f29 fix: final schema changes 2023-01-30 12:35:29 -05:00
Julian Lam
69bfabb917 fix: schema changes for 71743affc3 2023-01-30 12:35:29 -05:00
Julian Lam
1ceb4f10fd fix: no need to call account middlewares for chats routes 2023-01-30 12:35:29 -05:00
Julian Lam
b9ca9421d2 fix: schema change for 2658bcc821 2023-01-30 12:35:29 -05:00
Julian Lam
625606e343 fix: schema changes for 388a8270c9 2023-01-30 12:35:29 -05:00
Julian Lam
af579f9f8e fix: schema changes for c926358d73 2023-01-30 12:35:29 -05:00
Julian Lam
bff1bb6d07 fix: re-login on email change 2023-01-30 12:35:29 -05:00
Julian Lam
7919d1521f fix: allowing optional qs prop in pagination keys (not sure why this didn't break before) 2023-01-30 12:35:29 -05:00
Julian Lam
3df39d4dfc fix: schema changes for 6e86b4afa2 and 3efad2e13b and 68f66223e7 2023-01-30 12:35:29 -05:00
Julian Lam
e53f3aeee9 fix: schema changes for 57bfb37c55 and be6bbabd0e 2023-01-30 12:35:29 -05:00
Julian Lam
f8812fd5ff fix: schema change for 1d7baf1217 2023-01-30 12:35:29 -05:00
Julian Lam
683a7258df fix: schema changes for 5afd5de07d 2023-01-30 12:35:29 -05:00
Julian Lam
b28947c5bc fix: schema changes for 9b3616b103 2023-01-30 12:35:29 -05:00
Julian Lam
75359839f7 fix: schema changes for c4042c70de and 23175110a2 2023-01-30 12:35:29 -05:00
Julian Lam
2ae3f1e4ae fix: schema changes for 9f531f957e 2023-01-30 12:35:29 -05:00
Julian Lam
2c0ecb05bd fix: schema changes for user object 2023-01-30 12:35:29 -05:00
Julian Lam
3db58f51ab fix: schema changes for refactored search page 2023-01-30 12:35:29 -05:00
Julian Lam
bb5d8ea851 fix: breaking test for email confirmation API call 2023-01-30 12:35:29 -05:00
Julian Lam
a2cbd5d3c4 fix: schema changes for 2835966518 2023-01-30 12:35:29 -05:00
Julian Lam
77cf5661d7 fix: schema changes for 27e53b42f3 2023-01-30 12:35:29 -05:00
Julian Lam
768d8d3364 fix: schema changes for 8c67031609 2023-01-30 12:35:29 -05:00
Julian Lam
a949795c3b fix: schema change for aba420a3f3, move loggedInUser to optional props 2023-01-30 12:35:29 -05:00
Julian Lam
cef83f7938 fix: schema changes for c0a52924f1 2023-01-30 12:35:29 -05:00
Julian Lam
0d2d205759 fix: schema changes for 9acdc6808c and 0930934200 2023-01-30 12:35:29 -05:00
Julian Lam
1dbe9f5866 fix: composer-default object in config? 2023-01-30 12:35:29 -05:00
Julian Lam
4dd32bf183 fix: schema changes for 80ea12c1c1, e368feef51, and 52ead114be 2023-01-30 12:35:29 -05:00
Julian Lam
1ea62018e0 fix: schema changes for 794bf01b21 2023-01-30 12:35:29 -05:00
Julian Lam
8e1aab1236 fix: schema changes for 58b5781cea 2023-01-30 12:35:29 -05:00
Julian Lam
90adf7d726 fix: schema changes for 4b738c8cd3 2023-01-30 12:35:29 -05:00
Julian Lam
46b38e45a5 fix: schema change for a9bbb586fc 2023-01-30 12:35:29 -05:00
Julian Lam
1f60f7a0c0 fix: schema changes for b916e42f40 2023-01-30 12:35:29 -05:00
Julian Lam
11e002cbb8 fix: schema changes for 23cb67a112 2023-01-30 12:35:29 -05:00
Julian Lam
f9b1422247 fix: schema changes for b860c2605c 2023-01-30 12:35:29 -05:00
Julian Lam
93c41911c4 fix: schema changes for 84ff1152f7 2023-01-30 12:35:29 -05:00
Julian Lam
1e11484491 fix: schema changes for d1364c3130 2023-01-30 12:35:29 -05:00
Julian Lam
fa7f07dfce fix: schema changes for 69c96078ea 2023-01-30 12:35:29 -05:00
Julian Lam
e37d99a990 fix: schema update for be6bbabd0e 2023-01-30 12:35:29 -05:00
Julian Lam
434472a3bd fix: schema changes for f4cf482a87 2023-01-30 12:35:29 -05:00
Julian Lam
aad300d38f fix: schema changes from 488f0978a4 2023-01-30 12:35:29 -05:00
Julian Lam
ddda84b3d6 fix: add back schema changes for 179faa2270 and c3920ccb10 2023-01-30 12:35:29 -05:00
Julian Lam
9b06d41564 test: re-enable read API schema tests 2023-01-30 12:35:29 -05:00
Barış Soner Uşaklı
898bc0e328 fix: hash scrolling and highlighting correct post 2023-01-30 11:11:32 -05:00
Barış Soner Uşaklı
6ac7eda282 fix: scroll to post right after adding to dom 2023-01-30 10:42:40 -05:00
Barış Soner Uşaklı
f4e533d944 refactor: change hook logs to debug 2023-01-30 10:00:39 -05:00
Barış Soner Uşaklı
f66505c903 chore: up composer 2023-01-29 20:34:37 -05:00
Barış Soner Uşaklı
4498c0d28f chore: up harmony 2023-01-29 19:59:44 -05:00
Barış Soner Uşaklı
00a0ffd3f2 chat fixes 2023-01-29 19:53:36 -05:00
Barış Soner Uşaklı
bad0eef089 fix cache buster for skins 2023-01-29 19:14:30 -05:00
Barış Soner Uşaklı
b4fbb49eaf chore: up themes 2023-01-29 18:31:25 -05:00
Barış Soner Uşaklı
b159c52051 update chat window 2023-01-29 18:30:01 -05:00
Barış Soner Uşaklı
efd487e3ad chore: up harmony 2023-01-29 16:56:52 -05:00
Barış Soner Uşaklı
0d7f829b9f chore: up harmony 2023-01-29 15:37:31 -05:00
Barış Soner Uşaklı
de25455f8b fix: dont focus twice, only focus on chat input on desktop
dont wrap widget footer in row
2023-01-29 15:35:53 -05:00
Barış Soner Uşaklı
0bacc21bea dont focus inputs, annoying on mobile 2023-01-29 09:57:47 -05:00
Barış Soner Uşaklı
825e8fa28e fix: closes #11238 2023-01-29 09:57:37 -05:00
Barış Soner Uşaklı
c05083e501 height auto 2023-01-28 21:48:14 -05:00
Barış Soner Uşaklı
801c34aadc chore: up widgets 2023-01-28 20:25:43 -05:00
Barış Soner Uşaklı
d77e74d9ef chore: up widgets 2023-01-28 20:15:06 -05:00
Barış Soner Uşaklı
524c403122 refactor: move these to core from harmony 2023-01-28 19:42:47 -05:00
Barış Soner Uşaklı
06a852a980 remove extra class 2023-01-28 17:22:48 -05:00
Barış Soner Uşaklı
258a212cdb chore: up harmony 2023-01-28 10:14:02 -05:00
Barış Soner Uşaklı
e84ab691c2 chore: up themes 2023-01-27 23:40:30 -05:00
Barış Soner Uşaklı
6496f50b26 chore: up harmony 2023-01-27 23:27:36 -05:00
Barış Soner Uşaklı
947af68267 chore: up harmony 2023-01-27 23:25:16 -05:00
Barış Soner Uşaklı
bd1846aab8 chore: up harmony 2023-01-27 22:52:08 -05:00
Barış Soner Uşaklı
651aad8647 check config.theme as well
fire action:posts.loaded after processing dom
2023-01-27 22:07:41 -05:00
Barış Soner Uşaklı
d6f13a4ded chore: up harmony 2023-01-27 14:36:13 -05:00
Barış Soner Uşaklı
11add45b9d fix: #11228 no timestamps in future 2023-01-27 14:26:13 -05:00
Barış Soner Uşaklı
99426364bb chore: up harmony 2023-01-27 13:53:51 -05:00
Barış Soner Uşaklı
f706de3bcf feat: add increment helper 2023-01-27 13:51:43 -05:00
Barış Soner Uşaklı
5d2a498cb2 chore: fix composer version 2023-01-27 13:24:44 -05:00
Barış Soner Uşaklı
baee17a8d6 chore: up harmony 2023-01-27 13:16:27 -05:00
Barış Soner Uşaklı
4188d33e27 chore: up harmony 2023-01-27 11:57:43 -05:00
Barış Soner Uşaklı
2b2a2c5bae chore: up harmony 2023-01-27 11:21:00 -05:00
Barış Soner Uşaklı
296b8d4b2f chore: up composer 2023-01-27 11:11:20 -05:00
Barış Soner Uşaklı
4a17ce7de4 chore: up harmony 2023-01-27 10:57:11 -05:00
Barış Soner Uşaklı
28771d5c88 fix: regression from user helper refactor 2023-01-26 21:25:54 -05:00
Barış Soner Uşaklı
bb35329dea chore: up composer 2023-01-26 20:32:44 -05:00
Barış Soner Uşaklı
9fa498fa4a refactor: use new if/each syntax 2023-01-26 20:14:58 -05:00
Julian Lam
72fb61d321 fix(deps): bump ntfy to 1.0.15 2023-01-26 16:01:01 -05:00
Barış Soner Uşaklı
e3aed8245f chore: add lang string 2023-01-26 10:39:46 -05:00
Barış Soner Uşaklı
96c00f005d chore: up themes 2023-01-25 20:51:44 -05:00
Barış Soner Uşaklı
b56a772ec2 feat: allow file uploads on mobile chat
closes https://github.com/NodeBB/NodeBB/issues/11217
2023-01-25 20:50:34 -05:00
Julian Lam
c9b8e345e0 fix: #11191, only focus on search input on md environments and up 2023-01-25 15:46:48 -05:00
Barış Soner Uşaklı
cc746e206a fix: add missing return 2023-01-25 13:05:12 -05:00
Barış Soner Uşaklı
08ad2e127a chore: up harmony 2023-01-25 12:55:33 -05:00
Julian Lam
2ee5b5bbf4 fix(deps): bump ntfy and 2factor 2023-01-25 12:45:04 -05:00
Julian Lam
86c20e4d7c fix(deps): bump theme versions 2023-01-25 12:07:39 -05:00
Julian Lam
42144f0df2 test: skip i18n tests if ref branch when present is not develop 2023-01-25 12:04:28 -05:00
Julian Lam
3e430d8a46 fix: move reputation removal check to accountHelpers method 2023-01-25 12:04:28 -05:00
Julian Lam
3ff12a131c fix: allow exposeUid and exposeGroupName to work with slugs with mixed capitalization 2023-01-25 12:04:28 -05:00
Julian Lam
44ea9da022 refactor: remove calls to getUserDataByUserSlug for most account routes, since it is populated via middleware now 2023-01-25 12:04:28 -05:00
Julian Lam
839d05bc95 feat: automatically 404 if exposeUid or exposeGroupName come up empty 2023-01-25 12:04:28 -05:00
Julian Lam
f8eef75daf refactor(accounts): categories and consent 2023-01-25 12:04:28 -05:00
Julian Lam
c115d93156 refactor: user/blocks 2023-01-25 12:04:28 -05:00
Julian Lam
dee3b0d4c5 fix: properly allow values in res.locals.templateValues to be added to the template data 2023-01-25 12:04:28 -05:00
Julian Lam
f2ae45838e feat: buildAccountData middleware automatically added ot all account routes 2023-01-25 12:04:28 -05:00
Julian Lam
3d287c1e0c feat: allow middlewares to pass in template values via res.locals 2023-01-25 12:04:28 -05:00
Barış Soner Uşaklı
df66f71cfc fix: missing await 2023-01-25 11:40:55 -05:00
Barış Soner Uşaklı
ad2236d77c chore: up harmony 2023-01-25 11:23:16 -05:00
Barış Soner Uşaklı
8a068f1a11 chore: up harmony 2023-01-25 11:08:46 -05:00
Julian Lam
eede77c2e7 fix(deps): bump 2factor to v7 2023-01-24 21:53:43 -05:00
Barış Soner Uşaklı
8f7e283db1 chore: up composer 2023-01-24 20:09:12 -05:00
Barış Soner Uşaklı
9288de34e0 chore: up deps 2023-01-24 12:35:15 -05:00
Barış Soner Uşaklı
ce868c953d chore: up persona 2023-01-24 11:51:14 -05:00
Barış Soner Uşaklı
a7562e92d5 move acceptTos to core, fix some margin issues 2023-01-24 11:35:46 -05:00
Barış Soner Uşaklı
f5499fa3d1 chore: up harmony 2023-01-24 10:56:53 -05:00
Barış Soner Uşaklı
3e4bf255a0 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2023-01-24 10:42:03 -05:00
Barış Soner Uşaklı
7571139ee2 change to max-height 2023-01-24 10:41:55 -05:00
Julian Lam
2bc3cf1aa9 Merge branch 'develop' into bootstrap5 2023-01-23 16:07:15 -05:00
Barış Soner Uşaklı
5b8cf54b50 chore: up harmony 2023-01-23 12:11:21 -05:00
Barış Soner Uşaklı
19ce616af9 chore: up harmony 2023-01-23 11:42:24 -05:00
Barış Soner Uşaklı
edf065c59e fix: height on safari, closes #11188, closes #11152 2023-01-23 10:19:10 -05:00
Barış Soner Uşaklı
18fde39f20 feat: closes #11182, save qr text 2023-01-23 09:53:38 -05:00
Barış Soner Uşaklı
b79471147c beta.24 2023-01-21 23:27:05 -05:00
Barış Soner Uşaklı
c01627409c chore: up persona, blockquote bg 2023-01-21 22:26:59 -05:00
Barış Soner Uşaklı
2373587ab1 chore: up deps 2023-01-21 21:10:24 -05:00
Barış Soner Uşaklı
9150528c71 feat: tag filter 2023-01-21 21:01:27 -05:00
Barış Soner Uşaklı
5085e97e20 some cleanup 2023-01-21 15:55:16 -05:00
Barış Soner Uşaklı
29a072c24c category filter on search page
remove code that returns all categories on /search
2023-01-21 05:38:16 -05:00
Barış Soner Uşaklı
0f214b5078 feat: new search WIP 2023-01-21 02:08:04 -05:00
Julian Lam
43c4877a82 fix(deps): ntfy@1.0.10 2023-01-20 14:50:04 -05:00
Barış Soner Uşaklı
5235903bda chore: up composer 2023-01-20 01:41:03 -05:00
Barış Soner Uşaklı
9d8db9390a chore: up harmony 2023-01-20 00:17:12 -05:00
Barış Soner Uşaklı
46f2c43824 chore: up mentions 2023-01-20 00:11:42 -05:00
Barış Soner Uşaklı
6a086d90b4 chore: up composer 2023-01-20 00:02:05 -05:00
Barış Soner Uşaklı
1cab556f6c chore: up harmony 2023-01-19 22:03:36 -05:00
Barış Soner Uşaklı
0c3b8904b8 fix: don't render empty widgets 2023-01-19 22:01:56 -05:00
Barış Soner Uşaklı
96922aadc2 chore: up ntfy 2023-01-19 21:36:07 -05:00
Barış Soner Uşaklı
21ac35465d chore: up harmony 2023-01-19 21:22:31 -05:00
Barış Soner Uşaklı
1004a4b460 fix: closes #11156, add avatar-tooltip class to get opt-in tooltips 2023-01-19 20:46:52 -05:00
Barış Soner Uşaklı
7e89bb035f chore: up harmony 2023-01-19 20:26:18 -05:00
Barış Soner Uşaklı
a6090735bc remove console.log 2023-01-19 20:22:26 -05:00
Julian Lam
bc3637964c fix: labelling and classes on sessionDuration config 2023-01-19 15:54:45 -05:00
Julian Lam
61bab38b2b Merge branch 'develop' into bootstrap5 2023-01-19 15:51:53 -05:00
Julian Lam
cdf31b7472 fix: update text inputs in reputation page to be type number 2023-01-19 15:17:29 -05:00
Julian Lam
e4980c8e1b fix: some forms don't need that bottom margin 2023-01-19 15:12:56 -05:00
Julian Lam
e1a8941e79 fix: arbitrarily add bottom margin to all checkboxes 2023-01-19 15:06:02 -05:00
Julian Lam
6e85ef0b89 fix: add missing form-label class, add semibold to form check labels 2023-01-19 15:05:11 -05:00
Barış Soner Uşaklı
e324ba8bd7 chore: up composer 2023-01-19 12:58:36 -05:00
Barış Soner Uşaklı
38bf81baed chore: up deps 2023-01-19 12:24:06 -05:00
Barış Soner Uşaklı
2289f37a4b chore: up themes 2023-01-19 12:09:37 -05:00
Barış Soner Uşaklı
bd679499dc breaking: move category filter/selector dropdowns to core 2023-01-19 12:04:44 -05:00
Barış Soner Uşaklı
bd13561cf4 fix: closes #11176, fix post tools menu 2023-01-18 23:42:42 -05:00
Barış Soner Uşaklı
6d6c5fb1f8 fix tooltip flicker 2023-01-18 22:55:29 -05:00
Barış Soner Uşaklı
68f66223e7 changes for profile picture 2023-01-18 21:25:00 -05:00
Barış Soner Uşaklı
938496448e chore: up deps 2023-01-18 20:31:05 -05:00
Barış Soner Uşaklı
3a6deec626 add overscroll utility 2023-01-18 20:19:54 -05:00
Barış Soner Uşaklı
bebba646a8 remove unused class 2023-01-18 20:02:13 -05:00
Barış Soner Uşaklı
5fe84d95b1 remove unused class 2023-01-18 20:00:25 -05:00
Barış Soner Uşaklı
bc6ca2f31f remove custom class :duh: 2023-01-18 19:59:37 -05:00
Barış Soner Uşaklı
3d46d81b75 feat: new language strings 2023-01-18 19:39:01 -05:00
Barış Soner Uşaklı
72f235a4db chore: up deps 2023-01-18 14:10:56 -05:00
Barış Soner Uşaklı
f9ded81ef4 up composer 2023-01-18 13:43:54 -05:00
Barış Soner Uşaklı
87005c3e74 chore: up composer 2023-01-18 13:21:45 -05:00
Barış Soner Uşaklı
0a759b9ca9 chore: up deps 2023-01-18 12:56:14 -05:00
Barış Soner Uşaklı
d93ef486c6 fix: closes #11169 2023-01-18 10:33:56 -05:00
Julian Lam
f77f72f9a0 chore: newline 2023-01-18 09:59:36 -05:00
Barış Soner Uşaklı
f3d8ff994b beta.11 2023-01-17 22:49:01 -05:00
Barış Soner Uşaklı
d1f165d520 update dropdown close code for navigator 2023-01-17 22:35:04 -05:00
Julian Lam
a86e912997 fix(deps): bump ntfy to 1.0.7 2023-01-17 14:24:49 -05:00
Barış Soner Uşaklı
0c9fdf581f chore: up harmony 2023-01-17 13:55:21 -05:00
Barış Soner Uşaklı
b1fdc9547e chore: up harmony 2023-01-17 13:28:35 -05:00
Barış Soner Uşaklı
2cbf2cc4ec perf: cut back on socket emits
perf: dont call emit if meta info is not visible
2023-01-17 13:27:02 -05:00
Barış Soner Uşaklı
bc92528061 chore: add default 2023-01-17 13:10:02 -05:00
Barış Soner Uşaklı
52ead114be fix: closes #11167, expose disableCustomUserSkins to config 2023-01-17 13:09:30 -05:00
Barış Soner Uşaklı
0e3f6edcc5 fix: closes #11166, fix scroll error
onNewPostsAddedToDom was being called with an array of dom elements, it expects a jquery object
2023-01-17 12:46:17 -05:00
Barış Soner Uşaklı
231e7a5fac chore: up harmony 2023-01-17 12:25:43 -05:00
Barış Soner Uşaklı
d41406ddfe chore: up composer 2023-01-17 12:24:56 -05:00
Barış Soner Uşaklı
dea6ed6f00 chore: up harmony 2023-01-17 11:50:27 -05:00
Barış Soner Uşaklı
845bc8148f chore: up harmony 2023-01-17 10:08:37 -05:00
Barış Soner Uşaklı
9032383070 fix: closes #11158 2023-01-17 09:53:24 -05:00
Barış Soner Uşaklı
0a7382f6c8 fix: update text when dragging 2023-01-17 01:23:50 -05:00
Barış Soner Uşaklı
d26031af6a chore: up harmony 2023-01-17 01:15:19 -05:00
Barış Soner Uşaklı
e94789157b chore: up harmony 2023-01-17 00:57:13 -05:00
Barış Soner Uşaklı
363e2e3efc feat: add users last roomId to header 2023-01-17 00:24:31 -05:00
Barış Soner Uşaklı
1348850c3e chore: up harmony 2023-01-16 20:35:36 -05:00
Julian Lam
cbb875c732 chore: bump version to beta.1 2023-01-16 17:30:21 -05:00
Barış Soner Uşaklı
bd82ecf5ba chore: up composer 2023-01-16 14:41:56 -05:00
Barış Soner Uşaklı
bb64e7da66 chore: up persona 2023-01-16 14:22:59 -05:00
Julian Lam
30b2bf8d7b fix(deps): bump to harmony beta 1 2023-01-16 14:20:07 -05:00
Barış Soner Uşaklı
1d2f2f938e chore: up harmony 2023-01-16 13:38:30 -05:00
Barış Soner Uşaklı
0143c4f178 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2023-01-16 13:24:39 -05:00
Barış Soner Uşaklı
42a748d5e3 some index + glance fixes, closes #11142 2023-01-16 13:24:33 -05:00
Julian Lam
804e111849 chore: bundle nodebb-plugin-ntfy into dependencies 2023-01-16 13:23:42 -05:00
Barış Soner Uşaklı
0362bff6ae fix: flicker of navigato 2023-01-16 12:21:47 -05:00
Barış Soner Uşaklı
f3e8f9b25f fix: nested replies not updating when icon is used 2023-01-16 11:46:17 -05:00
Barış Soner Uşaklı
964d807de6 chore: up harmony/composer
use newReply with params
2023-01-16 11:25:57 -05:00
Barış Soner Uşaklı
e02f421613 chore: up deps 2023-01-15 23:41:55 -05:00
Barış Soner Uşaklı
da26a297d7 feat: add generateSaveId for composer 2023-01-15 23:26:21 -05:00
Barış Soner Uşaklı
e282d46322 generics before theme, so theme can override 2023-01-15 13:08:37 -05:00
Barış Soner Uşaklı
bb45abac87 feat: picture switcher mobile 2023-01-15 12:27:44 -05:00
Barış Soner Uşaklı
c0040ea7aa update account mobile to match design 2023-01-15 11:12:55 -05:00
Barış Soner Uşaklı
5c4d61af8f feat: add sort key 2023-01-15 01:46:04 -05:00
Barış Soner Uşaklı
facdbbc7a3 feat: update notification item buttons on mark all read 2023-01-15 01:39:56 -05:00
Barış Soner Uşaklı
d2dae19a54 refactor: add missing label classes 2023-01-13 23:15:07 -05:00
Barış Soner Uşaklı
2a89f3d597 properly update header user picture
when icon is changed to picture
2023-01-13 22:04:07 -05:00
Barış Soner Uşaklı
b537ba587b refactor: not all themes have header
user a more specific selector that only updates the correct avatars using user id
2023-01-13 20:51:06 -05:00
Barış Soner Uşaklı
4164d51e08 chore: up harmony 2023-01-13 14:40:40 -05:00
Barış Soner Uşaklı
1d7baf1217 feat: add url to profile links
route: 'info'
url: /user/<userslug>/info
used for comparison in harmony account sidebar
2023-01-13 14:31:56 -05:00
Barış Soner Uşaklı
0cdc9d42cd chore: up harmony 2023-01-13 11:06:25 -05:00
Barış Soner Uşaklı
388a8270c9 feat: add notification counts to /notifications
refactor notifications page so it uses notification module functions
2023-01-13 10:35:40 -05:00
Barış Soner Uşaklı
5aea76e330 chore: up harmony, add lang string 2023-01-13 09:48:18 -05:00
Barış Soner Uşaklı
6bb4426c94 fix: len check 2023-01-13 01:23:20 -05:00
Barış Soner Uşaklı
d3d831e31b fix: system messages are new sets 2023-01-12 21:48:55 -05:00
Barış Soner Uşaklı
2658bcc821 fix: chatwith message fix 2023-01-12 21:44:36 -05:00
Barış Soner Uşaklı
423a44e18e prevent default redirect on switchs 2023-01-12 19:56:16 -05:00
Barış Soner Uşaklı
e15642ef31 refactor: redirect to first chat when accessing /chats
add new hook to disable chat modals
2023-01-12 19:53:51 -05:00
Barış Soner Uşaklı
4931b1f636 refactor: dont create user tooltips on every avatar 2023-01-12 19:51:01 -05:00
Barış Soner Uşaklı
5991727f42 fix: chat fix 2023-01-12 16:14:16 -05:00
Barış Soner Uşaklı
32cad6dc82 feat: add new language string for chat usernames 2023-01-12 13:32:39 -05:00
Barış Soner Uşaklı
8036baf86a refactor: icon select, and fix icon size issue 2023-01-12 11:55:48 -05:00
Barış Soner Uşaklı
3e7633e791 test: helper test fix 2023-01-11 16:52:25 -05:00
Barış Soner Uşaklı
b62478bc56 chore: up themes, fix fontawesome order 2023-01-11 16:08:52 -05:00
Barış Soner Uşaklı
8a8b51914d chore: add missing harmony 2023-01-11 14:00:39 -05:00
Barış Soner Uşaklı
d6a8c1b71c chore: up markdown 2023-01-11 13:53:13 -05:00
Barış Soner Uşaklı
1a0b784c55 feat: dont refresh entire page for simple actions
fixes themes with tabbed navigation
2023-01-11 12:33:39 -05:00
Barış Soner Uşaklı
b1590f28a2 breaking: use component for owner icon
not all themes but an i right under member-name
2023-01-11 11:59:56 -05:00
Barış Soner Uşaklı
53ea1867ab fix: add icon picker scss to client side as well 2023-01-11 11:00:55 -05:00
Barış Soner Uşaklı
9d72f4509d more lang keys 2023-01-10 22:35:37 -05:00
Barış Soner Uşaklı
58eccfcf79 feat: add social lang keys 2023-01-10 21:26:49 -05:00
Barış Soner Uşaklı
60d5378c6f on blocks page show no users found or type to search 2023-01-10 19:50:44 -05:00
Barış Soner Uşaklı
105d2d73ba fix: timeago and other dom modifications after navigation 2023-01-10 18:17:44 -05:00
Barış Soner Uşaklı
f07d1cdd24 refactor: remove unused helpers 2023-01-10 18:17:16 -05:00
Barış Soner Uşaklı
890bf73985 fix: restrict pinned topic sorting to y axis 2023-01-10 14:10:41 -05:00
Julian Lam
63bc8bfd57 fix: move call to filter:middleware.buildHeader out of parallel so that req can be overridden by plugins prior to loading config 2023-01-10 11:16:19 -05:00
Barış Soner Uşaklı
15a162ce07 bump bootswatch 2023-01-10 09:32:28 -05:00
Barış Soner Uşaklı
a4bfbd1c2a load 30 chats instead of 20 2023-01-10 09:32:23 -05:00
Barış Soner Uşaklı
f35cbe8a71 fix: mixins 2023-01-09 14:36:40 -05:00
Barış Soner Uşaklı
cfbe242a0b add gray borders move mixins after bs 2023-01-09 14:29:22 -05:00
Barış Soner Uşaklı
c7c1ff6bea add classname support to buildCategoryLabel
set border-color to backgroundcolor
2023-01-09 14:12:15 -05:00
Barış Soner Uşaklı
8deb1ba4b4 fix: error when trackHeight is 0 2023-01-09 13:36:52 -05:00
Julian Lam
95ded24558 chore: alpha 3 2023-01-06 14:07:09 -05:00
Barış Soner Uşaklı
66e8937692 breaking: use component instead of nav-pills
so themes can use whatever they want for the user list menu
2023-01-06 12:59:51 -05:00
Barış Soner Uşaklı
83ee650d96 allow core style override by theme 2023-01-05 18:44:01 -05:00
Barış Soner Uşaklı
3efad2e13b feat: add template name to body class
allows styling pages based on template ie .template-groups-details
add allowCoverPicture to all profile routes
2023-01-05 17:24:03 -05:00
Barış Soner Uşaklı
71743affc3 feat: add sort to data 2023-01-05 16:11:56 -05:00
Barış Soner Uşaklı
cf7aa19419 fix: admin privileges 2022-12-30 08:58:59 -05:00
Barış Soner Uşaklı
bb69f304c2 fix: #11114, use event delegation
check attribute instead of content of dropdown for load status, so themes can use placeholders
2022-12-24 21:56:15 -05:00
Barış Soner Uşaklı
dd3e2c0d96 breaking: add unblock button instead of changing text dynamically 2022-12-24 18:33:48 -05:00
Barış Soner Uşaklı
d190bf41e0 add responsive borders 2022-12-24 13:12:03 -05:00
Barış Soner Uşaklı
6e86b4afa2 feat: add selected group to all profile pages
add new lang strings
2022-12-23 18:20:43 -05:00
Julian Lam
8f5bb18ee5 feat: update default theme to harmony, move default footer widget to sidebar footer 2022-12-23 14:09:48 -05:00
Julian Lam
69a285fa2c feat: pass widgets to client-side header/footer data 2022-12-23 13:49:57 -05:00
Barış Soner Uşaklı
f5e609ae6a fix: #11112, cleanup autocomplete markup for chats
after modal is closed
when switching chats on chats page
when navigation to another page from a chat page
2022-12-23 11:48:09 -05:00
Barış Soner Uşaklı
d1087106e4 refactor: topics.markAsUnreadForAll
fix fork test
2022-12-22 09:53:04 -05:00
Julian Lam
2144650dd5 Merge remote-tracking branch 'origin/develop' into bootstrap5 2022-12-21 17:20:42 -05:00
Julian Lam
9b2567d517 feat: new strings for composer 2022-12-21 12:41:49 -05:00
Barış Soner Uşaklı
57bfb37c55 feat: add emailHidden 2022-12-20 17:54:14 -05:00
Barış Soner Uşaklı
88fc073485 fix: add missing returns so functions return promise 2022-12-16 17:28:46 -05:00
Julian Lam
81a4ee18c8 fix: replace API calls to api.delete with api.del 2022-12-16 14:22:49 -05:00
Julian Lam
c4e2b4e87f chore: rewrite API module as ESM [breaking] 2022-12-16 14:19:58 -05:00
Julian Lam
0a9b1622cc fix: #11099, handle 401 in api module [breaking] 2022-12-16 12:06:24 -05:00
Julian Lam
00aef13dd3 Revert "fix: restore old behaviour of empty json w/ 401 code in admin middleware" [breaking]
This reverts commit dda5d42610.

re: #11099
2022-12-16 12:05:41 -05:00
Julian Lam
35b5ae195f fix(glance-nav): broken nav buttons 2022-12-15 14:38:34 -05:00
Barış Soner Uşaklı
d814b3325e fix: post queue issues 2022-12-15 13:03:39 -05:00
Barış Soner Uşaklı
ac1f3c314b fix: acp category-selector being changed by theme 2022-12-13 11:18:09 -05:00
Barış Soner Uşaklı
9b3616b103 refactor: move canPostTopic to privs and use on /unread /tag 2022-12-13 11:05:06 -05:00
Julian Lam
b2a59900e3 chore(glance-nav): re-org 2022-12-12 17:14:54 -05:00
Julian Lam
bf05d3527b fix(glance-nav): remove useless call that slowed things down 2022-12-12 17:09:38 -05:00
Julian Lam
940770bb9b fix(glance-nav): replace calls to navigator.getIndex() with index calculation based on track position 2022-12-12 16:59:22 -05:00
Julian Lam
0f7c9a7919 fix(glance-nav): use debounce instead of throttle 2022-12-12 16:46:29 -05:00
Julian Lam
038e7515fd fix(glance-nav): update handle index even if the post summary call fails 2022-12-12 13:26:28 -05:00
Julian Lam
b74bcd1a86 feat(glance-nav): show updated timestamp on nav scroll
thanks @barisusakli
2022-12-12 13:24:03 -05:00
Barış Soner Uşaklı
547f33a0a1 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-12-12 12:36:53 -05:00
Barış Soner Uşaklı
c007ebe326 feat: allow changing fixed param 2022-12-12 12:36:48 -05:00
Julian Lam
50afbde62b feat(glance-nav): anchor and text update for unread indicator 2022-12-12 12:35:54 -05:00
Julian Lam
9d50826821 feat(glance-nav): unread indicator meta text 2022-12-12 12:21:00 -05:00
Barış Soner Uşaklı
574dd8eecb fix: dont lower bookmark
also ignore guests/spiders
2022-12-12 12:17:14 -05:00
Julian Lam
43561734cc fix(glance-nav): do not enable if postcount is less than bookmark threshold; do not allow unread indicator to go above knob 2022-12-12 11:48:03 -05:00
Barış Soner Uşaklı
81c8828bb1 add flex-1 class 2022-12-12 11:42:44 -05:00
Julian Lam
06604571d4 feat: refactor post menu tools to run once instead of checking for content, allow plugins to use skeleton placeholders within 2022-12-12 11:35:32 -05:00
Julian Lam
a28981de7c feat: unread indicator in topic nav 2022-12-09 16:07:47 -05:00
Julian Lam
fe76ee3ad7 feat: post index text in nav handle 2022-12-09 15:38:36 -05:00
Julian Lam
4b3a5e03c2 fix: #11079, update track position on window resize + cleanup 2022-12-08 22:53:00 -05:00
Barış Soner Uşaklı
831510e319 add hover-visible 2022-12-08 19:40:03 -05:00
Barış Soner Uşaklı
1c67d11b16 chore: up themes 2022-12-08 19:17:11 -05:00
Barış Soner Uşaklı
22031759dc Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-12-08 19:11:21 -05:00
Barış Soner Uşaklı
12336c8764 fix: topic events not showing up immediately 2022-12-08 19:11:15 -05:00
Julian Lam
901b2d7561 fix: update source text for quick reply 2022-12-08 13:23:34 -05:00
Barış Soner Uşaklı
57724ef2fb breaking: match topic page class for hiding 2022-12-07 23:36:40 -05:00
Julian Lam
c08fab5769 fix: only show at-a-glance navigator on topic template 2022-12-07 15:47:19 -05:00
Julian Lam
e0280136e4 chore: module cleanup 2022-12-07 15:15:03 -05:00
Julian Lam
e3dd1d62d9 fix: use app flag for at-a-glance active state instead of exported method 2022-12-07 15:11:23 -05:00
Julian Lam
8a83690596 fix: console logs 2022-12-07 15:07:37 -05:00
Julian Lam
54c6fbe287 feat: at-a-glance navigator 2022-12-07 15:07:37 -05:00
Barış Soner Uşaklı
c29876aed3 add white-space: initial 2022-12-07 11:55:40 -05:00
Barış Soner Uşaklı
f997e7a3bc add long/short 2022-12-07 11:02:56 -05:00
Barış Soner Uşaklı
fc914a39a2 add line-clamp mixin 2022-12-07 10:54:11 -05:00
Julian Lam
39ae02ade1 fix: also check theme node_modules folder as a css path 2022-12-05 15:37:01 -05:00
Barış Soner Uşaklı
7f5a9f19dd remove user_label hardcoded css 2022-12-05 15:28:04 -05:00
Julian Lam
db1d04931d refactor: fire topic tools load event once instead of checking for empty container
This allows for themes to put things inside the container (e.g. skeleton placeholders)
2022-12-02 17:04:06 -05:00
Barış Soner Uşaklı
60853bc20f chore: up lavender 2022-12-02 11:28:14 -05:00
Barış Soner Uşaklı
0e117910ba chore: up composer-default
add no drafts key
2022-12-01 12:56:15 -05:00
Barış Soner Uşaklı
55e0cbe76a feat: add draft lang keys 2022-12-01 11:02:11 -05:00
Barış Soner Uşaklı
848a57c314 chore: up themes 2022-12-01 11:01:55 -05:00
Barış Soner Uşaklı
12041d076b breaking: closes #11070, move quickreply to core 2022-12-01 09:52:48 -05:00
Barış Soner Uşaklı
b422c8ce52 breaking: refactor topic events
for proper i18n
support both `user locked this topic 3 hours ago` & `user locked this topic on 19 Oct 2022, 11:42`
2022-11-30 22:02:06 -05:00
Barış Soner Uşaklı
17a6621cd8 Revert "feat: supply subject-first topic event text for themes"
This reverts commit 2fec6b007a.
2022-11-30 18:29:00 -05:00
Julian Lam
2fec6b007a feat: supply subject-first topic event text for themes 2022-11-30 14:40:42 -05:00
Julian Lam
0dfd22c12b fix: have ul as replies container, not div 2022-11-30 14:40:42 -05:00
Barış Soner Uşaklı
9d599341d9 refactor: chat/notif counts 2022-11-30 13:53:08 -05:00
Barış Soner Uşaklı
289eca08a3 use component for count 2022-11-30 11:02:19 -05:00
Barış Soner Uşaklı
e73cf1e280 feat: use flex box for user icons 2022-11-29 19:20:11 -05:00
Barış Soner Uşaklı
b1aca51c48 fix: notif parent
add notifications/count component
2022-11-29 19:08:09 -05:00
Barış Soner Uşaklı
aee8c38cfc refactor: add timeago short/long versions
so themes can pick one
toggle hidden on unread/read icons as well
2022-11-29 10:45:12 -05:00
Julian Lam
064cf1abe7 fix: have Topic.applyDropup apply only to dropdown menus within the topic itself 2022-11-28 12:28:42 -05:00
Barış Soner Uşaklı
efcb1c2618 fix: prototype vulnerability in socket.io onMessage 2022-11-27 19:31:08 -05:00
Barış Soner Uşaklı
4a113bf1c7 refactor: use fw-bold 2022-11-27 19:08:18 -05:00
Barış Soner Uşaklı
63b19301d6 breaking: remove middleware.renderHeader/renderAdminHeader
move render/footer rendering to middleware/render.js
pass the same data that is passed to header to the footer as well, allows rendering navigation/profile dropdowns in footer.tpl
2022-11-27 19:08:09 -05:00
Julian Lam
c472fa2850 feat: buildCategoryLabel helper (for use in harmony theme) 2022-11-27 14:33:31 -05:00
Julian Lam
3c66301f03 fix(deps): update bootbox to v6 2022-11-27 14:22:53 -05:00
Barış Soner Uşaklı
7de2abd01c chore: update bs5 version 2022-11-25 11:15:36 -05:00
Julian Lam
22255ac47b Merge branch 'develop' into bootstrap5 2022-11-24 20:18:38 -05:00
Julian Lam
d9afabf0f2 Merge branch 'develop' into bootstrap5 2022-11-23 16:17:31 -05:00
Julian Lam
3a500f2481 chore: bump version for alpha 2 2022-11-23 16:09:21 -05:00
Julian Lam
ff5d56bb8d Merge branch 'develop' into bootstrap5 2022-11-23 16:07:15 -05:00
Julian Lam
9b7159264f Merge branch 'master' into develop 2022-11-23 16:05:46 -05:00
Barış Soner Uşaklı
ca27f37791 Merge branch 'master' into bootstrap5 2022-11-23 14:17:10 -05:00
Barış Soner Uşaklı
fb0c9174b5 refactor: remove unnecessary async 2022-11-21 18:49:01 -05:00
Julian Lam
c5562967c4 Merge branch 'develop' into bootstrap5 2022-11-18 11:54:35 -05:00
Barış Soner Uşaklı
e583f84e08 refactor: es6 alerts 2022-11-16 14:40:18 -05:00
Julian Lam
378fff2714 Merge branch 'develop' into bootstrap5 2022-11-16 12:18:28 -05:00
Julian Lam
4d88ddb20a fix: tests broken by commit to fix #11042 2022-11-15 14:35:30 -05:00
Julian Lam
e92fd00bca fix: #10042, use bootstrap 5 classes for colour context if privilege is added or removed, prior to saving 2022-11-15 14:22:21 -05:00
Barış Soner Uşaklı
1099de7702 fix: #11037, update eslint-nodebb-config 2022-11-15 11:17:52 -05:00
Barış Soner Uşaklı
c0c8039c4e refactor: remove is-checked, leftover from mdl 2022-11-15 09:34:57 -05:00
Barış Soner Uşaklı
1f62593a21 fix: alert on page load 2022-11-15 09:29:14 -05:00
Barış Soner Uşaklı
72175a971b fix: #11041, label location changed 2022-11-15 09:12:30 -05:00
Barış Soner Uşaklı
c519f06afa chore: up persona 2022-11-14 10:57:39 -05:00
Barış Soner Uşaklı
1c5e16ca3b Merge branch 'develop' into bootstrap5 2022-11-11 18:02:20 -05:00
Barış Soner Uşaklı
3a6898bb4c bs5 fix 2022-11-11 16:25:56 -05:00
Barış Soner Uşaklı
7bd0ccabd3 Merge branch 'develop' into bootstrap5 2022-11-11 16:24:32 -05:00
Barış Soner Uşaklı
435bb92c3f bring back bold for form-labels 2022-11-11 15:32:35 -05:00
Barış Soner Uşaklı
b355212c58 chore: up persona 2022-11-11 14:44:17 -05:00
Barış Soner Uşaklı
39434061a9 refactor: move some tpls to core 2022-11-11 13:12:43 -05:00
Barış Soner Uşaklı
5c220d928b fix: move discard button up, closes #11005 2022-11-11 12:26:52 -05:00
Julian Lam
aaeb0be0d8 Merge branch 'develop' into bootstrap5 2022-11-09 13:31:50 -05:00
Julian Lam
3c194500d2 fix: #11017, bump persona 2022-11-09 12:17:42 -05:00
Julian Lam
515af200ee Merge branch 'develop' into bootstrap5 2022-11-09 12:17:21 -05:00
Opliko
756e9f53a9 feat(fontawesome): New FontAwesome Icon selector (#11010)
* feat: search via FA api in icon picker

* feat: new initial icon list

* fix: only trigger search if the query changed

avoids sending a request for eg. a ctrl key press

* fix: change deprecated .click() to .trigger(click)

* feat: debounce icon search

* fix: use debounce properly
2022-11-09 11:41:37 -05:00
Barış Soner Uşaklı
576f1dbe72 chore: up persona 2022-11-09 11:08:24 -05:00
Barış Soner Uşaklı
bd234a7216 fix: group title 2022-11-09 11:06:42 -05:00
Julian Lam
1eee5e9114 fix(deps): bump spam-be-gone 2022-11-04 11:29:47 -04:00
Barış Soner Uşaklı
12e6e757ea chore: up bootstrap/bootswatch 2022-11-01 17:32:00 -04:00
Barış Soner Uşaklı
662a5e91db chore: up themes 2022-11-01 15:30:22 -04:00
Barış Soner Uşaklı
ab439e6ae8 chore: deps 2022-11-01 14:06:51 -04:00
Barış Soner Uşaklı
c3af787bf8 fix: hardcoded min-height in move topic modal 2022-11-01 13:11:46 -04:00
Barış Soner Uşaklı
375ff48a46 chore: up deps 2022-11-01 10:28:20 -04:00
Barış Soner Uşaklı
90df4e3f2d lint: fix commas 2022-10-25 18:37:49 -04:00
Barış Soner Uşaklı
c9e0bbf0b7 fix: closes #11007, alert close btn css 2022-10-25 18:23:12 -04:00
Barış Soner Uşaklı
9d290a4f6e fix: skins/themes save buttons. remove material icons from header 2022-10-25 18:01:31 -04:00
Barış Soner Uşaklı
299b53a3ee use the new save button on groups/privileges 2022-10-25 17:32:45 -04:00
Barış Soner Uşaklı
4de9f53296 refactor: toggle save button on category save as well 2022-10-25 17:24:46 -04:00
Julian Lam
e7ba890889 refactor: remove unneeded mixin, use bs5 classes and inline style as needed 2022-10-25 14:39:58 -04:00
Julian Lam
e63f8826b4 fix: remaining use of mdl classes in ACP 2022-10-25 14:39:58 -04:00
Julian Lam
836993d137 Revert "fix: closes #11000, dont cover save button with success alert"
This reverts commit c0859188ce.
2022-10-25 14:39:58 -04:00
Julian Lam
556b06ac2d fix: remove success toast on settings.save, navigation, widgets 2022-10-25 14:39:58 -04:00
Julian Lam
539e3cb5a8 fix: 500ms transition instead, also use solid floppy disk icon 2022-10-25 14:39:58 -04:00
Julian Lam
9bbdccbae0 fix: use form-switch instead of checkbox 2022-10-25 14:39:58 -04:00
Julian Lam
3e355be245 feat: have save button turn into green checkmark on successful save 2022-10-25 14:39:58 -04:00
Julian Lam
19c2be6b0b fix: remove save button and replace with partial written with bs5 classes 2022-10-25 14:39:58 -04:00
Julian Lam
aed1ee0224 fix: remove mdl-specific overrides, label bolding 2022-10-25 14:39:58 -04:00
Julian Lam
83f6f99354 fix: remove mdl css file 2022-10-25 14:39:58 -04:00
Julian Lam
2c3f330580 fix: rewrite and standardise all checkboxes in ACP to be bs5 checkboxes 2022-10-25 14:39:58 -04:00
Julian Lam
6da286c22b test: abort controller for interstitials 2022-10-24 15:33:52 -04:00
Julian Lam
ddf7537301 test: fix tests for changes to membershipBtn helper 2022-10-24 14:57:00 -04:00
Julian Lam
f426e7efe6 style: linting for some reason 2022-10-24 14:54:30 -04:00
Julian Lam
635541026b Merge branch 'develop' into bootstrap5 2022-10-24 14:13:18 -04:00
Barış Soner Uşaklı
1ba6e9c080 chore: up widgets 2022-10-21 20:31:02 -04:00
Barış Soner Uşaklı
a9ebffd47a chore: up persona 2022-10-21 20:18:07 -04:00
Barış Soner Uşaklı
3b52624410 change tooltip container 2022-10-21 13:35:23 -04:00
Barış Soner Uşaklı
6a30c0afea chore: up peace 2022-10-21 11:48:03 -04:00
Barış Soner Uşaklı
3509a36b52 chore: up themes 2022-10-21 11:13:11 -04:00
Barış Soner Uşaklı
9ee8bf41d8 chore: up persona 2022-10-21 10:00:53 -04:00
Barış Soner Uşaklı
ef94cd0caa chore: up themes 2022-10-21 09:41:27 -04:00
Barış Soner Uşaklı
c0859188ce fix: closes #11000, dont cover save button with success alert 2022-10-21 09:29:04 -04:00
Barış Soner Uşaklı
66f8c18f6a chore: up persona 2022-10-21 09:19:19 -04:00
Barış Soner Uşaklı
427db1adb8 fix: navi textClass 2022-10-21 09:00:34 -04:00
Barış Soner Uşaklı
1473f79390 chore: up composer 2022-10-21 01:05:12 -04:00
Barış Soner Uşaklı
79cc00b4ea changed to md 2022-10-20 23:26:37 -04:00
Barış Soner Uşaklı
5c7d544bcb chore: up persona 2022-10-20 23:25:54 -04:00
Julian Lam
5c9fe6c0fd fix: stop topic navigation hotkeys from firing if in a mousetrap-enabled form element 2022-10-20 21:59:29 -04:00
Barış Soner Uşaklı
5ba818ba7b feat: add search data to filter:search.inContent 2022-10-20 20:36:43 -04:00
Barış Soner Uşaklı
c1b89f5bd0 chore: up lavender 2022-10-20 11:56:45 -04:00
Barış Soner Uşaklı
8c6cc7bee8 chore: up composer 2022-10-19 19:44:50 -04:00
Barış Soner Uşaklı
37838095d8 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-10-19 19:36:32 -04:00
Barış Soner Uşaklı
ed7d629451 chore: up composer 2022-10-19 19:36:31 -04:00
Julian Lam
8c238a8a13 chore: add bootstrap5 to test runner for now 2022-10-19 15:24:44 -04:00
Julian Lam
0bff957c20 Merge remote-tracking branch 'origin/develop' into bootstrap5 2022-10-19 15:24:07 -04:00
Julian Lam
591380531f fix: form text in ACP > Appearance > Customise 2022-10-19 14:27:39 -04:00
Barış Soner Uşaklı
b917ceaaf2 chore: add back lavender 2022-10-19 12:33:59 -04:00
Barış Soner Uşaklı
9e064a864e fix col-xs classes 2022-10-19 12:10:54 -04:00
Julian Lam
8ddbd10506 fix(deps): bump persona 2022-10-19 12:00:40 -04:00
Julian Lam
a600b7c1c6 fix(deps): bump composer and persona 2022-10-19 11:49:50 -04:00
Barış Soner Uşaklı
e2a7af9c6f chore: up persona 2022-10-19 08:58:51 -04:00
Julian Lam
dac71c84cb chore: remove socketUser.emailConfirm again 2022-10-18 15:26:28 -04:00
Julian Lam
c1081f7039 Merge branch 'master' into bootstrap5 2022-10-18 15:21:20 -04:00
Barış Soner Uşaklı
a2c824bf99 fix: outgoing 2022-10-18 13:05:56 -04:00
Barış Soner Uşaklı
78935f7338 Merge branch 'master' into bootstrap5 2022-10-18 10:41:28 -04:00
Barış Soner Uşaklı
94fbc8ea17 progress height 2022-10-17 20:59:03 -04:00
Barış Soner Uşaklı
e3110950ff chore: up deps
move blockquote style to generics.scss
get rid of voodoo selection code, selection.toString() seems to work
2022-10-17 20:47:10 -04:00
Barış Soner Uşaklı
6c8b8e057c chore: up persona 2022-10-17 12:18:59 -04:00
Barış Soner Uşaklı
7c5dbaf2c2 fix: EEXISTS error on linux if plugin/theme overrides core js file 2022-10-17 11:15:50 -04:00
Barış Soner Uşaklı
8f0f635f14 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-10-16 17:18:21 -04:00
Barış Soner Uşaklı
4e79c12c7b chore: up composer 2022-10-16 17:18:15 -04:00
Opliko
3bdee868c2 fix: move FA fonts to a versioned subfolder to bust cache on updates (#10979) 2022-10-15 17:24:59 -04:00
Barış Soner Uşaklı
2f8834ee0a chore: up persona 2022-10-14 21:05:44 -04:00
Barış Soner Uşaklı
92e7653ebf refactor: half size icons 2022-10-14 21:03:34 -04:00
Barış Soner Uşaklı
08454f66c9 chore: up persona 2022-10-14 20:22:19 -04:00
Barış Soner Uşaklı
4f756be008 chore: up persona 2022-10-14 20:16:11 -04:00
Barış Soner Uşaklı
35a3ff7cb6 chore: up composer 2022-10-13 13:40:16 -04:00
Barış Soner Uşaklı
e4a3cf66ba fix: admin header 2022-10-13 13:28:11 -04:00
Barış Soner Uşaklı
4f55cfc494 chore: up composer 2022-10-13 11:18:37 -04:00
Barış Soner Uşaklı
3cdc136a9a fix active plugins (#10964) 2022-10-13 10:11:30 -04:00
Barış Soner Uşaklı
9de2b3653f modal style 2022-10-12 13:11:11 -04:00
Barış Soner Uşaklı
3ab800d49f refactor: move embedded group create modal
and fix its styling
2022-10-12 12:40:35 -04:00
Barış Soner Uşaklı
f3ae22d2a8 feat: add color property to taskbar
allows matching category icon when changing categories in composer
2022-10-11 19:16:27 -04:00
Barış Soner Uşaklı
34439c06de chore: up themes 2022-10-11 13:01:41 -04:00
Barış Soner Uşaklı
6f503c9512 make icons text white 2022-10-11 12:46:07 -04:00
Barış Soner Uşaklı
bc772a8303 chore: up persona/spam-be-gone 2022-10-11 12:32:37 -04:00
oplik0
421860969f feat: update link in fontawesome.tpl 2022-10-11 10:54:25 -04:00
oplik0
5e98ebb073 docs: update FA attribution.js 2022-10-11 10:54:25 -04:00
oplik0
18184b936d feat: move to FA6.2 2022-10-11 10:54:25 -04:00
Julian Lam
c285f72e12 fix: bug that allowed for bypass of GDPR interstitial on SSO registrations simply by cancelling the form 2022-10-11 10:46:12 -04:00
Julian Lam
2533a2e074 refactor: add new method user.interstitials.get; DRY 2022-10-11 10:46:12 -04:00
Barış Soner Uşaklı
7f5f4e8967 breaking: chat.close takes in uuid instead of chatmodal 2022-10-09 21:59:17 -04:00
Barış Soner Uşaklı
f7121fa529 breaking: move action:chat.sent to success callback of api call
dont fire action:chat.sent on chat message edit, fire action:chat.edited instead
2022-10-09 21:51:25 -04:00
Barış Soner Uşaklı
a116639699 breaking: move ban/mute modals
breaking: add accounts/moderate module and move ban/mute there
2022-10-09 21:43:42 -04:00
Barış Soner Uşaklı
796bf240cc breaking: remove unused colorpicker 2022-10-09 20:59:08 -04:00
Barış Soner Uşaklı
4505229661 eval-source-map is recommended for dev 2022-10-09 15:44:52 -04:00
Barış Soner Uşaklı
e8da0557bb default to prod 2022-10-09 15:33:07 -04:00
Barış Soner Uşaklı
beb52df1d9 fix: lint use async compile 2022-10-08 22:58:08 -04:00
Barış Soner Uşaklı
36b29d0266 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-10-08 22:18:15 -04:00
Barış Soner Uşaklı
5af262a4d0 chore: add popperjs 2022-10-08 22:18:06 -04:00
Opliko
5772e0bbfb feat: use sass-embedded if possible (#10950) 2022-10-08 22:17:41 -04:00
Barış Soner Uşaklı
9d0b1d5092 refactor: remove unused code 2022-10-08 20:03:35 -04:00
Barış Soner Uşaklı
6837440942 fix: showAndFocus to use a specific search form 2022-10-06 09:17:35 -04:00
Barış Soner Uşaklı
0cb0a5c294 show progress 2022-10-06 07:52:32 -04:00
Barış Soner Uşaklı
045ef8bad9 Esbuild (#10940)
* ci: add minimum GitHub token permissions for workflows
Signed-off-by: Ashish Kurmi <akurmi@stepsecurity.io>

* feat: use esbuild for minification

Co-authored-by: Ashish Kurmi <akurmi@stepsecurity.io>
2022-10-06 07:51:41 -04:00
Barış Soner Uşaklı
7f9b1cf0be perf: speed up build
run webpack as soon as js targets are done
this allows building js/css in parallel
2022-10-05 22:46:42 -04:00
Barış Soner Uşaklı
308dae1a52 chore: up peace 2022-10-05 21:42:22 -04:00
Julian Lam
4f70d19e1e chore: v3.0.0-alpha.1 🎉 2022-10-05 14:09:57 -04:00
Julian Lam
3ddf91fb75 chore: clean up package.json for alpha 2022-10-05 14:02:03 -04:00
Barış Soner Uşaklı
9f0ecd6ea3 chore: rename panel to card 2022-10-05 10:55:46 -04:00
Barış Soner Uşaklı
97d499ce97 chore: up composer 2022-10-05 10:45:45 -04:00
Barış Soner Uşaklı
1fac6f69ad breaking: remove deprecated app methods 2022-10-05 10:18:23 -04:00
Barış Soner Uşaklı
cbc632da7d fix bs tooltips, update status tooltips
see https://github.com/twbs/bootstrap/issues/32372
2022-10-05 10:09:44 -04:00
Barış Soner Uşaklı
1d5cc19351 chore: up persona 2022-10-04 19:47:34 -04:00
Barış Soner Uşaklı
18cdb2575b chore: up persona 2022-10-04 19:31:13 -04:00
Barış Soner Uşaklı
78917e9117 fix: web installer css/tpl 2022-10-04 19:05:20 -04:00
Julian Lam
4757affa65 fix(deps): up 2factor 2022-10-04 13:48:32 -04:00
Barış Soner Uşaklı
ba52531a20 tooltip container 2022-10-03 14:03:40 -04:00
Barış Soner Uşaklı
6a5a28abca chore: up persona version 2022-10-03 13:42:59 -04:00
Barış Soner Uşaklı
661c0507a5 chore: up peace 2022-10-03 11:38:42 -04:00
Barış Soner Uşaklı
26bcb8b673 breaking: move bottom-sheet.scss to core 2022-10-03 10:41:21 -04:00
Barış Soner Uşaklı
eeb39b42b9 chore: add peace to package.json 2022-10-03 10:17:45 -04:00
Barış Soner Uşaklı
b35e90a6ad breaking: move modals to core 2022-10-03 10:13:20 -04:00
Barış Soner Uşaklı
389a2df9bf fix: category ordering add test 2022-10-03 09:40:54 -04:00
Barış Soner Uşaklı
68ba7cf97e fix timeago 2022-10-02 22:21:56 -04:00
Barış Soner Uşaklı
f3ee1097ed hover d-flex/block 2022-10-02 20:45:03 -04:00
Barış Soner Uşaklı
5f12d167ab fix: typo, timeago on blocks page 2022-10-02 20:28:09 -04:00
Barış Soner Uşaklı
adc248960b fix: timeago cutoff on users page
remove unused translator import
2022-10-02 18:02:33 -04:00
Barış Soner Uşaklı
a4e0b589ae bold/underlerine matches 2022-10-02 11:36:01 -04:00
Barış Soner Uşaklı
415f65cd79 add border-muted utility 2022-10-02 01:40:10 -04:00
Barış Soner Uşaklı
dfe69400ac fix: crash in category drag, closes #10932
happens when a child is dragged to root or from root to a nested level
2022-10-01 22:16:20 -04:00
Barış Soner Uşaklı
c81eb18623 fix more categories button not moving with parent
fix order issue
2022-10-01 22:02:56 -04:00
Barış Soner Uşaklı
4667dc8c88 fix admin toast 2022-10-01 22:00:55 -04:00
Barış Soner Uşaklı
7b18ea3e61 add hover display utility 2022-09-30 23:01:39 -04:00
Barış Soner Uşaklı
260ac5f427 refactor: use avatar helper
fix empty dropdown when searching
2022-09-30 23:01:14 -04:00
Barış Soner Uşaklı
e270474eed add manage lang string 2022-09-30 18:33:39 -04:00
Barış Soner Uşaklı
4d734714dd fix group preview update 2022-09-30 18:33:33 -04:00
Barış Soner Uşaklı
8ffc1c3e96 feat: add btnClass to membershipBtn helper 2022-09-30 12:05:04 -04:00
Barış Soner Uşaklı
0f2bd3e6ec use form control 2022-09-29 22:41:05 -04:00
Barış Soner Uşaklı
af190ac210 fix tagsinput to look like bs5 inputs 2022-09-29 22:26:10 -04:00
Barış Soner Uşaklı
21236fdc37 restore scroll position after adding necro messages 2022-09-29 19:32:08 -04:00
Julian Lam
dc0b3753d8 refactor: buildAvatar attributes to be Map instead of array of strings, to allow for easier overwriting 2022-09-29 16:28:58 -04:00
Julian Lam
d68806db1b fix: remove user avatar on error out 2022-09-29 16:28:58 -04:00
Julian Lam
ab157136aa refactor: helpers.buildAvatar now renders both avatars, and hides the second one using CSS 2022-09-29 16:28:58 -04:00
Barış Soner Uşaklı
f58e1cda30 fix: tag update only the edited post 2022-09-29 16:16:15 -04:00
Barış Soner Uşaklı
375dad8961 fix: navigator not properly updating url
remove threshold not used anymore
2022-09-29 15:13:05 -04:00
Barış Soner Uşaklı
5dc74abcf1 chore: add account lang string 2022-09-29 15:07:01 -04:00
Barış Soner Uşaklı
9c97211d8d lighter icons 2022-09-29 13:13:18 -04:00
Barış Soner Uşaklı
80c1ce8d85 fix: if no voters clear tooltip 2022-09-29 12:51:50 -04:00
Barış Soner Uşaklı
4c86c767b1 fix: bgColor not changing on picture modal 2022-09-29 12:36:49 -04:00
Barış Soner Uşaklı
b0a98e7f12 breaking: move/rename change_picture_modal to core 2022-09-29 12:30:54 -04:00
Barış Soner Uşaklı
daaa93b6e4 feat: add action:unread.updateCount 2022-09-29 10:42:32 -04:00
Barış Soner Uşaklı
a970c615fb feat: add action:chat.updateCount client side hook 2022-09-29 09:21:13 -04:00
Barış Soner Uşaklı
58cecafb34 breaking: use components instead of ids for search
breaking: remove deprecated app.search methods
allow having multiple search forms in the page
2022-09-28 12:01:31 -04:00
Barış Soner Uşaklı
092bdd9f22 fix: dynamic tooltips 2022-09-27 22:27:40 -04:00
Barış Soner Uşaklı
75eea53c4b feat: add buildCategoryIcon helper
similar to buildAvatar
2022-09-27 21:32:12 -04:00
Julian Lam
d45a34fdb8 test: fix tests so that when user.create is called, email is set prior to confirmation 2022-09-27 14:34:01 -04:00
Julian Lam
91849efde1 fix: #10805, do not set email field in user hash on user creation 2022-09-27 14:34:01 -04:00
Julian Lam
5a39fc2548 chore: remove passport.authenticate wrapper that passed in keepSessionInfo option [breaking] 2022-09-27 13:42:01 -04:00
Julian Lam
ee77ce0789 chore: remove deprecated socket.io user export methods [breaking] 2022-09-27 13:34:00 -04:00
Julian Lam
1d63fc469a chore: remove deprecated old routes for user data exports [breaking] 2022-09-27 11:23:52 -04:00
Julian Lam
a6f8ff440a fix: move alert.tpl to partials/toast.tpl 2022-09-27 10:39:46 -04:00
Barış Soner Uşaklı
7118cfa433 chore: up deps 2022-09-24 22:10:05 -04:00
Barış Soner Uşaklı
67b488aa7d add changeSkin calls to settings
add templateData to header/footer to match other filter:<tpl>:build hooks
2022-09-24 14:49:11 -04:00
Barış Soner Uşaklı
e9bd46592b use bs class for necro post 2022-09-24 14:46:30 -04:00
Barış Soner Uşaklı
1a2ad81471 fix: tool dropdown 2022-09-24 00:11:22 -04:00
Barış Soner Uşaklı
90b6d593fc give post tool dropdown min-height
it starts empty since its rendered after clicking the toggle
2022-09-24 00:03:20 -04:00
Barış Soner Uşaklı
f5d30d83c6 breaking: move some modals to core 2022-09-23 20:15:37 -04:00
Barış Soner Uşaklı
1aa916feb2 feat: allow merge from inside topic 2022-09-23 14:43:04 -04:00
Barış Soner Uşaklı
9e0f100d36 match other tool labels 2022-09-23 14:38:07 -04:00
Barış Soner Uşaklı
d1417609dd feat: allow logout button anywhere 2022-09-23 12:55:02 -04:00
Barış Soner Uşaklı
9510cc540a breaking: remove renderTopicEvents
use partial template
2022-09-23 10:56:15 -04:00
Barış Soner Uşaklı
0930934200 feat: add relevant topic events to post objects
see c9604f216a
2022-09-23 10:49:50 -04:00
Barış Soner Uşaklı
21e38d9e45 fix: scroll to post if theme doesn't have top navbar 2022-09-23 09:16:39 -04:00
Barış Soner Uşaklı
a5d4e6b68a fix another avatar 2022-09-22 21:03:56 -04:00
Barış Soner Uşaklı
48021c0b0a feat: allow always visible search input
if the search input is already visible do not hide it after it loses focus
2022-09-22 21:03:51 -04:00
Barış Soner Uşaklı
9f72f84775 fix: img-fluid 2022-09-22 15:43:42 -04:00
Barış Soner Uşaklı
179faa2270 fix: add missing post index 2022-09-22 12:31:25 -04:00
Barış Soner Uşaklı
c3920ccb10 feat: add the user of the post to category teaser 2022-09-22 12:23:34 -04:00
Barış Soner Uşaklı
cc4d320111 persona 2022-09-21 22:26:26 -04:00
Barış Soner Uşaklı
6b4e00fd47 test: fix profile pic test 2022-09-21 13:01:00 -04:00
Barış Soner Uşaklı
bfb63061c7 test: fix theme test 2022-09-21 12:49:15 -04:00
Barış Soner Uşaklı
e607c622b3 drop socket.io version 2022-09-21 12:40:34 -04:00
Barış Soner Uşaklı
ed9172d757 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-09-21 12:31:00 -04:00
Barış Soner Uşaklı
375cd3202a chore: up deps 2022-09-21 12:30:59 -04:00
Julian Lam
dcfcc5ea2c Merge remote-tracking branch 'origin/develop' into bootstrap5 2022-09-21 12:12:27 -04:00
Barış Soner Uşaklı
0997fc626c chore: up deps 2022-09-21 10:33:12 -04:00
Barış Soner Uşaklı
0e3c8a201a up deps 2022-09-21 10:02:32 -04:00
Barış Soner Uşaklı
53d830d87e add max to cache 2022-09-21 09:52:16 -04:00
Barış Soner Uşaklı
be33752ba6 fix admin reconnect icon 2022-09-21 09:48:56 -04:00
Barış Soner Uşaklı
b2c3fcaaf5 increase webpack size limits 2022-09-20 21:11:08 -04:00
Barış Soner Uşaklı
ce2d180a23 remove extra param 2022-09-17 22:10:17 -04:00
Barış Soner Uşaklı
75dc78b738 perf: ltr/rtl change
fix modals
2022-09-17 21:32:31 -04:00
Julian Lam
25d1560dd1 fix(deps): bump mentions to v4 2022-09-16 21:29:00 -04:00
Julian Lam
f1c5adbf00 fix(deps): update to v3.0 compatible markdown and 2factor plugins 2022-09-16 21:13:38 -04:00
Barış Soner Uşaklı
37027003b5 fix grunt 2022-09-15 16:40:32 -04:00
Barış Soner Uşaklı
c7da128ecd fix: #10895, build client/adminCSS in single call 2022-09-15 14:45:11 -04:00
Barış Soner Uşaklı
11cf4fb144 widget changes 2022-09-15 14:29:59 -04:00
Barış Soner Uşaklı
916759b802 test: build test fix 2022-09-15 10:10:03 -04:00
Barış Soner Uşaklı
0bd96ab582 lint: remove less 2022-09-15 09:54:27 -04:00
Barış Soner Uşaklı
4cbfe33714 remove less 2022-09-15 09:31:53 -04:00
Barış Soner Uşaklı
e8d8b65b80 remove blue bg 2022-09-14 16:15:39 -04:00
Barış Soner Uşaklı
65cfbef567 update findBootstrapEnv, remove dupe functions 2022-09-14 15:59:27 -04:00
Julian Lam
f1817efe5d fix: add back timeago to post history modal 2022-09-14 13:19:06 -04:00
Julian Lam
bca239c476 fix: some small modal bugs with change picture modal 2022-09-14 13:04:50 -04:00
Julian Lam
5d332ea052 fix: have width and height defined in user-icon-style mixin 2022-09-14 11:05:51 -04:00
Barış Soner Uşaklı
9932a0dd1a fix text-right 2022-09-13 22:13:33 -04:00
Barış Soner Uşaklı
41b371c53c avatar fixes 2022-09-13 20:48:29 -04:00
Barış Soner Uşaklı
ba75be47ae div>span 2022-09-13 19:40:41 -04:00
Julian Lam
f75838c906 refactor: buildAvatar helper to take css variable for size instead of hardcoded xs, sm, etc., fixed up picture selection modal 2022-09-13 15:19:52 -04:00
Barış Soner Uşaklı
6bffe519b3 bs5 rtl support 2022-09-13 14:11:55 -04:00
Barış Soner Uşaklı
541ab312d5 margins 2022-09-13 11:17:59 -04:00
Barış Soner Uşaklı
d23b9563c8 modal fix 2022-09-13 11:10:20 -04:00
Barış Soner Uşaklı
7c5690cc49 match fontsize/body color 2022-09-13 10:54:03 -04:00
Barış Soner Uşaklı
f865f00ecb buttons no longer reversed 2022-09-13 10:44:08 -04:00
Barış Soner Uşaklı
775971d19b btn sizes 2022-09-13 10:37:00 -04:00
Barış Soner Uşaklı
c61935bb96 fix: typo 2022-09-13 10:26:07 -04:00
Barış Soner Uşaklı
b25a0769d5 fix privilege filters 2022-09-13 10:17:41 -04:00
Barış Soner Uşaklı
d2e972cf6c switch to scss in customCSS 2022-09-13 09:37:24 -04:00
Barış Soner Uşaklı
401aaf1757 fix floats 2022-09-12 18:34:37 -04:00
Barış Soner Uşaklı
1df99a4727 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-09-12 17:14:58 -04:00
Barış Soner Uşaklı
5d7dbafb1d inherit works better if category search is inside a hidden element
like the composer
2022-09-12 17:14:57 -04:00
Julian Lam
57ff967ab0 Merge remote-tracking branch 'origin/develop' into bootstrap5 2022-09-12 16:57:02 -04:00
Barış Soner Uşaklı
91d1cbb5dc remove unnecessary tooltip calls 2022-09-11 21:59:47 -04:00
Barış Soner Uşaklı
a94cc877c4 tooltip fixes 2022-09-11 21:49:30 -04:00
Barış Soner Uşaklı
0512992afc remove search&dropdown tooltips 2022-09-11 20:07:04 -04:00
Barış Soner Uşaklı
8dde53c7af fix navlink active 2022-09-11 20:01:24 -04:00
Barış Soner Uşaklı
ff7c57f7bf fix: fa icon picker, help-block => form-text 2022-09-11 00:05:42 -04:00
Barış Soner Uşaklı
bdd02b72de fa shims and fix fonts 2022-09-10 20:50:13 -04:00
Barış Soner Uşaklı
9b30fc1680 fix panels 2022-09-10 20:13:45 -04:00
Barış Soner Uşaklı
9d7c1073d3 search padding 2022-09-09 14:08:10 -04:00
Barış Soner Uşaklı
527834a555 remove margin 2022-09-09 13:51:42 -04:00
Barış Soner Uşaklı
825538d5a9 acp header fix 2022-09-09 13:50:09 -04:00
Barış Soner Uşaklı
1510baa9a6 fix floating button zindex 2022-09-09 13:25:04 -04:00
Barış Soner Uşaklı
d3bd9f4697 partials and btn fixes 2022-09-09 12:36:18 -04:00
Barış Soner Uşaklı
2c1f920b6d fix col-xs-<> classes 2022-09-08 21:20:50 -04:00
Barış Soner Uşaklı
89aa9fb212 acp advanced pages 2022-09-08 21:06:23 -04:00
Barış Soner Uşaklı
9f9c9c6a66 plugins/rewards/widgets/skins/customize
modal fixes
2022-09-07 20:36:32 -04:00
Barış Soner Uşaklı
48207bc2a2 advanced/api/web-crawler pages 2022-09-03 22:34:58 -04:00
Barış Soner Uşaklı
ce9bcba16d feat: paper skin got renamed to materia 2022-09-03 22:11:18 -04:00
Barış Soner Uşaklı
b9de84e5bf email/post/uploads settings pages 2022-09-02 19:39:00 -04:00
Barış Soner Uşaklı
22e478307d cookies/reputation/user pages 2022-09-02 12:56:58 -04:00
Barış Soner Uşaklı
8cf64ff9ce feat: navigation 2022-09-02 12:26:38 -04:00
Barış Soner Uşaklı
75494011e1 more admin settings pages 2022-09-01 19:05:41 -04:00
Barış Soner Uşaklı
75506250e1 more manage pages 2022-09-01 18:00:44 -04:00
Barış Soner Uşaklı
d06938d877 groups/tags 2022-08-31 17:49:28 -04:00
Julian Lam
4eb71b1284 fix: update .avatar generic to use line-height and font-size variables, instead of hardcoded values 2022-08-31 17:14:11 -04:00
Barış Soner Uşaklı
3f4e5bb9a8 users page 2022-08-31 14:55:50 -04:00
Barış Soner Uşaklı
0ad61c53ae privileges 2022-08-31 14:30:55 -04:00
Barış Soner Uşaklı
a45131ab0e dashboard header fix 2022-08-30 20:41:33 -04:00
Barış Soner Uşaklı
cddc2c0b76 feat: update categories/category pages
fix dropdowns
2022-08-30 20:13:51 -04:00
Barış Soner Uşaklı
1930db6086 dashboard/nav fixes 2022-08-29 15:59:38 -04:00
Barış Soner Uşaklı
1cea5ab8c4 admin menu fixes 2022-08-29 15:36:50 -04:00
Barış Soner Uşaklı
30b999c16f Merge branch 'develop' into bootstrap5 2022-08-29 14:55:06 -04:00
Barış Soner Uşaklı
9260b4ef19 add missing pointer class 2022-08-26 19:41:10 -04:00
Barış Soner Uşaklı
dc231bf3b3 fix: dont hide dropdowns 2022-08-26 18:41:10 -04:00
Barış Soner Uşaklı
1b539fd0ff Merge branch 'master' into bootstrap5 2022-08-26 18:39:39 -04:00
Barış Soner Uşaklı
635cc1ffdf get rid of old grays and brand colors 2022-08-26 18:35:54 -04:00
Barış Soner Uşaklı
18b9a7afe1 change fa-stack 2022-08-25 22:17:47 -04:00
Barış Soner Uşaklı
5ad7c89803 fix taginput for bs5 2022-08-25 19:56:36 -04:00
Barış Soner Uşaklı
c4393af8c0 feat: add the same timeout to blur 2022-08-25 19:18:06 -04:00
Barış Soner Uşaklı
da75b07add feat: remove shadow mixin, dont highlight single letters 2022-08-25 15:12:51 -04:00
Barış Soner Uşaklı
bed8d97840 feat: add new_password key 2022-08-25 10:46:10 -04:00
Barış Soner Uşaklı
fecc4f948a feat: use visibility hidden for search button 2022-08-24 19:29:38 -04:00
Barış Soner Uşaklı
d5d4c1b3ed fix crash 2022-08-24 16:39:29 -04:00
Barış Soner Uşaklı
f2bd8e22d7 remove hidden 2022-08-24 11:17:40 -04:00
Barış Soner Uşaklı
d7a29a3df2 bs5 import 2022-08-24 10:27:15 -04:00
Barış Soner Uşaklı
f7f7066286 feat: add new bootswatch skins 2022-08-24 10:21:21 -04:00
Barış Soner Uşaklı
c6436bc542 fix: users navpills 2022-08-24 09:48:56 -04:00
Barış Soner Uşaklı
b50f662d45 skin support, correct order of imports for overrides 2022-08-23 19:30:31 -04:00
Barış Soner Uşaklı
62ec61e00c fix: category dropdown search 2022-08-23 16:39:33 -04:00
Barış Soner Uşaklı
0fb0745613 feat: bring back responsive-utilities 2022-08-23 12:05:33 -04:00
Barış Soner Uşaklı
eadeb42e57 fix: move fontawesome before theme 2022-08-22 19:01:17 -04:00
Barış Soner Uşaklı
c674422205 refactor: order of scss files 2022-08-22 14:29:41 -04:00
Barış Soner Uşaklı
0042307234 fix: sass division warnings 2022-08-22 13:54:47 -04:00
Barış Soner Uşaklı
288e6260ef refactor: remove unused url 2022-08-22 13:16:25 -04:00
Barış Soner Uşaklı
11c7a02aaf refactor: fixPath 2022-08-22 13:14:05 -04:00
Barış Soner Uşaklı
196d22be16 bs5 prep 2022-08-22 12:56:46 -04:00
Barış Soner Uşaklı
2a8f1e4cba add fa scss 2022-08-22 11:15:25 -04:00
Barış Soner Uşaklı
58141f603b bs5 2022-08-22 11:14:22 -04:00
526 changed files with 17650 additions and 35898 deletions

View File

@@ -18,12 +18,3 @@ logs/
.eslintrc .eslintrc
test/files test/files
*.min.js *.min.js
/public/src/app.js
/public/src/client.js
/public/src/admin/admin.js
/public/src/modules/translator.common.js
/public/src/modules/pictureCropper.js
/public/src/modules/ace-editor.js
/public/src/client/account/header.js
/public/src/client/test.js

View File

@@ -54,14 +54,9 @@ module.exports = function (grunt) {
} }
} }
const styleUpdated_Client = pluginList.map(p => `node_modules/${p}/*.less`) const styleUpdated_Client = pluginList.map(p => `node_modules/${p}/*.scss`)
.concat(pluginList.map(p => `node_modules/${p}/*.css`)) .concat(pluginList.map(p => `node_modules/${p}/*.css`))
.concat(pluginList.map(p => `node_modules/${p}/+(public|static|less)/**/*.less`)) .concat(pluginList.map(p => `node_modules/${p}/+(public|static|scss)/**/*.scss`))
.concat(pluginList.map(p => `node_modules/${p}/+(public|static)/**/*.css`));
const styleUpdated_Admin = pluginList.map(p => `node_modules/${p}/*.less`)
.concat(pluginList.map(p => `node_modules/${p}/*.css`))
.concat(pluginList.map(p => `node_modules/${p}/+(public|static|less)/**/*.less`))
.concat(pluginList.map(p => `node_modules/${p}/+(public|static)/**/*.css`)); .concat(pluginList.map(p => `node_modules/${p}/+(public|static)/**/*.css`));
const clientUpdated = pluginList.map(p => `node_modules/${p}/+(public|static)/**/*.js`); const clientUpdated = pluginList.map(p => `node_modules/${p}/+(public|static)/**/*.js`);
@@ -72,24 +67,15 @@ module.exports = function (grunt) {
const langUpdated = pluginList.map(p => `node_modules/${p}/+(public|static|languages)/**/*.json`); const langUpdated = pluginList.map(p => `node_modules/${p}/+(public|static|languages)/**/*.json`);
grunt.config(['watch'], { grunt.config(['watch'], {
styleUpdated_Client: { styleUpdated: {
files: [ files: [
'public/less/**/*.less', 'public/scss/**/*.scss',
...styleUpdated_Client, ...styleUpdated_Client,
], ],
options: { options: {
interval: 1000, interval: 1000,
}, },
}, },
styleUpdated_Admin: {
files: [
'public/less/**/*.less',
...styleUpdated_Admin,
],
options: {
interval: 1000,
},
},
clientUpdated: { clientUpdated: {
files: [ files: [
'public/src/**/*.js', 'public/src/**/*.js',
@@ -167,16 +153,14 @@ module.exports = function (grunt) {
grunt.event.removeAllListeners('watch'); grunt.event.removeAllListeners('watch');
grunt.event.on('watch', (action, filepath, target) => { grunt.event.on('watch', (action, filepath, target) => {
let compiling; let compiling;
if (target === 'styleUpdated_Client') { if (target === 'styleUpdated') {
compiling = 'clientCSS'; compiling = ['clientCSS', 'acpCSS'];
} else if (target === 'styleUpdated_Admin') {
compiling = 'acpCSS';
} else if (target === 'clientUpdated') { } else if (target === 'clientUpdated') {
compiling = 'js'; compiling = ['js'];
} else if (target === 'templatesUpdated') { } else if (target === 'templatesUpdated') {
compiling = 'tpl'; compiling = ['tpl'];
} else if (target === 'langUpdated') { } else if (target === 'langUpdated') {
compiling = 'lang'; compiling = ['lang'];
} else if (target === 'serverUpdated') { } else if (target === 'serverUpdated') {
// empty require cache // empty require cache
const paths = ['./src/meta/build.js', './src/meta/index.js']; const paths = ['./src/meta/build.js', './src/meta/index.js'];
@@ -184,7 +168,7 @@ module.exports = function (grunt) {
return run(); return run();
} }
require('./src/meta/build').build([compiling], { webpack: false }, (err) => { require('./src/meta/build').build(compiling, { webpack: false }, (err) => {
if (err) { if (err) {
winston.error(err.stack); winston.error(err.stack);
} }

View File

@@ -182,5 +182,6 @@
"composer:showHelpTab": 1, "composer:showHelpTab": 1,
"composer:allowPluginHelp": 1, "composer:allowPluginHelp": 1,
"maxReconnectionAttempts": 5, "maxReconnectionAttempts": 5,
"reconnectionDelay": 1500 "reconnectionDelay": 1500,
"disableCustomUserSkins": 0
} }

View File

@@ -2,7 +2,7 @@
{ {
"widget": "html", "widget": "html",
"data" : { "data" : {
"html": "<footer id=\"footer\" class=\"container footer\">\r\n\t<div>\r\n\t\tPowered by <a target=\"_blank\" href=\"https://nodebb.org\">NodeBB</a> | <a target=\"_blank\" href=\"//github.com/NodeBB/NodeBB/graphs/contributors\">Contributors</a>\r\n\t</div>\r\n</footer>", "html": "<footer id=\"footer\" class=\"container footer d-flex flex-column align-items-center gap-1 mb-2\">\n\t<span>Powered by <a class=\"link-secondary text-decoration-underline\" target=\"_blank\" href=\"https://nodebb.org\">NodeBB</a></span>\n\t<span><a class=\"link-secondary\" target=\"_blank\" href=\"//github.com/NodeBB/NodeBB/graphs/contributors\"><i class=\"fa fa-users\"></i> <span class=\"text-decoration-underline\">Contributors<span></a></span>\n</footer>",
"title":"", "title":"",
"container":"" "container":""
} }

View File

@@ -4,7 +4,7 @@
"title": "[[global:header.categories]]", "title": "[[global:header.categories]]",
"enabled": true, "enabled": true,
"iconClass": "fa-list", "iconClass": "fa-list",
"textClass": "visible-xs-inline", "textClass": "d-lg-none",
"text": "[[global:header.categories]]" "text": "[[global:header.categories]]"
}, },
{ {
@@ -13,7 +13,7 @@
"title": "[[global:header.unread]]", "title": "[[global:header.unread]]",
"enabled": true, "enabled": true,
"iconClass": "fa-inbox", "iconClass": "fa-inbox",
"textClass": "visible-xs-inline", "textClass": "d-lg-none",
"text": "[[global:header.unread]]", "text": "[[global:header.unread]]",
"groups": ["registered-users"] "groups": ["registered-users"]
}, },
@@ -22,7 +22,7 @@
"title": "[[global:header.recent]]", "title": "[[global:header.recent]]",
"enabled": true, "enabled": true,
"iconClass": "fa-clock-o", "iconClass": "fa-clock-o",
"textClass": "visible-xs-inline", "textClass": "d-lg-none",
"text": "[[global:header.recent]]" "text": "[[global:header.recent]]"
}, },
{ {
@@ -30,7 +30,7 @@
"title": "[[global:header.tags]]", "title": "[[global:header.tags]]",
"enabled": true, "enabled": true,
"iconClass": "fa-tags", "iconClass": "fa-tags",
"textClass": "visible-xs-inline", "textClass": "d-lg-none",
"text": "[[global:header.tags]]" "text": "[[global:header.tags]]"
}, },
{ {
@@ -38,7 +38,7 @@
"title": "[[global:header.popular]]", "title": "[[global:header.popular]]",
"enabled": true, "enabled": true,
"iconClass": "fa-fire", "iconClass": "fa-fire",
"textClass": "visible-xs-inline", "textClass": "d-lg-none",
"text": "[[global:header.popular]]" "text": "[[global:header.popular]]"
}, },
{ {
@@ -46,7 +46,7 @@
"title": "[[global:header.users]]", "title": "[[global:header.users]]",
"enabled": true, "enabled": true,
"iconClass": "fa-user", "iconClass": "fa-user",
"textClass": "visible-xs-inline", "textClass": "d-lg-none",
"text": "[[global:header.users]]" "text": "[[global:header.users]]"
}, },
{ {
@@ -54,7 +54,7 @@
"title": "[[global:header.groups]]", "title": "[[global:header.groups]]",
"enabled": true, "enabled": true,
"iconClass": "fa-group", "iconClass": "fa-group",
"textClass": "visible-xs-inline", "textClass": "d-lg-none",
"text": "[[global:header.groups]]" "text": "[[global:header.groups]]"
}, },
{ {
@@ -62,7 +62,7 @@
"title": "[[global:header.admin]]", "title": "[[global:header.admin]]",
"enabled": true, "enabled": true,
"iconClass": "fa-cogs", "iconClass": "fa-cogs",
"textClass": "visible-xs-inline", "textClass": "d-lg-none",
"text": "[[global:header.admin]]", "text": "[[global:header.admin]]",
"groups": ["administrators"] "groups": ["administrators"]
} }

View File

@@ -2,8 +2,8 @@
"name": "nodebb", "name": "nodebb",
"license": "GPL-3.0", "license": "GPL-3.0",
"description": "NodeBB Forum", "description": "NodeBB Forum",
"version": "2.8.6", "version": "3.0.0-beta.2",
"homepage": "http://www.nodebb.org", "homepage": "https://www.nodebb.org",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/NodeBB/NodeBB/" "url": "https://github.com/NodeBB/NodeBB/"
@@ -30,6 +30,7 @@
"dependencies": { "dependencies": {
"@adactive/bootstrap-tagsinput": "0.8.2", "@adactive/bootstrap-tagsinput": "0.8.2",
"@isaacs/ttlcache": "1.2.1", "@isaacs/ttlcache": "1.2.1",
"@popperjs/core": "2.11.6",
"ace-builds": "1.15.0", "ace-builds": "1.15.0",
"archiver": "5.3.1", "archiver": "5.3.1",
"async": "3.2.4", "async": "3.2.4",
@@ -37,8 +38,9 @@
"bcryptjs": "2.4.3", "bcryptjs": "2.4.3",
"benchpressjs": "2.5.1", "benchpressjs": "2.5.1",
"body-parser": "1.20.1", "body-parser": "1.20.1",
"bootbox": "5.5.3", "bootbox": "6.0.0",
"bootstrap": "3.4.1", "bootstrap": "5.2.3",
"bootswatch": "5.2.3",
"chalk": "4.1.2", "chalk": "4.1.2",
"chart.js": "2.9.4", "chart.js": "2.9.4",
"cli-graph": "3.2.2", "cli-graph": "3.2.2",
@@ -87,22 +89,22 @@
"morgan": "1.10.0", "morgan": "1.10.0",
"mousetrap": "1.6.5", "mousetrap": "1.6.5",
"multiparty": "4.2.3", "multiparty": "4.2.3",
"@nodebb/bootswatch": "3.4.2",
"nconf": "0.12.0", "nconf": "0.12.0",
"nodebb-plugin-2factor": "5.1.3", "nodebb-plugin-2factor": "7.0.1",
"nodebb-plugin-composer-default": "9.2.4", "nodebb-plugin-composer-default": "10.0.41",
"nodebb-plugin-dbsearch": "5.1.5", "nodebb-plugin-dbsearch": "6.0.0",
"nodebb-plugin-emoji": "4.0.6", "nodebb-plugin-emoji": "5.0.5",
"nodebb-plugin-emoji-android": "3.0.0", "nodebb-plugin-emoji-android": "4.0.0",
"nodebb-plugin-markdown": "10.1.1", "nodebb-plugin-markdown": "12.0.2",
"nodebb-plugin-mentions": "3.0.12", "nodebb-plugin-mentions": "4.0.3",
"nodebb-plugin-spam-be-gone": "1.0.2", "nodebb-plugin-ntfy": "1.0.15",
"nodebb-plugin-spam-be-gone": "2.0.5",
"nodebb-rewards-essentials": "0.2.2", "nodebb-rewards-essentials": "0.2.2",
"nodebb-theme-lavender": "6.0.1", "nodebb-theme-harmony": "1.0.0-beta.68",
"nodebb-theme-persona": "12.1.15", "nodebb-theme-lavender": "7.0.8",
"nodebb-theme-slick": "2.0.4", "nodebb-theme-peace": "2.0.18",
"nodebb-theme-vanilla": "12.1.19", "nodebb-theme-persona": "13.0.49",
"nodebb-widget-essentials": "6.0.1", "nodebb-widget-essentials": "7.0.6",
"nodemailer": "6.9.1", "nodemailer": "6.9.1",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"passport": "0.6.0", "passport": "0.6.0",
@@ -119,7 +121,9 @@
"request-promise-native": "1.0.9", "request-promise-native": "1.0.9",
"rimraf": "3.0.2", "rimraf": "3.0.2",
"rss": "1.2.2", "rss": "1.2.2",
"rtlcss": "4.0.0",
"sanitize-html": "2.9.0", "sanitize-html": "2.9.0",
"sass": "1.54.9",
"semver": "7.3.8", "semver": "7.3.8",
"serve-favicon": "2.5.0", "serve-favicon": "2.5.0",
"sharp": "0.31.3", "sharp": "0.31.3",
@@ -137,7 +141,6 @@
"timeago": "1.6.7", "timeago": "1.6.7",
"tinycon": "0.6.8", "tinycon": "0.6.8",
"toobusy-js": "0.5.1", "toobusy-js": "0.5.1",
"uglify-es": "3.3.9",
"validator": "13.9.0", "validator": "13.9.0",
"webpack": "5.75.0", "webpack": "5.75.0",
"webpack-merge": "5.8.0", "webpack-merge": "5.8.0",
@@ -166,6 +169,9 @@
"nyc": "15.1.0", "nyc": "15.1.0",
"smtp-server": "3.11.0" "smtp-server": "3.11.0"
}, },
"optionalDependencies": {
"sass-embedded": "1.55.0"
},
"resolutions": { "resolutions": {
"*/jquery": "3.6.3" "*/jquery": "3.6.3"
}, },
@@ -176,11 +182,6 @@
"node": ">=12" "node": ">=12"
}, },
"maintainers": [ "maintainers": [
{
"name": "Andrew Rodrigues",
"email": "andrew@nodebb.org",
"url": "https://github.com/psychobunny"
},
{ {
"name": "Julian Lam", "name": "Julian Lam",
"email": "julian@nodebb.org", "email": "julian@nodebb.org",
@@ -192,4 +193,4 @@
"url": "https://github.com/barisusakli" "url": "https://github.com/barisusakli"
} }
] ]
} }

View File

@@ -6,7 +6,6 @@ const bodyParser = require('body-parser');
const fs = require('fs'); const fs = require('fs');
const path = require('path'); const path = require('path');
const childProcess = require('child_process'); const childProcess = require('child_process');
const less = require('less');
const webpack = require('webpack'); const webpack = require('webpack');
const nconf = require('nconf'); const nconf = require('nconf');
@@ -14,6 +13,7 @@ const nconf = require('nconf');
const Benchpress = require('benchpressjs'); const Benchpress = require('benchpressjs');
const mkdirp = require('mkdirp'); const mkdirp = require('mkdirp');
const { paths } = require('../src/constants'); const { paths } = require('../src/constants');
const sass = require('../src/utils').getSass();
const app = express(); const app = express();
let server; let server;
@@ -73,7 +73,7 @@ web.install = async function (port) {
try { try {
await Promise.all([ await Promise.all([
compileTemplate(), compileTemplate(),
compileLess(), compileSass(),
runWebpack(), runWebpack(),
copyCSS(), copyCSS(),
loadDefaults(), loadDefaults(),
@@ -247,23 +247,28 @@ async function compileTemplate() {
]); ]);
} }
async function compileLess() { async function compileSass() {
try { try {
const installSrc = path.join(__dirname, '../public/less/install.less'); const installSrc = path.join(__dirname, '../public/scss/install.scss');
const style = await fs.promises.readFile(installSrc); const style = await fs.promises.readFile(installSrc);
const css = await less.render(String(style), { filename: path.resolve(installSrc) }); const scssOutput = sass.compileString(String(style), {
await fs.promises.writeFile(path.join(__dirname, '../public/installer.css'), css.css); loadPaths: [
path.join(__dirname, '../public/scss'),
],
});
await fs.promises.writeFile(path.join(__dirname, '../public/installer.css'), scssOutput.css.toString());
} catch (err) { } catch (err) {
winston.error(`Unable to compile LESS: \n${err.stack}`); winston.error(`Unable to compile SASS: \n${err.stack}`);
throw err; throw err;
} }
} }
async function copyCSS() { async function copyCSS() {
const src = await fs.promises.readFile( await fs.promises.copyFile(
path.join(__dirname, '../node_modules/bootstrap/dist/css/bootstrap.min.css'), 'utf8' path.join(__dirname, '../node_modules/bootstrap/dist/css/bootstrap.min.css'),
path.join(__dirname, '../public/bootstrap.min.css'),
); );
await fs.promises.writeFile(path.join(__dirname, '../public/bootstrap.min.css'), src);
} }
async function loadDefaults() { async function loadDefaults() {

View File

@@ -4,8 +4,6 @@
"acp-title": "%1 | NodeBB Admin Control Panel", "acp-title": "%1 | NodeBB Admin Control Panel",
"settings-header-contents": "Contents", "settings-header-contents": "Contents",
"changes-saved": "Changes Saved",
"changes-saved-message": "Your changes to the NodeBB configuration have been saved.",
"changes-not-saved": "Changes Not Saved", "changes-not-saved": "Changes Not Saved",
"changes-not-saved-message": "NodeBB encountered a problem saving your changes. (%1)" "changes-not-saved-message": "NodeBB encountered a problem saving your changes. (%1)"
} }

View File

@@ -1,7 +1,7 @@
{ {
"custom-css": "Custom CSS/LESS", "custom-css": "Custom CSS/SASS",
"custom-css.description": "Enter your own CSS/LESS declarations here, which will be applied after all other styles.", "custom-css.description": "Enter your own CSS/SASS declarations here, which will be applied after all other styles.",
"custom-css.enable": "Enable Custom CSS/LESS", "custom-css.enable": "Enable Custom CSS/SASS",
"custom-js": "Custom Javascript", "custom-js": "Custom Javascript",
"custom-js.description": "Enter your own javascript here. It will be executed after the page is loaded completely.", "custom-js.description": "Enter your own javascript here. It will be executed after the page is loaded completely.",

View File

@@ -8,9 +8,9 @@
"containers.none": "None", "containers.none": "None",
"container.well": "Well", "container.well": "Well",
"container.jumbotron": "Jumbotron", "container.jumbotron": "Jumbotron",
"container.panel": "Panel", "container.card": "Card",
"container.panel-header": "Panel Header", "container.card-header": "Card Header",
"container.panel-body": "Panel Body", "container.card-body": "Card Body",
"container.alert": "Alert", "container.alert": "Alert",
"alert.confirm-delete": "Are you sure you wish to delete this widget?", "alert.confirm-delete": "Are you sure you wish to delete this widget?",

View File

@@ -39,6 +39,5 @@
"revert": "Revert", "revert": "Revert",
"edit.no-users-found": "No Users Found", "edit.no-users-found": "No Users Found",
"edit.confirm-remove-user": "Are you sure you want to remove this user?", "edit.confirm-remove-user": "Are you sure you want to remove this user?"
"edit.save-success": "Changes saved!"
} }

View File

@@ -49,7 +49,6 @@
"alert.confirm-moderate": "<strong>Are you sure you wish to grant the moderation privilege to this user group?</strong> This group is public, and any users can join at will.", "alert.confirm-moderate": "<strong>Are you sure you wish to grant the moderation privilege to this user group?</strong> This group is public, and any users can join at will.",
"alert.confirm-admins-mods": "<strong>Are you sure you wish to grant the &quot;Admins &amp; Mods&quot; privilege to this user/group?</strong> Users with this privilege are able to promote and demote other users into privileged positions, <em>including super administrator</em>", "alert.confirm-admins-mods": "<strong>Are you sure you wish to grant the &quot;Admins &amp; Mods&quot; privilege to this user/group?</strong> Users with this privilege are able to promote and demote other users into privileged positions, <em>including super administrator</em>",
"alert.confirm-save": "Please confirm your intention to save these privileges", "alert.confirm-save": "Please confirm your intention to save these privileges",
"alert.saved": "Privilege changes saved and applied",
"alert.confirm-discard": "Are you sure you wish to discard your privilege changes?", "alert.confirm-discard": "Are you sure you wish to discard your privilege changes?",
"alert.discarded": "Privilege changes discarded", "alert.discarded": "Privilege changes discarded",
"alert.confirm-copyToAll": "Are you sure you wish to apply this set of <strong>%1</strong> to <strong>all categories</strong>?", "alert.confirm-copyToAll": "Are you sure you wish to apply this set of <strong>%1</strong> to <strong>all categories</strong>?",

View File

@@ -12,7 +12,7 @@
"groups": "Groups:", "groups": "Groups:",
"open-new-window": "Open in a new window", "open-new-window": "Open in a new window",
"dropdown": "Dropdown", "dropdown": "Dropdown",
"dropdown-placeholder": "Place your dropdown menu items below, ie: <br/>&lt;li&gt;&lt;a href&#x3D;&quot;https://myforum.com&quot;&gt;Link 1&lt;/a&gt;&lt;/li&gt;", "dropdown-placeholder": "Place your dropdown menu items below, ie: <br/>&lt;li&gt;&lt;a class=&quot;dropdown-item&quot; href&#x3D;&quot;https://myforum.com&quot;&gt;Link 1&lt;/a&gt;&lt;/li&gt;",
"btn.delete": "Delete", "btn.delete": "Delete",
"btn.disable": "Disable", "btn.disable": "Disable",

View File

@@ -263,5 +263,6 @@
"api.429": "You have made too many requests, please try again later", "api.429": "You have made too many requests, please try again later",
"api.500": "An unexpected error was encountered while attempting to service your request.", "api.500": "An unexpected error was encountered while attempting to service your request.",
"api.501": "The route you are trying to call is not implemented yet, please try again tomorrow", "api.501": "The route you are trying to call is not implemented yet, please try again tomorrow",
"api.503": "The route you are trying to call is not currently available due to a server configuration" "api.503": "The route you are trying to call is not currently available due to a server configuration",
"api.reauth-required": "The resource you are trying to access requires (re-)authentication."
} }

View File

@@ -3,25 +3,27 @@
"reports": "Reports", "reports": "Reports",
"first-reported": "First Reported", "first-reported": "First Reported",
"no-flags": "Hooray! No flags found.", "no-flags": "Hooray! No flags found.",
"x-flags-found": "%1 flag(s) found.",
"assignee": "Assignee", "assignee": "Assignee",
"update": "Update", "update": "Update",
"updated": "Updated", "updated": "Updated",
"resolved": "Resolved", "resolved": "Resolved",
"target-purged": "The content this flag referred to has been purged and is no longer available.", "target-purged": "The content this flag referred to has been purged and is no longer available.",
"target-aboutme-empty": "This user has no &quot;About Me&quot; set.",
"graph-label": "Daily Flags", "graph-label": "Daily Flags",
"quick-filters": "Quick Filters", "quick-filters": "Quick Filters",
"filter-active": "There are one or more filters active in this list of flags", "filter-active": "There are one or more filters active in this list of flags",
"filter-reset": "Remove Filters", "filter-reset": "Remove Filters",
"filters": "Filter Options", "filters": "Filter Options",
"filter-reporterId": "Reporter UID", "filter-reporterId": "Reporter",
"filter-targetUid": "Flagged UID", "filter-targetUid": "Reportee",
"filter-type": "Flag Type", "filter-type": "Flag Type",
"filter-type-all": "All Content", "filter-type-all": "All Content",
"filter-type-post": "Post", "filter-type-post": "Post",
"filter-type-user": "User", "filter-type-user": "User",
"filter-state": "State", "filter-state": "State",
"filter-assignee": "Assignee UID", "filter-assignee": "Assignee",
"filter-cid": "Category", "filter-cid": "Category",
"filter-quick-mine": "Assigned to me", "filter-quick-mine": "Assigned to me",
"filter-cid-all": "All categories", "filter-cid-all": "All categories",
@@ -45,6 +47,7 @@
"notes": "Flag Notes", "notes": "Flag Notes",
"add-note": "Add Note", "add-note": "Add Note",
"edit-note": "Edit Note",
"no-notes": "No shared notes.", "no-notes": "No shared notes.",
"delete-note-confirm": "Are you sure you want to delete this flag note?", "delete-note-confirm": "Are you sure you want to delete this flag note?",
"delete-flag-confirm": "Are you sure you want to delete this flag?", "delete-flag-confirm": "Are you sure you want to delete this flag?",

View File

@@ -43,10 +43,14 @@
"header.notifications": "Notifications", "header.notifications": "Notifications",
"header.search": "Search", "header.search": "Search",
"header.profile": "Profile", "header.profile": "Profile",
"header.account": "Account",
"header.navigation": "Navigation", "header.navigation": "Navigation",
"header.manage": "Manage",
"header.drafts": "Drafts",
"notifications.loading": "Loading Notifications", "notifications.loading": "Loading Notifications",
"chats.loading": "Loading Chats", "chats.loading": "Loading Chats",
"drafts.loading": "Loading Drafts",
"motd.welcome": "Welcome to NodeBB, the discussion platform of the future.", "motd.welcome": "Welcome to NodeBB, the discussion platform of the future.",
@@ -68,7 +72,8 @@
"users": "Users", "users": "Users",
"topics": "Topics", "topics": "Topics",
"posts": "Posts", "posts": "Posts",
"x-posts": "%1 posts", "x-posts": "<span class=\"formatted-number\">%1</span> posts",
"x-topics": "<span class=\"formatted-number\">%1</span> topics",
"best": "Best", "best": "Best",
"controversial": "Controversial", "controversial": "Controversial",
"votes": "Votes", "votes": "Votes",
@@ -83,6 +88,7 @@
"reputation": "Reputation", "reputation": "Reputation",
"lastpost": "Last post", "lastpost": "Last post",
"firstpost": "First post", "firstpost": "First post",
"about": "About",
"read_more": "read more", "read_more": "read more",
"more": "More", "more": "More",
@@ -100,6 +106,7 @@
"user_posted_ago": "%1 posted %2", "user_posted_ago": "%1 posted %2",
"guest_posted_ago": "Guest posted %1", "guest_posted_ago": "Guest posted %1",
"last_edited_by": "last edited by %1", "last_edited_by": "last edited by %1",
"edited-timestamp": "Edited %1",
"norecentposts": "No Recent Posts", "norecentposts": "No Recent Posts",
"norecenttopics": "No Recent Topics", "norecenttopics": "No Recent Topics",
@@ -108,6 +115,7 @@
"moderator_tools": "Moderator Tools", "moderator_tools": "Moderator Tools",
"status": "Status",
"online": "Online", "online": "Online",
"away": "Away", "away": "Away",
"dnd": "Do not disturb", "dnd": "Do not disturb",
@@ -151,5 +159,7 @@
"disabled": "Disabled", "disabled": "Disabled",
"select": "Select", "select": "Select",
"user-search-prompt": "Type something here to find users..." "user-search-prompt": "Type something here to find users...",
"hidden": "Hidden",
"sort": "Sort"
} }

View File

@@ -1,5 +1,6 @@
{ {
"groups": "Groups", "groups": "Groups",
"members": "Members",
"view_group": "View Group", "view_group": "View Group",
"owner": "Group Owner", "owner": "Group Owner",
"new_group": "Create New Group", "new_group": "Create New Group",

View File

@@ -1,7 +1,11 @@
{ {
"chat.chatting_with": "Chat with", "chat.chatting_with": "Chat with",
"chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send",
"chat.placeholder.mobile": "Type chat message here",
"chat.scroll-up-alert": "You are looking at older messages, click here to go to most recent message.", "chat.scroll-up-alert": "You are looking at older messages, click here to go to most recent message.",
"chat.usernames-and-x-others": "%1 & %2 others",
"chat.chat-with-usernames": "Chat with %1",
"chat.chat-with-usernames-and-x-others": "Chat with %1 & %2 others",
"chat.send": "Send", "chat.send": "Send",
"chat.no_active": "You have no active chats.", "chat.no_active": "You have no active chats.",
"chat.user_typing": "%1 is typing ...", "chat.user_typing": "%1 is typing ...",
@@ -44,6 +48,7 @@
"composer.compose": "Compose", "composer.compose": "Compose",
"composer.show_preview": "Show Preview", "composer.show_preview": "Show Preview",
"composer.hide_preview": "Hide Preview", "composer.hide_preview": "Hide Preview",
"composer.help": "Help",
"composer.user_said_in": "%1 said in %2:", "composer.user_said_in": "%1 said in %2:",
"composer.user_said": "%1 said:", "composer.user_said": "%1 said:",
"composer.discard": "Are you sure you wish to discard this post?", "composer.discard": "Are you sure you wish to discard this post?",
@@ -67,7 +72,9 @@
"composer.schedule-time": "Time", "composer.schedule-time": "Time",
"composer.cancel-scheduling": "Cancel Scheduling", "composer.cancel-scheduling": "Cancel Scheduling",
"composer.set-schedule-date": "Set Date", "composer.set-schedule-date": "Set Date",
"composer.discard-all-drafts": "Discard all drafts",
"composer.no-drafts": "You have no drafts",
"composer.discard-draft-confirm": "Do you want to discard this draft?",
"bootbox.ok": "OK", "bootbox.ok": "OK",
"bootbox.cancel": "Cancel", "bootbox.cancel": "Cancel",

View File

@@ -55,6 +55,7 @@
"account/watched_categories": "%1's Watched Categories", "account/watched_categories": "%1's Watched Categories",
"account/bookmarks": "%1's Bookmarked Posts", "account/bookmarks": "%1's Bookmarked Posts",
"account/settings": "User Settings", "account/settings": "User Settings",
"account/settings-of": "Changing settings of %1",
"account/watched": "Topics watched by %1", "account/watched": "Topics watched by %1",
"account/ignored": "Topics ignored by %1", "account/ignored": "Topics ignored by %1",
"account/upvoted": "Posts upvoted by %1", "account/upvoted": "Posts upvoted by %1",

View File

@@ -22,6 +22,7 @@
"notify": "Notify", "notify": "Notify",
"notify-user": "Notify User", "notify-user": "Notify User",
"confirm-reject": "Do you want to reject this post?", "confirm-reject": "Do you want to reject this post?",
"confirm-remove": "Do you want to remove this post?",
"bulk-actions": "Bulk Actions", "bulk-actions": "Bulk Actions",
"accept-all": "Accept All", "accept-all": "Accept All",
"accept-selected": "Accept Selected", "accept-selected": "Accept Selected",
@@ -29,6 +30,10 @@
"reject-all-confirm": "Do you want to reject all posts?", "reject-all-confirm": "Do you want to reject all posts?",
"reject-selected": "Reject Selected", "reject-selected": "Reject Selected",
"reject-selected-confirm": "Do you want to reject %1 selected posts?", "reject-selected-confirm": "Do you want to reject %1 selected posts?",
"remove-all": "Remove all",
"remove-all-confirm": "Do you want to remove all posts?",
"remove-selected": "Remove Selected",
"remove-selected-confirm": "Do you want to remove %1 selected posts?",
"bulk-accept-success": "%1 posts accepted", "bulk-accept-success": "%1 posts accepted",
"bulk-reject-success": "%1 posts rejected" "bulk-reject-success": "%1 posts rejected"
} }

View File

@@ -1,5 +1,6 @@
{ {
"register": "Register", "register": "Register",
"already-have-account": "Already have an account?",
"cancel_registration": "Cancel Registration", "cancel_registration": "Cancel Registration",
"help.email": "By default, your email will be hidden from the public.", "help.email": "By default, your email will be hidden from the public.",
"help.username_restrictions": "A unique username between %1 and %2 characters. Others can mention you with @<span id='yourUsername'>username</span>.", "help.username_restrictions": "A unique username between %1 and %2 characters. Others can mention you with @<span id='yourUsername'>username</span>.",

View File

@@ -1,21 +1,41 @@
{ {
"type-to-search": "Type to search",
"results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)",
"no-matches": "No matches found", "no-matches": "No matches found",
"advanced-search": "Advanced Search", "advanced-search": "Advanced Search",
"in": "In", "in": "In",
"titles": "Titles", "in-titles": "In titles",
"titles-posts": "Titles and Posts", "in-titles-posts": "In titles and posts",
"in-posts": "In post",
"in-categories": "In categories",
"in-users": "In users",
"in-tags": "In tags",
"categories": "Categories",
"all-categories": "All categories",
"categories-x": "Categories: %1",
"categories-watched-categories": "Categories: Watched categories",
"type-a-category": "Type a category",
"tags": "Tags",
"tags-x": "Tags: %1",
"type-a-tag": "Type a tag",
"match-words": "Match words", "match-words": "Match words",
"match-all-words": "Match all words",
"match-any-word": "Match any word",
"all": "All", "all": "All",
"any": "Any", "any": "Any",
"posted-by": "Posted by", "posted-by": "Posted by",
"in-categories": "In Categories", "posted-by-usernames": "Posted by: %1",
"type-a-username": "Type a username",
"search-child-categories": "Search child categories", "search-child-categories": "Search child categories",
"has-tags": "Has tags", "has-tags": "Has tags",
"reply-count": "Reply Count", "reply-count": "Reply Count",
"replies": "Replies",
"replies-atleast-count": "Replies: At least %1",
"replies-atmost-count": "Replies: At most %1",
"at-least": "At least", "at-least": "At least",
"at-most": "At most", "at-most": "At most",
"relevance": "Relevance", "relevance": "Relevance",
"time": "Time",
"post-time": "Post time", "post-time": "Post time",
"votes": "Votes", "votes": "Votes",
"newer-than": "Newer than", "newer-than": "Newer than",
@@ -28,7 +48,22 @@
"three-months": "Three months", "three-months": "Three months",
"six-months": "Six months", "six-months": "Six months",
"one-year": "One year", "one-year": "One year",
"time-newer-than-86400": "Time: Newer than yesterday",
"time-older-than-86400": "Time: Older than yesterday",
"time-newer-than-604800": "Time: Newer than one week",
"time-older-than-604800": "Time: Older than one week",
"time-newer-than-1209600": "Time: Newer than two weeks",
"time-older-than-1209600": "Time: Older than two weeks",
"time-newer-than-2592000": "Time: Newer than one month",
"time-older-than-2592000": "Time: Older than one month",
"time-newer-than-7776000": "Time: Newer than three months",
"time-older-than-7776000": "Time: Older than three months",
"time-newer-than-15552000": "Time: Newer than six months",
"time-older-than-15552000": "Time: Older than six months",
"time-newer-than-31104000": "Time: Newer than one year",
"time-older-than-31104000": "Time: Older than one year",
"sort-by": "Sort by", "sort-by": "Sort by",
"sort": "Sort",
"last-reply-time": "Last reply time", "last-reply-time": "Last reply time",
"topic-title": "Topic title", "topic-title": "Topic title",
"topic-votes": "Topic votes", "topic-votes": "Topic votes",
@@ -39,11 +74,36 @@
"category": "Category", "category": "Category",
"descending": "In descending order", "descending": "In descending order",
"ascending": "In ascending order", "ascending": "In ascending order",
"sort-by-relevance-desc": "Sort by: Relevance in descending order",
"sort-by-relevance-asc": "Sort by: Relevance in ascending order ",
"sort-by-timestamp-desc": "Sort by: Post time in descending order",
"sort-by-timestamp-asc": "Sort by: Post time in ascending order ",
"sort-by-votes-desc": "Sort by: Votes in descending order",
"sort-by-votes-asc": "Sort by: Votes in ascending order ",
"sort-by-topic.lastposttime-desc": "Sort by: Last reply time in descending order",
"sort-by-topic.lastposttime-asc": "Sort by: Last reply time in ascending order ",
"sort-by-topic.title-desc": "Sort by: Topic title in descending order",
"sort-by-topic.title-asc": "Sort by: Topic title in ascending order ",
"sort-by-topic.postcount-desc": "Sort by: Number of replies in descending order",
"sort-by-topic.postcount-asc": "Sort by: Number of replies in ascending order ",
"sort-by-topic.viewcount-desc": "Sort by: Number of views in descending order",
"sort-by-topic.viewcount-asc": "Sort by: Number of views in ascending order ",
"sort-by-topic.votes-desc": "Sort by: Topic votes in descending order",
"sort-by-topic.votes-asc": "Sort by: Topic votes in ascending order ",
"sort-by-topic.timestamp-desc": "Sort by: Topic start date in descending order",
"sort-by-topic.timestamp-asc": "Sort by: Topic start date in ascending order ",
"sort-by-user.username-desc": "Sort by: Username in descending order",
"sort-by-user.username-asc": "Sort by: Username in ascending order ",
"sort-by-category.name-desc": "Sort by: Category in descending order",
"sort-by-category.name-asc": "Sort by: Category in ascending order ",
"save": "Save",
"save-preferences": "Save preferences", "save-preferences": "Save preferences",
"clear-preferences": "Clear preferences", "clear-preferences": "Clear preferences",
"search-preferences-saved": "Search preferences saved", "search-preferences-saved": "Search preferences saved",
"search-preferences-cleared": "Search preferences cleared", "search-preferences-cleared": "Search preferences cleared",
"show-results-as": "Show results as", "show-results-as": "Show results as",
"show-results-as-topics": "Show results as topics",
"show-results-as-posts": "Show results as posts",
"see-more-results": "See more results (%1)", "see-more-results": "See more results (%1)",
"search-in-category": "Search in \"%1\"" "search-in-category": "Search in \"%1\""
} }

View File

@@ -0,0 +1,10 @@
{
"sign-in-with-twitter": "Sign in with Twitter",
"sign-up-with-twitter": "Sign up with Twitter",
"sign-in-with-github": "Sign in with Github",
"sign-up-with-github": "Sign up with Github",
"sign-in-with-google": "Sign in with Google",
"sign-up-with-google": "Sign up with Google",
"log-in-with-facebook": "Log in with Facebook",
"continue-with-facebook": "Continue with Facebook"
}

View File

@@ -1,5 +1,6 @@
{ {
"no_tag_topics": "There are no topics with this tag.", "no_tag_topics": "There are no topics with this tag.",
"no-tags-found": "No tags found",
"tags": "Tags", "tags": "Tags",
"enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here": "Enter tags here, between %1 and %2 characters each.",
"enter_tags_here_short": "Enter tags...", "enter_tags_here_short": "Enter tags...",

View File

@@ -43,16 +43,31 @@
"ban-ip": "Ban IP", "ban-ip": "Ban IP",
"view-history": "Edit History", "view-history": "Edit History",
"locked-by": "Locked by", "wrote-ago": "wrote <span class=\"timeago\" title=\"%1\"></span>",
"unlocked-by": "Unlocked by", "wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>",
"pinned-by": "Pinned by", "replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>",
"unpinned-by": "Unpinned by", "replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>",
"deleted-by": "Deleted by",
"restored-by": "Restored by", "user-locked-topic-ago": "%1 locked this topic %2",
"moved-from-by": "Moved from %1 by", "user-locked-topic-on": "%1 locked this topic on %2",
"queued-by": "Post queued for approval &rarr;", "user-unlocked-topic-ago": "%1 unlocked this topic %2",
"backlink": "Referenced by", "user-unlocked-topic-on": "%1 unlocked this topic on %2",
"forked-by": "Forked by", "user-pinned-topic-ago": "%1 pinned this topic %2",
"user-pinned-topic-on": "%1 pinned this topic on %2",
"user-unpinned-topic-ago": "%1 unpinned this topic %2",
"user-unpinned-topic-on": "%1 unpinned this topic on %2",
"user-deleted-topic-ago": "%1 deleted this topic %2",
"user-deleted-topic-on": "%1 deleted this topic on %2",
"user-restored-topic-ago": "%1 restored this topic %2",
"user-restored-topic-on": "%1 restored this topic on %2",
"user-moved-topic-from-ago": "%1 moved this topic from %2 %3",
"user-moved-topic-from-on": "%1 moved this topic from %2 on %3",
"user-queued-post-ago": "%1 <a href=\"%2\">queued</a> post for approval %3",
"user-queued-post-on": "%1 <a href=\"%2\">queued</a> post for approval on %3",
"user-referenced-topic-ago": "%1 <a href=\"%2\">referenced</a> this topic %3",
"user-referenced-topic-on": "%1 <a href=\"%2\">referenced</a> this topic on %3",
"user-forked-topic-ago": "%1 <a href=\"%2\">forked</a> this topic %3",
"user-forked-topic-on": "%1 <a href=\"%2\">forked</a> this topic on %3",
"bookmark_instructions" : "Click here to return to the last read post in this thread.", "bookmark_instructions" : "Click here to return to the last read post in this thread.",
@@ -107,7 +122,7 @@
"thread_tools.purge": "Purge Topic", "thread_tools.purge": "Purge Topic",
"thread_tools.purge_confirm" : "Are you sure you want to purge this topic?", "thread_tools.purge_confirm" : "Are you sure you want to purge this topic?",
"thread_tools.merge_topics": "Merge Topics", "thread_tools.merge_topics": "Merge Topics",
"thread_tools.merge": "Merge", "thread_tools.merge": "Merge Topic",
"topic_move_success": "This topic will be moved to \"%1\" shortly. Click here to undo.", "topic_move_success": "This topic will be moved to \"%1\" shortly. Click here to undo.",
"topic_move_multiple_success": "These topics will be moved to \"%1\" shortly. Click here to undo.", "topic_move_multiple_success": "These topics will be moved to \"%1\" shortly. Click here to undo.",
@@ -140,7 +155,7 @@
"post_moved": "Post moved!", "post_moved": "Post moved!",
"fork_topic": "Fork Topic", "fork_topic": "Fork Topic",
"enter-new-topic-title": "Enter new topic title", "enter-new-topic-title": "Enter new topic title",
"fork_topic_instruction": "Click the posts you want to fork", "fork_topic_instruction": "Click the posts you want to fork, enter a title for the new topic and click fork topic",
"fork_no_pids": "No posts selected!", "fork_no_pids": "No posts selected!",
"no-posts-selected": "No posts selected!", "no-posts-selected": "No posts selected!",
"x-posts-selected": "%1 post(s) selected", "x-posts-selected": "%1 post(s) selected",
@@ -155,10 +170,12 @@
"merge-new-title-for-topic": "New title for topic", "merge-new-title-for-topic": "New title for topic",
"topic-id": "Topic ID", "topic-id": "Topic ID",
"move_posts_instruction": "Click the posts you want to move then enter a topic ID or go to the target topic", "move_posts_instruction": "Click the posts you want to move then enter a topic ID or go to the target topic",
"move_topic_instruction": "Select the target category and then click move",
"change_owner_instruction": "Click the posts you want to assign to another user", "change_owner_instruction": "Click the posts you want to assign to another user",
"composer.title_placeholder": "Enter your topic title here...", "composer.title_placeholder": "Enter your topic title here...",
"composer.handle_placeholder": "Enter your name/handle here", "composer.handle_placeholder": "Enter your name/handle here",
"composer.hide": "Hide",
"composer.discard": "Discard", "composer.discard": "Discard",
"composer.submit": "Submit", "composer.submit": "Submit",
"composer.additional-options": "Additional Options", "composer.additional-options": "Additional Options",
@@ -211,5 +228,8 @@
"last-post": "Last post", "last-post": "Last post",
"go-to-my-next-post": "Go to my next post", "go-to-my-next-post": "Go to my next post",
"no-more-next-post": "You don't have more posts in this topic", "no-more-next-post": "You don't have more posts in this topic",
"post-quick-reply": "Post quick reply" "post-quick-reply": "Quick reply",
"navigator.index": "Post %1 of %2",
"navigator.unread": "%1 unread"
} }

View File

@@ -45,6 +45,7 @@
"followers": "Followers", "followers": "Followers",
"following": "Following", "following": "Following",
"blocks": "Blocks", "blocks": "Blocks",
"blocked-users": "Blocked users",
"block_toggle": "Toggle Block", "block_toggle": "Toggle Block",
"block_user": "Block User", "block_user": "Block User",
"unblock_user": "Unblock User", "unblock_user": "Unblock User",
@@ -71,6 +72,7 @@
"upload_new_picture": "Upload New Picture", "upload_new_picture": "Upload New Picture",
"upload_new_picture_from_url": "Upload New Picture From URL", "upload_new_picture_from_url": "Upload New Picture From URL",
"current_password": "Current Password", "current_password": "Current Password",
"new_password": "New Password",
"change_password": "Change Password", "change_password": "Change Password",
"change_password_error": "Invalid Password!", "change_password_error": "Invalid Password!",
"change_password_error_wrong_current": "Your current password is not correct!", "change_password_error_wrong_current": "Your current password is not correct!",
@@ -186,6 +188,8 @@
"info.moderation-note.add": "Add note", "info.moderation-note.add": "Add note",
"sessions.description": "This page allows you to view any active sessions on this forum and revoke them if necessary. You can revoke your own session by logging out of your account.", "sessions.description": "This page allows you to view any active sessions on this forum and revoke them if necessary. You can revoke your own session by logging out of your account.",
"revoke-session": "Revoke Session",
"browser-version-on-platform": "%1 %2 on %3",
"consent.title": "Your Rights &amp; Consent", "consent.title": "Your Rights &amp; Consent",
"consent.lead": "This community forum collects and processes your personal information.", "consent.lead": "This community forum collects and processes your personal information.",

View File

@@ -1,11 +1,12 @@
{ {
"all-users": "All Users",
"latest_users": "Latest Users", "latest_users": "Latest Users",
"top_posters": "Top Posters", "top_posters": "Top Posters",
"most_reputation": "Most Reputation", "most_reputation": "Most Reputation",
"most_flags": "Most Flags", "most_flags": "Most Flags",
"search": "Search", "search": "Search",
"enter_username": "Enter a username to search", "enter_username": "Enter a username to search",
"search-user-for-chat": "Search a user to start chat", "search-user-for-chat": "Search for a user to start chat:",
"load_more": "Load More", "load_more": "Load More",
"users-found-search-took": "%1 user(s) found! Search took %2 seconds.", "users-found-search-took": "%1 user(s) found! Search took %2 seconds.",
"filter-by": "Filter By", "filter-by": "Filter By",

View File

@@ -1,26 +0,0 @@
.page-advanced-errors {
.table {
table-layout: fixed;
th {
&:first-child {
width: 90%;
}
&:last-child {
text-align: center;
}
}
td {
&:first-child {
word-wrap: break-word;
}
&:last-child {
text-align: center;
}
}
}
}

View File

@@ -1,8 +0,0 @@
.events-list {
.delete-event {
i {
cursor: pointer;
margin-left: 10px;
}
}
}

View File

@@ -1,3 +0,0 @@
.admin .hooks-list .panel.panel-default .panel-heading .panel-title a {
text-transform: none;
}

View File

@@ -1,8 +0,0 @@
.logs {
.panel-body {
pre {
height: 600px;
}
}
}

View File

@@ -1,77 +0,0 @@
.themes, .skins {
ul.directory {
margin: 0;
padding: 0;
li {
padding: 10px 16px;
margin: 0.25em 1em;
list-style-type: none;
.pointer;
img {
max-width: 150px;
float: left;
}
h4, p {
margin-left: 170px;
}
p {
font-size: 0.9em;
}
&.no-themes {
font-style: italic;
}
}
}
.theme-card {
margin-bottom: 30px;
margin-left: auto;
margin-right: auto;
.mdl-card__title {
height: 223px;
background-size: contain;
}
.mdl-card__supporting-text {
font-size: 1.5rem;
margin: 0 auto;
.mdl-card__title-text {
display: inline-block;
margin-bottom: 15px;
}
}
}
[data-theme].selected .mdl-button {
color: black;
}
[data-type="bootswatch"] {
.mdl-card__title {
height: 198px;
}
.mdl-card__title-text {
display: none;
}
}
[data-type="local"] {
.mdl-card__supporting-text {
height: 150px;
}
}
textarea[data-field] {
min-height: 450px;
width: 100%;
resize: vertical;
}
}

View File

@@ -1,3 +0,0 @@
.page-admin-info #content {
width: auto;
}

View File

@@ -1,30 +0,0 @@
.admins-mods {
.user-card {
background: #eeeeee;
border-radius: 4px;
margin: 5px;
padding: 5px;
height: 35px;
}
.remove-user-icon {
margin-right: 5px;
margin-left: 5px;
}
.category-depth-1 {
margin-left: 30px;
}
.category-depth-2 {
margin-left: 60px;
}
.category-depth-3 {
margin-left: 90px;
}
.category-depth-4 {
margin-left: 120px;
}
.category-depth-5 {
margin-left: 150px;
}
}

View File

@@ -1,36 +0,0 @@
.page-admin-privileges {
@keyframes fadeOut {
0% {background-color: @brand-primary;}
100% {background-color: white;}
}
[data-group-name].selected, [data-uid].selected {
animation-name: fadeOut;
animation-duration: 5s;
animation-fill-mode: both;
animation-timing-function: ease-out;
}
.privilege-table {
td:first-child {
white-space: nowrap;
}
td[data-delta="true"] > input {
&:after {
border-color: @state-success-text;
background-color: @state-success-text;
}
}
td[data-delta="false"] > input {
&:after {
border-color: @state-danger-bg;
}
&:indeterminate:after {
background-color: @state-danger-bg;
}
}
}
}

View File

@@ -1,7 +0,0 @@
@media screen and (max-width: @screen-sm-max) {
.page-manage-registration {
.users-list {
font-size: 10px;
}
}
}

View File

@@ -1,19 +0,0 @@
.manage-users {
min-height: 500px;
.search {
.form-control {
width: 100%;
}
}
}
.page-admin-users {
.group-card {
margin: 2px;
padding: 2px;
}
.remove-group-icon {
margin-left: 5px;
}
}

View File

@@ -1,95 +0,0 @@
.alert-window {
position: fixed;
width: 300px;
z-index: 10002;
right: 20px;
bottom: 0px;
.alert {
.close {
color: inherit;
}
&::before {
position: relative;
top: -15px;
left: -15px;
display: block;
height: 2px;
width: 0;
transition: inherit;
}
&.alert-info::before {
background-color: @brand-info;
}
&.alert-warning::before {
background-color: @brand-warning;
}
&.alert-success::before {
background-color: @brand-success;
}
&.alert-danger::before {
background-color: @brand-danger;
}
&.animate {
&.alert-info::before {
background-color: lighten(@brand-info, 25%);
}
&.alert-warning::before {
background-color: lighten(@brand-warning, 25%);
}
&.alert-success::before {
background-color: lighten(@brand-success, 25%);
}
&.alert-danger::before {
background-color: lighten(@brand-danger, 25%);
}
&::before {
width: ~"calc(100% + 50px)";
}
}
background-color: white;
border: 0;
border-left: 5px solid !important;
box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.25), 0px 2px 10px 0px rgba(0, 0, 0, 0.25);
strong {
text-transform: uppercase;
}
p {
padding: 10px 0px 0px;
}
&.alert-info {
color: @brand-info;
border-color: @brand-info;
}
&.alert-warning {
color: @brand-warning;
border-color: @brand-warning;
}
&.alert-success {
color: @brand-success;
border-color: @brand-success;
}
&.alert-danger {
color: @brand-danger;
border-color: @brand-danger;
}
}
}

View File

@@ -1,80 +0,0 @@
#nprogress {
pointer-events: none;
}
#nprogress .bar {
background: #29d;
position: fixed;
z-index: 1031;
top: 0;
left: 0;
width: 100%;
height: 2px;
}
#nprogress .peg {
display: block;
position: absolute;
right: 0px;
width: 100px;
height: 100%;
box-shadow: 0 0 10px #29d, 0 0 5px #29d;
opacity: 1.0;
-webkit-transform: rotate(3deg) translate(0px, -4px);
-ms-transform: rotate(3deg) translate(0px, -4px);
transform: rotate(3deg) translate(0px, -4px);
}
#nprogress .spinner {
display: block;
position: fixed;
z-index: 1031;
top: 165px;
right: 35px;
}
@media (max-width: @screen-xs-max) {
#nprogress .spinner {
bottom: 15px;
right: 15px;
top: initial;
}
}
#nprogress .spinner-icon {
width: 18px;
height: 18px;
box-sizing: border-box;
border: solid 2px transparent;
border-top-color: #29d;
border-left-color: #29d;
border-radius: 50%;
-webkit-animation: nprogress-spinner 400ms linear infinite;
animation: nprogress-spinner 400ms linear infinite;
}
.nprogress-custom-parent {
overflow: hidden;
position: relative;
}
.nprogress-custom-parent #nprogress .spinner,
.nprogress-custom-parent #nprogress .bar {
position: absolute;
}
@-webkit-keyframes nprogress-spinner {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes nprogress-spinner {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}

View File

@@ -1,621 +0,0 @@
// Paper 3.3.5
// Bootswatch
// -----------------------------------------------------
// Navbar =====================================================================
.navbar {
border: none;
.box-shadow(0 1px 2px rgba(0,0,0,.3));
&-brand {
font-size: 24px;
}
&-inverse {
.form-control {
color: #fff;
.placeholder(@navbar-inverse-link-color);
&[type=text],
&[type=password] {
.box-shadow(inset 0 -1px 0 @navbar-inverse-link-color);
&:focus {
.box-shadow(inset 0 -2px 0 #fff);
}
}
}
}
}
// Buttons ====================================================================
#btn(@class,@bg) {
.btn-@{class} {
background-size: 200%;
background-position: 50%;
&:focus {
background-color: @bg;
}
&:hover,
&:active:hover {
background-color: darken(@bg, 6%);
}
&:active {
background-color: darken(@bg, 12%);
#gradient > .radial(darken(@bg, 12%) 10%, @bg 11%);
background-size: 1000%;
.box-shadow(2px 2px 4px rgba(0,0,0,.4));
}
}
}
#btn(default,@btn-default-bg);
#btn(primary,@btn-primary-bg);
#btn(success,@btn-success-bg);
#btn(info,@btn-info-bg);
#btn(warning,@btn-warning-bg);
#btn(danger,@btn-danger-bg);
#btn(link,#fff);
.btn {
text-transform: uppercase;
border: none;
.box-shadow(1px 1px 4px rgba(0,0,0,.4));
.transition(all 0.4s);
&-link {
border-radius: @btn-border-radius-base;
.box-shadow(none);
color: @btn-default-color;
&:hover,
&:focus {
.box-shadow(none);
color: @btn-default-color;
text-decoration: none;
}
}
&-default {
&.disabled {
background-color: rgba(0, 0, 0, 0.1);
color: rgba(0, 0, 0, 0.4);
opacity: 1;
}
}
}
.btn-group {
.btn + .btn,
.btn + .btn-group,
.btn-group + .btn,
.btn-group + .btn-group {
margin-left: 0;
}
&-vertical {
> .btn + .btn,
> .btn + .btn-group,
> .btn-group + .btn,
> .btn-group + .btn-group {
margin-top: 0;
}
}
}
// Typography =================================================================
body {
-webkit-font-smoothing: antialiased;
letter-spacing: .1px;
}
p {
margin: 0 0 1em;
}
input,
button {
-webkit-font-smoothing: antialiased;
letter-spacing: .1px;
}
a {
.transition(all 0.2s);
}
// Tables =====================================================================
.table-hover {
> tbody > tr,
> tbody > tr > th,
> tbody > tr > td {
.transition(all 0.2s);
}
}
// Forms ======================================================================
label {
font-weight: normal;
}
textarea,
textarea.form-control,
input.form-control,
input[type=text],
input[type=password],
input[type=email],
input[type=number],
[type=text].form-control,
[type=password].form-control,
[type=email].form-control,
[type=tel].form-control,
[contenteditable].form-control {
padding: 0;
border: none;
border-radius: 0;
-webkit-appearance: none;
.box-shadow(inset 0 -1px 0 #ddd);
font-size: 16px;
&:focus {
.box-shadow(inset 0 -2px 0 @brand-primary);
}
&[disabled],
&[readonly] {
.box-shadow(none);
border-bottom: 1px dotted #ddd;
}
&.input {
&-sm {
font-size: @font-size-small;
}
&-lg {
font-size: @font-size-large;
}
}
}
select,
select.form-control {
border: 0;
border-radius: 0;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
padding-left: 0;
padding-right: 0\9; // remove padding for < ie9 since default arrow can't be removed
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmaP/QSjAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=);
background-size: 13px;
background-repeat: no-repeat;
background-position: right center;
.box-shadow(inset 0 -1px 0 #ddd);
font-size: 16px;
line-height: 1.5;
&::-ms-expand {
display: none;
}
&.input {
&-sm {
font-size: @font-size-small;
}
&-lg {
font-size: @font-size-large;
}
}
&:focus {
.box-shadow(inset 0 -2px 0 @brand-primary);
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAAJ1BMVEUhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISF8S9ewAAAADHRSTlMAAgMJC0uWpKa6wMxMdjkoAAAANUlEQVR4AeXJyQEAERAAsNl7Hf3X6xt0QL6JpZWq30pdvdadme+0PMdzvHm8YThHcT1H7K0BtOMDniZhWOgAAAAASUVORK5CYII=);
}
&[multiple] {
background: none;
}
}
.radio,
.radio-inline,
.checkbox,
.checkbox-inline {
label {
padding-left: 25px;
}
input[type="radio"],
input[type="checkbox"] {
margin-left: -25px;
}
}
input[type="radio"],
.radio input[type="radio"],
.radio-inline input[type="radio"] {
position: relative;
margin-top: 6px;
margin-right: 4px;
vertical-align: top;
border: none;
background-color: transparent;
-webkit-appearance: none;
appearance: none;
cursor: pointer;
&:focus {
outline: none;
}
&:before,
&:after {
content: "";
display: block;
width: 18px;
height: 18px;
border-radius: 50%;
.transition(240ms);
}
&:before {
position: absolute;
left: 0;
top: -3px;
background-color: @brand-primary;
.scale(0);
}
&:after {
position: relative;
top: -3px;
border: 2px solid @gray;
}
&:checked:before {
.scale(0.5);
}
&:disabled:checked:before {
background-color: @gray-light;
}
&:checked:after {
border-color: @brand-primary;
}
&:disabled:after,
&:disabled:checked:after {
border-color: @gray-light;
}
}
input[type="checkbox"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
position: relative;
border: none;
margin-bottom: -4px;
-webkit-appearance: none;
appearance: none;
cursor: pointer;
&:focus {
outline: none;
}
&:after {
content: "";
display: block;
width: 18px;
height: 18px;
margin-top: -2px;
margin-right: 5px;
border: 2px solid @gray;
border-radius: 2px;
.transition(240ms);
}
&:indeterminate:before {
content: "";
position: absolute;
top: 6px;
left: 6px;
display: table;
width: 6px;
height: 12px;
border-top: 2px solid #fff;
}
&:indeterminate:after {
background-color: @brand-primary;
border-color: @brand-primary;
}
&:checked:before {
content: "";
position: absolute;
top: 0;
left: 6px;
display: table;
width: 6px;
height: 12px;
border: 2px solid #fff;
border-top-width: 0;
border-left-width: 0;
.rotate(45deg);
}
&:checked:after {
background-color: @brand-primary;
border-color: @brand-primary;
}
&:disabled:after {
border-color: @gray-light;
}
&:disabled:checked:after {
background-color: @gray-light;
border-color: transparent;
}
}
.has-warning {
input:not([type=checkbox]),
.form-control,
input.form-control[readonly],
input[type=text][readonly],
[type=text].form-control[readonly],
input:not([type=checkbox]):focus,
.form-control:focus {
border-bottom: none;
.box-shadow(inset 0 -2px 0 @brand-warning);
}
}
.has-error {
input:not([type=checkbox]),
.form-control,
input.form-control[readonly],
input[type=text][readonly],
[type=text].form-control[readonly],
input:not([type=checkbox]):focus,
.form-control:focus {
border-bottom: none;
.box-shadow(inset 0 -2px 0 @brand-danger);
}
}
.has-success {
input:not([type=checkbox]),
.form-control,
input.form-control[readonly],
input[type=text][readonly],
[type=text].form-control[readonly],
input:not([type=checkbox]):focus,
.form-control:focus {
border-bottom: none;
.box-shadow(inset 0 -2px 0 @brand-success);
}
}
// Remove the Bootstrap feedback styles for input addons
.input-group-addon {
.has-warning &, .has-error &, .has-success & {
color: @input-color;
border-color: @input-group-addon-border-color;
background-color: @input-group-addon-bg;
}
}
// Navs =======================================================================
.nav-tabs {
> li > a,
> li > a:focus {
margin-right: 0;
background-color: transparent;
border: none;
color: @navbar-default-link-color;
.box-shadow(inset 0 -1px 0 #ddd);
.transition(all 0.2s);
&:hover {
background-color: transparent;
.box-shadow(inset 0 -2px 0 @brand-primary);
color: @brand-primary;
}
}
& > li.active > a,
& > li.active > a:focus {
border: none;
.box-shadow(inset 0 -2px 0 @brand-primary);
color: @brand-primary;
&:hover {
border: none;
color: @brand-primary;
}
}
& > li.disabled > a {
.box-shadow(inset 0 -1px 0 #ddd);
}
&.nav-justified {
& > li > a,
& > li > a:hover,
& > li > a:focus,
& > .active > a,
& > .active > a:hover,
& > .active > a:focus {
border: none;
}
}
.dropdown-menu {
margin-top: 0;
}
}
.dropdown-menu {
margin-top: 0;
border: none;
.box-shadow(0 1px 4px rgba(0,0,0,.3));
}
// Indicators =================================================================
.alert {
border: none;
color: #fff;
&-success {
background-color: @brand-success;
}
&-info {
background-color: @brand-info;
}
&-warning {
background-color: @brand-warning;
}
&-danger {
background-color: @brand-danger;
}
a:not(.close),
.alert-link {
color: #fff;
font-weight: bold;
}
.close {
color: #fff;
}
}
.badge {
padding: 3px 6px 5px;
}
.progress {
position: relative;
z-index: 1;
height: 6px;
border-radius: 0;
.box-shadow(none);
&-bar {
.box-shadow(none);
&:last-child {
border-radius: 0 3px 3px 0;
}
&:last-child {
&:before {
display: block;
content: "";
position: absolute;
width: 100%;
height: 100%;
left: 0;
right: 0;
z-index: -1;
background-color: lighten(@progress-bar-bg, 35%);
}
}
&-success:last-child.progress-bar:before {
background-color: lighten(@brand-success, 35%);
}
&-info:last-child.progress-bar:before {
background-color: lighten(@brand-info, 45%);
}
&-warning:last-child.progress-bar:before {
background-color: lighten(@brand-warning, 35%);
}
&-danger:last-child.progress-bar:before {
background-color: lighten(@brand-danger, 25%);
}
}
}
// Progress bars ==============================================================
// Containers =================================================================
.close {
font-size: 34px;
font-weight: 300;
line-height: 24px;
opacity: 0.6;
.transition(all 0.2s);
&:hover {
opacity: 1;
}
}
.list-group {
&-item {
padding: 15px;
}
&-item-text {
color: @gray-light;
}
}
.well {
border-radius: 0;
.box-shadow(none);
}
.panel {
border: none;
border-radius: 2px;
.box-shadow(0 1px 4px rgba(0,0,0,.3));
&-heading {
border-bottom: none;
}
&-footer {
border-top: none;
}
}
.popover {
border: none;
.box-shadow(0 1px 4px rgba(0,0,0,.3));
}
.carousel {
&-caption {
h1, h2, h3, h4, h5, h6 {
color: inherit;
}
}
}

View File

@@ -1,869 +0,0 @@
// Paper 3.3.7
// Variables
// --------------------------------------------------
//== Colors
//
//## Gray and brand colors for use across Bootstrap.
@gray-base: #000;
@gray-darker: lighten(@gray-base, 13.5%); // #222
@gray-dark: #212121;
@gray: #666;
@gray-light: #bbb;
@gray-lighter: lighten(@gray-base, 93.5%); // #eee
@brand-primary: #2196F3;
@brand-success: #4CAF50;
@brand-info: #9C27B0;
@brand-warning: #ff9800;
@brand-danger: #e51c23;
//== Scaffolding
//
//## Settings for some of the most global styles.
//** Background color for `<body>`.
@body-bg: #fff;
//** Global text color on `<body>`.
@text-color: @gray;
//** Global textual link color.
@link-color: @brand-primary;
//** Link hover color set via `darken()` function.
@link-hover-color: darken(@link-color, 15%);
//** Link hover decoration.
@link-hover-decoration: underline;
//== Typography
//
//## Font, line-height, and color for body text, headings, and more.
@font-family-sans-serif: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif;
@font-family-serif: Georgia, "Times New Roman", Times, serif;
//** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`.
@font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
@font-family-base: @font-family-sans-serif;
@font-size-base: 13px;
@font-size-large: ceil((@font-size-base * 1.25)); // ~18px
@font-size-small: ceil((@font-size-base * 0.85)); // ~12px
@font-size-h1: 56px;
@font-size-h2: 45px;
@font-size-h3: 34px;
@font-size-h4: 24px;
@font-size-h5: 20px;
@font-size-h6: 14px;
//** Unit-less `line-height` for use in components like buttons.
@line-height-base: 1.846; // 20/14
//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
@line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px
//** By default, this inherits from the `<body>`.
@headings-font-family: inherit;
@headings-font-weight: 400;
@headings-line-height: 1.1;
@headings-color: #444;
//== Iconography
//
//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
//** Load fonts from this directory.
@icon-font-path: "../fonts/";
//** File name for all font files.
@icon-font-name: "glyphicons-halflings-regular";
//** Element ID within SVG icon file.
@icon-font-svg-id: "glyphicons_halflingsregular";
//== Components
//
//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
@padding-base-vertical: 6px;
@padding-base-horizontal: 16px;
@padding-large-vertical: 10px;
@padding-large-horizontal: 16px;
@padding-small-vertical: 5px;
@padding-small-horizontal: 10px;
@padding-xs-vertical: 1px;
@padding-xs-horizontal: 5px;
@line-height-large: 1.3333333; // extra decimals for Win 8.1 Chrome
@line-height-small: 1.5;
@border-radius-base: 3px;
@border-radius-large: 3px;
@border-radius-small: 3px;
//** Global color for active items (e.g., navs or dropdowns).
@component-active-color: #fff;
//** Global background color for active items (e.g., navs or dropdowns).
@component-active-bg: @brand-primary;
//** Width of the `border` for generating carets that indicate dropdowns.
@caret-width-base: 4px;
//** Carets increase slightly in size for larger components.
@caret-width-large: 5px;
//== Tables
//
//## Customizes the `.table` component with basic values, each used across all table variations.
//** Padding for `<th>`s and `<td>`s.
@table-cell-padding: 8px;
//** Padding for cells in `.table-condensed`.
@table-condensed-cell-padding: 5px;
//** Default background color used for all tables.
@table-bg: transparent;
//** Background color used for `.table-striped`.
@table-bg-accent: #f9f9f9;
//** Background color used for `.table-hover`.
@table-bg-hover: #f5f5f5;
@table-bg-active: @table-bg-hover;
//** Border color for table and cell borders.
@table-border-color: #ddd;
//== Buttons
//
//## For each of Bootstrap's buttons, define text, background and border color.
@btn-font-weight: normal;
@btn-default-color: #444;
@btn-default-bg: #fff;
@btn-default-border: transparent;
@btn-primary-color: #fff;
@btn-primary-bg: @brand-primary;
@btn-primary-border: transparent;
@btn-success-color: #fff;
@btn-success-bg: @brand-success;
@btn-success-border: transparent;
@btn-info-color: #fff;
@btn-info-bg: @brand-info;
@btn-info-border: transparent;
@btn-warning-color: #fff;
@btn-warning-bg: @brand-warning;
@btn-warning-border: transparent;
@btn-danger-color: #fff;
@btn-danger-bg: @brand-danger;
@btn-danger-border: transparent;
@btn-link-disabled-color: @gray-light;
// Allows for customizing button radius independently from global border radius
@btn-border-radius-base: @border-radius-base;
@btn-border-radius-large: @border-radius-large;
@btn-border-radius-small: @border-radius-small;
//== Forms
//
//##
//** `<input>` background color
@input-bg: transparent;
//** `<input disabled>` background color
@input-bg-disabled: transparent;
//** Text color for `<input>`s
@input-color: @gray;
//** `<input>` border color
@input-border: transparent;
// TODO: Rename `@input-border-radius` to `@input-border-radius-base` in v4
//** Default `.form-control` border radius
// This has no effect on `<select>`s in some browsers, due to the limited stylability of `<select>`s in CSS.
@input-border-radius: @border-radius-base;
//** Large `.form-control` border radius
@input-border-radius-large: @border-radius-large;
//** Small `.form-control` border radius
@input-border-radius-small: @border-radius-small;
//** Border color for inputs on focus
@input-border-focus: #66afe9;
//** Placeholder text color
@input-color-placeholder: @gray-light;
//** Default `.form-control` height
@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
//** Large `.form-control` height
@input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
//** Small `.form-control` height
@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
//** `.form-group` margin
@form-group-margin-bottom: 15px;
@legend-color: @gray-dark;
@legend-border-color: #e5e5e5;
//** Background color for textual input addons
@input-group-addon-bg: transparent;
//** Border color for textual input addons
@input-group-addon-border-color: @input-border;
//** Disabled cursor for form controls and buttons.
@cursor-disabled: not-allowed;
//== Dropdowns
//
//## Dropdown menu container and contents.
//** Background for the dropdown menu.
@dropdown-bg: #fff;
//** Dropdown menu `border-color`.
@dropdown-border: rgba(0,0,0,.15);
//** Dropdown menu `border-color` **for IE8**.
@dropdown-fallback-border: #ccc;
//** Divider color for between dropdown items.
@dropdown-divider-bg: #e5e5e5;
//** Dropdown link text color.
@dropdown-link-color: @text-color;
//** Hover color for dropdown links.
@dropdown-link-hover-color: darken(@gray-dark, 5%);
//** Hover background for dropdown links.
@dropdown-link-hover-bg: @gray-lighter;
//** Active dropdown menu item text color.
@dropdown-link-active-color: @component-active-color;
//** Active dropdown menu item background color.
@dropdown-link-active-bg: @component-active-bg;
//** Disabled dropdown menu item background color.
@dropdown-link-disabled-color: @gray-light;
//** Text color for headers within dropdown menus.
@dropdown-header-color: @gray-light;
//** Deprecated `@dropdown-caret-color` as of v3.1.0
@dropdown-caret-color: @gray-light;
//-- Z-index master list
//
// Warning: Avoid customizing these values. They're used for a bird's eye view
// of components dependent on the z-axis and are designed to all work together.
//
// Note: These variables are not generated into the Customizer.
@zindex-navbar: 1000;
@zindex-dropdown: 1000;
@zindex-popover: 1060;
@zindex-tooltip: 1070;
@zindex-navbar-fixed: 1030;
@zindex-modal-background: 1040;
@zindex-modal: 1050;
//== Media queries breakpoints
//
//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
// Extra small screen / phone
//** Deprecated `@screen-xs` as of v3.0.1
@screen-xs: 480px;
//** Deprecated `@screen-xs-min` as of v3.2.0
@screen-xs-min: @screen-xs;
//** Deprecated `@screen-phone` as of v3.0.1
@screen-phone: @screen-xs-min;
// Small screen / tablet
//** Deprecated `@screen-sm` as of v3.0.1
@screen-sm: 768px;
@screen-sm-min: @screen-sm;
//** Deprecated `@screen-tablet` as of v3.0.1
@screen-tablet: @screen-sm-min;
// Medium screen / desktop
//** Deprecated `@screen-md` as of v3.0.1
@screen-md: 992px;
@screen-md-min: @screen-md;
//** Deprecated `@screen-desktop` as of v3.0.1
@screen-desktop: @screen-md-min;
// Large screen / wide desktop
//** Deprecated `@screen-lg` as of v3.0.1
@screen-lg: 1200px;
@screen-lg-min: @screen-lg;
//** Deprecated `@screen-lg-desktop` as of v3.0.1
@screen-lg-desktop: @screen-lg-min;
// So media queries don't overlap when required, provide a maximum
@screen-xs-max: (@screen-sm-min - 1);
@screen-sm-max: (@screen-md-min - 1);
@screen-md-max: (@screen-lg-min - 1);
//== Grid system
//
//## Define your custom responsive grid.
//** Number of columns in the grid.
@grid-columns: 12;
//** Padding between columns. Gets divided in half for the left and right.
@grid-gutter-width: 30px;
// Navbar collapse
//** Point at which the navbar becomes uncollapsed.
@grid-float-breakpoint: @screen-sm-min;
//** Point at which the navbar begins collapsing.
@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
//== Container sizes
//
//## Define the maximum width of `.container` for different screen sizes.
// Small screen / tablet
@container-tablet: (720px + @grid-gutter-width);
//** For `@screen-sm-min` and up.
@container-sm: @container-tablet;
// Medium screen / desktop
@container-desktop: (940px + @grid-gutter-width);
//** For `@screen-md-min` and up.
@container-md: @container-desktop;
// Large screen / wide desktop
@container-large-desktop: (1140px + @grid-gutter-width);
//** For `@screen-lg-min` and up.
@container-lg: @container-large-desktop;
//== Navbar
//
//##
// Basics of a navbar
@navbar-height: 64px;
@navbar-margin-bottom: @line-height-computed;
@navbar-border-radius: @border-radius-base;
@navbar-padding-horizontal: floor((@grid-gutter-width / 2));
@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
@navbar-collapse-max-height: 340px;
@navbar-default-color: @gray-light;
@navbar-default-bg: #fff;
@navbar-default-border: transparent;
// Navbar links
@navbar-default-link-color: @gray;
@navbar-default-link-hover-color: @gray-dark;
@navbar-default-link-hover-bg: transparent;
@navbar-default-link-active-color: @gray-dark;
@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%);
@navbar-default-link-disabled-color: #ccc;
@navbar-default-link-disabled-bg: transparent;
// Navbar brand label
@navbar-default-brand-color: @navbar-default-link-color;
@navbar-default-brand-hover-color: @navbar-default-link-hover-color;
@navbar-default-brand-hover-bg: transparent;
// Navbar toggle
@navbar-default-toggle-hover-bg: transparent;
@navbar-default-toggle-icon-bar-bg: rgba(0,0,0,0.5);
@navbar-default-toggle-border-color: transparent;
//=== Inverted navbar
// Reset inverted navbar basics
@navbar-inverse-color: @gray-light;
@navbar-inverse-bg: @brand-primary;
@navbar-inverse-border: transparent;
// Inverted navbar links
@navbar-inverse-link-color: lighten(@brand-primary, 30%);
@navbar-inverse-link-hover-color: #fff;
@navbar-inverse-link-hover-bg: transparent;
@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;
@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%);
@navbar-inverse-link-disabled-color: #444;
@navbar-inverse-link-disabled-bg: transparent;
// Inverted navbar brand label
@navbar-inverse-brand-color: @navbar-inverse-link-color;
@navbar-inverse-brand-hover-color: #fff;
@navbar-inverse-brand-hover-bg: transparent;
// Inverted navbar toggle\
@navbar-inverse-toggle-hover-bg: transparent;
@navbar-inverse-toggle-icon-bar-bg: rgba(0,0,0,0.5);
@navbar-inverse-toggle-border-color: transparent;
//== Navs
//
//##
//=== Shared nav styles
@nav-link-padding: 10px 15px;
@nav-link-hover-bg: @gray-lighter;
@nav-disabled-link-color: @gray-light;
@nav-disabled-link-hover-color: @gray-light;
//== Tabs
@nav-tabs-border-color: transparent;
@nav-tabs-link-hover-border-color: @gray-lighter;
@nav-tabs-active-link-hover-bg: transparent;
@nav-tabs-active-link-hover-color: @gray;
@nav-tabs-active-link-hover-border-color: transparent;
@nav-tabs-justified-link-border-color: @nav-tabs-border-color;
@nav-tabs-justified-active-link-border-color: @body-bg;
//== Pills
@nav-pills-border-radius: @border-radius-base;
@nav-pills-active-link-hover-bg: @component-active-bg;
@nav-pills-active-link-hover-color: @component-active-color;
//== Pagination
//
//##
@pagination-color: @link-color;
@pagination-bg: #fff;
@pagination-border: #ddd;
@pagination-hover-color: @link-hover-color;
@pagination-hover-bg: @gray-lighter;
@pagination-hover-border: #ddd;
@pagination-active-color: #fff;
@pagination-active-bg: @brand-primary;
@pagination-active-border: @brand-primary;
@pagination-disabled-color: @gray-light;
@pagination-disabled-bg: #fff;
@pagination-disabled-border: #ddd;
//== Pager
//
//##
@pager-bg: @pagination-bg;
@pager-border: @pagination-border;
@pager-border-radius: 15px;
@pager-hover-bg: @pagination-hover-bg;
@pager-active-bg: @pagination-active-bg;
@pager-active-color: @pagination-active-color;
@pager-disabled-color: @pagination-disabled-color;
//== Jumbotron
//
//##
@jumbotron-padding: 30px;
@jumbotron-color: inherit;
@jumbotron-bg: #f5f5f5;
@jumbotron-heading-color: @headings-color;
@jumbotron-font-size: ceil((@font-size-base * 1.5));
@jumbotron-heading-font-size: ceil((@font-size-base * 4.5));
//== Form states and alerts
//
//## Define colors for form feedback states and, by default, alerts.
@state-success-text: @brand-success;
@state-success-bg: #dff0d8;
@state-success-border: darken(spin(@state-success-bg, -10), 5%);
@state-info-text: @brand-info;
@state-info-bg: #e1bee7;
@state-info-border: darken(spin(@state-info-bg, -10), 7%);
@state-warning-text: @brand-warning;
@state-warning-bg: #ffe0b2;
@state-warning-border: darken(spin(@state-warning-bg, -10), 5%);
@state-danger-text: @brand-danger;
@state-danger-bg: #f9bdbb;
@state-danger-border: darken(spin(@state-danger-bg, -10), 5%);
//== Tooltips
//
//##
//** Tooltip max width
@tooltip-max-width: 200px;
//** Tooltip text color
@tooltip-color: #fff;
//** Tooltip background color
@tooltip-bg: #727272;
@tooltip-opacity: .9;
//** Tooltip arrow width
@tooltip-arrow-width: 5px;
//** Tooltip arrow color
@tooltip-arrow-color: @tooltip-bg;
//== Popovers
//
//##
//** Popover body background color
@popover-bg: #fff;
//** Popover maximum width
@popover-max-width: 276px;
//** Popover border color
@popover-border-color: transparent;
//** Popover fallback border color
@popover-fallback-border-color: transparent;
//** Popover title background color
@popover-title-bg: darken(@popover-bg, 3%);
//** Popover arrow width
@popover-arrow-width: 10px;
//** Popover arrow color
@popover-arrow-color: @popover-bg;
//** Popover outer arrow width
@popover-arrow-outer-width: (@popover-arrow-width + 1);
//** Popover outer arrow color
@popover-arrow-outer-color: fadein(@popover-border-color, 12%);
//** Popover outer arrow fallback color
@popover-arrow-outer-fallback-color: darken(@popover-fallback-border-color, 20%);
//== Labels
//
//##
//** Default label background color
@label-default-bg: @gray-light;
//** Primary label background color
@label-primary-bg: @brand-primary;
//** Success label background color
@label-success-bg: @brand-success;
//** Info label background color
@label-info-bg: @brand-info;
//** Warning label background color
@label-warning-bg: @brand-warning;
//** Danger label background color
@label-danger-bg: @brand-danger;
//** Default label text color
@label-color: #fff;
//** Default text color of a linked label
@label-link-hover-color: #fff;
//== Modals
//
//##
//** Padding applied to the modal body
@modal-inner-padding: 15px;
//** Padding applied to the modal title
@modal-title-padding: 15px;
//** Modal title line-height
@modal-title-line-height: @line-height-base;
//** Background color of modal content area
@modal-content-bg: #fff;
//** Modal content border color
@modal-content-border-color: transparent;
//** Modal content border color **for IE8**
@modal-content-fallback-border-color: #999;
//** Modal backdrop background color
@modal-backdrop-bg: #000;
//** Modal backdrop opacity
@modal-backdrop-opacity: .5;
//** Modal header border color
@modal-header-border-color: transparent;
//** Modal footer border color
@modal-footer-border-color: @modal-header-border-color;
@modal-lg: 900px;
@modal-md: 600px;
@modal-sm: 300px;
//== Alerts
//
//## Define alert colors, border radius, and padding.
@alert-padding: 15px;
@alert-border-radius: @border-radius-base;
@alert-link-font-weight: bold;
@alert-success-bg: @state-success-bg;
@alert-success-text: @state-success-text;
@alert-success-border: @state-success-border;
@alert-info-bg: @state-info-bg;
@alert-info-text: @state-info-text;
@alert-info-border: @state-info-border;
@alert-warning-bg: @state-warning-bg;
@alert-warning-text: @state-warning-text;
@alert-warning-border: @state-warning-border;
@alert-danger-bg: @state-danger-bg;
@alert-danger-text: @state-danger-text;
@alert-danger-border: @state-danger-border;
//== Progress bars
//
//##
//** Background color of the whole progress component
@progress-bg: #f5f5f5;
//** Progress bar text color
@progress-bar-color: #fff;
//** Variable for setting rounded corners on progress bar.
@progress-border-radius: @border-radius-base;
//** Default progress bar color
@progress-bar-bg: @brand-primary;
//** Success progress bar color
@progress-bar-success-bg: @brand-success;
//** Warning progress bar color
@progress-bar-warning-bg: @brand-warning;
//** Danger progress bar color
@progress-bar-danger-bg: @brand-danger;
//** Info progress bar color
@progress-bar-info-bg: @brand-info;
//== List group
//
//##
//** Background color on `.list-group-item`
@list-group-bg: #fff;
//** `.list-group-item` border color
@list-group-border: #ddd;
//** List group border radius
@list-group-border-radius: @border-radius-base;
//** Background color of single list items on hover
@list-group-hover-bg: #f5f5f5;
//** Text color of active list items
@list-group-active-color: @component-active-color;
//** Background color of active list items
@list-group-active-bg: @component-active-bg;
//** Border color of active list elements
@list-group-active-border: @list-group-active-bg;
//** Text color for content within active list items
@list-group-active-text-color: lighten(@list-group-active-bg, 40%);
//** Text color of disabled list items
@list-group-disabled-color: @gray-light;
//** Background color of disabled list items
@list-group-disabled-bg: @gray-lighter;
//** Text color for content within disabled list items
@list-group-disabled-text-color: @list-group-disabled-color;
@list-group-link-color: #555;
@list-group-link-hover-color: @list-group-link-color;
@list-group-link-heading-color: #333;
//== Panels
//
//##
@panel-bg: #fff;
@panel-body-padding: 15px;
@panel-heading-padding: 10px 15px;
@panel-footer-padding: @panel-heading-padding;
@panel-border-radius: @border-radius-base;
//** Border color for elements within panels
@panel-inner-border: #ddd;
@panel-footer-bg: #f5f5f5;
@panel-default-text: @gray-dark;
@panel-default-border: #ddd;
@panel-default-heading-bg: #f5f5f5;
@panel-primary-text: #fff;
@panel-primary-border: @brand-primary;
@panel-primary-heading-bg: @brand-primary;
@panel-success-text: #fff;
@panel-success-border: @state-success-border;
@panel-success-heading-bg: @brand-success;
@panel-info-text: #fff;
@panel-info-border: @state-info-border;
@panel-info-heading-bg: @brand-info;
@panel-warning-text: #fff;
@panel-warning-border: @state-warning-border;
@panel-warning-heading-bg: @brand-warning;
@panel-danger-text: #fff;
@panel-danger-border: @state-danger-border;
@panel-danger-heading-bg: @brand-danger;
//== Thumbnails
//
//##
//** Padding around the thumbnail image
@thumbnail-padding: 4px;
//** Thumbnail background color
@thumbnail-bg: @body-bg;
//** Thumbnail border color
@thumbnail-border: #ddd;
//** Thumbnail border radius
@thumbnail-border-radius: @border-radius-base;
//** Custom text color for thumbnail captions
@thumbnail-caption-color: @text-color;
//** Padding around the thumbnail caption
@thumbnail-caption-padding: 9px;
//== Wells
//
//##
@well-bg: #f5f5f5;
@well-border: transparent;
//== Badges
//
//##
@badge-color: #fff;
//** Linked badge text color on hover
@badge-link-hover-color: #fff;
@badge-bg: @gray-light;
//** Badge text color in active nav link
@badge-active-color: @link-color;
//** Badge background color in active nav link
@badge-active-bg: #fff;
@badge-font-weight: normal;
@badge-line-height: 1;
@badge-border-radius: 10px;
//== Breadcrumbs
//
//##
@breadcrumb-padding-vertical: 8px;
@breadcrumb-padding-horizontal: 15px;
//** Breadcrumb background color
@breadcrumb-bg: #f5f5f5;
//** Breadcrumb text color
@breadcrumb-color: #ccc;
//** Text color of current page in the breadcrumb
@breadcrumb-active-color: @gray-light;
//** Textual separator for between breadcrumb elements
@breadcrumb-separator: "/";
//== Carousel
//
//##
@carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
@carousel-control-color: #fff;
@carousel-control-width: 15%;
@carousel-control-opacity: .5;
@carousel-control-font-size: 20px;
@carousel-indicator-active-bg: #fff;
@carousel-indicator-border-color: #fff;
@carousel-caption-color: #fff;
//== Close
//
//##
@close-font-weight: normal;
@close-color: #000;
@close-text-shadow: none;
//== Code
//
//##
@code-color: #c7254e;
@code-bg: #f9f2f4;
@kbd-color: #fff;
@kbd-bg: #333;
@pre-bg: #f5f5f5;
@pre-color: @gray-dark;
@pre-border-color: #ccc;
@pre-scrollable-max-height: 340px;
//== Type
//
//##
//** Horizontal offset for forms and lists.
@component-offset-horizontal: 180px;
//** Text muted color
@text-muted: @gray-light;
//** Abbreviations and acronyms border color
@abbr-border-color: @gray-light;
//** Headings small color
@headings-small-color: @gray-light;
//** Blockquote small color
@blockquote-small-color: @gray-light;
//** Blockquote font size
@blockquote-font-size: (@font-size-base * 1.25);
//** Blockquote border color
@blockquote-border-color: @gray-lighter;
//** Page header border color
@page-header-border-color: @gray-lighter;
//** Width of horizontal description list titles
@dl-horizontal-offset: @component-offset-horizontal;
//** Point at which .dl-horizontal becomes horizontal
@dl-horizontal-breakpoint: @grid-float-breakpoint;
//** Horizontal line color.
@hr-border: @gray-lighter;

View File

@@ -1,35 +0,0 @@
.settings {
> .row {
margin-bottom: 30px;
}
.section-content {
border-left: 3px solid @brand-primary;
ul {
list-style-type: none;
font-size: 16px;
padding-left: 20px;
}
}
[data-action="upload"][type="text"] {
width: 95%;
}
.bootstrap-tagsinput {
width: 100%;
border: 0;
box-shadow: none;
padding-left: 0;
input {
width: 100%;
margin-left: 1px;
margin-top: 9px;
border-bottom: 1px dotted #ccc !important;
padding-bottom: 5px;
padding-left: 0;
}
}
}

View File

@@ -1,184 +0,0 @@
.define-if-not-set() {
@gray-base: #000;
@gray-darker: lighten(@gray-base, 13.5%); // #222
@gray-dark: lighten(@gray-base, 20%); // #333
@gray: lighten(@gray-base, 33.5%); // #555
@gray-light: lighten(@gray-base, 46.7%); // #777
@gray-lighter: lighten(@gray-base, 93.5%); // #eee
@brand-primary: darken(#428bca, 6.5%); // #337ab7
@brand-success: #5cb85c;
@brand-info: #5bc0de;
@brand-warning: #f0ad4e;
@brand-danger: #d9534f;
}
.define-if-not-set();
#move_thread_modal .category-list {
height: 500px;
overflow-y: auto;
overflow-x: hidden;
}
.topic-watch-dropdown {
.help-text {
margin-left: 20px;
}
}
.category-list {
padding: 0;
li {
.inline-block;
.pointer;
padding: 0.5em;
margin: 0.25em;
.border-radius(3px);
&.disabled {
background-color: #888!important;
opacity: 0.5;
}
}
}
.user-list {
padding-left: 2rem;
padding-top: 1rem;
li {
.pointer;
display: inline-block;
list-style-type: none;
padding: 0.5rem 1rem;
&:hover {
background: #eee;
}
.avatar {
float: left;
margin-right: 1rem;
}
span {
vertical-align: middle;
display: inline-block;
}
}
}
.user-icon {
display: inline-block;
text-align: center;
color: @gray-lighter;
font-weight: normal;
vertical-align: middle;
overflow: hidden; /* stops alt text from overflowing past boundaries if image does not load */
white-space: nowrap;
&:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
}
}
.avatar {
/* Contains the user icon class as a mixin, so there's no need to include that in the template */
.user-icon;
&.avatar-xs {
width: 16px;
height: 16px;
.user-icon-style(16px, 1rem);
}
&.avatar-sm {
width: 24px;
height: 24px;
.user-icon-style(24px, 1.5rem);
}
&.avatar-sm2x {
width: 48px;
height: 48px;
.user-icon-style(48px, 1.5rem);
}
&.avatar-md {
width: 32px;
height: 32px;
.user-icon-style(32px, 1.5rem);
}
&.avatar-lg {
width: 64px;
height: 64px;
.user-icon-style(64px, 4rem);
}
&.avatar-xl {
width: 128px;
height: 128px;
.user-icon-style(128px, 7.5rem);
}
&.avatar-rounded {
border-radius: 50%;
}
}
.ban-modal {
.form-inline, .form-group {
width: 100%;
}
.units {
line-height: 5rem;
}
}
.admin .ban-modal .units {
line-height: 1.846;
}
#crop-picture-modal {
#cropped-image {
max-width: 100%;
}
.cropper-container.cropper-bg {
max-width: 100%;
}
}
.necro-post {
color: rgba(127,127,127,.5);
font-size: 1.5em;
margin-bottom: 20px;
text-align: center;
text-transform: uppercase;
}
.timeline-event {
display: flex;
align-items: center;
justify-content: center;
.timeline-badge {
padding: 1rem;
}
}
.imagedrop {
position: absolute;
text-align: center;
font-size: 24px;
color: @gray-light;
width: 100%;
display: none;
}

View File

@@ -1,10 +0,0 @@
@import (inline) 'jquery-ui/themes/base/core.css';
@import (inline) 'jquery-ui/themes/base/menu.css';
@import (inline) 'jquery-ui/themes/base/button.css';
@import (inline) 'jquery-ui/themes/base/datepicker.css';
@import (inline) 'jquery-ui/themes/base/autocomplete.css';
@import (inline) 'jquery-ui/themes/base/resizable.css';
@import (inline) 'jquery-ui/themes/base/selectable.css';
@import (inline) 'jquery-ui/themes/base/draggable.css';
@import (inline) 'jquery-ui/themes/base/sortable.css';
@import (inline) 'jquery-ui/themes/base/theme.css';

View File

@@ -1,80 +0,0 @@
.no-select {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.pointer {
cursor: pointer;
*cursor: hand;
}
.inline-block {
display: inline-block;
*display: inline;
zoom: 1;
}
.clear {
clear: both;
}
.zebra {
&:nth-child(even) {
background: rgba(191,191,191,0.2);
}
&:nth-child(odd) {
background: rgba(223,223,223,0.2);
}
}
.border-radius (@radius: 5px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
-ms-border-radius: @radius;
-o-border-radius: @radius;
border-radius: @radius;
}
.text-ellipsis {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.fix-lists {
ul {
> li {
list-style-type: disc;
ul > li {
list-style-type: circle;
ul > li {
list-style-type: square;
}
}
}
}
> ul, > ol {
margin-bottom: 10px;
}
}
.user-icon-style(@size: 32px, @font-size: 1.5rem, @border-radius: inherit) {
border-radius: @border-radius;
width: @size;
height: @size;
line-height: @size;
font-size: @font-size;
}
.box-shadow(@shadow) {
-webkit-box-shadow: @shadow;
box-shadow: @shadow;
}

View File

@@ -65,6 +65,10 @@ CommonProps:
type: string type: string
as: as:
type: string type: string
crossorigin:
type: string
enum: ['', 'anonymous', 'use-credentials']
description: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin
required: required:
- rel - rel
- href - href

View File

@@ -165,8 +165,13 @@ FlagNotesObject:
type: string type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.) removed, etc.)
displayname:
type: string
description: This is either username or fullname depending on forum and user settings
example: Dragon Fruit
picture: picture:
type: string type: string
nullable: true
uid: uid:
type: number type: number
description: A user identifier description: A user identifier

View File

@@ -0,0 +1,23 @@
FiltersObject:
type: object
properties:
name:
type: string
filter:
type: string
selected:
type: boolean
count:
type: number
required:
- name
- filter
FiltersArray:
type: array
items:
anyOf:
- $ref: '#/FiltersObject'
- type: object
properties:
separator:
type: boolean

View File

@@ -1,64 +1,77 @@
PaginationProps:
allOf:
- type: object
description: Optional properties that may or may not be present (except for `page`, which is always present, and is only here as a hack to pass validation)
properties:
page:
type: number
qs:
type: string
required:
- cid
Pagination: Pagination:
type: object type: object
properties: properties:
pagination: pagination:
type: object allOf:
properties: - $ref: '#/PaginationProps'
prev: - type: object
type: object
properties: properties:
page: prev:
type: object
properties:
page:
type: number
active:
type: boolean
next:
type: object
properties:
page:
type: number
active:
type: boolean
first:
type: object
properties:
page:
type: number
active:
type: boolean
last:
type: object
properties:
page:
type: number
active:
type: boolean
rel:
type: array
description: A collection of objects used to build the link tags pointing to adjacent pages, if any.
items:
type: object
properties:
rel:
type: string
enum: [prev, next]
href:
type: string
description: A query string that points to the previous or next page
pages:
type: array
items:
type: object
properties:
page:
type: number
description: The current page
active:
type: boolean
description: If the page noted in this array is the current page
qs:
type: string
description: A query string that points to the page noted in this array
currentPage:
type: number type: number
active: pageCount:
type: boolean type: number
next:
type: object
properties:
page:
type: number
active:
type: boolean
first:
type: object
properties:
page:
type: number
active:
type: boolean
last:
type: object
properties:
page:
type: number
active:
type: boolean
rel:
type: array
description: A collection of objects used to build the link tags pointing to adjacent pages, if any.
items:
type: object
properties:
rel:
type: string
enum: [prev, next]
href:
type: string
description: A query string that points to the previous or next page
pages:
type: array
items:
type: object
properties:
page:
type: number
description: The current page
active:
type: boolean
description: If the page noted in this array is the current page
qs:
type: string
description: A query string that points to the page noted in this array
currentPage:
type: number
pageCount:
type: number

View File

@@ -133,6 +133,15 @@ UserObject:
example: example:
- administrators - administrators
- Staff - Staff
muted:
type: boolean
description: Whether or not the user has been muted.
mutedUntil:
type: number
description: A UNIX timestamp representing the moment a muted state will be lifted.
mutedReason:
type: string
description: The admin-provided reason for being muted.
'icon:text': 'icon:text':
type: string type: string
description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar
@@ -322,6 +331,17 @@ UserObjectFull:
example: example:
- administrators - administrators
- Staff - Staff
muted:
type: boolean
description: Whether or not the user has been muted.
mutedUntil:
type: number
description: A UNIX timestamp representing the moment a muted state will be lifted.
nullable: true
mutedReason:
type: string
description: The admin-provided reason for being muted.
nullable: true
'icon:text': 'icon:text':
type: string type: string
description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar
@@ -348,6 +368,8 @@ UserObjectFull:
type: string type: string
age: age:
type: number type: number
emailHidden:
type: boolean
emailClass: emailClass:
type: string type: string
ips: ips:
@@ -361,6 +383,8 @@ UserObjectFull:
properties: properties:
best: best:
type: number type: number
controversial:
type: number
blocks: blocks:
type: number type: number
bookmarks: bookmarks:
@@ -413,6 +437,8 @@ UserObjectFull:
type: boolean type: boolean
canBan: canBan:
type: boolean type: boolean
canMute:
type: boolean
canFlag: canFlag:
type: boolean type: boolean
canChangePassword: canChangePassword:
@@ -425,10 +451,22 @@ UserObjectFull:
type: number type: number
showHidden: showHidden:
type: boolean type: boolean
allowProfilePicture:
type: boolean
allowCoverPicture:
type: boolean
allowProfileImageUploads:
type: number
allowedProfileImageExtensions:
type: string
groups: groups:
type: array type: array
items: items:
$ref: ./GroupObject.yaml#/GroupFullObject $ref: ./GroupObject.yaml#/GroupFullObject
selectedGroup:
type: array
items:
$ref: ./GroupObject.yaml#/GroupFullObject
disableSignatures: disableSignatures:
type: boolean type: boolean
reputation:disabled: reputation:disabled:
@@ -444,6 +482,9 @@ UserObjectFull:
type: string type: string
route: route:
type: string type: string
url:
type: string
description: The relative path to the profile link route from the root of the forum
name: name:
type: string type: string
visibility: visibility:
@@ -659,3 +700,53 @@ UserObjectACP:
nullable: true nullable: true
ips: ips:
type: array type: array
BanMuteArray:
type: array
items:
type: object
properties:
uid:
type: number
timestamp:
type: number
expire:
type: number
fromUid:
type: number
user:
type: object
properties:
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
type: string
uid:
type: number
description: A user identifier
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
until:
type: number
untilReadable:
type: string
timestampReadable:
type: string
timestampISO:
type: string
reason:
type: string

View File

@@ -182,14 +182,6 @@ paths:
$ref: 'read/user/username/username.yaml' $ref: 'read/user/username/username.yaml'
"/api/user/email/{email}": "/api/user/email/{email}":
$ref: 'read/user/email/email.yaml' $ref: 'read/user/email/email.yaml'
"/api/user/{userslug}/export/posts":
$ref: 'read/user/userslug/export/posts.yaml'
"/api/user/{userslug}/export/uploads":
$ref: 'read/user/userslug/export/uploads.yaml'
"/api/user/{userslug}/export/profile":
$ref: 'read/user/userslug/export/profile.yaml'
"/api/user/uid/{userslug}/export/{type}":
$ref: 'read/user/uid/userslug/export/type.yaml'
/api/categories: /api/categories:
$ref: 'read/categories.yaml' $ref: 'read/categories.yaml'
"/api/categories/{cid}/moderators": "/api/categories/{cid}/moderators":

View File

@@ -20,83 +20,105 @@ get:
allOf: allOf:
- type: object - type: object
properties: properties:
postCache: caches:
type: object type: object
properties: properties:
length: postCache:
type: number type: object
max: properties:
type: number length:
nullable: true type: number
itemCount: max:
type: number type: number
percentFull: nullable: true
type: number maxSize:
hits: type: number
type: string itemCount:
misses: type: number
type: string percentFull:
hitRatio: type: number
type: string hits:
enabled: type: string
type: boolean misses:
groupCache: type: string
type: object hitRatio:
properties: type: string
length: enabled:
type: number type: boolean
max: ttl:
type: number type: number
itemCount: groupCache:
type: number type: object
percentFull: properties:
type: number length:
hits: type: number
type: string max:
misses: type: number
type: string nullable: true
hitRatio: maxSize:
type: string type: number
enabled: itemCount:
type: boolean type: number
localCache: percentFull:
type: object type: number
properties: hits:
length: type: string
type: number misses:
max: type: string
type: number hitRatio:
itemCount: type: string
type: number enabled:
percentFull: type: boolean
type: number ttl:
hits: type: number
type: string localCache:
misses: type: object
type: string properties:
hitRatio: length:
type: string type: number
enabled: max:
type: boolean type: number
objectCache: nullable: true
type: object maxSize:
properties: type: number
length: itemCount:
type: number type: number
max: percentFull:
type: number type: number
itemCount: hits:
type: number type: string
percentFull: misses:
type: number type: string
hits: hitRatio:
type: string type: string
misses: enabled:
type: string type: boolean
hitRatio: ttl:
type: string type: number
enabled: objectCache:
type: boolean type: object
properties:
length:
type: number
max:
type: number
nullable: true
maxSize:
type: number
itemCount:
type: number
percentFull:
type: number
hits:
type: string
misses:
type: string
hitRatio:
type: string
enabled:
type: boolean
ttl:
type: number
required: required:
- postCache - postCache
- groupCache - groupCache

View File

@@ -59,6 +59,8 @@ get:
type: string type: string
selected: selected:
type: boolean type: boolean
count:
type: number
query: query:
additionalProperties: additionalProperties:
description: An object containing the query string parameters, if any description: An object containing the query string parameters, if any

View File

@@ -60,5 +60,16 @@ get:
description: An ISO 8601 formatted date string (complementing `timestamp`) description: An ISO 8601 formatted date string (complementing `timestamp`)
showSystemControls: showSystemControls:
type: boolean type: boolean
popularSearches:
type: array
items:
type: object
properties:
value:
type: string
description: The search term
score:
type: number
description: How many times it has been queried
- $ref: ../../components/schemas/admin/dashboard.yaml#/Stats - $ref: ../../components/schemas/admin/dashboard.yaml#/Stats
- $ref: ../../components/schemas/CommonProps.yaml#/CommonProps - $ref: ../../components/schemas/CommonProps.yaml#/CommonProps

View File

@@ -1,7 +1,7 @@
get: get:
tags: tags:
- admin - admin
summary: Get detailed user registration analytics summary: Get detailed search analytics
responses: responses:
"200": "200":
description: A JSON object containing popular searches. description: A JSON object containing popular searches.
@@ -22,4 +22,12 @@ get:
score: score:
type: number type: number
description: Number of times this string has been searched description: Number of times this string has been searched
startDate:
type: string
description: A UNIX timestamp of the start date
nullable: true
endDate:
type: string
description: A UNIX timestamp of the end date
nullable: true
- $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps

View File

@@ -1,10 +1,10 @@
get: get:
tags: tags:
- admin - admin
summary: Get detailed user registration analytics summary: Get detailed topic creation analytics
responses: responses:
"200": "200":
description: A JSON object containing more detailed analytics related to user registrations. description: A JSON object containing more detailed analytics related to topic creations.
content: content:
application/json: application/json:
schema: schema:

View File

@@ -64,12 +64,7 @@ get:
uptimeHumanReadable: uptimeHumanReadable:
type: string type: string
cpuUsage: cpuUsage:
type: object type: number
properties:
user:
type: string
system:
type: string
os: os:
type: object type: object
properties: properties:
@@ -90,6 +85,8 @@ get:
type: string type: string
totalmem: totalmem:
type: string type: string
usedmem:
type: string
nodebb: nodebb:
type: object type: object
properties: properties:

View File

@@ -72,6 +72,8 @@ get:
type: number type: number
inactiveCount: inactiveCount:
type: number type: number
canChangeState:
type: boolean
upgradeCount: upgradeCount:
type: number type: number
download: download:

View File

@@ -97,11 +97,11 @@ get:
type: array type: array
items: items:
$ref: ../../../components/schemas/UserObject.yaml#/UserObjectSlim $ref: ../../../components/schemas/UserObject.yaml#/UserObjectSlim
subCategoryCount:
type: number
selectedCategory: selectedCategory:
$ref: ../../../components/schemas/CategoryObject.yaml#/CategoryObject nullable: true
allPrivileges: anyOf:
type: array - $ref: ../../../components/schemas/CategoryObject.yaml#/CategoryObject
items: - $ref: ../../../components/schemas/Pagination.yaml#/Pagination
type: string
description: A simple array containing user privilege names (used client-side when giving mod privilege)
- $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps

View File

@@ -49,5 +49,11 @@ get:
children: children:
type: array type: array
description: Array of children categories description: Array of children categories
subCategoriesLeft:
type: number
hasMoreSubCategories:
type: boolean
showMorePage:
type: number
- $ref: ../../../components/schemas/Pagination.yaml#/Pagination - $ref: ../../../components/schemas/Pagination.yaml#/Pagination
- $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps

View File

@@ -119,4 +119,6 @@ get:
description: A category identifier description: A category identifier
group: group:
type: string type: string
isAdminPriv:
type: boolean
- $ref: ../../../../components/schemas/CommonProps.yaml#/CommonProps - $ref: ../../../../components/schemas/CommonProps.yaml#/CommonProps

View File

@@ -87,11 +87,18 @@ get:
type: string type: string
displayName: displayName:
type: string type: string
properties: targetBlank:
type: object type: boolean
properties: required:
targetBlank: - id
type: boolean - route
- title
- enabled
- iconClass
- textClass
- text
- core
- groups
groups: groups:
type: array type: array
items: items:

View File

@@ -193,6 +193,9 @@ get:
description: An ISO 8601 formatted date string (complementing `timestamp`) description: An ISO 8601 formatted date string (complementing `timestamp`)
pid: pid:
type: number type: number
index:
type: number
description: The index of the post
topic: topic:
type: object type: object
properties: properties:
@@ -200,6 +203,32 @@ get:
type: string type: string
title: title:
type: string type: string
user:
type: object
properties:
uid:
type: number
example: 1
username:
type: string
example: Dragon Fruit
userslug:
type: string
example: dragon-fruit
picture:
type: string
example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80'
nullable: true
displayname:
type: string
description: This is either username or fullname depending on forum and user settings
example: Dragon Fruit
'icon:text':
type: string
example: D
'icon:bgColor':
type: string
example: '#9c27b0'
imageClass: imageClass:
type: string type: string
- $ref: ../components/schemas/Pagination.yaml#/Pagination - $ref: ../components/schemas/Pagination.yaml#/Pagination

View File

@@ -17,6 +17,8 @@ get:
type: string type: string
assetBaseUrl: assetBaseUrl:
type: string type: string
asset_base_url:
type: string
siteTitle: siteTitle:
type: string type: string
browserTitle: browserTitle:
@@ -100,6 +102,10 @@ get:
type: string type: string
searchEnabled: searchEnabled:
type: boolean type: boolean
searchDefaultInQuick:
type: string
disableCustomUserSkins:
type: boolean
bootswatchSkin: bootswatchSkin:
type: string type: string
enablePostHistory: enablePostHistory:
@@ -145,4 +151,123 @@ get:
items: items:
type: string type: string
description: A valid CSS colour code description: A valid CSS colour code
example: '#fff' example: '#fff'
emailPrompt:
type: number
useragent:
type: object
properties:
isYaBrowser:
type: boolean
isAuthoritative:
type: boolean
isMobile:
type: boolean
isMobileNative:
type: boolean
isTablet:
type: boolean
isiPad:
type: boolean
isiPod:
type: boolean
isiPhone:
type: boolean
isiPhoneNative:
type: boolean
isAndroid:
type: boolean
isAndroidNative:
type: boolean
isBlackberry:
type: boolean
isOpera:
type: boolean
isIE:
type: boolean
isEdge:
type: boolean
isIECompatibilityMode:
type: boolean
isSafari:
type: boolean
isFirefox:
type: boolean
isWebkit:
type: boolean
isChrome:
type: boolean
isKonqueror:
type: boolean
isOmniWeb:
type: boolean
isSeaMonkey:
type: boolean
isFlock:
type: boolean
isAmaya:
type: boolean
isPhantomJS:
type: boolean
isEpiphany:
type: boolean
isDesktop:
type: boolean
isWindows:
type: boolean
isLinux:
type: boolean
isLinux64:
type: boolean
isMac:
type: boolean
isChromeOS:
type: boolean
isBada:
type: boolean
isSamsung:
type: boolean
isRaspberry:
type: boolean
isBot:
type: boolean
isCurl:
type: boolean
isAndroidTablet:
type: boolean
isWinJs:
type: boolean
isKindleFire:
type: boolean
isSilk:
type: boolean
isCaptive:
type: boolean
isSmartTV:
type: boolean
isUC:
type: boolean
isFacebook:
type: boolean
isAlamoFire:
type: boolean
isElectron:
type: boolean
silkAccelerated:
type: boolean
browser:
type: string
version:
type: string
os:
type: string
platform:
type: string
geoIp:
type: object
source:
type: string
isWechat:
type: boolean
composer-default:
type: object

View File

@@ -2,6 +2,14 @@ get:
tags: tags:
- authentication - authentication
summary: Verify an email address summary: Verify an email address
parameters:
- in: path
name: code
schema:
type: string
required: true
description: a valid confirmation code
example: f8c4a54a-47ae-40f5-a0a5-356d6a35c24e
responses: responses:
"200": "200":
description: Email address verified, or confirmation code was incorrect description: Email address verified, or confirmation code was incorrect

View File

@@ -42,6 +42,9 @@ get:
assignee: assignee:
type: string type: string
nullable: true nullable: true
count:
type: number
description: The count of returned flags (irrespective of the page count or number of flags per page).
analytics: analytics:
type: array type: array
items: items:
@@ -71,6 +74,105 @@ get:
bgColor: bgColor:
type: string type: string
nullable: true nullable: true
selected:
type: object
properties:
assignee:
type: array
items:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
displayname:
type: string
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
reporterId:
type: array
items:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
displayname:
type: string
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
targetUid:
type: array
items:
type: object
properties:
uid:
type: number
description: A user identifier
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
displayname:
type: string
picture:
nullable: true
type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
- $ref: ../components/schemas/Pagination.yaml#/Pagination - $ref: ../components/schemas/Pagination.yaml#/Pagination
- $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: ../components/schemas/CommonProps.yaml#/CommonProps - $ref: ../components/schemas/CommonProps.yaml#/CommonProps

View File

@@ -42,5 +42,39 @@ get:
additionalProperties: additionalProperties:
description: "A list of global and admin privileges, and whether the calling user has (or has inherited) them" description: "A list of global and admin privileges, and whether the calling user has (or has inherited) them"
type: boolean type: boolean
states:
type: object
properties:
open:
type: object
properties:
label:
type: string
class:
type: string
wip:
type: object
properties:
label:
type: string
class:
type: string
resolved:
type: object
properties:
label:
type: string
class:
type: string
rejected:
type: object
properties:
label:
type: string
class:
type: string
additionalProperties:
type: object
description: Plugins are able to add additional flag states, and so their values would also be present here if so.
- $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs
- $ref: ../../components/schemas/CommonProps.yaml#/CommonProps - $ref: ../../components/schemas/CommonProps.yaml#/CommonProps

View File

@@ -101,6 +101,8 @@ get:
type: boolean type: boolean
allowGroupCreation: allowGroupCreation:
type: boolean type: boolean
sort:
type: string
nextStart: nextStart:
type: number type: number
title: title:

View File

@@ -195,6 +195,9 @@ get:
description: An ISO 8601 formatted date string (complementing `timestamp`) description: An ISO 8601 formatted date string (complementing `timestamp`)
pid: pid:
type: number type: number
index:
type: number
description: The index of the post
topic: topic:
type: object type: object
properties: properties:
@@ -202,6 +205,32 @@ get:
type: string type: string
title: title:
type: string type: string
user:
type: object
properties:
uid:
type: number
example: 1
username:
type: string
example: Dragon Fruit
userslug:
type: string
example: dragon-fruit
picture:
type: string
example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80'
nullable: true
displayname:
type: string
description: This is either username or fullname depending on forum and user settings
example: Dragon Fruit
'icon:text':
type: string
example: D
'icon:bgColor':
type: string
example: '#9c27b0'
imageClass: imageClass:
type: string type: string
- $ref: ../components/schemas/Pagination.yaml#/Pagination - $ref: ../components/schemas/Pagination.yaml#/Pagination

View File

@@ -69,42 +69,13 @@ get:
readClass: readClass:
type: string type: string
filters: filters:
type: array $ref: ../components/schemas/NotificationFilters.yaml#/FiltersArray
items:
type: object
additionalProperties: {}
regularFilters: regularFilters:
type: array $ref: ../components/schemas/NotificationFilters.yaml#/FiltersArray
items:
type: object
properties:
name:
type: string
filter:
type: string
selected:
type: boolean
required:
- name
- filter
moderatorFilters: moderatorFilters:
type: array $ref: ../components/schemas/NotificationFilters.yaml#/FiltersArray
items:
type: object
properties:
name:
type: string
filter:
type: string
selectedFilter: selectedFilter:
type: object $ref: ../components/schemas/NotificationFilters.yaml#/FiltersObject
properties:
name:
type: string
filter:
type: string
selected:
type: boolean
title: title:
type: string type: string
- $ref: ../components/schemas/Pagination.yaml#/Pagination - $ref: ../components/schemas/Pagination.yaml#/Pagination

View File

@@ -162,6 +162,10 @@ get:
titleRaw: titleRaw:
type: string type: string
- $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject
isAdmin:
type: boolean
canAccept:
type: boolean
enabled: enabled:
type: number type: number
singlePost: singlePost:

View File

@@ -23,31 +23,65 @@ get:
type: boolean type: boolean
search_query: search_query:
type: string type: string
term:
type: string
allCategories:
type: array
items:
type: object
properties:
value:
oneOf:
- type: string
- type: number
text:
type: string
allCategoriesCount:
type: number
expandSearch:
type: boolean
showAsPosts: showAsPosts:
type: boolean type: boolean
showAsTopics: showAsTopics:
type: boolean type: boolean
title: title:
type: string type: string
filters:
type: object
userFilterSelected:
type: array
items:
type: object
properties:
uid:
type: number
description: A user identifier
example: 1
username:
type: string
description: A friendly name for a given user account
example: Dragon Fruit
displayname:
type: string
description: This is either username or fullname depending on forum and user settings
example: Dragon Fruit
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.)
example: dragon-fruit
picture:
type: string
description: A URL pointing to a picture to be used as the user's avatar
example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80'
nullable: true
'icon:text':
type: string
description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar
example: D
'icon:bgColor':
type: string
description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon
example: '#9c27b0'
tagFilterSelected:
type: array
items:
type: object
properties:
value:
type: string
valueEscaped:
type: string
valueEncoded:
type: string
class:
type: string
searchDefaultSortBy: searchDefaultSortBy:
type: string type: string
searchDefaultIn:
type: string
privileges: privileges:
type: object type: object
properties: properties:

View File

@@ -227,6 +227,8 @@ get:
type: string type: string
title: title:
type: string type: string
canPost:
type: boolean
showSelect: showSelect:
type: boolean type: boolean
showTopicTools: showTopicTools:

View File

@@ -126,6 +126,13 @@ get:
type: array type: array
items: items:
type: string type: string
muted:
type: boolean
description: Whether or not the user has been muted.
mutedUntil:
type: number
description: A UNIX timestamp representing the moment a muted state will be lifted.
nullable: true
icon:text: icon:text:
type: string type: string
description: A single-letter representation of a username. This is used in the description: A single-letter representation of a username. This is used in the
@@ -219,6 +226,19 @@ get:
type: number type: number
selfPost: selfPost:
type: boolean type: boolean
events:
type: array
items:
type: object
properties:
type:
type: string
id:
type: number
timestamp:
type: number
timestampISO:
type: string
topicOwnerPost: topicOwnerPost:
type: boolean type: boolean
display_edit_tools: display_edit_tools:
@@ -311,6 +331,8 @@ get:
type: boolean type: boolean
topics:read: topics:read:
type: boolean type: boolean
topics:schedule:
type: boolean
topics:tag: topics:tag:
type: boolean type: boolean
topics:delete: topics:delete:
@@ -354,6 +376,8 @@ get:
type: number type: number
feeds:disableRSS: feeds:disableRSS:
type: number type: number
signatures:hideDuplicates:
type: number
bookmarkThreshold: bookmarkThreshold:
type: number type: number
necroThreshold: necroThreshold:
@@ -370,12 +394,12 @@ get:
type: boolean type: boolean
privateUploads: privateUploads:
type: boolean type: boolean
showPostPreviewsOnHover:
type: boolean
rssFeedUrl: rssFeedUrl:
type: string type: string
postIndex: postIndex:
type: number type: number
loggedInUser:
$ref: ../../components/schemas/UserObject.yaml#/UserObject
- type: object - type: object
description: Optional properties that may or may not be present (except for `tid`, which is always present, and is only here as a hack to pass validation) description: Optional properties that may or may not be present (except for `tid`, which is always present, and is only here as a hack to pass validation)
properties: properties:
@@ -385,6 +409,8 @@ get:
thumb: thumb:
type: string type: string
description: An uploaded topic thumbnail description: An uploaded topic thumbnail
loggedInUser:
$ref: ../../components/schemas/UserObject.yaml#/UserObject
required: required:
- tid - tid
- $ref: ../../components/schemas/Pagination.yaml#/Pagination - $ref: ../../components/schemas/Pagination.yaml#/Pagination

View File

@@ -13,6 +13,8 @@ get:
allOf: allOf:
- type: object - type: object
properties: properties:
canPost:
type: boolean
showSelect: showSelect:
type: boolean type: boolean
showTopicTools: showTopicTools:
@@ -206,6 +208,10 @@ get:
nullable: true nullable: true
selectCategoryLabel: selectCategoryLabel:
type: string type: string
selectCategoryIcon:
type: string
showCategorySelectLabel:
type: boolean
selectedCids: selectedCids:
type: array type: array
items: items:

View File

@@ -298,6 +298,8 @@ get:
type: string type: string
usernames: usernames:
type: string type: string
chatWithMessage:
type: string
nextStart: nextStart:
type: number type: number
title: title:
@@ -311,4 +313,6 @@ get:
removed, etc.) removed, etc.)
canViewInfo: canViewInfo:
type: boolean type: boolean
chatWithMessage:
type: string
- $ref: ../../../../components/schemas/CommonProps.yaml#/CommonProps - $ref: ../../../../components/schemas/CommonProps.yaml#/CommonProps

View File

@@ -1,20 +0,0 @@
get:
tags:
- users
summary: Export a user's posts (.csv)
description: This route retrieves an existing export of user's posts. To create one go to `/user/{userslug}/consent`
parameters:
- name: userslug
in: path
required: true
schema:
type: string
example: admin
responses:
"200":
description: "A CSV file containing a user's posts"
content:
text/csv:
schema:
type: string
format: binary

View File

@@ -1,20 +0,0 @@
get:
tags:
- users
summary: Export a user's profile data (.json)
description: This route retrieves an existing export of user's profile data. To create one go to `/user/{userslug}/consent`
parameters:
- name: userslug
in: path
required: true
schema:
type: string
example: admin
responses:
"200":
description: "A JSON file containing the user profile"
content:
text/json:
schema:
type: string
format: binary

View File

@@ -1,20 +0,0 @@
get:
tags:
- users
summary: Export a user's uploads (.zip)
description: This route retrieves an existing export of user's profile data. To create one go to `/user/{userslug}/consent`
parameters:
- name: userslug
in: path
required: true
schema:
type: string
example: admin
responses:
"200":
description: Successful export of user uploads
content:
application/zip:
schema:
type: string
format: binary

View File

@@ -40,55 +40,9 @@ get:
additionalProperties: additionalProperties:
description: Contextual data is added to this object (such as topic data, etc.) description: Contextual data is added to this object (such as topic data, etc.)
bans: bans:
type: array $ref: ../../../components/schemas/UserObject.yaml#/BanMuteArray
items: mutes:
type: object $ref: ../../../components/schemas/UserObject.yaml#/BanMuteArray
properties:
uid:
type: number
timestamp:
type: number
expire:
type: number
fromUid:
type: number
user:
type: object
properties:
username:
type: string
description: A friendly name for a given user account
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
picture:
type: string
uid:
type: number
description: A user identifier
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
auto-generated icon given to users without
an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
`icon:text` for the user's auto-generated
icon
example: "#f44336"
until:
type: number
untilReadable:
type: string
timestampReadable:
type: string
timestampISO:
type: string
reason:
type: string
sessions: sessions:
type: array type: array
items: items:

View File

@@ -150,6 +150,8 @@ paths:
$ref: 'write/chats.yaml' $ref: 'write/chats.yaml'
/chats/{roomId}: /chats/{roomId}:
$ref: 'write/chats/roomId.yaml' $ref: 'write/chats/roomId.yaml'
/chats/{roomId}/state:
$ref: 'write/chats/roomId/state.yaml'
/chats/{roomId}/users: /chats/{roomId}/users:
$ref: 'write/chats/roomId/users.yaml' $ref: 'write/chats/roomId/users.yaml'
/chats/{roomId}/users/{uid}: /chats/{roomId}/users/{uid}:

View File

@@ -0,0 +1,50 @@
put:
tags:
- chats
summary: mark chat room as unread
description: This operation marks a chat room as unread.
parameters:
- in: path
name: roomId
schema:
type: number
required: true
description: a valid room id
example: 1
responses:
'200':
description: Chat room marked
content:
application/json:
schema:
type: object
properties:
status:
$ref: ../../../components/schemas/Status.yaml#/Status
response:
$ref: ../../../components/schemas/Chats.yaml#/RoomObjectFull
delete:
tags:
- chats
summary: mark chat room as read
description: This operation marks a chat room as read.
parameters:
- in: path
name: roomId
schema:
type: number
required: true
description: a valid room id
example: 1
responses:
'200':
description: Chat room marked
content:
application/json:
schema:
type: object
properties:
status:
$ref: ../../../components/schemas/Status.yaml#/Status
response:
$ref: ../../../components/schemas/Chats.yaml#/RoomObjectFull

View File

@@ -1,8 +1,4 @@
@import "bootstrap/less/bootstrap";
@import "./paper/variables";
@import "./paper/bootswatch";
@import "./mixins"; @import "./mixins";
@import "./vars";
@import "./header"; @import "./header";
@import "./mobile"; @import "./mobile";
@@ -13,24 +9,13 @@
@import "./manage/privileges"; @import "./manage/privileges";
@import "./manage/tags"; @import "./manage/tags";
@import "./manage/groups"; @import "./manage/groups";
@import "./manage/registration";
@import "./manage/users";
@import "./manage/admins-mods";
@import "./appearance/customise"; @import "./appearance/customise";
@import "./appearance/themes";
@import "./extend/plugins"; @import "./extend/plugins";
@import "./extend/rewards"; @import "./extend/rewards";
@import "./extend/widgets"; @import "./extend/widgets";
@import "./advanced/database"; @import "./advanced/database";
@import "./advanced/events";
@import "./advanced/logs";
@import "./advanced/errors";
@import "./advanced/hooks";
@import "./development/info";
@import "./settings"; @import "./settings";
@import "../flags";
@import "./modules/alerts"; @import "./modules/alerts";
@import "./modules/selectable"; @import "./modules/selectable";
@import "./modules/nprogress"; @import "./modules/nprogress";
@@ -46,21 +31,19 @@ body {
h1 { h1 {
font-size: 35px; font-size: 35px;
margin-bottom: 50px;
} }
.form-label, .form-check-label {
label {
font-weight: 700; font-weight: 700;
height: auto;
} }
.btn { .btn {
border-radius: 0; border-radius: 0;
} }
.btn-outline-secondary {
.btn-link { color: $gray-700;
color: @link-color; box-shadow: 0 1px 4px rgba(0, 0, 0, .4) !important;
&:hover {
background-color: $gray-200 !important;
}
} }
// .floating-button can either be a container or the button itself // .floating-button can either be a container or the button itself
@@ -68,16 +51,16 @@ body {
position: fixed; position: fixed;
right: 30px; right: 30px;
bottom: 30px; bottom: 30px;
z-index: 1; z-index: 2;
max-width: 56px; max-width: 56px;
button { button {
&.primary { &.primary {
background: @brand-primary !important; background: $primary !important;
} }
&.success { &.success {
background: @brand-success !important; background: $success !important;
} }
&:not(:last-child) { &:not(:last-child) {
@@ -86,12 +69,7 @@ body {
} }
} }
button.floating-button { button.floating-button {
background: @brand-primary !important; background: $primary !important;
}
.user-img {
width:24px;
height:24px;
} }
.nodebb-logo { .nodebb-logo {
@@ -102,7 +80,7 @@ body {
vertical-align: -43%; vertical-align: -43%;
} }
.box-header-font; @include box-header-font;
color: #fff; color: #fff;
} }
@@ -110,48 +88,52 @@ body {
cursor: default; cursor: default;
} }
.acp-panel-heading { @mixin acp-panel-heading() {
padding: 7px 14px; padding: 7px 14px;
border: 0; border: 0;
.box-header-font; @include box-header-font;
} }
.panel:not([data-container-html]) { .card:not([data-container-html]) {
background-color: #FFF; background-color: #FFF;
box-sizing: border-box; box-sizing: border-box;
border-radius: 3px; border-radius: 3px;
border-width: 0px;
box-shadow: 0px 1px 3px 0px rgba(165, 165, 165, 0.75); box-shadow: 0px 1px 3px 0px rgba(165, 165, 165, 0.75);
margin-bottom: 20px; margin-bottom: 20px;
&.panel-default >.panel-heading { >.card-header {
.acp-panel-heading; @include acp-panel-heading;
background: #fefefe; background: #fefefe;
color: #333; color: #333;
} }
&.panel-danger >.panel-heading { &.card-danger >.card-header {
.acp-panel-heading; @include acp-panel-heading;
} }
} }
.nav-header { .nav-header {
.box-header-font @include box-header-font;
} }
.icon-container { .icon-container {
.row { .fa-nbb-none {
border: 1px dotted black;
}
.nbb-fa-icons {
margin: 0; margin: 0;
i { i {
width:20px; width: 36px;
height:20px; height: 36px;
margin: 1px; cursor: pointer;
.pointer; line-height: 36px;
line-height: 20px;
text-align: center; text-align: center;
color: @gray-dark; color: $gray-800;
margin: 4px;
&:hover, &.selected { &:hover, &.selected {
background: @brand-primary; background: $primary;
color: white; color: white;
} }
} }
@@ -167,26 +149,13 @@ body {
} }
.navbar-nav { .navbar-nav {
margin-top: 0; >li {
margin-bottom: 0;
>li {
>a {
padding-top: 15px;
padding-bottom: 15px;
}
>a:hover, >a:focus {
color: @gray-dark;
background-color: @gray-light;
}
>#reconnect { >#reconnect {
color: @gray-light; color: $gray-700;
} }
>#reconnect:focus, >#reconnect:hover { >#reconnect:focus, >#reconnect:hover {
color: @gray-light; color: $gray-700;
background-color: transparent; background-color: transparent;
} }
} }
@@ -198,7 +167,23 @@ body {
/* Allows the autocomplete dropbox to appear on top of a modal's backdrop */ /* Allows the autocomplete dropbox to appear on top of a modal's backdrop */
.ui-autocomplete { .ui-autocomplete {
z-index: @zindex-popover; z-index: $zindex-popover;
}
.bootstrap-tagsinput {
width: 100%;
border: 0;
box-shadow: none;
padding-left: 0;
input {
width: 100%;
margin-left: 1px;
margin-top: 9px;
border-bottom: 1px dotted #ccc !important;
padding-bottom: 5px;
padding-left: 0;
}
} }
} }
@@ -211,16 +196,16 @@ body {
.category-settings-form { .category-settings-form {
h3 { h3 {
margin-top: 0; margin-top: 0;
.pointer; cursor: pointer;
} }
h4 { h4 {
.pointer; cursor: pointer;
} }
} }
.category-preview { .category-preview {
.pointer; cursor: pointer;
width: 100%; width: 100%;
height: 100px; height: 100px;
text-align: center; text-align: center;
@@ -235,13 +220,16 @@ body {
margin: 35px 5px 0 5px; margin: 35px 5px 0 5px;
} }
} }
.category-dropdown-container.right .category-dropdown-menu {
--bs-position: end;
}
[component="category-selector"] { [component="category-selector"] {
.fa-stack {
border-radius: 50%;
}
.category-dropdown-menu { .category-dropdown-menu {
max-height: 400px; max-height: 500px;
overflow-y: auto; overflow-y: auto;
overflow-x: hidden;
} }
} }
@@ -262,32 +250,38 @@ body {
} }
} }
.mdl-switch.is-checked .mdl-switch__ripple-container {
cursor: pointer !important;
}
.mdl-switch.is-checked .mdl-switch__thumb {
background: @brand-primary !important;
}
.mdl-switch.is-checked .mdl-switch__track {
background: lighten(@brand-primary, 20%) !important;
}
* > .checkbox:first-child { * > .checkbox:first-child {
margin-top: 0px; margin-top: 0px;
} }
[class^="col-"] .mdl-switch__label {
padding-right: 15px;
}
.ui-selectable-helper { .ui-selectable-helper {
border: 1px dashed @brand-success; border: 1px dashed $success;
background: lighten(@brand-success, 10%); background: lighten($success, 10%);
opacity: 0.5; opacity: 0.5;
} }
form small { form small {
color: @gray-light; color: $gray-700;
}
.caret {
display: inline-block;
width: 0;
height: 0;
vertical-align: middle;
border-top: 4px dashed;
border-right: 4px solid transparent;
border-left: 4px solid transparent;
}
#save {
transition: background-color 500ms linear;
&.saved {
background-color: $success;
i {
@include fa-icon-solid($fa-var-check);
}
}
} }

View File

@@ -4,20 +4,3 @@
width:220px; width:220px;
} }
} }

View File

@@ -6,4 +6,4 @@
// ACP text colour when searching through custom CSS or JS. // ACP text colour when searching through custom CSS or JS.
.ace_search_field { .ace_search_field {
color: #000 !important; color: #000 !important;
} }

View File

@@ -21,7 +21,7 @@
.plugin-list.ui-sortable { .plugin-list.ui-sortable {
li { li {
.pointer; cursor: pointer;
.fa-chevron-up { .fa-chevron-up {
margin-right: 10px; margin-right: 10px;
@@ -37,22 +37,14 @@
&:first-child .fa-chevron-up, &:last-child .fa-chevron-down { &:first-child .fa-chevron-up, &:last-child .fa-chevron-down {
pointer-events: none; pointer-events: none;
color: @gray-light; color: $gray-300;
} }
} }
} }
.controls .btn { .controls .btn {
display: list-item; display: list-item;
width: 120px; width: 150px;
margin-bottom: 3px; margin-bottom: 3px;
margin-left: 10px; margin-left: 10px;
} }
.acp-sidebar {
.mdl-switch__label {
margin-left: 24px;
display: block;
left: 0;
}
}
} }

View File

@@ -1,13 +1,4 @@
#rewards { #rewards {
.well, .panel-body {
vertical-align: top;
min-height: 100px;
&.pull-right {
min-height: 0px;
}
}
ul { ul {
list-style-type: none; list-style-type: none;
padding: 0px; padding: 0px;
@@ -24,26 +15,26 @@
.rewards { width: 100%; } .rewards { width: 100%; }
.well { .card {
border-radius: 2px; border-radius: 2px;
border-width: 2px; border-width: 2px;
color: #333; color: #333;
&.if-block { &.if-block {
border-color: @brand-primary; border-color: $primary;
max-width: 33%; max-width: 33%;
} }
&.this-block { &.this-block {
border-color: @brand-warning; border-color: $warning;
max-width: 33%; max-width: 33%;
} }
&.then-block { &.then-block {
border-color: @brand-success; border-color: $success;
max-width: 33%; max-width: 33%;
} }
&.reward-block { &.reward-block {
border-color: @brand-success; border-color: $success;
background-color: lighten(@brand-success, 15%); background-color: lighten($success, 15%);
color: #fff; color: #fff;
a, select, input { color: #fff; } a, select, input { color: #fff; }
select > option { color: #333; } select > option { color: #333; }
@@ -51,4 +42,11 @@
min-height: 110px; min-height: 110px;
} }
} }
}
.page-admin-rewards {
#new {
bottom: calc(64px + $spacer);
background-color: $success;
}
} }

View File

@@ -1,4 +1,4 @@
.page-extend-widgets { .page-admin-extend.page-admin-widgets {
[component="clone"] { [component="clone"] {
display: flex; display: flex;
align-items: stretch; align-items: stretch;
@@ -16,4 +16,13 @@
border-radius: 0; border-radius: 0;
} }
} }
} .container-hover {
.container-html {
// border: 1px solid red!important;
@extend .border;
@extend .border-2;
@extend .border-primary;
}
}
}

View File

@@ -1,25 +1,25 @@
.dashboard { .dashboard {
max-width: 1680px; max-width: 1680px;
.panel { .card {
max-width: 100% !important; max-width: 100% !important;
} }
#analytics-panel .panel-heading > div { #analytics-panel .card-header > div {
&.fa-expand { &.fa-expand {
display: none; display: none;
} }
font-family: @font-family-sans-serif; font-family: $font-family-sans-serif;
font-weight: 600; font-weight: 600;
color: @gray-dark; color: $gray-300;
padding-left: .5em; padding-left: .5em;
padding: .75em; padding: .75em;
background-color: @gray-lighter; background-color: $gray-200;
color: @gray-base; color: $black;
cursor: pointer; cursor: pointer;
.transition(all .4s); transition: all .4s;
&.active { &.active {
display: inline; display: inline;
@@ -29,12 +29,12 @@
.graph-container { .graph-container {
padding-right: 50px; padding-right: 50px;
position: relative; position: relative;
background: @body-bg; background: $body-bg;
&:hover { &:hover {
.fa-expand { .fa-expand {
color: @gray-lighter; color: $gray-800;
background-color: @gray-base; background-color: $black;
} }
} }
@@ -94,7 +94,7 @@
} }
.graph-legend { .graph-legend {
.box-header-font; @include box-header-font;
display: inline-block; display: inline-block;
max-width: 100%; max-width: 100%;
position: absolute; position: absolute;

View File

@@ -24,6 +24,10 @@
li { li {
display: inline-block; display: inline-block;
>a:hover, >a:focus {
color: $gray-300;
background-color: $gray-700;
}
} }
} }

View File

@@ -1,5 +1,5 @@
.header { .header {
.no-select; user-select: none;
position: relative; position: relative;
background: #333; background: #333;
width: 100%; width: 100%;
@@ -10,7 +10,7 @@
#main-page-title { #main-page-title {
position: absolute; position: absolute;
left: 48px; left: 48px;
bottom: 17px; bottom: 50px;
color: #aaa; color: #aaa;
font-size: 47px; font-size: 47px;
font-weight: 300; font-weight: 300;
@@ -23,10 +23,6 @@
flex-direction: row-reverse; flex-direction: row-reverse;
margin: 0; margin: 0;
li {
align-self: end;
}
> * { > * {
margin-right: 20px; margin-right: 20px;
} }
@@ -38,7 +34,7 @@
.alert { .alert {
font-size: 14px; font-size: 14px;
margin-bottom: 5px; margin-bottom: 0px;
&.alert-info { &.alert-info {
background-color: #eee; background-color: #eee;
@@ -75,10 +71,10 @@
padding: 10px 20px; padding: 10px 20px;
width: 250px; width: 250px;
height: 44px; height: 44px;
background-color: rgba(0, 0, 0, 0.2); background-color: rgba(0,0,0,.2);
border-radius: 3px; border-radius: 3px;
box-shadow: none; box-shadow: none;
.transition(.4s ease background-color); transition: .4s ease background-color;
&:focus { &:focus {
background-color: #eee; background-color: #eee;
@@ -89,7 +85,7 @@
.dropdown:not(.open) { .dropdown:not(.open) {
&:before { &:before {
content: '/'; content: '/';
border: 1px solid @gray; border: 1px solid $gray-500;
border-radius: 5px; border-radius: 5px;
padding: 0px 6px; padding: 0px 6px;
font-size: 12px; font-size: 12px;
@@ -97,14 +93,14 @@
pointer-events: none; pointer-events: none;
position: absolute; position: absolute;
top: 10px; top: 13px;
left: 1em; left: 1em;
} }
&:after { &:after {
content: attr(data-text); content: attr(data-text);
position: absolute; position: absolute;
top: 10px; top: 13px;
left: 3em; left: 3em;
font-size: small; font-size: small;
font-weight: 600; font-weight: 600;
@@ -130,7 +126,7 @@
list-style-type: none; list-style-type: none;
padding: 0px; padding: 0px;
position: absolute; position: absolute;
bottom: -11px; bottom: -16px;
left: 50px; left: 50px;
> li { > li {
@@ -140,11 +136,11 @@
transition: border-color 150ms linear; transition: border-color 150ms linear;
&:hover { &:hover {
border-color: darken(@brand-primary, 20%); border-color: darken($primary, 20%);
} }
&.active { &.active {
border-color: @brand-primary; border-color: $primary;
} }
> a { > a {

View File

@@ -1,6 +1,6 @@
div.categories { div.categories {
ul[data-cid] { ul[data-cid] {
.no-select; user-select: none;
list-style-type: none; list-style-type: none;
margin: 0; margin: 0;
padding: 0; padding: 0;
@@ -73,22 +73,6 @@ div.categories {
.information { .information {
cursor: move; cursor: move;
padding-left: 3rem; padding-left: 3rem;
.icon {
width: 24px;
height: 24px;
border-radius: 50%;
line-height: 24px;
text-align: center;
vertical-align: bottom;
background-size: cover;
float: left;
margin-right: 1rem;
.fa {
font-size: 85%;
}
}
} }
.category-header { .category-header {
@@ -111,25 +95,5 @@ div.categories {
tr > th:first-child { tr > th:first-child {
min-width: 150px; min-width: 150px;
} }
.privilege-table-header {
background: white;
th {
text-align: center;
border-top: 0;
text-transform: uppercase;
font-size: 9px;
vertical-align: bottom;
}
.arrowed:after {
border-bottom: 1px dashed #ccc;
content: "";
width: 100%;
display: block;
padding-top: 5px;
}
}
} }
} }

View File

@@ -35,16 +35,6 @@
[component="category/list"] li { [component="category/list"] li {
cursor: pointer; cursor: pointer;
} }
.fa-nbb-none {
border: 1px dotted black;
height: 35px;
width: 35px;
}
.fa-icons .fa-nbb-none {
vertical-align: -6px;
}
#group-icon-preview.fa-nbb-none { #group-icon-preview.fa-nbb-none {
display: none; display: none;

View File

@@ -0,0 +1,19 @@
.page-admin-privileges {
@keyframes fadeOut {
0% {background-color: $primary;}
100% {background-color: white;}
}
[data-group-name].selected, [data-uid].selected {
animation-name: fadeOut;
animation-duration: 5s;
animation-fill-mode: both;
animation-timing-function: ease-out;
}
.privilege-table {
td:first-child {
white-space: nowrap;
}
}
}

View File

@@ -16,11 +16,11 @@
} }
&.ui-selected { &.ui-selected {
background: lighten(@brand-success, 25%); background: lighten($success, 25%);
} }
&.ui-selecting { &.ui-selecting {
background: lighten(@brand-success, 40%); background: lighten($success, 40%);
} }
} }
} }

View File

@@ -1,6 +1,6 @@
@import "../mixins"; @import "../mixins";
.box-header-font { @mixin box-header-font() {
font-size: 11px; font-size: 11px;
text-transform: uppercase; text-transform: uppercase;
font-weight: 700; font-weight: 700;

View File

@@ -6,7 +6,7 @@
body { body {
height: 100%; height: 100%;
} }
#panel { #panel {
background-color: inherit; background-color: inherit;
min-height: 100%; min-height: 100%;
@@ -31,11 +31,6 @@
font-weight: 400; font-weight: 400;
} }
#user_label {
right: 0px;
bottom: 7px;
}
#main-menu { #main-menu {
display: none; display: none;
} }
@@ -93,7 +88,7 @@
display: flex; display: flex;
justify-content: center; justify-content: center;
} }
.alert { .alert {
border-radius: 0; border-radius: 0;
@@ -152,7 +147,6 @@
.slideout-panel { .slideout-panel {
position: relative; position: relative;
z-index: 1;
} }
.slideout-open, .slideout-open,
@@ -170,7 +164,7 @@
height: 100%; height: 100%;
overflow-y: hidden; overflow-y: hidden;
} }
.slideout-open { .slideout-open {
overflow-y: hidden; overflow-y: hidden;
height: 100%; height: 100%;

View File

@@ -0,0 +1,124 @@
.alert-window {
position: fixed;
width: 300px;
z-index: 10002;
right: 20px;
bottom: 0px;
.alert {
.close {
color: inherit;
}
&::before {
position: relative;
top: -15px;
left: -15px;
display: block;
height: 2px;
width: 0;
transition: inherit;
}
&.alert-info {
.btn-close {
$btn-close-color: $info;
background-image: escape-svg(url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>"));
}
&::before {
background-color: $info;
}
}
&.alert-warning {
.btn-close {
$btn-close-color: $warning;
background-image: escape-svg(url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>"));
}
::before {
background-color: $warning;
}
}
&.alert-success {
.btn-close {
$btn-close-color: $success;
background-image: escape-svg(url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>"));
}
::before {
background-color: $success;
}
}
&.alert-danger {
.btn-close {
$btn-close-color: $danger;
background-image: escape-svg(url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>"));
}
::before {
background-color: $danger;
}
}
&.animate {
&.alert-info::before {
background-color: lighten($info, 25%);
}
&.alert-warning::before {
background-color: lighten($warning, 25%);
}
&.alert-success::before {
background-color: lighten($success, 25%);
}
&.alert-danger::before {
background-color: lighten($danger, 25%);
}
&::before {
width: calc(100% + 50px);
}
}
background-color: white;
padding-right: 16px;
border: 0;
border-left: 5px solid !important;
box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.25), 0px 2px 10px 0px rgba(0, 0, 0, 0.25);
strong {
text-transform: uppercase;
}
p {
padding: 10px 0px 0px;
}
&.alert-info {
color: $info;
border-color: $info;
}
&.alert-warning {
color: $warning;
border-color: $warning;
}
&.alert-success {
color: $success;
border-color: $success;
}
&.alert-danger {
color: $danger;
border-color: $danger;
}
}
}

View File

@@ -0,0 +1,80 @@
#nprogress {
pointer-events: none;
}
#nprogress .bar {
background: #29d;
position: fixed;
z-index: 1031;
top: 0;
left: 0;
width: 100%;
height: 2px;
}
#nprogress .peg {
display: block;
position: absolute;
right: 0px;
width: 100px;
height: 100%;
box-shadow: 0 0 10px #29d, 0 0 5px #29d;
opacity: 1.0;
-webkit-transform: rotate(3deg) translate(0px, -4px);
-ms-transform: rotate(3deg) translate(0px, -4px);
transform: rotate(3deg) translate(0px, -4px);
}
#nprogress .spinner {
display: block;
position: fixed;
z-index: 1031;
top: 165px;
right: 35px;
}
@include media-breakpoint-down(sm) {
#nprogress .spinner {
bottom: 15px;
right: 15px;
top: initial;
}
}
#nprogress .spinner-icon {
width: 18px;
height: 18px;
box-sizing: border-box;
border: solid 2px transparent;
border-top-color: #29d;
border-left-color: #29d;
border-radius: 50%;
-webkit-animation: nprogress-spinner 400ms linear infinite;
animation: nprogress-spinner 400ms linear infinite;
}
.nprogress-custom-parent {
overflow: hidden;
position: relative;
}
.nprogress-custom-parent #nprogress .spinner,
.nprogress-custom-parent #nprogress .bar {
position: absolute;
}
@-webkit-keyframes nprogress-spinner {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes nprogress-spinner {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}

View File

@@ -4,9 +4,9 @@
overflow-y: auto; overflow-y: auto;
> li > a { > li > a {
&.focus { // &.focus {
&:extend(.dropdown-menu>li>a:focus); // &:extend(.dropdown-menu>li>a:focus);
} // }
&:focus { &:focus {
outline: none; outline: none;
} }

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