Compare commits

...

1774 Commits

Author SHA1 Message Date
Julian Lam
4a11307b24 0.2.0 2013-12-26 16:04:06 -05:00
Julian Lam
d8183c056c added cache buster to require.js files - fixes #687 2013-12-26 15:58:46 -05:00
Julian Lam
6ad28dadd4 Merge pull request #685 from akhoury/master
can i haz header-icons pls, merry xmas
2013-12-26 12:21:35 -08:00
Baris Soner Usakli
2c489c600c closes #675 2013-12-24 13:12:25 -05:00
akhoury
abc782f5e6 can i haz header-icons pls, merry xmas 2013-12-24 13:00:04 -05:00
Baris Soner Usakli
a18e366493 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-12-23 22:07:21 -05:00
Baris Soner Usakli
12e95df068 removed console.log 2013-12-23 22:07:13 -05:00
Julian Lam
a078f73e84 omg I don't know what I am doing 2013-12-23 22:06:53 -05:00
Julian Lam
8f879cd3eb topics will no longer show up in /recent if user cannot access them 2013-12-23 21:50:47 -05:00
Julian Lam
8385ceef79 topics in private categories can no longer be accessed via ajaxify or by
direct link
2013-12-23 21:42:34 -05:00
Baris Soner Usakli
83cc8f3ba8 fixed header template value too 2013-12-23 21:03:45 -05:00
Baris Soner Usakli
cab6ab8e17 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-12-23 21:00:02 -05:00
Baris Soner Usakli
e9fbed71ae closes #613, fixed allowRegistration incase its undefined 2013-12-23 20:59:55 -05:00
Julian Lam
b4121f262d removing serializeUser console.log -- how long has this ben here? haha 2013-12-23 20:51:17 -05:00
Julian Lam
256a2fa9c6 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-12-23 20:12:43 -05:00
Julian Lam
0f362b7fac updated bootstrap - because why not 2013-12-23 20:07:00 -05:00
Baris Soner Usakli
b504e2cd11 closes #658 2013-12-23 19:17:03 -05:00
Baris Soner Usakli
ea84fd70af Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-12-23 15:40:24 -05:00
Baris Soner Usakli
09efb83ef3 make sure relativeTime doesn't display negative values 2013-12-23 15:40:16 -05:00
Julian Lam
b2aeb14094 upping vanilla minver 2013-12-23 15:28:39 -05:00
Julian Lam
0ed8fd6cbd Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-12-23 15:23:45 -05:00
Julian Lam
2f1a3b9789 enabled touch events for composer resizing -- composer is now ipad
supported!
2013-12-23 15:23:08 -05:00
Baris Soner Usakli
d068139d81 changed header links to icons 2013-12-23 14:40:58 -05:00
Baris Soner Usakli
764e937c43 removed inline style 2013-12-23 14:21:28 -05:00
Baris Soner Usakli
f72cf35348 closes #680 2013-12-23 13:59:12 -05:00
Baris Soner Usakli
fe1a75d1fd paginator starts hidden 2013-12-23 13:49:24 -05:00
Baris Soner Usakli
3dc9e2f4fa added the success alert 2013-12-23 13:31:13 -05:00
Baris Soner Usakli
3bd8cf69a1 admins can create users from admin/users panel 2013-12-23 13:27:26 -05:00
Baris Soner Usakli
2c8725558e added allowRegistration to install 2013-12-23 12:31:51 -05:00
Baris Soner Usakli
f68f02d346 closes #679 2013-12-23 12:22:50 -05:00
Barış Soner Uşaklı
8fd78199e2 Merge pull request #678 from aonz1982/install_mongo_username
Installation problem when selecting MongoDB
2013-12-23 08:23:56 -08:00
Pongsan Sayampol
1bde86a33f MongoDB username is not saved to the config file during the installation. 2013-12-23 23:07:18 +07:00
Baris Soner Usakli
b6d4ae2732 removed mobile menu 2013-12-22 15:20:11 -05:00
Baris Soner Usakli
680dbf138a closes #669 2013-12-22 15:15:59 -05:00
Baris Soner Usakli
3752a1c691 small fixes 2013-12-21 19:42:21 -05:00
Baris Soner Usakli
3a00c177d3 closes #150 2013-12-21 19:42:07 -05:00
Baris Soner Usakli
845e5e7986 no need to store taskbar 2013-12-21 00:18:11 -05:00
Baris Soner Usakli
57d2db36e6 if not term just use empty string 2013-12-21 00:07:00 -05:00
Baris Soner Usakli
8bfea656c4 Merge branch 'master' of https://github.com/akhoury/NodeBB into akhoury-master 2013-12-20 23:53:53 -05:00
Baris Soner Usakli
ea2c03e28b closes #670 2013-12-20 23:35:40 -05:00
Baris Soner Usakli
f29b375ed4 refactored composer so that it uses a different div for each instance, closes #575 2013-12-20 18:41:56 -05:00
Julian Lam
07f1e0bcb5 ninjafix -- if you don't have a saved composer width, it doesn't set a
width (default ot 50%)
2013-12-20 12:34:26 -05:00
Julian Lam
0b94297c64 Merge remote-tracking branch 'origin/master' into composer-revamp 2013-12-19 18:36:20 -05:00
Baris Soner Usakli
8655c2d2a6 removed console.log 2013-12-19 15:43:15 -05:00
Baris Usakli
da9c673ec4 closes #651 2013-12-19 14:57:59 -05:00
Julian Lam
1e6863ee19 adjusting snap guide sensitivity 2013-12-19 00:08:47 -05:00
Julian Lam
00eb6b4efc responsive fixes for new composer 2013-12-19 00:02:14 -05:00
Julian Lam
002826d84f resizing the post composer now saves the size for future windows 2013-12-18 23:56:59 -05:00
Julian Lam
289e081e2e fixed new composer posting (woot) 2013-12-18 23:18:12 -05:00
Baris Soner Usakli
a717e9626e closes #666, the issue of the beast 2013-12-18 19:23:11 -05:00
Julian Lam
83f20c1cdb OMG SNAPS 2013-12-18 18:48:42 -05:00
Baris Soner Usakli
bc8adff70a fixed plugin deactivation 2013-12-18 15:32:38 -05:00
Julian Lam
c4623e2447 Merge remote-tracking branch 'origin/master' into composer-revamp 2013-12-18 15:12:30 -05:00
Julian Lam
99fba3b83a fixing issue where composer pushing didn't wait for the template to
properly render :P
2013-12-18 10:03:49 -05:00
Baris Soner Usakli
2580caf864 fixing #591 again looks like it got overwritter by merge 2013-12-18 05:35:06 -05:00
Julian Lam
f2d631e42d new composer window template (WIP!) 2013-12-17 23:42:02 -05:00
Julian Lam
d86aefb518 removing defunct "template" argument in ajaxify.go 2013-12-17 21:53:50 -05:00
psychobunny
3782ae1647 don't show profile fields if they are hidden. closes #660. also added missing language keys to EN 2013-12-17 18:05:58 -05:00
psychobunny
36e1a121ed removing some console.log's 2013-12-17 17:48:51 -05:00
psychobunny
2e52dd59ee Merge pull request #664 from ifuyivara/master
Adding support for restricting category read access based on user groups
2013-12-17 14:47:25 -08:00
psychobunny
d7a444d9ab dynamically update post count in post footer on new post 2013-12-17 16:10:32 -05:00
psychobunny
f9e2b50826 dynamically update user rep in post footer if reputation is increased 2013-12-17 16:01:08 -05:00
psychobunny
32a32fcf5c match login.tpl button to look like register.tpl 2013-12-17 15:42:01 -05:00
psychobunny
9435acfa71 skip debug messages for supervisor 2013-12-17 15:37:42 -05:00
root
35ad3be969 Adding support for restricting category read access based on user groups 2013-12-17 20:34:21 +00:00
Baris Soner Usakli
9cb20c3886 added callback to api categories.get 2013-12-16 19:12:26 -05:00
psychobunny
a2c9867902 plugins - woops, wrong namespace for admin api calls 2013-12-16 15:45:52 -05:00
psychobunny
58a3f33200 plugins - added api routes to filter:admin.create_routes 2013-12-16 15:40:59 -05:00
psychobunny
25bac03bab fixed facebook + gplus authentication - callbackURL was invalid 2013-12-15 14:12:36 -05:00
Baris Soner Usakli
770cea9329 added more error first to some functions 2013-12-14 16:29:33 -05:00
Baris Soner Usakli
30c11a8b42 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-12-13 16:36:38 -05:00
Baris Soner Usakli
27a01f6c61 closes #657 2013-12-13 16:36:29 -05:00
psychobunny
bf27ade251 admin - added ability to remove icon from categories 2013-12-13 16:26:32 -05:00
psychobunny
9d88b9eed3 default motd now shows @NodeBB, and not @dcplabs 2013-12-13 15:55:24 -05:00
akhoury
04ea573caa removed jQuery from iife, the $ is global 2013-12-12 22:52:44 -05:00
akhoury
d9eefd667c fixed potential guestSearch config bug 2013-12-12 22:51:17 -05:00
akhoury
3ad98f3783 remove uncessary checks in guest config upgrade 2013-12-12 22:50:49 -05:00
akhoury
b89cf6f480 Merge remote-tracking branch 'upstream/master' 2013-12-12 22:40:25 -05:00
psychobunny
4397da144f fixes crash introduced @1021615848e49da3434f00cfdb6fb79ab5990b47 2013-12-12 16:07:15 -05:00
psychobunny
cf8f0ca225 cleanup 2013-12-12 16:02:12 -05:00
Baris Soner Usakli
885242018f one more 2013-12-12 12:19:03 -05:00
Baris Soner Usakli
1abfe5de63 added err to addUserInfoToPost 2013-12-12 12:17:58 -05:00
akhoury
04dd1f9dac Merge remote-tracking branch 'upstream/master' 2013-12-11 22:51:04 -05:00
akhoury
114294e24a allowGuestSearching config .. second attempt 2013-12-11 22:50:36 -05:00
Baris Soner Usakli
dfa4cd4ae3 closes #653 2013-12-11 21:40:55 -05:00
Julian Lam
65d5a6cb81 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-12-11 16:10:22 -05:00
Julian Lam
64e87b761f closed #652 2013-12-11 16:10:08 -05:00
Baris Soner Usakli
1021615848 added err first to some calls 2013-12-11 16:08:20 -05:00
Julian Lam
69c1ec97c9 re: issue #652, this took longer than expected... 2013-12-11 16:02:29 -05:00
Julian Lam
45e7d64aeb fixing extra padding around 'in' that jshinter added for no goddamn reason 2013-12-11 12:29:35 -05:00
Julian Lam
b86a01ded1 moving cache buster to production builds only (*facepalm* I'm bad at this) 2013-12-10 22:20:11 -05:00
Julian Lam
e67af67180 fixing derped plugin css files due to cache buster 2013-12-10 22:16:43 -05:00
Julian Lam
9d03147f4e upping mentions minver 2013-12-10 22:07:10 -05:00
Julian Lam
c313c4501b pushNotifCount method for real-time updating of notification bell + favicon for multiple tabs (closes #219) 2013-12-10 22:05:37 -05:00
Julian Lam
538356846d fixed regression introduced by #643. Non-logo favicon is now properly
referenced (absolute url, not relative)
2013-12-10 21:20:54 -05:00
Baris Usakli
55d008d71f added err to callbacks 2013-12-10 15:39:53 -05:00
Baris Usakli
401a30e02c fixed categories.getRecentReplies so it only returns count posts instead of getting 10, posts are added and removed from sorted set when they are deleted restored 2013-12-10 15:33:35 -05:00
Baris Usakli
9816272b7b if there are more than 50 results only return 50, issue #648 2013-12-10 15:02:22 -05:00
Julian Lam
d72d2decd5 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-12-09 14:50:59 -05:00
Julian Lam
43c05d1d85 adding cache busters to client side files (closed #586) 2013-12-09 14:50:40 -05:00
Barış Soner Uşaklı
14f35a8c6b Update README.md 2013-12-09 14:49:57 -05:00
Barış Soner Uşaklı
ffe1549cad Update README.md 2013-12-09 14:49:03 -05:00
Barış Soner Uşaklı
3ca58a438d Update README.md 2013-12-09 14:44:26 -05:00
Baris Usakli
5da4cead67 closes #631 2013-12-09 14:37:13 -05:00
Baris Usakli
0000a7f0b9 #631 2013-12-09 14:16:04 -05:00
Baris Usakli
27ac24b1e3 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-12-09 13:56:18 -05:00
Baris Usakli
95495926fc some fixes to composer image upload 2013-12-09 13:56:09 -05:00
psychobunny
0f254c0b6c moved theme.css to top 2013-12-09 13:36:48 -05:00
psychobunny
b27478876e moved favicon link to top of header 2013-12-09 13:36:47 -05:00
psychobunny
a3734f2e15 completed custom favicon upload, closes #643 2013-12-09 13:36:47 -05:00
psychobunny
1b843fba9c added admin route to upload favicon 2013-12-09 13:36:46 -05:00
psychobunny
35f17db141 added button in admin to upload favicon + show current favicon image 2013-12-09 13:36:45 -05:00
Barış Soner Uşaklı
bcb364c4d4 Merge pull request #644 from designcreateplay/dbal
Dbal
2013-12-09 09:47:24 -08:00
Baris Usakli
6e16cb4b30 fixed conflicts 2013-12-09 12:46:27 -05:00
Baris Usakli
40e71299a1 closes #642 2013-12-09 12:39:36 -05:00
Julian Lam
0148cf06d0 replaced all instances of missing config.relative_path to RELATIVE_PATH 2013-12-09 10:02:34 -05:00
Julian Lam
ffa31ca0e7 upping markdown minver 2013-12-08 16:59:21 -05:00
Barış Soner Uşaklı
ba3b8a21ae Merge pull request #640 from akhoury/master
issue#635
2013-12-08 12:26:24 -08:00
akhoury
05209b01b9 setting initialValues for 'global' object closes #635 2013-12-08 15:18:00 -05:00
akhoury
4e0d0c2c20 adding error.log .gitignore, winston is that you? 2013-12-08 15:16:37 -05:00
Baris Soner Usakli
225284073f Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-12-08 14:50:11 -05:00
psychobunny
ccef51095a fix typo 2013-12-08 14:49:47 -05:00
Baris Soner Usakli
cd77a1a457 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-12-08 14:42:54 -05:00
Baris Soner Usakli
6aeca98cd4 closes #633 2013-12-08 14:42:47 -05:00
psychobunny
07a3b3f00b added delete button to category image uploader in case you wanted to revert to bgColor 2013-12-08 14:37:44 -05:00
Barış Soner Uşaklı
77e0cdcc3e Merge pull request #637 from akhoury/master
Auto install fix
2013-12-08 11:22:17 -08:00
psychobunny
e316dd3330 fixed a bug in create category 2013-12-08 14:20:57 -05:00
psychobunny
b511653e74 fixes #622 2013-12-08 14:15:03 -05:00
psychobunny
b5e37a6ce8 fixes #123, parse object properties in template outside of namespace 2013-12-08 13:50:11 -05:00
psychobunny
a34ed92fac console.log 2013-12-08 13:27:41 -05:00
psychobunny
4ff8509a0e clean up from the last admin/categories refactor 2013-12-08 13:19:20 -05:00
psychobunny
e76936abfc added ability to upload category images. closes #638, closes #532 2013-12-08 13:13:13 -05:00
Baris Soner Usakli
9471fd8e46 closes #635 2013-12-08 13:04:38 -05:00
akhoury
2d4ceb8f9f should close #634 2013-12-08 11:59:48 -05:00
psychobunny
4c40ee8e6e fixed missing language key on image uploader modal 2013-12-08 11:31:57 -05:00
psychobunny
ddcf46fc73 uploading picture didn't update profile image until refreshed - fixed 2013-12-08 11:30:29 -05:00
psychobunny
7db234f958 added setting to convert profile iamges to png in control panel 2013-12-08 11:26:55 -05:00
psychobunny
f6f7959d28 convert profile images to static png if setting is checked in control panel, closes #562 2013-12-08 11:25:15 -05:00
psychobunny
7fa2f474fe fixes bug introduced in c0721e105f 2013-12-08 10:55:34 -05:00
psychobunny
d5e8044575 ability to disable privilege threshold system, closes #528 2013-12-08 10:49:42 -05:00
psychobunny
c0721e105f added setting to disable privilege threshold system 2013-12-08 10:47:05 -05:00
psychobunny
a475e38078 if app is not focused and chat message comes in, activate alternatingTitle. closes #620 2013-12-08 10:40:02 -05:00
psychobunny
932b960aa9 app.isFocused; app.js cleanup 2013-12-08 10:38:09 -05:00
psychobunny
24b12e23ea fixes #636, conditionals broken from f1ad469861 2013-12-08 10:31:18 -05:00
psychobunny
2a5d6e04fc fixes #583 (aka. "son, we heard you like containers so we put containers inside your containers") -- duly fixed 2013-12-08 10:23:47 -05:00
psychobunny
4459d9d4e0 closes #551 2013-12-07 19:18:57 -05:00
psychobunny
2be3158aff added semver dep, pls run npm install semver 2013-12-07 19:11:50 -05:00
psychobunny
f1ad469861 templates - don't clean up selector conditionals; fixes topic posting bug introduced at 090d35f306 2013-12-07 19:07:51 -05:00
psychobunny
0c05ee82b1 #621, moved everything out of parallel - poster doesn't need to wait for these functions to happen
also renamed topics.markUnRead to topics.markAsUnreadForAll
2013-12-07 18:58:27 -05:00
psychobunny
4f97275d24 closes #621 2013-12-07 18:45:26 -05:00
psychobunny
4b9bfca767 français, deutsche, and español support for 202a4c4105 2013-12-07 18:22:31 -05:00
psychobunny
202a4c4105 added rep + post count metrics to post body, closes #443 2013-12-07 18:19:06 -05:00
psychobunny
090bc2ad10 403 all guests on /search & /search/term regardless of mobile/desktop - closes #612 2013-12-07 17:45:51 -05:00
psychobunny
000c7efb1a Merge pull request #623 from tedr56/master
French language files
2013-12-07 14:29:10 -08:00
psychobunny
90ad08a00d fixes #616 2013-12-07 17:17:47 -05:00
psychobunny
90e1e2436c closes #539 2013-12-07 17:03:16 -05:00
Baris Soner Usakli
21f5dad1d2 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-12-07 17:03:14 -05:00
Baris Soner Usakli
bc8bb352a8 added stdout check to exec 2013-12-07 17:03:07 -05:00
psychobunny
274310e35a removed notification count in title, removed api calls to it (left method intact) so hopefully title building is faster too. closes #625 2013-12-07 16:57:49 -05:00
Baris Soner Usakli
0bcc1642c7 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-12-07 16:51:57 -05:00
Baris Soner Usakli
d1d6605dcf closes #501 2013-12-07 16:51:47 -05:00
psychobunny
da94d6214b when new notification comes in, refresh notification page - closes #608 2013-12-07 16:42:17 -05:00
psychobunny
67e49db797 ajaxify.refresh(); removed console.log 2013-12-07 16:40:14 -05:00
psychobunny
de9100c489 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-12-07 16:33:56 -05:00
psychobunny
4348e1efa4 use ajaxify.currentPage to find the user's location easily 2013-12-07 16:33:42 -05:00
Julian Lam
6de3dba239 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-12-07 16:33:41 -05:00
Julian Lam
021cf9b8f6 fixes to language template usage 2013-12-07 16:33:37 -05:00
psychobunny
ca087e6fa7 fixes #576 2013-12-07 16:27:22 -05:00
psychobunny
6c9e28232f added translation method to recent's infinite loader 2013-12-07 16:21:12 -05:00
psychobunny
ceac8e2dc9 added translation to unread infinite loader 2013-12-07 16:20:31 -05:00
psychobunny
98cf6eec71 shift clicking now opens links in a new window, closes #630 2013-12-07 16:18:07 -05:00
Baris Soner Usakli
5a00767370 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-12-07 16:15:15 -05:00
Baris Soner Usakli
4c90d22e43 closes #619 2013-12-07 16:15:07 -05:00
psychobunny
e0e153eafb added translation to category infinite loader method 2013-12-07 16:14:51 -05:00
psychobunny
5c3c2623f2 added translation to new post creation, closes #627 2013-12-07 16:14:51 -05:00
Baris Soner Usakli
34fc326a37 closes #618 2013-12-07 15:59:44 -05:00
psychobunny
36745608bf removed console.log 2013-12-07 15:49:48 -05:00
psychobunny
090d35f306 clean up conditional comments in the DOM; conditionals now treat undefined variables as false; closes #617 2013-12-07 15:48:35 -05:00
Julian Lam
347f5c132e updates to language files, capitalizing some values across languages 2013-12-07 15:47:00 -05:00
Julian Lam
d6f8162f17 upping markdown minver again? 2013-12-07 15:02:00 -05:00
Julian Lam
b0b0f3640c closed #629 2013-12-07 15:00:12 -05:00
Julian Lam
4fd08332cc Merge branch 'dbal' of github.com:designcreateplay/NodeBB into dbal 2013-12-07 13:12:07 -05:00
Julian Lam
aaaffb823f upgrading markdown minver 2013-12-07 13:11:59 -05:00
Baris Soner Usakli
76636b64db small fixes 2013-12-06 21:08:21 -05:00
Baris Soner Usakli
be6ed43223 removed the setName from sorted sets and stored them with _key like everything else 2013-12-06 18:58:22 -05:00
Barış Soner Uşaklı
9f2196abfb Merge pull request #626 from designcreateplay/dbal
Dbal
2013-12-06 15:08:32 -08:00
Baris Soner Usakli
90a75ee045 added check for unknown db 2013-12-06 17:51:16 -05:00
Baris Soner Usakli
2a21b4855e fixed instruction in database.js 2013-12-06 17:47:48 -05:00
Baris Soner Usakli
8f769d53a3 fixed missing winston 2013-12-06 17:46:03 -05:00
Baris Usakli
9ee250b597 fixes humanreadable numbers in infinite scrolling 2013-12-06 16:26:07 -05:00
Baris Usakli
074d7e7c8d Merge remote-tracking branch 'origin/master' into dbal 2013-12-06 15:58:58 -05:00
Barış Soner Uşaklı
870d48dc81 Merge pull request #603 from Joopmicroop/master
added account class for account template pages for easy styling
2013-12-06 12:38:32 -08:00
Baris Usakli
9ca10c25d4 fixed return in posts.create 2013-12-06 15:23:48 -05:00
tedr56
8e2cc1c883 Correct english language file 2013-12-06 21:06:07 +01:00
tedr56
af09f4aca8 added french language files 2013-12-06 21:04:57 +01:00
Baris Usakli
ab63ca6d92 store strings in sorted sets and lists to mimic redis 2013-12-06 14:53:03 -05:00
Baris Usakli
400845ce6c cleanup mongo init 2013-12-06 14:34:25 -05:00
Baris Usakli
351b07bb34 added authentication to mongo 2013-12-06 14:31:11 -05:00
Baris Usakli
f861d44d55 updated upgrade script to use mongo or redis 2013-12-06 14:22:31 -05:00
Baris Usakli
2b7e4cbdf4 moved tests from debug to tests folder 2013-12-06 13:46:12 -05:00
Baris Usakli
df10bde2db added 1 more parseInt 2013-12-06 13:30:44 -05:00
Baris Usakli
0da141e7bc removed redismock, added database mocked, fixed tests to work with dbal 2013-12-06 13:21:21 -05:00
Baris Usakli
6313a5eeb1 Merge remote-tracking branch 'origin/master' into dbal 2013-12-06 12:59:32 -05:00
Pablo Macaluso
26de85c1de updated es translations with new strings added from #607 2013-12-06 12:21:34 -05:00
Julian Lam
a54f464a13 updating language files with missing files for es 2013-12-06 11:57:03 -05:00
Julian Lam
bfbc596348 fixing extra comma in es language file 2013-12-06 11:38:33 -05:00
Julian Lam
7508bd216e new executable 2013-12-06 11:27:34 -05:00
Pablo Macaluso
8cfc5dda37 added spanish language files (courtesy of Pablo Macaluso) 2013-12-06 10:51:20 -05:00
Julian Lam
b81737bc0f moved refreshTitle into app.js, messaging someone now invokes an alternating title, hehe 2013-12-05 23:24:47 -05:00
Baris Soner Usakli
1c23be8911 removed console.log 2013-12-05 21:53:24 -05:00
Baris Soner Usakli
5f86e31d1e fixed favouriting 2013-12-05 21:51:05 -05:00
Baris Soner Usakli
746119bd45 remove dataFileVersion it breaks templates 2013-12-05 21:45:21 -05:00
Julian Lam
385aa6df92 fixed last couple tweaks, ready t'merge 2013-12-05 21:36:21 -05:00
Baris Soner Usakli
097810a057 parseInt fixes getObjects fix 2013-12-05 21:29:51 -05:00
Baris Soner Usakli
3a7fcc2d3d search in mongo 2013-12-05 21:07:35 -05:00
Baris Soner Usakli
95bb838699 Merge remote-tracking branch 'origin/master' into dbal 2013-12-05 21:04:00 -05:00
Baris Soner Usakli
81055523a0 fixed bracket 2013-12-05 20:24:25 -05:00
Baris Soner Usakli
e9fbab0f26 need mongo 2.4+ for text search' 2013-12-05 20:11:05 -05:00
Baris Soner Usakli
53ca7a1143 added search functions to database files, removed reds from nodebb moved it to redis 2013-12-05 20:06:36 -05:00
Baris Soner Usakli
6c70d37f1c removed reds from app.js 2013-12-05 18:32:45 -05:00
Baris Soner Usakli
447073560f moved reds into redis, fixed notifications prune param 2013-12-05 18:31:15 -05:00
Julian Lam
2c131f172a fixing up some translations - WIP 2013-12-05 18:27:37 -05:00
Baris Soner Usakli
1564e3d530 tons of fixes to mongo and redis, to make returns the same 2013-12-05 18:26:26 -05:00
Julian Lam
3d9a732c4a Merge branch 'master' of github.com:BudickDa/NodeBB into BudickDa-master
Conflicts:
	public/language/en/global.json
2013-12-05 18:05:26 -05:00
Julian Lam
4819bea378 more tweaks to the chat dropdown -- handling null case -- issue #615 2013-12-05 17:41:51 -05:00
Julian Lam
030ce95dea closed #615 - added "active chats" dropdown to header
- some minor tweaks also, to make taskbar work a little better with chats
2013-12-05 17:35:44 -05:00
Julian Lam
2a1671ba9b whoops 2013-12-05 16:40:30 -05:00
Julian Lam
a65c79cb02 minimized the reconnect spinner to icon only, added bootstrap tooltip 2013-12-05 16:08:35 -05:00
Baris Usakli
dcbe4ffd4a more notif.prune cleanup 2013-12-05 15:32:36 -05:00
Baris Usakli
215b919362 added db function 2013-12-05 15:29:27 -05:00
Baris Usakli
58df656c65 removed temp vars 2013-12-05 15:27:14 -05:00
Baris Usakli
a8c91e2452 more 2013-12-05 15:26:30 -05:00
Baris Usakli
806a454b05 fixing notifications.prune 2013-12-05 15:25:58 -05:00
Baris Usakli
705754e823 merged master 2013-12-05 14:57:18 -05:00
Baris Usakli
fe527ff2a9 removed RedisStoreLib from websockets.js it moved into redis.js 2013-12-05 14:48:58 -05:00
Julian Lam
041e77f688 fixing replying (whoops) 2013-12-05 14:48:27 -05:00
Baris Usakli
b927f6ce29 added raw info 2013-12-05 14:30:18 -05:00
Baris Usakli
519d376071 added mongo info function, change admin redis template to database template 2013-12-05 14:24:18 -05:00
Julian Lam
d9ee9bf5e3 revamped handling of unread messages, so that a socket call is made to all socket clients whenever a new unread message is available. Prior behaviour had the unread count updated via ajax call on ajaxify (which was clumsy at best and didn't update automagically) 2013-12-05 13:59:16 -05:00
Baris Usakli
67d5ea83e7 replace . with \uff0e in mongo 2013-12-05 13:33:01 -05:00
Baris Usakli
7875138c08 added parseInt 2013-12-05 13:11:27 -05:00
Julian Lam
43b012b32e defactored getUnreadTopics into separate getUnreadTids method -- for no reason, mind you 2013-12-05 12:20:56 -05:00
Baris Usakli
c096656eff merged master fixed conflicts 2013-12-05 12:17:01 -05:00
Baris Usakli
2dd295118c setRemove converts to string too 2013-12-05 12:04:09 -05:00
Baris Soner Usakli
567997ef3c changed mongo sets to store just strings, fixes worlds problems 2013-12-04 23:51:57 -05:00
Baris Soner Usakli
c698af17ae added error checking to collection index creation 2013-12-04 23:36:52 -05:00
Baris Soner Usakli
39b70a9e09 derp 2013-12-04 22:55:31 -05:00
Baris Soner Usakli
9b557cafd8 better sets in mongo, should change sorted sets too using sort 2013-12-04 22:19:11 -05:00
Julian Lam
fe4aee177d lots of tweaks to chat and taskbar 2013-12-04 21:44:36 -05:00
Baris Soner Usakli
7c4347736c added index on _key 2013-12-04 21:35:38 -05:00
Julian Lam
16e07d475f pushing FA icon for chat taskbar title 2013-12-04 21:05:44 -05:00
Julian Lam
2125bb2223 only minimizing CSS files on non-development 2013-12-04 20:37:13 -05:00
Baris Soner Usakli
72a3ab1d6c derp 2013-12-04 19:06:36 -05:00
Baris Soner Usakli
639247a8b0 fixed notifications 2013-12-04 18:58:20 -05:00
Baris Soner Usakli
f0caac242c fixed incr in topic post 2013-12-04 18:34:58 -05:00
Baris Soner Usakli
e066fbf36a sets are storing numbers in mongo as opposed to redis which stores strings, causes tons of problems 2013-12-04 18:26:26 -05:00
Baris Soner Usakli
b215dbde19 updated install 2013-12-04 17:57:51 -05:00
Baris Soner Usakli
1325e4c501 commented out reds in install 2013-12-04 17:08:49 -05:00
Baris Soner Usakli
2e2938616d more mongo and redis stuff 2013-12-04 16:58:06 -05:00
Baris Soner Usakli
53a7eab3e8 removed couple RDB.multis 2013-12-04 16:31:05 -05:00
Julian Lam
6bd4a34e69 fixed favicon sometimes updating with a string 0, should always be an int 2013-12-04 16:28:18 -05:00
Julian Lam
d27f2eb214 fixed #604 2013-12-04 16:25:42 -05:00
Baris Soner Usakli
b547d3577b removed a multi from categories.js 2013-12-04 15:13:43 -05:00
Baris Soner Usakli
4b5988c269 isSetMember returns true or false 2013-12-04 15:11:17 -05:00
Baris Soner Usakli
cfd3a7d126 added flushdb command to both dbs 2013-12-04 14:51:50 -05:00
Baris Soner Usakli
0471a192ab more mongo stuff 2013-12-04 14:25:14 -05:00
Baris Soner Usakli
5c6a7d4b94 added regex keys to mongo 2013-12-04 12:36:22 -05:00
Baris Soner Usakli
ca01fb9f7d added key methods to mongo 2013-12-04 12:25:53 -05:00
Julian Lam
b176629b44 integrated Tinycon lib and actually fixed notification counts... heh.
closed #610
2013-12-04 12:15:27 -05:00
Baris Soner Usakli
113cb85c46 added lists to mongo 2013-12-04 12:10:53 -05:00
Julian Lam
5b6f5ebf9d added tinycon lib and changed notif icon to be in CSS instead of in
template
2013-12-04 11:40:57 -05:00
Baris Soner Usakli
21bbe68c97 added sortedSetRemove to mongo 2013-12-03 22:30:36 -05:00
Baris Soner Usakli
28c75e09a9 can haz sorted sets? 2013-12-03 22:16:44 -05:00
Julian Lam
69f453c73c Merge pull request #601 from cnvo/patch-1
Replace notifications icons from fa-circle to fa-bell
2013-12-03 18:20:50 -08:00
Julian Lam
dab0435d9b Merge pull request #600 from cnvo/patch-2
Replace notifications icons from fa-circle to fa-bell
2013-12-03 18:20:35 -08:00
Baris Soner Usakli
b5770be71f whitespace 2013-12-03 18:19:27 -05:00
Baris Soner Usakli
bf3822e8a5 incr wil create key if it doesnt exist 2013-12-03 18:11:35 -05:00
Baris Soner Usakli
cb6c42ea44 user stuff 2013-12-03 18:03:50 -05:00
Baris Soner Usakli
3dc3769088 fixed redis.keys 2013-12-03 17:48:18 -05:00
Baris Soner Usakli
3d18c4015a cleanup 2013-12-03 17:43:12 -05:00
Baris Soner Usakli
610d45bb32 completed hashes in mongodb I hope :) 2013-12-03 17:29:10 -05:00
Baris Soner Usakli
66bc4184d8 deleteObjectField, isObjectField in mongo 2013-12-03 17:13:59 -05:00
Baris Soner Usakli
b024d10185 implemented getObjectValues in mongo 2013-12-03 16:50:06 -05:00
Julian Lam
e847c015a5 linting notifications.js 2013-12-03 16:12:59 -05:00
Baris Usakli
10474f8e2a more mongo work 2013-12-03 15:17:42 -05:00
BudickDa
8a99eef4fb Update global.json 2013-12-03 20:40:45 +01:00
Julian Lam
da66efe7a5 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-12-03 14:23:31 -05:00
Julian Lam
1bd94b4e41 closed #605 2013-12-03 14:23:16 -05:00
Baris Usakli
e862a1c4cc added init method to database, progress made 2013-12-03 14:21:08 -05:00
psychobunny
8b55920acf plugins - filter:posts.custom_profile_info pass in pid as well 2013-12-03 14:19:11 -05:00
BudickDa
32df811765 i18n for all templates completed, jsons for german added 2013-12-03 19:53:16 +01:00
Baris Usakli
91d6f83de4 more mongo work 2013-12-03 13:36:44 -05:00
psychobunny
7c8f857aaf plugins - filter:server.create_routes allows you to define API routes as well now 2013-12-03 13:10:46 -05:00
psychobunny
1f970c3bdb incorrect url was being passed for callback - twitter and g+ 2013-12-03 11:28:55 -05:00
Joopmicroop
700cab686b Update following.tpl 2013-12-03 15:49:10 +01:00
Joopmicroop
af06e0335a Update followers.tpl 2013-12-03 15:48:28 +01:00
Joopmicroop
4a8dc82bd2 Update accountedit.tpl 2013-12-03 15:45:15 +01:00
Joopmicroop
8a4e2b1ea0 Update accountsettings.tpl 2013-12-03 15:42:33 +01:00
Baris Soner Usakli
1f52717f1e fixed indent 2013-12-02 22:50:39 -05:00
Baris Soner Usakli
304285e874 some mongo stuff 2013-12-02 22:48:32 -05:00
Baris Soner Usakli
d4eddc6e2c lcased groups 2013-12-02 22:36:26 -05:00
Baris Soner Usakli
6d79521922 moved connect-redis to the redis.db file, expose the sessionStore from redis.js db file, do the same for mongo db with mongo-connect 2013-12-02 22:33:55 -05:00
Baris Soner Usakli
95db5f93cb remvoed console.logs 2013-12-02 22:01:29 -05:00
Baris Soner Usakli
b900bc9cce more fixes 2013-12-02 21:58:37 -05:00
Baris Soner Usakli
fc066c21bf added upgrade for global keys 2013-12-02 21:33:35 -05:00
Baris Soner Usakli
32d5118266 tons more changes 2013-12-02 21:20:55 -05:00
Baris Soner Usakli
3775c8e50a tons more changes 2013-12-02 19:40:11 -05:00
Barış Soner Uşaklı
99fbc0dfd5 Update account.js
removed extra s
2013-12-02 19:23:52 -05:00
Baris Soner Usakli
e32d230974 format 2013-12-02 17:48:21 -05:00
Baris Usakli
c9308efbec more work 2013-12-02 17:10:26 -05:00
Baris Usakli
636551d2e9 plugins.js uses db, added some set methods to redis.js 2013-12-02 16:35:32 -05:00
Baris Usakli
347d6c2768 moved filename function into redis 2013-12-02 16:23:14 -05:00
Baris Usakli
4f654fb489 more work 2013-12-02 16:19:30 -05:00
Baris Usakli
80e7fd93c6 added redis 2013-12-02 15:46:25 -05:00
Baris Usakli
95efb2ae5e started dbal 2013-12-02 15:45:15 -05:00
Baris Usakli
8d3a647d16 fixed hardcoded userslug 2013-12-02 14:53:33 -05:00
Baris Usakli
53afe6cb68 closes #591 2013-12-02 14:40:34 -05:00
Barış Soner Uşaklı
391b8098a3 Merge pull request #588 from akhoury/master
websockets to follow same pattern, added hook action:user.create
2013-12-02 11:25:51 -08:00
Baris Usakli
190948336a closes #590 2013-12-02 13:28:46 -05:00
Julian Lam
fcda27e251 allowing plugins with no hooks to not cause NodeBB to hang on app start 2013-12-02 11:36:46 -05:00
Trvr
a48a07603c Replace notifications icons from fa-circle to fa-bell
We should change this icon to utilize the icons better.
2013-12-02 04:40:20 -05:00
Trvr
d930e2a1be Replace notifications icons from fa-circle to fa-bell
We should change this icon to utilize the icons better.
2013-12-02 04:40:19 -05:00
Baris Soner Usakli
7e2166903f Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-12-01 21:12:13 -05:00
Baris Soner Usakli
d5c0ca4a9d closes #595 2013-12-01 21:12:05 -05:00
Julian Lam
7695e76494 removed buildFooter filter 2013-12-01 21:04:10 -05:00
Julian Lam
78af47362c Merge pull request #597 from draco2003/patch-4
Cleanup console.log calls
2013-12-01 17:30:07 -08:00
Dan Rowe
18a890ed51 Cleanup console.log calls
Can't see my debugging inbetween all your debugging ;)
2013-12-01 20:28:16 -05:00
Julian Lam
5f731dd1f6 Merge pull request #596 from draco2003/patch-3
Missed one lcasing
2013-12-01 17:17:05 -08:00
Julian Lam
51990142d5 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-12-01 20:13:56 -05:00
Julian Lam
b840169a8c upping markdown minver 2013-12-01 20:13:43 -05:00
Dan Rowe
94fdeb2378 Missed one lcasing
Also anyone else nervous about arbitrary hook execution here?
2013-12-01 20:11:27 -05:00
Julian Lam
68e7ee7f07 signature parsing now calls its own postTools method (with associated plugin hook 2013-12-01 20:07:30 -05:00
Julian Lam
77d5ecc82a added post.buildFooter and post.parseSignature hooks 2013-12-01 19:59:17 -05:00
Baris Soner Usakli
437379413e closes #592 2013-12-01 18:06:01 -05:00
Baris Soner Usakli
ddb7896df1 fixed post count in paginator and post bar when infinite loader kicked in 2013-12-01 17:42:26 -05:00
Baris Soner Usakli
66cdb9a067 just send err 2013-12-01 16:25:57 -05:00
Baris Soner Usakli
f5741fd48b fixed conflict 2013-12-01 16:21:50 -05:00
Baris Soner Usakli
f405dec4e9 #589 2013-12-01 16:21:19 -05:00
Julian Lam
cc242ca667 fixed #589 2013-12-01 16:19:12 -05:00
akhoury
2733198f9e oops 2013-12-01 11:05:10 -05:00
akhoury
52700fbe16 websockets.js to 'use strict'; 2013-12-01 10:56:29 -05:00
akhoury
0f53749e70 websockets.js to follow same pattern to avoid circular dependencies 2013-12-01 10:53:59 -05:00
akhoury
1aa1ddb4ec added plugin hook > action:user.create on user creation 2013-12-01 10:52:50 -05:00
akhoury
71125fd1e2 adding webstorm's .idea folder to .gitignore 2013-12-01 10:43:48 -05:00
Julian Lam
5621fb8622 switching back to version numbers for vanilla, testing prereleases 2013-11-30 21:38:35 -05:00
Julian Lam
b9f1176ec1 moved paginator progress bar into paginator block, better mobile handling, and hiding it on page load 2013-11-30 21:36:35 -05:00
Julian Lam
b3b4d3c37d Merge pull request #585 from akhoury/master
During 11k users migration, was hitting too many open files errors
2013-11-30 11:13:18 -08:00
Baris Soner Usakli
cdbca7d262 more cleanup in routes/user.js 2013-11-30 13:54:52 -05:00
Baris Soner Usakli
140f90f7f3 cleaned up requires 2013-11-30 13:35:42 -05:00
Aziz Khoury
a905c6a084 During 11k users migration, was hitting too many open files errors 2013-11-30 13:13:18 -05:00
Baris Soner Usakli
bfe081f672 added err to PostTools.isMain 2013-11-29 23:14:28 -05:00
Baris Soner Usakli
46a14715e3 fixed logout in admin site, cleaned up topics.post, anon users can post topics now if allowed 2013-11-29 23:08:42 -05:00
Baris Soner Usakli
c1da56ce45 added auto mention if u click post reply 2013-11-29 18:00:52 -05:00
Baris Usakli
ee63fae803 closes #584 2013-11-29 16:10:41 -05:00
Baris Usakli
720711756f show bottom post bar after new post, fixed the insertion of new posts 2013-11-29 14:42:58 -05:00
Baris Usakli
90a12c3253 fixed index to int 2013-11-29 14:28:15 -05:00
Baris Usakli
6a00ab3782 removed btn-large from post topic button 2013-11-29 14:22:02 -05:00
Baris Usakli
9ccfa3f18c fixed js error 2013-11-29 14:19:39 -05:00
Baris Usakli
1660d75205 stricter selector for human readable numbers 2013-11-29 14:18:06 -05:00
Baris Usakli
f6d57a241d fixed human readable view post counts 2013-11-29 14:12:19 -05:00
Julian Lam
bcfb4ca0e4 off by one error 2013-11-29 14:01:09 -05:00
Julian Lam
0159a43a20 Merge branch 'master' of github.com:designcreateplay/NodeBB
Conflicts:
	public/src/forum/topic.js
2013-11-29 13:31:07 -05:00
Julian Lam
86b019ec89 paginator progress bar 2013-11-29 13:30:01 -05:00
psychobunny
98a12cd1e1 clearing first blocks from dynamically inserted templates - made regex less greedy 2013-11-29 13:18:20 -05:00
Baris Usakli
e6452cbd4d removed unusued uploadedImages property 2013-11-29 13:14:38 -05:00
Baris Usakli
cd44ead595 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-29 13:12:59 -05:00
Baris Usakli
652fda1a6f fixed conditional in posts.js 2013-11-29 13:12:50 -05:00
psychobunny
30a7f1a816 removed .main-post from follow class (now using conditionals to show/hide) 2013-11-29 13:09:56 -05:00
Baris Usakli
6ca3d0c4af Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-29 13:09:35 -05:00
Baris Usakli
b2074c6dda fixes to infinite load and paginator 2013-11-29 13:09:26 -05:00
Julian Lam
d7c0e1c62e Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-29 12:35:58 -05:00
Julian Lam
56ef05a0bf putting category options behind a dropdown, and fixing category enable/disable 2013-11-29 12:35:36 -05:00
Baris Usakli
dd36cce329 closes #582 2013-11-29 12:02:06 -05:00
Baris Usakli
2b2799dae9 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-29 11:50:16 -05:00
Baris Usakli
293c176053 added first to follow button in topic.tpl 2013-11-29 11:50:07 -05:00
Julian Lam
3cef5fce2b Merge pull request #580 from Joopmicroop/patch-1
Allow same origin framing
2013-11-29 08:42:46 -08:00
Joopmicroop
7d0f160c4c Allow same origin framing
Allow people to frame there own server setup
2013-11-29 11:04:46 +01:00
Baris Soner Usakli
c5f9f896b2 make all admin routes only accesible to admins 2013-11-28 22:29:32 -05:00
Baris Soner Usakli
db98b3db55 removed the fields again, gitsucks 2013-11-28 18:55:10 -05:00
Baris Soner Usakli
dba47e4bef removed console.log 2013-11-28 18:45:36 -05:00
Baris Soner Usakli
2a46ead29f removed container div, removed second if first, it breaks templates 2013-11-28 18:44:02 -05:00
Julian Lam
707179edf3 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-28 17:51:02 -05:00
Julian Lam
53164e96ab removed non-functional save button from category whitelist modal 2013-11-28 17:50:40 -05:00
Baris Soner Usakli
9702e28a07 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-28 17:45:17 -05:00
Baris Soner Usakli
fa56eca962 fixed fave stars, removed the watch button from normal posts 2013-11-28 17:45:04 -05:00
Julian Lam
684839f04a Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-28 17:37:41 -05:00
Julian Lam
0188ea9a3b setting cache headers to 0 on development mode 2013-11-28 17:37:17 -05:00
psychobunny
85aa587749 merge conflicts 2013-11-28 17:16:27 -05:00
psychobunny
48e36e3c31 templates bugfix - now supports multiple conditionals of the same variable; added data-favourited button and deprecated reliance on BS3 2013-11-28 17:14:04 -05:00
Baris Usakli
0b6d018f8d oops removed by mistage 2013-11-28 16:20:05 -05:00
Baris Usakli
f2bf65252d removed the fields 2013-11-28 16:15:18 -05:00
Baris Usakli
4335f8c5c6 fixed date in upgrade 2013-11-28 15:57:00 -05:00
Baris Usakli
ae82f57c67 added upgrade script to delete removed keys from posts 2013-11-28 15:55:40 -05:00
Baris Usakli
168052bf45 added back feeds, removed duplicate post var in feed 2013-11-28 15:33:26 -05:00
Baris Usakli
a87ebb64d8 clean up of posts and some template additions 2013-11-28 15:18:19 -05:00
Julian Lam
38da65ee58 tweaks to category permission modal 2013-11-28 14:27:19 -05:00
Julian Lam
e3e1a556cd groups pruning method 2013-11-28 12:55:05 -05:00
Baris Usakli
56b618c915 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-28 11:17:01 -05:00
Baris Usakli
7198110b57 closes #573 2013-11-28 11:16:52 -05:00
psychobunny
b7aea63c53 create auth routes only after plugin system is enabled and auth.init hook is fired 2013-11-28 11:13:08 -05:00
Baris Usakli
78b65c0b12 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-28 10:58:24 -05:00
Baris Usakli
0742590c0c added pid to share links, removed unused vars 2013-11-28 10:58:14 -05:00
psychobunny
c16f04bbcf plugins - filter:admin.header.build (pre-existing hook) now allows you to add menu items to the social authentication panel as well 2013-11-28 10:42:25 -05:00
psychobunny
51b38c4c55 plugins - added filter:auth.init hook to add additional login strategies; fixed callbackURL 2013-11-28 10:30:43 -05:00
Julian Lam
79eddc9b06 Merge pull request #570 from draco2003/patch-2
Minify socket.io js
2013-11-27 20:07:36 -08:00
Baris Soner Usakli
21f63ac17f Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-27 22:02:57 -05:00
Baris Soner Usakli
fdf5227c35 closes #572 2013-11-27 22:02:50 -05:00
Julian Lam
98f03a723e upping mentions minver 2013-11-27 21:30:26 -05:00
Julian Lam
69427fa10e tweaks to make the ACP work better on tablets, some work on hidden groups 2013-11-27 20:20:08 -05:00
Julian Lam
670986f7ef Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-27 20:07:37 -05:00
Julian Lam
8b62041d28 refactored groups and categories, groups no longer explodes when
attempting to add members to a whitelist that doesn't exist, isEmpty
checks (new methods!) and such...
2013-11-27 20:07:04 -05:00
psychobunny
89c5d01efa modularized SSO, paving the way for potential plugins. cleaned up associated templates/js 2013-11-27 16:47:54 -05:00
Julian Lam
0a06f1ac7d Merge remote-tracking branch 'origin/master' into category-whitelisting 2013-11-27 16:23:48 -05:00
Julian Lam
df2e9b4b47 admin panel integration for category whitelisting 2013-11-27 16:23:30 -05:00
Dan Rowe
aed4e2792d Minify socket.io js
potential solution for issues/569
2013-11-27 15:57:29 -05:00
Baris Soner Usakli
c860df7975 more #559 2013-11-27 15:03:36 -05:00
Baris Soner Usakli
2148f6ff95 closes #559 2013-11-27 15:02:09 -05:00
Baris Soner Usakli
2d05a06e37 fixed template var, oops 2013-11-27 14:25:58 -05:00
Baris Soner Usakli
e3da005780 grouped the social buttons 2013-11-27 14:25:01 -05:00
Julian Lam
f0e8633dcc category whitelisting for posting messages, isAdmin now error-first 2013-11-27 12:47:00 -05:00
Baris Usakli
590208f0c7 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-27 12:39:15 -05:00
Baris Usakli
7d7ead3f47 fixed js error in recent.js, remove content assignment 2013-11-27 12:39:07 -05:00
Julian Lam
974629ce85 hahah, bad paste, missing a bunch of line endings 2013-11-27 11:48:18 -05:00
Julian Lam
72ef8c839f Merge remote-tracking branch 'origin/master' into category-whitelisting
Conflicts:
	src/groups.js
2013-11-27 11:34:52 -05:00
Julian Lam
5ee5c8179a category whitelist for replying to posts, lots of refactoring, too 2013-11-27 11:27:20 -05:00
psychobunny
46d6d7637e potentially fixes ubbmigrator issue https://github.com/akhoury/nodebb-plugin-ubbmigrator/issues/2 2013-11-27 11:21:16 -05:00
psychobunny
62e2aa67d7 topics - added back social sharing buttons to OP 2013-11-27 10:58:37 -05:00
Julian Lam
182659d0e1 removing extra .js suffix from required files and physically separating
nodebb libs from deps
2013-11-27 08:55:02 -05:00
Julian Lam
4855131652 category read restrictions 2013-11-27 08:49:23 -05:00
Julian Lam
4d2469b4ce tweaks to whitelist (interim commit) 2013-11-27 08:34:25 -05:00
Julian Lam
4e2326fc84 Merge remote-tracking branch 'origin' into category-whitelisting 2013-11-27 08:17:23 -05:00
Baris Soner Usakli
3a8dca6fb9 closes #560 2013-11-26 23:55:55 -05:00
Baris Soner Usakli
31635b92f3 closes #561 2013-11-26 23:19:21 -05:00
Baris Soner Usakli
a0c3de0273 display signature block only if user has signature 2013-11-26 19:22:02 -05:00
Baris Soner Usakli
32b191fa62 removed global.io 2013-11-26 19:09:32 -05:00
Baris Usakli
f616125d02 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-26 16:30:19 -05:00
Baris Usakli
e1f6e064a9 removed io from user.js, figure out why notifications are breaking when websockets.js is required from it 2013-11-26 16:30:10 -05:00
Julian Lam
633be7ff3c Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-26 15:50:37 -05:00
Julian Lam
6b3863bfbf updated category manager in admin panel 2013-11-26 15:50:33 -05:00
Baris Usakli
b66ca703b8 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-26 15:28:55 -05:00
Baris Usakli
48a7f9058f closes #558 2013-11-26 15:28:45 -05:00
psychobunny
8f80733563 fixing #552 overflows properly 2013-11-26 15:19:30 -05:00
Baris Usakli
aa1451cfbc Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-26 15:15:31 -05:00
Baris Usakli
13ef28118d closes #557 2013-11-26 15:15:23 -05:00
Julian Lam
34459e7cf1 fixing category admin panel integration 2013-11-26 15:14:12 -05:00
Baris Usakli
798e17a954 change loading text to inline 2013-11-26 14:48:55 -05:00
Julian Lam
5ad80218a2 upping cerulean minver 2013-11-26 14:45:12 -05:00
Baris Usakli
e90e54cec1 fixed icons in topic move 2013-11-26 14:37:27 -05:00
Baris Usakli
bca1fde69c updated schema date 2013-11-26 14:33:18 -05:00
Baris Usakli
d70c688b65 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-26 14:26:01 -05:00
Baris Usakli
541993c80a fontawesome 4 migration, closes #473 2013-11-26 14:25:46 -05:00
psychobunny
529c8acf6c app.js: added --install alias for --setup 2013-11-26 14:15:40 -05:00
psychobunny
e98d05b1a5 closes #556, also removes the newline that was previously inserted 2013-11-26 13:18:41 -05:00
Julian Lam
0afc7c9761 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-26 12:25:24 -05:00
Julian Lam
e5c1edd5f5 using ajaxifying class for content and footer instead of jquery fadein/out 2013-11-26 12:25:19 -05:00
Baris Usakli
a5e78aab08 closes #554 2013-11-26 11:59:54 -05:00
Baris Usakli
cec69c2be0 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-26 11:43:35 -05:00
Baris Usakli
bc8815cb94 closes #555 2013-11-26 11:43:25 -05:00
Julian Lam
efac6272bb default link tag (apple-touch-icon) added 2013-11-26 11:34:38 -05:00
Julian Lam
bdb30976b5 adding maxAge headers for statically served files (eep!) - issue #552 2013-11-26 11:17:34 -05:00
Baris Soner Usakli
1d4ae8fe4d changed the paginator icons to chevron 2013-11-25 21:38:04 -05:00
Julian Lam
abdb4c34ef tweaks to topic locking 2013-11-25 17:49:17 -05:00
Julian Lam
08d130893c fixing dropdown support in Settings.prepare 2013-11-25 17:48:55 -05:00
Julian Lam
b2fb9aa99f refactored topic locking pinning and deleting (and its inverses) so that the privilege check is done not in the method, but in the socket call 2013-11-25 17:20:44 -05:00
psychobunny
561ee9e4f1 closes #519 2013-11-25 17:00:42 -05:00
Julian Lam
3f70d45f3d Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-25 17:00:06 -05:00
Julian Lam
c07783fa2c ... 2013-11-25 17:00:01 -05:00
psychobunny
d4d0e8cd9b set unreplied flag to new topics sent via websocket 2013-11-25 16:51:52 -05:00
psychobunny
4be5ac2c23 removed mobile overlay for topics - will reimplement as a plugin 2013-11-25 16:47:06 -05:00
psychobunny
070c95d8de fixed regression from main_posts deprecation - bottom post bar restored 2013-11-25 16:38:45 -05:00
psychobunny
8d12ecb758 moved pagination into header 2013-11-25 16:37:28 -05:00
Baris Soner Usakli
81560c4698 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-25 16:29:37 -05:00
Baris Soner Usakli
390937a20b added err to getAllTopics 2013-11-25 16:29:28 -05:00
Julian Lam
2a8a38b742 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-25 16:28:14 -05:00
Julian Lam
5a5c3c8c60 added app.load action hook 2013-11-25 16:28:07 -05:00
psychobunny
905e451455 closes #549 2013-11-25 16:16:18 -05:00
psychobunny
69b8b47b15 updated cerulean dep to 0.0.9 2013-11-25 15:57:18 -05:00
Julian Lam
b16e1a0113 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-25 15:56:22 -05:00
Julian Lam
0b39968a9c fixing back button behaviour and playing nice with History API 2013-11-25 15:56:16 -05:00
psychobunny
d8b3abb611 updating cerulean dep to 0.0.8 2013-11-25 15:48:56 -05:00
psychobunny
7fb0a616a1 refactored topic.tpl and merged main_posts and sub_posts 2013-11-25 15:48:55 -05:00
psychobunny
d987e51a8b removed references to main_posts in forum/topic.js 2013-11-25 15:48:55 -05:00
psychobunny
0f7f6cd0a3 templates.js added IF !value 2013-11-25 15:48:54 -05:00
psychobunny
0e8b33aa79 templates.js added @first and @last conditionals 2013-11-25 15:48:54 -05:00
psychobunny
353b3047cd pulling meta info from OP not main_posts 2013-11-25 15:48:53 -05:00
psychobunny
377de06eeb removed main_posts from topics core, returning OP in posts array now 2013-11-25 15:48:53 -05:00
psychobunny
4013e27a8b removed main_posts from feed.j 2013-11-25 15:48:52 -05:00
psychobunny
181c6eb2e6 removed main_posts from noscript 2013-11-25 15:48:52 -05:00
Julian Lam
7955a5d53a 0.1.1 2013-11-25 15:08:49 -05:00
psychobunny
c261babf17 minify client scripts only after plugin system is activated 2013-11-25 12:35:54 -05:00
psychobunny
b90eef6d19 use icon-search instead of icon-circle-blank on /users/search 2013-11-25 01:21:26 -05:00
psychobunny
5c597ca218 expand regex for templates, allowing the syntax to be less strict re: whitespace 2013-11-25 01:14:31 -05:00
psychobunny
3dbcf8112d fixes navigation - back button 2013-11-25 00:59:21 -05:00
psychobunny
5357ad61db plugins - filter:scripts.get hook lets a plugin add client-side JS to the header and queue up for minification on production 2013-11-25 00:53:27 -05:00
Baris Soner Usakli
ff50917c29 show no replies in recent and unread 2013-11-24 22:48:58 -05:00
Baris Soner Usakli
48835d8c44 used ELSE in template 2013-11-24 22:29:36 -05:00
Baris Soner Usakli
e9c66bb35a removed console.log 2013-11-24 22:12:36 -05:00
Baris Soner Usakli
23eb7824ac closes #513 2013-11-24 22:08:37 -05:00
Baris Soner Usakli
494b9d23ac Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-24 13:58:14 -05:00
Baris Soner Usakli
64ae9ac033 cant delete or restore posts twice, post count goes up or down when posts are deleted or restored in a topic, fixed the post insertion when there is only 1 post in topic 2013-11-24 13:58:06 -05:00
Julian Lam
a72fc69997 added link to RSS for /recent, fixed RSS generation error for /recent 2013-11-24 11:15:40 -05:00
Baris Soner Usakli
a16f93cbd5 loading indicator starts off hidden 2013-11-23 18:05:19 -05:00
Baris Soner Usakli
81e5cf0cf3 fixed posts not appearing immediately 2013-11-23 17:56:03 -05:00
Baris Soner Usakli
01102d5982 added responsive class to images in users recent posts 2013-11-23 17:18:26 -05:00
Baris Soner Usakli
2174aec0e1 closes #542 and other refactors on client side 2013-11-23 17:07:31 -05:00
psychobunny
46bad118de if a thread is unreplied, don't show the OP as the last person to reply 2013-11-23 15:28:00 -05:00
psychobunny
2d7228fa40 added if / else logic to templates 2013-11-23 15:15:33 -05:00
psychobunny
a1839d90fd prevent admin group from being deleted, closes #530 2013-11-23 14:53:06 -05:00
psychobunny
0cc136c3f6 simplifying conditional logic in templates + fixed it so that it takes namespace into account 2013-11-23 14:53:05 -05:00
Julian Lam
cd1e26418d making the loading indicator less obtrusive (and smaller, to boot) 2013-11-22 21:30:34 -05:00
Baris Soner Usakli
dab4f07258 fixed indents 2013-11-22 17:39:53 -05:00
Baris Usakli
501dc56fd3 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-22 16:26:33 -05:00
Baris Usakli
253271127d infinite loader will insert posts in correct order 2013-11-22 16:26:19 -05:00
Julian Lam
f2da892b38 removed extra console log 2013-11-22 16:21:26 -05:00
Julian Lam
6dd72f480c Merge pull request #538 from draco2003/add_fav_context
add breadcrumb like context to favorites
2013-11-22 13:15:10 -08:00
Julian Lam
3caf8b4a67 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-22 15:48:14 -05:00
Julian Lam
39f2efbef8 closed #540 2013-11-22 15:48:03 -05:00
psychobunny
288341945d missing login menu in visible-sm range 2013-11-22 15:37:58 -05:00
psychobunny
d02bd72764 closes #535 2013-11-22 15:32:15 -05:00
Baris Usakli
7d3adb9275 removed unused stuff from getLatestTopics and recent.tpl 2013-11-22 15:01:00 -05:00
Baris Usakli
156950ac2f cleaned up app.createNewPosts 2013-11-22 14:51:45 -05:00
Baris Usakli
83f18c1915 closes #526 2013-11-22 14:08:02 -05:00
Baris Usakli
332730575f closes #529 2013-11-22 12:26:21 -05:00
Julian Lam
08ef67e824 closed #536 2013-11-22 11:42:42 -05:00
Dan Rowe
7e71fb218c add breadcrumb like context to favorites 2013-11-22 08:57:54 -05:00
Julian Lam
a7216caa3b closed #518 2013-11-21 22:15:04 -05:00
Julian Lam
87309601ce closed #533 2013-11-21 22:09:40 -05:00
Julian Lam
53db9db50f Merge pull request #527 from draco2003/patch-1
small wording change
2013-11-21 17:33:36 -08:00
Dan Rowe
23628668b7 small wording change 2013-11-21 20:29:23 -05:00
Baris Soner Usakli
6ac685b194 possible fix for js error 2013-11-21 20:11:06 -05:00
Baris Soner Usakli
db8c43ca97 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-21 18:40:30 -05:00
Baris Soner Usakli
bff0c8fdaf increased active users count to 16 2013-11-21 18:40:16 -05:00
Barış Soner Uşaklı
6f2b809385 Update README.md 2013-11-21 18:34:50 -05:00
Baris Soner Usakli
455479bd54 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-21 18:28:51 -05:00
Baris Soner Usakli
03b34a449d turned div into li, moved the a tags into the li elements 2013-11-21 18:28:31 -05:00
Julian Lam
08e51c8942 closed #502 2013-11-21 17:41:27 -05:00
Julian Lam
4aef5bfb72 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-21 17:36:00 -05:00
psychobunny
34c74770ce app.js minor cleanup 2013-11-21 17:02:40 -05:00
psychobunny
da8d198676 added some user friendly warnings to chat 2013-11-21 17:00:20 -05:00
Julian Lam
33868804fd fixed #517 2013-11-21 16:55:31 -05:00
psychobunny
22a3794c51 closes #525 2013-11-21 16:47:32 -05:00
psychobunny
1058d54c52 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-21 16:07:39 -05:00
psychobunny
90ce539683 fixed language file not parsing in footer 2013-11-21 16:07:32 -05:00
Baris Usakli
99c2fbd947 fixed anon count in browsing text if there are no logged in users 2013-11-21 15:56:28 -05:00
Baris Usakli
866d813218 fixed topic posting bug, if there was only 1 topic in a category the next posted topic in that category wasnt showing up until a full page reload 2013-11-21 15:33:41 -05:00
Baris Usakli
f1df8c2479 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-21 15:20:12 -05:00
Baris Usakli
6f1523c279 fixed bottom reply box for small devices 2013-11-21 15:20:03 -05:00
Julian Lam
163cdaf70c Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-21 15:05:56 -05:00
Julian Lam
a9ce8393e4 added footer.build and page.load hooks 2013-11-21 15:05:45 -05:00
Baris Usakli
f04e30c4d4 more template changes to topic 2013-11-21 14:55:38 -05:00
Baris Usakli
9d0f8b4543 template changes 2013-11-21 14:33:55 -05:00
Baris Usakli
d631a4b2e5 topic.tpl changes, moved users to the bottom of main post, added reply thread tools buttons under main post, added posts and view count 2013-11-21 13:53:19 -05:00
Julian Lam
2cf55dcf9f added action:page.load hook 2013-11-21 12:28:10 -05:00
Baris Soner Usakli
9fbb139e67 fix post delete state after more posts are loaded 2013-11-20 12:22:59 -05:00
Baris Usakli
11e3b0da7d added spacing between share and edit buttons 2013-11-19 15:03:58 -05:00
Baris Usakli
0b922d3f60 possible fix for #516 2013-11-19 13:04:12 -05:00
Baris Usakli
7e4faa3270 closes #514 2013-11-19 12:38:13 -05:00
Julian Lam
635fba1e45 upping cerlean minver 2013-11-18 20:25:43 -05:00
Baris Usakli
7c950cc350 require cleanup in user.js, removed user.latest not used anymore 2013-11-18 16:22:43 -05:00
Baris Usakli
cc0fe66e3e minor tweak to notif filter :) 2013-11-18 15:56:12 -05:00
Baris Usakli
b2d6ce59cf Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-18 15:44:46 -05:00
Baris Usakli
586a181e0a closes #507 2013-11-18 15:44:32 -05:00
Julian Lam
33150943df Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-18 15:09:56 -05:00
Julian Lam
28dab60232 resolving notifs issue, I hope 2013-11-18 15:09:34 -05:00
Barış Soner Uşaklı
71ef76b108 Merge pull request #511 from damianb/patch-3
cleanup webserver.js requires
2013-11-18 08:44:23 -08:00
Julian Lam
64008ef5d8 Merge pull request #509 from damianb/patch-2
/bin/bash to /bin/sh
2013-11-18 08:36:37 -08:00
Barış Soner Uşaklı
1859154370 Merge pull request #506 from deniswolf/cleanup_specs
Cleanup specs in test/topic.js
2013-11-18 08:20:51 -08:00
Julian Lam
fa4067e885 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-18 08:19:18 -05:00
Julian Lam
c8c355b319 added komodoproject file extensions to gitignore 2013-11-18 08:19:04 -05:00
Damian Bushong
51355a53d9 cleanup webserver.js requires
the .js in a require is implicit and unnecessary;
sorted the requires out so that builtins are first, then npm deps, then locally provided libs.
minor changes to some strings, just using single-quotes to match the style through the rest of the file.
2013-11-18 02:39:08 -06:00
Damian Bushong
1f3f672d3f /bin/bash to /bin/sh
No bashisms present? Don't be explicit about needing bash, then.
2013-11-18 02:27:48 -06:00
Denis Wolf
7c3fa30c13 tests: topic.js: fixed description to mirror code, refactored asserts since mocha's 'done' can process errors in callback 2013-11-18 00:00:22 +02:00
Denis Wolf
cbbb7a7c8e tests: topic.js: extract mock data init in getters 2013-11-17 23:50:19 +02:00
Denis Wolf
6893bd8b04 tests: topic.js: extract mock data init in .post 2013-11-17 23:41:38 +02:00
Denis Wolf
22eabf6620 tests: topic.js: naming flow fix for .post 2013-11-17 23:35:18 +02:00
Baris Soner Usakli
a827888ee3 closes #503 2013-11-17 12:23:19 -05:00
Baris Usakli
54d94f5988 added topic tests 2013-11-15 16:16:50 -05:00
Baris Usakli
7c1b6d6ad2 lots of refactor for error handling 2013-11-15 14:57:50 -05:00
Baris Usakli
8c4f776122 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-15 13:39:14 -05:00
Baris Usakli
84fa704b25 refactor abit adding error checking to missing parts 2013-11-15 13:39:09 -05:00
Julian Lam
535379d9d7 added password confirmation to automated setup 2013-11-14 18:45:17 -05:00
Julian Lam
d2927e2be2 Merge pull request #500 from jgable/passwordConfirm
Add admin password confirmation on setup
2013-11-14 11:27:23 -08:00
Jacob Gable
bd04b2f921 Add admin password confirmation on setup
Closes #419

- Introduce a password:confirm question
- Isolate password questions to they can be re-asked
- Verify matching password, re-ask if not
2013-11-14 12:52:00 -06:00
Julian Lam
27fce2363d ... and again 2013-11-13 23:09:22 -05:00
Julian Lam
01340c87bd handling missing notifications in update script 2013-11-13 23:08:44 -05:00
Baris Soner Usakli
77c2f551d3 upgrade script fix 2013-11-13 20:03:44 -05:00
Julian Lam
18009ebb39 interim commit 2013-11-13 19:54:46 -05:00
Julian Lam
e6bb66705d 0.1.0 2013-11-13 15:15:00 -05:00
Baris Soner Usakli
88154c3ebf closes #497 2013-11-13 13:51:40 -05:00
Julian Lam
1c80a1bad5 ninjafix 2013-11-13 13:31:36 -05:00
Julian Lam
79c52dfe84 updated schema handling so that nodebb won't run unless you are up to date -- fixed #498 2013-11-13 12:46:55 -05:00
Baris Usakli
411ba3542c closes #493 2013-11-12 12:51:57 -05:00
Baris Usakli
fa9636a62a closes #495 2013-11-12 12:41:16 -05:00
Baris Usakli
69fefc0625 closes #496 2013-11-12 12:03:02 -05:00
Julian Lam
e598ffa993 Merge pull request #494 from RefinedSoftwareLLC/patch-2
Update README.md
2013-11-11 11:36:20 -08:00
RefinedSoftwareLLC
d99577ffb2 Update README.md
Added Wiki link because it is so easy to miss yet it is so important because of it's setup guides.
2013-11-11 12:29:18 -07:00
Baris Usakli
40108f92c9 closes #492 2013-11-11 14:28:08 -05:00
Julian Lam
a42b30fd40 removing commented out route 2013-11-11 14:15:27 -05:00
Julian Lam
37497fc5a0 fixed #393 - refactored basic route handling, moved some other routes to debug routes 2013-11-11 14:06:26 -05:00
Julian Lam
9bea23bbfe linting webserver.js 2013-11-11 13:25:54 -05:00
Julian Lam
4e39c50144 fine, 150ms. 2013-11-11 13:16:24 -05:00
Baris Usakli
7e50bcba0c Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-11 12:45:11 -05:00
Baris Usakli
f81c583d86 changed postdelay default 2013-11-11 12:44:42 -05:00
Julian Lam
5647d55147 updated postDelay upgrade script to update if the old value is over 1000, not 10! 2013-11-11 12:41:33 -05:00
Baris Usakli
4ce6ac5af9 closes #491, added check to prevent crash in getAnonUserCount 2013-11-11 12:40:15 -05:00
Baris Usakli
d770963b69 closes #490 2013-11-11 12:18:20 -05:00
Julian Lam
625b96ba73 Merge remote-tracking branch 'origin/master' 2013-11-09 17:20:02 -05:00
Julian Lam
37877ed531 removed cheerio as a dependency 2013-11-09 17:19:53 -05:00
Julian Lam
1f2ef2a7e4 updated cerulean minver 2013-11-07 15:59:07 -05:00
Julian Lam
885eec79c3 ninjafix for bad conditional 2013-11-07 15:54:19 -05:00
Julian Lam
aa1994be67 updated MOTD to not be inside a jumbotron, updated default styling of MOTD 2013-11-07 15:52:35 -05:00
Baris Usakli
4552e6286e dont allow empty userslugs to register 2013-11-07 12:17:23 -05:00
Julian Lam
d7856bcd4f fixing bootswatch themes, which broke in the last update 2013-11-06 21:37:48 -05:00
psychobunny
7ea852fae3 Revert "mobile: collapse menu after clicking on menu item"
This reverts commit c67c37bb20.
2013-11-06 16:21:01 -05:00
psychobunny
c67c37bb20 mobile: collapse menu after clicking on menu item 2013-11-06 15:24:03 -05:00
Baris Usakli
7d1aa02fd1 removed schema.js 2013-11-06 13:56:32 -05:00
Julian Lam
2309ab2002 hopefully closed #485 2013-11-06 12:07:35 -05:00
Julian Lam
b87840d4c9 fixing issue where the default for "use_port" ended up being no. Now yes. 2013-11-06 11:36:00 -05:00
psychobunny
b5c22c7ff7 removed unfollow button + logic from following view 2013-11-05 15:10:38 -05:00
Baris Usakli
3b3e8348e4 closes #430 2013-11-05 14:50:50 -05:00
Baris Usakli
259ad42b31 numbers are strong 2013-11-05 14:40:46 -05:00
Baris Soner Usakli
51cb33bccc Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-05 01:00:57 -05:00
Baris Soner Usakli
2a8a62a253 remove console.log 2013-11-05 01:00:55 -05:00
psychobunny
82ae80090e console.log 2013-11-05 00:27:38 -05:00
psychobunny
1d6135150f multiple plugins pointing to admin can conflict - fix 2013-11-04 23:59:41 -05:00
Baris Soner Usakli
41f98d29b7 added row to topic container 2013-11-04 23:24:43 -05:00
Baris Usakli
7b5a6bd3c9 fixed category infinite loading 2013-11-04 17:17:04 -05:00
Baris Usakli
fe15366524 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-04 17:02:27 -05:00
Baris Usakli
1cbbb3873f removed rounded images 2013-11-04 17:02:19 -05:00
Barış Soner Uşaklı
5e1ab7989a Merge pull request #479 from deniswolf/users-cleanup
User.js cleanup: spec, jshint satisfaction
2013-11-04 13:57:26 -08:00
Baris Usakli
0e5724cd2c template changes yet again 2013-11-04 16:52:58 -05:00
Denis Wolf
89e9d56dee user.js: Else in the sky with diamonds - fixing syntactic style. 2013-11-04 23:30:30 +02:00
Baris Usakli
58f9c2c18d removed console.log 2013-11-04 16:13:56 -05:00
Baris Usakli
1ec6726459 template changes to recent and unread 2013-11-04 16:00:34 -05:00
Baris Usakli
6b4520e526 recent unread template changes 2013-11-04 15:17:57 -05:00
Baris Usakli
98f20564de Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-04 15:01:11 -05:00
Baris Usakli
4da819b02b changesto category.tpl 2013-11-04 15:01:01 -05:00
Julian Lam
dc90db74c0 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-11-04 13:22:17 -05:00
Julian Lam
c5bc2dd64f upgrading to bootstrap 3.0.1, wish us luck! 2013-11-04 13:22:05 -05:00
Baris Usakli
bbb045698d closes #481 2013-11-04 12:37:06 -05:00
psychobunny
d9e364cd86 fixes #480 2013-11-04 12:14:36 -05:00
Denis Wolf
b179991be4 user.js: ladies and gentlemen, I'm going to satisfy jshint right before your eyes! 2013-11-04 01:57:58 +02:00
Denis Wolf
05de4870b0 user: add spec 2013-11-04 01:32:31 +02:00
Julian Lam
01f0131f5d upping markdown minver 2013-11-03 17:50:16 -05:00
Julian Lam
d69847c54e NodeBB will now fire hooks if a config setting changes 2013-11-03 17:49:03 -05:00
Julian Lam
cc78f6f155 moved firing of plugin activation to after a plugin reload 2013-11-03 17:29:14 -05:00
Julian Lam
1e2100902c closed #478 2013-11-03 17:25:07 -05:00
Julian Lam
4353a9da25 issue #478 - hot-swapping of plugins 2013-11-03 17:15:18 -05:00
Julian Lam
e480b1bace - removed reference to deprecated local modules folder in plugins.init 2013-11-03 12:39:24 -05:00
Julian Lam
5a96f5f64b removed filterBannedPosts method that seemed unused -- monkey-patching
install script to remember old values (if present, otherwise use defaults)
2013-11-03 11:53:44 -05:00
Baris Usakli
7296b701fa recent reply style change 2013-11-01 16:25:48 -04:00
Baris Usakli
a21d91d870 closes #476 2013-11-01 16:01:48 -04:00
Baris Usakli
6931695e64 when you type correctly 2013-11-01 15:07:41 -04:00
Baris Usakli
e12d02f29c jquery best 2013-11-01 15:04:54 -04:00
Baris Usakli
404865c32e closes #429 2013-11-01 14:55:55 -04:00
Baris Usakli
75879c47c5 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-01 14:08:48 -04:00
Baris Usakli
f946918176 fixed anon images in topic view, anon users arent added to active users for a category 2013-11-01 14:08:39 -04:00
Julian Lam
6ca3df2431 upping cerulean minver 2013-11-01 13:59:35 -04:00
Baris Usakli
c8ec095d99 anons cant edit after posting #365 2013-11-01 13:45:24 -04:00
Baris Usakli
0179a55ee4 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-11-01 13:04:25 -04:00
Baris Usakli
04ed1df0ef closes #365, allow guest posting. enabled from admin/settings, defaults to disabled 2013-11-01 13:04:15 -04:00
Julian Lam
de66ee1a89 updated error when no test db is defined -- also made an invalid "db" option a fatal error. Before, it was just defaulting to 0! Wiped out my test db hahaha 2013-11-01 12:16:36 -04:00
Julian Lam
e8c4bda984 Merge pull request #469 from deniswolf/redis-refactoring
Use separate db for testing
2013-11-01 08:44:56 -07:00
Julian Lam
7074b75b9d extra console.log 2013-11-01 11:36:35 -04:00
Julian Lam
857756f636 silly closures... 2013-11-01 11:36:05 -04:00
Julian Lam
e4c62200de fixing screenshot previews in admin/themes 2013-11-01 11:27:02 -04:00
Denis Wolf
89ec677d54 redismock: notify developer about test db config 2013-11-01 02:54:29 +02:00
Denis Wolf
8ff656430d tests: check if we are able to use test db wrapper at all 2013-11-01 02:54:28 +02:00
Denis Wolf
db22394976 redis.js - cleanup 2013-11-01 02:31:34 +02:00
Denis Wolf
ef5548a749 tests: categories.js is using testing db now 2013-11-01 02:31:34 +02:00
Denis Wolf
14c3bb7d63 redismock.js - wrapper for using test db instead of production 2013-11-01 02:31:34 +02:00
Baris Soner Usakli
1a415b60be fixed online page to match the changes made to the template 2013-10-31 16:20:21 -04:00
Julian Lam
85fa68bd92 upping minver for mentions plugin, fixing bad url in admin/topics 2013-10-31 15:54:50 -04:00
Julian Lam
e41ca491ff fixed use of divs inside a UL... how weird heh. 2013-10-31 15:02:52 -04:00
Julian Lam
bb5962cda0 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-31 15:02:40 -04:00
Julian Lam
2de878821b addressed #466, dynamicaly loaded topics now have proper delete/lock/pin
states
2013-10-31 15:02:12 -04:00
psychobunny
5bea2999ef cleanup 2013-10-31 14:38:51 -04:00
Baris Soner Usakli
67e9bf74a7 fixes unread page in mobile 2013-10-31 14:12:47 -04:00
Baris Soner Usakli
ed42012058 closes #472, need to wait for transitions to end before ajaxifying or the overlays stays there (drunk) 2013-10-31 13:30:34 -04:00
Baris Soner Usakli
9b7c9e4a81 camel case for user.js methods 2013-10-30 18:31:36 -04:00
psychobunny
85daacdf7a remove reference to deprecated mobileMenu 2013-10-30 16:38:58 -04:00
psychobunny
17ea41fdae category - use jQuery for graceful degradation 2013-10-30 16:23:36 -04:00
psychobunny
ffd2a18837 updated cerulean to 0.0.4 2013-10-30 15:32:20 -04:00
Julian Lam
5d7f38f99f Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-29 18:25:50 -04:00
Julian Lam
e762267e03 fixed screenshots for themes 2013-10-29 18:25:33 -04:00
psychobunny
a71870de28 pass in site description as well for potential themes to take advantage of 2013-10-29 17:27:23 -04:00
Baris Soner Usakli
7eba0b85f4 fixed andrews fail 2013-10-29 15:19:29 -04:00
psychobunny
30a45ee78e prevent a potentially badly written theme.json from blowing up your forum 2013-10-29 15:13:07 -04:00
psychobunny
ca9cd36067 fix for switching back to a theme without a custom template dir 2013-10-29 14:51:58 -04:00
psychobunny
1d5a208896 themes - added ability to route custom templates serverside 2013-10-29 14:40:35 -04:00
Baris Soner Usakli
60e2938b58 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-10-29 14:16:10 -04:00
Baris Soner Usakli
89540172b2 closes #464 2013-10-29 14:16:03 -04:00
psychobunny
bbb716723f templates - basic implementation of conditionals
<!-- IF variable -->
show me
<!-- ENDIF variable -->
2013-10-29 14:04:07 -04:00
psychobunny
842cd17979 themes - added ability to route custom templates 2013-10-29 12:34:41 -04:00
Barış Soner Uşaklı
e0e32efd26 Merge pull request #465 from deniswolf/utils-cleanup
Utils.js cleanup
2013-10-28 15:44:38 -07:00
Denis Wolf
a127fcd056 utils.js - detect node/browser with IF, not silent TRY/CATCH 2013-10-28 23:55:45 +02:00
Denis Wolf
c614af2cd9 utils.js - removed unused *trim shims - it's better to bring them when and if needed 2013-10-28 23:41:11 +02:00
Denis Wolf
c2abff6e6d utils.js - strict mode, missing semicolon, braces etc 2013-10-28 23:33:37 +02:00
Baris Usakli
4444d2ee6a removed whitespace 2013-10-28 16:16:44 -04:00
Julian Lam
463bc1374c Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-28 15:52:43 -04:00
Julian Lam
d9a60fc2ef rejigging format of notif page 2013-10-28 15:52:39 -04:00
Baris Usakli
22a3b227a3 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-10-28 15:49:21 -04:00
Baris Usakli
12f3f1a45c show admin link in header if user is admin, closes #459 2013-10-28 15:49:12 -04:00
Julian Lam
84d4c2944c Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-28 15:26:10 -04:00
Julian Lam
0a9b918c75 fixed notifications not exiting (whoops) 2013-10-28 15:25:35 -04:00
Julian Lam
8ddf200ce7 Merge branch 'cli-help' of https://github.com/RefinedSoftwareLLC/NodeBB into RefinedSoftwareLLC-cli-help
Conflicts:
	app.js
2013-10-28 15:24:21 -04:00
Julian Lam
207ff98211 Merge pull request #399 from JetMaddox/master
Disable Framing on all sites.

I'm merging this ***conditionally*** - at some point, we wish to introduce integration with CMSes like WordPress. An easy way to achieve this would be placing NodeBB in an iframe.

At that point in time, we'll want to make this a configurable option via admin panel.
2013-10-28 12:18:28 -07:00
Julian Lam
1fb09a9c8c merging @deniswolf's new tests, and double-checking that generateUUID still works 2013-10-28 15:15:59 -04:00
Julian Lam
67f9b22c86 Merge branch 'master' of https://github.com/deniswolf/NodeBB 2013-10-28 15:14:17 -04:00
Julian Lam
8b5cf0c696 Merge branch 'notif_pruning' 2013-10-28 15:10:21 -04:00
Julian Lam
26d9cc56d3 added cronjob for notifications 2013-10-28 15:10:10 -04:00
Julian Lam
930a9c8bca completed notifications pruning method 2013-10-28 14:53:41 -04:00
Baris Usakli
51a9bd9e56 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-10-28 14:36:40 -04:00
Baris Usakli
ac12bd0b8f closes #462 2013-10-28 14:36:31 -04:00
Julian Lam
d7651d1504 Merge branch 'master' into notif_pruning 2013-10-28 13:46:07 -04:00
Julian Lam
7e1f996079 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-28 13:45:55 -04:00
Julian Lam
1af4a9abb4 upped mentions plugin minver 2013-10-28 13:45:51 -04:00
Julian Lam
ed7c9348b7 interim commit 2013-10-28 13:45:32 -04:00
Baris Usakli
ccf4ed1235 topics and posts counters will update for everyone 2013-10-28 13:34:36 -04:00
Julian Lam
b22ee67612 Merge branch 'master' into notif_pruning 2013-10-28 10:52:30 -04:00
Baris Usakli
b5a953b16c fixes topics going into wrong category 2013-10-28 10:36:39 -04:00
Baris Usakli
7613f02eff closes #457 2013-10-28 10:27:03 -04:00
Baris Soner Usakli
78a3dd68ea hide the no topics warning when a new topic is posted on /unread 2013-10-28 00:27:18 -04:00
Baris Soner Usakli
afc0e25b26 closes #463 2013-10-28 00:08:44 -04:00
Baris Soner Usakli
82e14eef35 closes #458 2013-10-27 23:29:53 -04:00
Denis Wolf
81e9c9807f utils.js - missing semicolon, strict equality 2013-10-28 02:10:44 +02:00
Denis Wolf
02e2b53a1d TESTS: Utils.js: tests for validations, uuid generation 2013-10-28 02:09:57 +02:00
Denis Wolf
babe9b6f54 valid jshint config with globals for tests only 2013-10-28 02:09:09 +02:00
Baris Soner Usakli
52f198481b closes #456, if the file path doesnt exists logger was crashing 2013-10-26 20:19:42 -04:00
Baris Soner Usakli
252187f1fe Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-10-26 19:00:42 -04:00
Baris Soner Usakli
99812c33e7 closes #454 2013-10-26 19:00:34 -04:00
Julian Lam
97c5f6009d closes #455 2013-10-26 18:26:30 -04:00
RefinedSoftwareLLC
5e15f8683e Update app.js
Only check if file exists when no other supported --arguments are given.
Display that 0.0.0.0 is Any Address.
Moved upgrade section to after install section.
added CLI --help!
2013-10-26 10:56:05 -06:00
Baris Soner Usakli
fba1f7ae05 removed console.log 2013-10-25 18:09:07 -04:00
Baris Soner Usakli
865e5ae3a3 closes #448 2013-10-25 18:08:23 -04:00
Baris Soner Usakli
1af98835b1 added share buttons to main post 2013-10-25 18:00:08 -04:00
Baris Soner Usakli
6eadf67add another privilege fix 2013-10-25 16:56:18 -04:00
Baris Usakli
f3f280d008 another fix to priv 2013-10-25 16:02:18 -04:00
Julian Lam
aecbe6d316 interim commit, still nothing done 2013-10-25 16:01:31 -04:00
Baris Usakli
63419d7ca9 fix for reputation checks for manage content and manage threads 2013-10-25 15:35:48 -04:00
Julian Lam
3480a1d60e Merge branch 'master' into notif_pruning 2013-10-25 14:51:38 -04:00
Barış Soner Uşaklı
190712e250 Merge pull request #420 from twinlabs/relax-username-validation
relax username validation (#413)
2013-10-25 11:25:56 -07:00
Baris Usakli
a662330b1b fixed users page lists 2013-10-25 12:08:50 -04:00
Baris Usakli
04ee1d137d fixed unread and recent new post/topic notifications 2013-10-25 11:05:06 -04:00
Baris Usakli
27f421587e closes #444 2013-10-25 09:57:02 -04:00
Baris Soner Usakli
f9f0bd8685 closes #445 2013-10-24 23:32:25 -04:00
Julian Lam
53b12f50a7 updating git url for vanilla theme 2013-10-24 08:35:32 -04:00
Julian Lam
63d49463da removed deprecated /plugins folder, updated vanilla package info to always
load the latest latest version - closes #438
2013-10-24 08:10:58 -04:00
Baris Usakli
549017d035 cleaned up getCategories 2013-10-23 16:27:33 -04:00
Baris Usakli
45feef5884 closes #421 2013-10-23 15:45:00 -04:00
Baris Usakli
24592cc696 fixed the anon-box in users/online to show inline 2013-10-23 15:24:43 -04:00
Baris Usakli
c640c550fd removed old browsing code from websockets.js 2013-10-23 15:12:19 -04:00
Baris Usakli
0565b7b8c8 moved css out 2013-10-23 15:00:06 -04:00
Baris Usakli
1691c74727 testing breadcrumb images 2013-10-23 14:39:46 -04:00
Julian Lam
f6be3eacfc interim commit 2013-10-23 12:37:29 -04:00
Baris Usakli
790df903ac added view count to topics 2013-10-23 12:26:24 -04:00
Baris Usakli
25e6f72921 closes #434 2013-10-23 12:16:48 -04:00
Baris Soner Usakli
ab1015b11e #433 2013-10-22 21:47:09 -04:00
Julian Lam
55e990f71d fixes #433 - looks like someone removed the code that floated pinned
topics to the top...
2013-10-22 21:20:56 -04:00
Julian Lam
40a8150519 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-22 21:15:56 -04:00
Baris Soner Usakli
87744302ba fixed button tags in topic.tpl 2013-10-22 19:45:06 -04:00
Baris Soner Usakli
17083dc5e6 closes #417 2013-10-22 19:41:34 -04:00
Julian Lam
b29616fbd8 adding link to notifications page in notifications dropdown 2013-10-22 18:10:51 -04:00
Baris Usakli
468688615f Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-10-22 15:54:10 -04:00
Baris Usakli
f4faee4283 moved image uploading to a require js module, added image upload to site logo 2013-10-22 15:54:02 -04:00
Julian Lam
62c85274a3 mark all notifs as read functionality. CSS tweaks... 2013-10-22 15:06:07 -04:00
Julian Lam
db2917193e Merge branch 'master' into notifications_page 2013-10-22 14:35:38 -04:00
Julian Lam
705571de8c notifications page + ajaxify route + css styling 2013-10-22 14:35:20 -04:00
psychobunny
2ee29683a7 random whitespace 2013-10-22 14:22:53 -04:00
psychobunny
51395dda91 updated all RDB.hget in posts to use getPostField. new post filters for retrieving and saving posts. made editPost saving synchronous. 2013-10-22 14:22:21 -04:00
Baris Usakli
9babef0095 closes #422, will restart over if reconnection fails after x number of attempts 2013-10-22 13:42:23 -04:00
Baris Usakli
e9545c9a7f closes #426 2013-10-22 13:07:41 -04:00
Baris Usakli
619214e462 added relative path to logo 2013-10-22 12:54:20 -04:00
Baris Usakli
31b600686a logo links to homepage 2013-10-22 12:51:06 -04:00
Baris Usakli
bccc4e8019 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-10-22 12:39:24 -04:00
Baris Usakli
7039a4d762 closes #425 2013-10-22 12:39:14 -04:00
Julian Lam
7b7f0115e5 closed #432 - added link rel="up" and rel="alternate" to category and
topic pages
2013-10-22 12:23:07 -04:00
Baris Soner Usakli
24e79b3f4e #426 2013-10-21 18:51:33 -04:00
Julian Lam
5c70b2b307 issue #427 - proper handling of theme reverting 2013-10-21 12:10:23 -04:00
Julian Lam
65a8de7845 special theme.set socket call + static dir support, closes #427, tweaked languages 404 to work with subdirs 2013-10-21 12:07:37 -04:00
Julian Lam
44d2297546 monkeypatching the 404 route to handle missing languages and client side scripts. Removing "soft 404" in favour of hard 404 due to complaints from google webmaster tools 2013-10-21 11:09:46 -04:00
psychobunny
a41280707e updated the vanilla & cerulean theme's package versions 2013-10-20 13:59:10 -04:00
Jet
a8f2fd66ae Adding brackets.
Too much Coffeescript. Had some filters on. :)
2013-10-20 13:27:25 +02:00
Baris Soner Usakli
7e8ddbadfb closes #423, closes #424 2013-10-19 23:30:10 -04:00
Julian Lam
80aeb3677d added new packages to install script, defaulting to cerulean 2013-10-19 17:50:40 -04:00
Julian Lam
f92bbdaefa Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-19 17:48:00 -04:00
Julian Lam
fc73f16425 closes #418 2013-10-19 17:45:12 -04:00
Julian Lam
c1f47f536d install script tweaks so vanilla is default 2013-10-19 17:41:26 -04:00
Julian Lam
9166c82dc2 tweaking admin panel integration 2013-10-19 17:25:17 -04:00
Julian Lam
3decc8b9b1 removing nodebb.less file 2013-10-19 17:14:54 -04:00
Julian Lam
bac5da30e7 removing themes folders from core 2013-10-19 17:10:29 -04:00
Julian Lam
baf379c6d7 theme intergration into nodebb based on config hash value 2013-10-19 16:24:33 -04:00
Baris Soner Usakli
e9b6cdb37a add responsive class to imgs 2013-10-19 15:58:54 -04:00
Baris Soner Usakli
9d36d2c749 fixed placeholder text in chat modal 2013-10-19 15:31:17 -04:00
Noah Chase
5945ab1a0a relax username validation (#413)
this commit allows for matching accented characters, dots, '@' symbol,
and other important things.
2013-10-19 15:27:20 -04:00
psychobunny
40319a66ff reverting 754aef8a84 2013-10-19 11:48:46 -04:00
psychobunny
754aef8a84 fixes #392 - needs testing on try to see if google updates title correctly
order of events: 1. title changes, 2. content fades in, 3. history
pushState
2013-10-19 11:31:01 -04:00
Baris Soner Usakli
0613b530e8 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-10-18 16:02:43 -04:00
Baris Soner Usakli
5e9819b96f #415, moved search form into logged in menu 2013-10-18 16:02:33 -04:00
Julian Lam
b46e334a40 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-18 15:58:39 -04:00
Julian Lam
af49845ae6 upping mentions minver 2013-10-18 15:58:28 -04:00
Baris Soner Usakli
4cb8241334 added mising template variables to fix image change modal 2013-10-18 15:48:15 -04:00
Julian Lam
530e6cb20e upping mentions plugin minver 2013-10-18 14:03:15 -04:00
Julian Lam
e0adc03588 upping markdown ver again 2013-10-18 13:19:13 -04:00
Julian Lam
e48f6e6d9b Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-18 13:10:43 -04:00
Julian Lam
04ff4df5d7 updated markdown plugin min ver 2013-10-18 13:10:34 -04:00
Baris Usakli
d789e96d79 fixed 2 missing requires in api.js 2013-10-17 14:49:31 -04:00
Baris Usakli
45761fd48b fixed missing require in messaging 2013-10-17 12:05:53 -04:00
Julian Lam
cb6a47a5d9 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-16 14:08:57 -04:00
Julian Lam
67dbdfd80d fixed test cases to not throw redis error due to Reds 2013-10-16 14:08:31 -04:00
Baris Usakli
dee99c1752 update category topic count if topic is deleted/restored 2013-10-16 13:42:07 -04:00
Baris Usakli
a0c7e187f5 footer stats will display human readable stuff 2013-10-16 13:25:17 -04:00
Julian Lam
938503bd56 Merge branch 'category-test-uses-base-config' of https://github.com/twinlabs/forum.node into nchase-merge 2013-10-16 13:10:36 -04:00
Baris Usakli
33bda6fd16 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-10-16 13:04:37 -04:00
Baris Usakli
929336cb57 closes #408 2013-10-16 13:04:28 -04:00
Julian Lam
883aca038b disabled categories are now faded in the "Move Thread" modal. closes #409
Why is it called "move topic"? Renamed.
2013-10-16 12:57:12 -04:00
Julian Lam
77e03dc18d readded missing styles for the "Move Thread" modal 2013-10-16 12:34:04 -04:00
Baris Usakli
230ed1ab11 moved cid so that other functions can use it in category.js 2013-10-16 12:03:44 -04:00
Baris Usakli
b31fa856d0 added meta require to topics.js 2013-10-15 15:39:45 -04:00
Baris Usakli
98b97b9898 added callback to hmset in category.create 2013-10-15 15:20:12 -04:00
Baris Usakli
41cf7c6814 added commas after some requires, added missing plugins require to categories 2013-10-15 15:01:12 -04:00
Baris Usakli
da3a2f436c added categories require to feed.js 2013-10-15 14:44:42 -04:00
Julian Lam
569a7178d7 fixed install script error 2013-10-15 14:31:27 -04:00
Julian Lam
7e7497c3bd Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-15 13:12:51 -04:00
Julian Lam
905c78d5a3 reverting changes to the badge 2013-10-15 13:12:43 -04:00
Baris Usakli
37b1cb009a added chevron to fave template 2013-10-15 12:01:27 -04:00
Julian Lam
56586e1fda tweaking more badges fro /home, itemprops for homem reduced padding right of badge in category view 2013-10-15 11:17:23 -04:00
Julian Lam
2040fcdba4 moved badge outside of topic title, added schema.org itemprop stuff for category listing 2013-10-15 11:11:21 -04:00
Julian Lam
d24b57ae86 upping markdown package to 0.1.5 2013-10-14 23:19:09 -04:00
Julian Lam
db72102de7 upping markdown version 2013-10-14 22:02:10 -04:00
Julian Lam
e8801a75f3 fixing weird passing in of a single param as an array for post.save hook 2013-10-14 21:47:45 -04:00
Julian Lam
918826ff48 fixed action calls, and added a new hook for plugin activation and deactivation 2013-10-14 21:11:17 -04:00
Julian Lam
fa2fe5c941 allowing plugin system to detect object method path by dot notation 2013-10-14 17:24:57 -04:00
Julian Lam
8ef2761f53 tweaking plugins again -- simplifying 2013-10-14 17:07:54 -04:00
Julian Lam
9375369b88 fixed issues caused by inadvertant globalisation (and its subsequent fix) 2013-10-14 16:41:34 -04:00
Julian Lam
ce77c82b0c Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-14 16:28:35 -04:00
Julian Lam
1e39ae2f1e minor tweak to plugins (used object format instead of potentially
confusing array)
2013-10-14 16:28:08 -04:00
Julian Lam
c143894547 Merge pull request #405 from twinlabs/stop-topic-global-leak
fix typo that was causing Topic module's variables to leak into global namespace
2013-10-14 11:45:53 -07:00
psychobunny
37450ff00c optimized ajaxify to only recurse through script tags; updated so it looks deeper for embedded scripts (ie. within plugin subtemplates) 2013-10-14 14:26:20 -04:00
psychobunny
ca9c468edd plugins - filter:category.build_sidebars allows plugins to generate custom sidebar content 2013-10-14 14:25:36 -04:00
psychobunny
d6570d1496 prevent admin crashes on improperly configured plugins 2013-10-14 12:00:31 -04:00
psychobunny
bf677522a9 added additional_profile_info footer in posts view; plugins - filter:posts.custom_profile_info hook lets you add info to post block footer
also fixed app.alert - if title is not set then do not show title.
2013-10-13 19:16:48 -04:00
Noah Chase
fd89f71fc0 fix typo that was causing topic variables to leak into global namespace 2013-10-13 18:39:42 -04:00
Noah Chase
83477ece18 category tests should be able to use whatever the app defines as config options 2013-10-13 15:18:33 -04:00
psychobunny
32990794ce fixed admin bug (on f5 was not populating fields); plugins - filter:admin.create_routes allows you to create path to custom admin page 2013-10-13 14:30:39 -04:00
psychobunny
4b5bae4f9b fixed plugin path in admin header 2013-10-13 13:52:33 -04:00
psychobunny
2b07917020 plugins - filter:admin.header.build allows you to add plugins to navigation in ACP 2013-10-13 13:34:15 -04:00
psychobunny
338acb8fc2 added a way to disable ajaxify on links manually if needed. 2013-10-12 17:43:29 -04:00
psychobunny
2a4b228e19 plugins - filter:server.create_routes allows you to add custom routes to NodeBB 2013-10-12 17:19:18 -04:00
Julian Lam
c6c3ab94b1 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-12 17:00:48 -04:00
Julian Lam
8671516b95 added more itemprop stuff... replies are now comments. 2013-10-12 17:00:30 -04:00
Baris Soner Usakli
5710ab47ae Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-10-12 14:45:23 -04:00
Baris Soner Usakli
e3b0eb29f1 added favourites link to template 2013-10-12 14:45:15 -04:00
Julian Lam
795594b6a6 added some microdata for better google scrapage. closes issue #401 2013-10-12 14:23:58 -04:00
Julian Lam
e91da53d9e using reduce to run filter hooks instead of eachSeries, and fixed up
incorrect usage of .apply() in tests folder
2013-10-12 13:50:08 -04:00
Julian Lam
f807df84d8 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-12 13:31:07 -04:00
Julian Lam
7f32d5741d removing restriction that caused hook system to go weird when arrays were
passed in as args
2013-10-12 13:30:43 -04:00
psychobunny
30c7113bd8 removed console.log 2013-10-12 13:08:49 -04:00
psychobunny
a63732027f plugins - filter:header.build allows plugins to add custom navigation to header 2013-10-12 13:05:47 -04:00
Julian Lam
13d8f51f6a added test file for categories (incomplete)
re: issue #391
2013-10-12 11:06:53 -04:00
Julian Lam
5d48ed5fb4 using map instead of eachSeries to load categories for /home. Error
handling.
2013-10-12 10:37:44 -04:00
Baris Soner Usakli
4b89b3e2ed fixed time for month 2013-10-11 23:32:47 -04:00
Julian Lam
1ee24517e3 enhanced the "discard post" confirmation message to only trigger if
something in the post body actually changed
2013-10-11 20:55:31 -04:00
Julian Lam
64e35c734e decreased the severity of the border radii on the post window, and removed
them completely from the bottom of the window, as it conflicts with the
taskbar
2013-10-11 20:50:30 -04:00
Baris Soner Usakli
08130e8088 fixed conditional in follower/following count 2013-10-11 17:18:17 -04:00
Baris Usakli
0c5937805b clear uploads in progress if discard is clicked, temp fix until composer is revamped 2013-10-11 15:16:00 -04:00
Baris Usakli
d315829eaf closes #394 2013-10-11 15:06:56 -04:00
Baris Usakli
6dad1c3bbb Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-10-11 14:58:04 -04:00
Baris Usakli
3577c11c89 fixed infinite loading on /recent 2013-10-11 14:57:55 -04:00
psychobunny
8326c223ab fixed f5 bug with /recent/:term which previously gave a 404 2013-10-11 14:57:17 -04:00
Baris Usakli
73de5f78fe language file 2013-10-11 14:50:09 -04:00
Baris Usakli
4e59b85073 recent page, for hour, day, week, month 2013-10-11 14:48:14 -04:00
Baris Usakli
9af26db57a follower count fix 2013-10-11 14:29:34 -04:00
Baris Usakli
8e4ca8e474 closes #397 2013-10-11 13:06:21 -04:00
Baris Usakli
79de3976bf removed non existant paths from templates/config.json, added starts with to regexes 2013-10-11 12:02:43 -04:00
Baris Usakli
4b80f13373 removed reduntant paths fron templates/config.json 2013-10-11 11:59:17 -04:00
Baris Usakli
6210c6dbf4 removed extra ) in search.js 2013-10-11 11:54:15 -04:00
Jet
97592eede6 Fixed case for header 2013-10-11 11:19:24 +02:00
Jet
73dafa6aff Disable framing
Set the X-Frame-Options to DENY for added security.
2013-10-11 11:08:52 +02:00
Baris Usakli
6c3e121b6c remove a line, not needed 2013-10-09 17:38:00 -04:00
Baris Usakli
95ee7fb49f added flag to empty container 2013-10-09 17:30:49 -04:00
Baris Usakli
b3f73eace1 fix for online page 2013-10-09 17:16:07 -04:00
Baris Soner Usakli
07a497362a removed console.log 2013-10-07 17:49:25 -04:00
Baris Soner Usakli
afa078d00c closes #288 2013-10-07 17:48:11 -04:00
psychobunny
3fd7d9a604 moved jquery.form.js into appropriate location 2013-10-07 16:56:20 -04:00
psychobunny
80a0d2d8d8 ^ this person is awesome, what a commit! 2013-10-07 16:01:03 -04:00
psychobunny
27f4fdd179 fixes #377 2013-10-07 13:00:57 -04:00
psychobunny
d1a94a91c2 added app.uid 2013-10-07 12:57:40 -04:00
psychobunny
69a31dcdd9 fixes #388 2013-10-07 12:49:13 -04:00
psychobunny
a2a6bf87f7 fixes #387 2013-10-07 12:38:57 -04:00
Julian Lam
bd1e95b655 cleaned up admin template mapping 2013-10-06 18:28:17 -04:00
Julian Lam
278f9bfc03 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-06 18:04:25 -04:00
Julian Lam
a3a8950afd bumping markdown plugin version to 0.1.3 2013-10-06 18:04:03 -04:00
Julian Lam
f95913e623 Merge pull request #386 from adarqui/issue-login-redirect-40x
Issue login redirect 40x
2013-10-06 11:12:19 -07:00
Julian Lam
8e4b51fba4 requiring latest version of mentions plugin 2013-10-06 14:10:54 -04:00
Julian Lam
84915a1843 added css files support for plugins, added ready output for NodeBB, put
some minification related outputs to debug-mode only
2013-10-06 13:55:30 -04:00
Andrew Darqui
4b0e915698 just changed the 403/404 checking logic to use regex. 2013-10-06 04:32:03 -04:00
Andrew Darqui
b2e81b5d17 Fixes a small issue with the redirect after logging in. If app.previousUrl is undefined (from accessing the page directly), login would fail to redirect you because of an error with indexOf on the undefined app.previousUrl. 2013-10-06 04:24:38 -04:00
Andrew Darqui
ef47f3fd15 if nodebb returns 403/404, don't overwrite previousUrl. If you don't do this, when logging in after a 403/404, it will redirect you to the 403/404 page. 2013-10-06 04:17:06 -04:00
Julian Lam
f88f72abd2 Merge branch 'adarqui' 2013-10-05 22:47:59 -04:00
Julian Lam
715c14b78d fixed error where client side script loader on admin page was throwing 404
errors on require.js require
2013-10-05 22:46:30 -04:00
Julian Lam
4af7da3451 Merge branch 'express-logger-0.0.7-fixes' of http://github.com/adarqui/NodeBB into adarqui 2013-10-05 22:36:41 -04:00
Julian Lam
63ff572076 WIP commit for CSS static directories 2013-10-05 22:33:29 -04:00
Andrew Darqui
129af904f6 fixed an issue with Logger.io_close, needed to check for undefined on the socket.oEmit and socket. functions 2013-10-05 22:06:44 -04:00
Andrew Darqui
8cc71d2b47 fixed logger.tpl to use the new requirejs code 2013-10-05 21:44:54 -04:00
Julian Lam
0b299b2fe7 Merge pull request #381 from adarqui/express-logger-0.0.7
Express & Socket.io logger
2013-10-05 14:39:14 -07:00
Julian Lam
b1cef5f73d Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-05 13:48:41 -04:00
Julian Lam
42067ce53c closes #382 - install script can be run via command line 2013-10-05 13:48:23 -04:00
Baris Usakli
2bdf12fb67 derp, need to revamp online page 2013-10-04 16:21:30 -04:00
Baris Usakli
c00b138bf2 some fixes to online page 2013-10-04 16:03:03 -04:00
Baris Usakli
1155eaf1f1 online page changes 2013-10-04 15:30:52 -04:00
Baris Usakli
52f2e193d6 if api fails with 404 ajaxify to 404, added type check to updateProfile 2013-10-04 13:39:44 -04:00
Baris Usakli
f5619a9b29 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-10-04 13:01:33 -04:00
Baris Usakli
057608bac0 added usernames to following followers, closes #369 2013-10-04 13:01:28 -04:00
Julian Lam
57465eb277 misrouting now only shows warning when in debug mode 2013-10-04 10:37:32 -04:00
Julian Lam
01e04d60a9 fixing redis db in upgrade path 2013-10-04 10:34:08 -04:00
Julian Lam
be8d9be832 flushed out upgrade path for notifications 2013-10-04 10:27:32 -04:00
Julian Lam
07d07020f0 requiring latest nodebb plugin versions 2013-10-04 10:06:17 -04:00
Andrew Darqui
7c1f7e7a23 just some text formatting fixes 2013-10-04 01:54:23 -04:00
Andrew Darqui
a3f6fee41f refactored the logger completely. 2013-10-04 01:46:50 -04:00
Julian Lam
0414ec7f83 removing testbed code from repo (why was it even checked in?!!) 2013-10-03 23:21:29 -04:00
Julian Lam
12af2a7ff6 install script calling proper redis db 2013-10-03 23:10:17 -04:00
Julian Lam
4d6881fa65 reset update for 0.0.7, and added new schema update for notifications 2013-10-03 22:36:00 -04:00
Julian Lam
019e8e0d14 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-10-03 21:20:00 -04:00
Julian Lam
763bd775c4 closed #380 2013-10-03 21:18:59 -04:00
Julian Lam
585e07bc79 closed #368 - notifications now no longer need scores 2013-10-03 20:35:16 -04:00
Julian Lam
b911d8d075 Merge pull request #379 from ipetepete/master
Added config option to set a db for NodeBB, defaults to redis db0
2013-10-03 16:48:44 -07:00
Julian Lam
d583122c64 Merge pull request #378 from iamcardinal/master
FIxes Search and touches on postbox, closes #370
2013-10-03 16:38:05 -07:00
Peter Peterson
3968877b1e Merge branch 'master' of github.com:ipetepete/NodeBB 2013-10-03 13:02:57 -07:00
Peter Peterson
46f03de9f6 Added ability to set redis db to use, defaults to db0 2013-10-03 13:00:30 -07:00
Julian Lam
0e18ec022c not running init() if there is no init method in each template script 2013-10-03 15:51:48 -04:00
Julian Lam
64117ab613 removing deprecated bootstrap css file from admin header 2013-10-03 15:07:30 -04:00
Julian Lam
038e04dee6 revamped client side scripts so that they are loaded using Require.js instead. 2013-10-03 15:04:25 -04:00
Julian Lam
b49c7b8609 added user-scalable=no to header meta tag (in lieu of fastclick lib)
closes #376 - reopen if necessary.
2013-10-03 11:47:40 -04:00
Julian Lam
948949c571 closed #375 - now asking socket.io to connect to "current page" instead of hardcoded url, removed api_url and "socket" section from public config 2013-10-03 11:34:15 -04:00
Julian Lam
f173a79a0d Merge pull request #371 from iamcardinal/master
Adds meta:keywords tags fixes tabbing, closes #330
2013-10-02 16:10:43 -07:00
Quinton Marchi
994791add6 Touches on postbox
Adds border-radius. Compatible with: Firefox, Webkit-based, and IE9+.
2013-10-02 17:48:27 -04:00
Quinton Marchi
d177e71b46 Fixes double search, closes #370
Haven't tested it but I can't see any problems.
2013-10-02 14:31:41 -04:00
Quinton Marchi
fcab1501f8 Merge remote-tracking branch 'origin/testing-2013-10-01' 2013-10-02 14:23:25 -04:00
Quinton Marchi
eb022220f4 Final Edit for keywords 2013-10-02 14:22:56 -04:00
Andrew Darqui
f48687528e fixed up logger.tpl a little. Added a basic 'collision detection' for the loggerPath and loggeIOPath filenames. 2013-10-02 01:28:37 -04:00
Andrew Darqui
9007f9de9e added socket.io logging which can be dynamically enabled/disabled via the /admin/logger panel 2013-10-02 01:15:45 -04:00
Andrew Darqui
55d84d0f9b basic logger functionality added - accessible via http://nodebb/admin/logger 2013-10-02 00:25:46 -04:00
Minami
90b4d688f8 Testing adding of Meta Tags 2013-10-01 22:14:16 -05:00
Andrew Darqui
aacd42f4bc ignore vim .swp files from git 2013-10-01 22:38:33 -04:00
Andrew Darqui
51d7dda5a7 added basic logger using config.json 2013-10-01 22:38:13 -04:00
Baris Soner Usakli
1c32acf7b6 removed WITHSCORES from getLatestTopics, how was this working at all? 2013-10-01 14:17:24 -04:00
psychobunny
22c73f3c12 closes #345 2013-10-01 12:08:05 -04:00
Julian Lam
9613ea9018 reverted change where post title was sanitized on saving (which didn't
seem to work), now sanitizing post title on output
2013-10-01 11:54:00 -04:00
Julian Lam
3d4802ac68 Merge remote-tracking branch 'origin' 2013-10-01 11:18:06 -04:00
Julian Lam
59c9bdb3a5 updated contributor list 2013-10-01 11:17:57 -04:00
Julian Lam
d7953eb779 updated screenshots for v0.0.7 2013-09-30 17:22:39 -04:00
Julian Lam
48a7c48f7b 0.0.7 2013-09-30 17:05:28 -04:00
Julian Lam
7a919fbac4 dropping down to 0.0.6 for re-release 2013-09-30 17:05:22 -04:00
Julian Lam
181220621e fixed issue with server crashing on post 2013-09-30 17:01:39 -04:00
Julian Lam
249c45dfe2 0.0.7 2013-09-30 16:30:11 -04:00
Julian Lam
b19d84f1a7 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-30 16:28:50 -04:00
Julian Lam
865edb70c2 added meta description to topics, closes #362 2013-09-30 16:28:37 -04:00
Baris Usakli
e78369f0fa use User.isAdmin instead 2013-09-30 16:24:00 -04:00
Baris Usakli
d40a6a5c3f added adminitstrator value to userData for admin users page 2013-09-30 16:19:20 -04:00
Baris Usakli
cb7768d095 cant ban yourself 2013-09-30 16:04:54 -04:00
Baris Usakli
4290516d29 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-30 16:03:06 -04:00
Baris Usakli
6a7a2301ee removed admin and delete buttons from template 2013-09-30 16:03:00 -04:00
Julian Lam
9a79c58e33 closed #361 - groups admin modal had an extra button that did nothing 2013-09-30 16:02:38 -04:00
Julian Lam
4c39c1ec30 fixed issue with install script erroring out if redis host is not defined 2013-09-30 15:52:10 -04:00
psychobunny
571cb8b44f readded back admin css for users 2013-09-30 15:31:29 -04:00
Baris Usakli
4207792ffd added app alert if template data cant be loaded 2013-09-30 15:12:14 -04:00
Quinton Marchi
f5c4f98834 Merge pull request #1 from designcreateplay/master
Merge changes into repo for edit
2013-09-30 11:42:16 -07:00
Baris Usakli
9f67282a79 admin site will display reconnecting notification when server is offline closes #346 2013-09-30 13:04:03 -04:00
Julian Lam
ee71c1cf0d Merge branch 'iamcardinal-merge' 2013-09-30 11:23:41 -04:00
Julian Lam
06f2284bcd added output to show bound address on instance start 2013-09-30 11:23:11 -04:00
Julian Lam
8cbe79655a emptying Meta.config on init (Just to be safe) 2013-09-30 11:18:02 -04:00
Julian Lam
a4c1d733b7 fixed issue where setOnEmpty would fail in install.js as Meta.config was
not defined (as it had not been initted yet)
2013-09-30 11:17:12 -04:00
Julian Lam
839649d42f Merge branch 'master' of https://github.com/iamcardinal/NodeBB-enhancement into iamcardinal-merge 2013-09-30 11:12:38 -04:00
Quinton Marchi
504e2aac4a Adds: regex for ports, mini for public/src/forum
+ Regular expression for port during install
+ Minification for public/src/forum JS files
+ Minification for public/src/forum/admin JS files
2013-09-30 02:42:34 -04:00
Minami
eafb41602c Edited to simplify install
Removed the two steps and made it default to 0.0.0.0, edited the
webserver.js to reflect the changes.
2013-09-29 21:03:29 -05:00
Baris Soner Usakli
2dcc4172c4 closes #357 2013-09-29 21:29:43 -04:00
Baris Soner Usakli
f96a711298 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-29 21:03:19 -04:00
Baris Soner Usakli
ad28b9b339 fixed crash in meta 2013-09-29 21:03:16 -04:00
Julian Lam
8dd8536f6b closes #317 - hitting discard on a post with content will now throw a
bootbox confirmation modal
2013-09-29 20:38:45 -04:00
Julian Lam
7bf5b2ec57 changed fireHook to be error-first, closes #319 2013-09-29 20:33:35 -04:00
Julian Lam
aa731aa894 Merge branch 'middleware_refactor' 2013-09-29 20:28:50 -04:00
Julian Lam
c58cb257dc closes #349 - loading middlewares using async instead of crazy
middleware-stack modifying shenanigans
2013-09-29 20:27:52 -04:00
Baris Soner Usakli
06f59cf853 closes #310 2013-09-29 15:08:00 -04:00
Baris Soner Usakli
83b4b5434f fixed username button title 2013-09-29 14:27:31 -04:00
Baris Soner Usakli
9de5214a2f closes #353 2013-09-29 14:18:43 -04:00
Julian Lam
f08067bab2 fixes #356 - issue where accessing a NodeBB using a different machine name
from one that it was set up with causing template data to not load, as it
was being accessed via absolute url, instead of relative url
2013-09-29 13:47:27 -04:00
Julian Lam
1160f39cb0 revamped reconnection notification, closes #354 2013-09-28 22:05:10 -04:00
Julian Lam
d633ecd160 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-28 17:45:27 -04:00
Julian Lam
4cea313060 updated getPostsByPids method to resolve premature return issue, and
refactored it to use async.map instead of eachSeries
2013-09-28 17:44:18 -04:00
Baris Soner Usakli
9b7f8076eb removed console.log 2013-09-28 16:18:55 -04:00
Quinton Marchi
571259f241 Adds hostname support, fixes #343
Works from previous testing but I haven't tried this personal revision
of the code. Take it with a grain of salt.
2013-09-28 03:55:06 -04:00
psychobunny
607ee8bbc1 added outgoing.less, fixed modern.less theme, fixed #316 2013-09-27 13:11:01 -04:00
psychobunny
36d2f74887 fixed unread category view 2013-09-27 12:59:36 -04:00
Julian Lam
cdaf409a99 monkey-patching getPostsByPids so that it returns ISOString instead of relativeTime 2013-09-27 11:53:25 -04:00
Julian Lam
fba487d8a2 removing extra comma in package.json 2013-09-27 11:48:01 -04:00
Julian Lam
3ab7306199 linting, minor bugfix, moving hiredis to optional deps 2013-09-27 11:47:16 -04:00
Julian Lam
2e4e94d5f8 Merge branch 'redis-optimizations' of https://github.com/adarqui/NodeBB into adarqui-redis-optimizations 2013-09-27 11:44:40 -04:00
Baris Usakli
3348ed3524 fixed email key 2013-09-26 13:56:36 -04:00
Baris Usakli
942a21b4be fixed email meta changes 2013-09-26 13:31:38 -04:00
Baris Usakli
9c14618d55 dont redirect back to reset password after login 2013-09-26 12:50:24 -04:00
Baris Usakli
7d50551392 remove throw in email send 2013-09-26 12:29:35 -04:00
Baris Usakli
f2c1a92513 closes #215 2013-09-25 13:08:11 -04:00
Baris Usakli
fe6595cd2a Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-25 12:30:17 -04:00
Baris Usakli
c2aac916aa fixed topics not appearing after a post in category view 2013-09-25 12:30:07 -04:00
psychobunny
e161b5387b fixed untranslated language on dynamic new posts and infinite loading 2013-09-25 12:16:06 -04:00
Baris Usakli
585e5cd88f closes #341 2013-09-25 12:11:32 -04:00
psychobunny
1637ffc5dc re-adding teaser 2013-09-25 11:40:05 -04:00
psychobunny
a28797ee03 fix for recent view teasers 2013-09-25 11:26:28 -04:00
Julian Lam
49e28f9d1e fixing bug where outgoing links didn't actually let you leave... oops! 2013-09-25 11:25:48 -04:00
Baris Usakli
4a7cd664fd fixed a bug in template parsing 2013-09-24 16:46:45 -04:00
Baris Usakli
253e11d55b cleaned up websockets.js 2013-09-24 16:02:14 -04:00
Baris Usakli
eb1c1c78d4 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-24 15:59:51 -04:00
Baris Usakli
0b0d64b52e logout/login changes, updateHeader changes 2013-09-24 15:59:08 -04:00
Julian Lam
1ae51ef5ea redis export function (commented out for now) 2013-09-24 15:36:17 -04:00
psychobunny
de1e3230f5 fixed topics and admin views, broken after merge 2013-09-24 15:23:16 -04:00
psychobunny
1fbc038e64 fixed conflicts, added new language key for users/online 2013-09-24 15:15:39 -04:00
psychobunny
cd63dd429b finalizing todo's before merging 2013-09-24 14:59:13 -04:00
Baris Usakli
fbfdf561fc Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-24 14:57:01 -04:00
Baris Usakli
83d5a84edd login redirects back 2013-09-24 14:56:51 -04:00
psychobunny
5abf02c6d1 default language, en 2013-09-24 14:55:46 -04:00
psychobunny
b8037845d6 registration.tpl; translator variable system 2013-09-24 14:50:38 -04:00
Julian Lam
c80e2552b2 express-namespaceing routes 2013-09-24 14:18:41 -04:00
psychobunny
1a1fea535b header language 2013-09-24 14:17:36 -04:00
psychobunny
5c7da4b686 fixed serverside templating; footer, logout internationalization; updated more global lang keys 2013-09-24 14:14:26 -04:00
Julian Lam
b6ee89a6d8 fixed typo in plugins page 2013-09-24 14:12:26 -04:00
psychobunny
2d8e6bd980 category language 2013-09-24 13:31:44 -04:00
Julian Lam
a173d61464 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-24 13:31:10 -04:00
Baris Usakli
8f04a136c8 fixed whitespace 2013-09-24 13:31:02 -04:00
Julian Lam
b7675e1ec7 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-24 13:30:59 -04:00
Julian Lam
964fbfe2bb fixes to get nodebb to at least load on IE 2013-09-24 13:30:54 -04:00
Baris Usakli
8fb8956c0d closes #331 2013-09-24 13:30:09 -04:00
psychobunny
c11920ac08 internationalization: 404 and 403 2013-09-24 13:22:10 -04:00
Baris Usakli
9a4eb26246 closes #332 2013-09-24 13:06:14 -04:00
Julian Lam
0d9958afe7 HOTFIX for scripts 2013-09-24 13:01:18 -04:00
Julian Lam
d6dd74b50a removed extra debug log 2013-09-24 12:34:54 -04:00
Julian Lam
d5437ca8fa Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-24 12:34:17 -04:00
Julian Lam
14720057c2 serving unminified libraries in development mode, minified otherwise 2013-09-24 12:33:51 -04:00
Baris Usakli
170ed8cc01 fixed conflict 2013-09-24 12:31:28 -04:00
Baris Usakli
25576eb35a closes #329 2013-09-24 12:29:51 -04:00
Julian Lam
66cb1fb6ad removed console.log from socket connection success handler 2013-09-24 11:02:06 -04:00
Julian Lam
bcc65fd879 closed #328 2013-09-24 08:38:19 -04:00
Julian Lam
99440585e6 Merge branch 'master' into optimize-22-09-2013
Conflicts:
	package.json
2013-09-23 20:04:09 -04:00
Baris Usakli
290d69d14a remember where the topic was left off 2013-09-23 17:41:54 -04:00
Baris Usakli
4fce06677f Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-23 16:49:11 -04:00
Baris Usakli
f53cd8b5b6 category view fix 2013-09-23 16:49:01 -04:00
Julian Lam
da59f47624 adding missing files 2013-09-23 15:46:40 -04:00
Julian Lam
521586f08f Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-23 15:45:23 -04:00
Julian Lam
f39a7ada7c skipping minification if the minFile is already up-to-date - issue #322 2013-09-23 15:45:03 -04:00
Baris Usakli
bae9f46d8b small fixes to search 2013-09-23 15:31:52 -04:00
Julian Lam
d7ea24e218 issue #322 - minifying css file and added jquery to minified compilation 2013-09-23 15:27:46 -04:00
Julian Lam
e621d7e601 closed #322 - autominifying client-side assets on load 2013-09-23 15:21:34 -04:00
Baris Usakli
aa6eff4c54 one more itme 2013-09-23 14:58:06 -04:00
Baris Usakli
f36583e676 possible fix for users/online duplication 2013-09-23 14:55:34 -04:00
Baris Usakli
0a0a91d4b2 remove listener 2013-09-23 14:51:59 -04:00
Baris Usakli
6c70f9e308 only collapse header if its expanded 2013-09-23 14:51:16 -04:00
Baris Usakli
b25c3d8b67 closes #324 2013-09-23 14:40:31 -04:00
Baris Usakli
bade99d069 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-23 13:43:25 -04:00
Baris Usakli
776b51fef7 closes #323 2013-09-23 13:43:15 -04:00
Julian Lam
da2d014f00 added IRC link to wiki 2013-09-23 12:55:21 -04:00
Julian Lam
7fdf83089d linting 2013-09-23 12:50:27 -04:00
Julian Lam
043aafd7b7 closed #315 2013-09-22 20:40:10 -04:00
Julian Lam
3254979568 re: #321, removed cheerio dep from package.json 2013-09-22 15:28:22 -04:00
Julian Lam
6fd202fe36 closed #321, removed cheerio use altogether, and made changes to the
client side to ajaxify the user to /outgoing when an external link is
clicked
2013-09-22 15:27:10 -04:00
Julian Lam
5f00f1e18e renamed "toHTML" method to "parse" 2013-09-22 13:54:21 -04:00
Julian Lam
c940ce3329 camelCased get_latest_undeleted_pid method 2013-09-22 13:33:05 -04:00
Julian Lam
2366e2b209 refactored get_latest_undeleted_pid to not blindly call getPostsByTid in
order to determine post deletion. (issue #320)
2013-09-22 13:28:10 -04:00
Julian Lam
2b7fd3c9d1 interim commit 2013-09-22 12:55:03 -04:00
Andrew Darqui
d3e37d1716 slight variable name changes & remove unused var from getPostsByPids, removed underscore dependency 2013-09-22 00:36:56 -04:00
Andrew Darqui
d2b858c997 slight variable name changes & remove unused var from getPostsByPids, removed underscore dependency 2013-09-22 00:36:40 -04:00
Baris Soner Usakli
de34c7580f closes #314 2013-09-22 00:29:31 -04:00
Baris Soner Usakli
bcb492751c closes #313, also fixed progressbar 2013-09-22 00:01:31 -04:00
adarqui
e26cc79819 redis multi pipeline used for getPostsByPids 2013-09-21 22:47:27 -04:00
adarqui
98cb2d4c17 a little logic to allow nodebb to use a unix domain socket rather than tcp/ip. unix dom sock has less overhead/latency. 2013-09-21 15:42:54 -04:00
adarqui
2fc569715c hiredis & underscore packages 2013-09-21 15:26:52 -04:00
Julian Lam
3eb594df43 fixing timestamps in category view (topics listing) for noscript 2013-09-20 20:48:14 -04:00
Julian Lam
8243019a60 closed #312 2013-09-20 20:43:02 -04:00
psychobunny
5a10f7fcfe init variables in translator 2013-09-20 17:31:53 -04:00
psychobunny
5e89caf358 internationalization: topic.json 2013-09-20 17:16:01 -04:00
psychobunny
35b40ef650 internationalization: unread.tpl 2013-09-20 17:03:30 -04:00
psychobunny
56b7d6cb7c internationalization: users 2013-09-20 17:00:33 -04:00
psychobunny
8b8a890ac9 removed unnecessary warning message to anonymous users attempting to unfavourite posts 2013-09-20 16:57:25 -04:00
psychobunny
5645bcee2d topic.json en lang; tested serverside internationalization in favourites; fixed some keys in login 2013-09-20 16:43:50 -04:00
psychobunny
a631707db4 app.js + todo 2013-09-20 16:02:25 -04:00
psychobunny
451ffafb9e finished initial client side & server side language parsing methods; integrated preloading into ajaxify and server app.js 2013-09-20 16:01:52 -04:00
psychobunny
b5274a0d91 init 2013-09-20 14:35:32 -04:00
Baris Soner Usakli
db4dc03abc added timeago to unread page 2013-09-19 20:49:52 -04:00
Baris Soner Usakli
6be5bcc4c8 closes #308 2013-09-19 20:43:56 -04:00
Baris Usakli
21efda4a84 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-19 16:40:11 -04:00
Baris Usakli
082375f129 link fade outs 2013-09-19 16:40:02 -04:00
Julian Lam
1204859263 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-19 16:38:20 -04:00
Julian Lam
c8b5d1561e minor CSS fixes to post timeago text in topic view 2013-09-19 16:38:04 -04:00
Baris Usakli
6912e77d25 removed data-pid from buttons 2013-09-19 16:25:51 -04:00
Baris Usakli
d84d096e7e added post links 2013-09-19 16:24:30 -04:00
Baris Usakli
29c17fd32e fixed user infinite loading 2013-09-19 15:50:28 -04:00
Baris Usakli
d721320af5 added jquery.timeago.js 2013-09-19 15:10:03 -04:00
Baris Usakli
efef9c864c closes #306 2013-09-19 15:02:35 -04:00
Baris Usakli
27cb837b08 closes #303 2013-09-19 12:29:25 -04:00
psychobunny
047fcbe63f style revert for cerulean 2013-09-18 17:06:32 -04:00
psychobunny
dbe0b1551b creating a separate theme for my metro ui shenanigans, follow up revert on cerulean incoming 2013-09-18 17:02:26 -04:00
psychobunny
8f7b047b7a fixed padding in category-box 2013-09-18 16:58:12 -04:00
psychobunny
a38ace0df9 moved metro slide animation out of vanilla into cerulean, and rejigged the home page a bit 2013-09-18 16:56:34 -04:00
psychobunny
0b0b06e8b9 fixed users.tpl from fail merge earlier 2013-09-18 16:31:02 -04:00
psychobunny
f83b61903a screwing around with animations in cerulean; started modernui look and feel 2013-09-18 16:25:32 -04:00
Julian Lam
881fa41bb7 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-18 16:25:23 -04:00
Baris Usakli
f9442db96f closes #284 2013-09-18 16:23:08 -04:00
Julian Lam
64521494ce removed outdated socket.io client libs (socket.io package adds these routes anyway) 2013-09-18 16:22:35 -04:00
Julian Lam
e75e3399ab added link to upgrade instructions 2013-09-18 16:06:51 -04:00
Baris Usakli
e5ef498164 merged users.tpl 2013-09-18 16:05:01 -04:00
Baris Usakli
24e4be77d8 closes #304 2013-09-18 16:01:54 -04:00
psychobunny
0d55f2ef32 cerulean: switched to lucida grande / tahoma 2013-09-18 14:47:38 -04:00
psychobunny
8ec3371139 cerulean theme: new users view 2013-09-18 12:45:31 -04:00
Julian Lam
ccca4d2914 fixed issue where meta was called before nconf loaded 2013-09-18 12:15:29 -04:00
psychobunny
28704a6164 hinting 2013-09-18 10:50:02 -04:00
psychobunny
cf4ba9d1d3 format/jshint favourites.js 2013-09-18 10:44:54 -04:00
Julian Lam
c69e30c146 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-18 07:23:50 -04:00
psychobunny
fd32d75d3b jshinted categories.js 2013-09-17 15:54:08 -04:00
psychobunny
afa228fd91 jshint: temporarily setting unused flag to false, low priority right now compared to the rest of our issues 2013-09-17 15:49:07 -04:00
psychobunny
a01a7ae5fc fixed following.tpl and followers.tpl layout (broken from BS3 merge) 2013-09-17 15:46:22 -04:00
psychobunny
64b071f277 nconf and redis wrapper no longer global objects. jshinted app.js. updated sockets.io to latest 2013-09-17 15:38:57 -04:00
Julian Lam
af246ad0d7 Merge remote-tracking branch 'origin' 2013-09-17 15:14:15 -04:00
Julian Lam
56a87329ec removing extra line 2013-09-17 15:14:11 -04:00
Baris Usakli
eddddc694d closes #302 2013-09-17 14:37:01 -04:00
Baris Usakli
ce61138351 fixed conflicts 2013-09-17 13:42:07 -04:00
Baris Usakli
564662ee00 closes #294 2013-09-17 13:37:03 -04:00
psychobunny
678db837fd refactored post-block 2013-09-17 13:29:45 -04:00
psychobunny
c789f4230d formatted app.js, updated jshintrc to include node 2013-09-17 13:15:36 -04:00
psychobunny
1b9e451a6f formatting - server side admin 2013-09-17 13:10:58 -04:00
psychobunny
1780b343b4 formatting - routes 2013-09-17 13:10:14 -04:00
psychobunny
aea3181d27 formatting - server side core 2013-09-17 13:09:37 -04:00
psychobunny
c44461e33f formatting - template js admin side 2013-09-17 13:07:30 -04:00
psychobunny
221b9bc149 formatting - template associated js 2013-09-17 13:05:54 -04:00
psychobunny
dc41c6bc0d formatting - core client side 2013-09-17 13:04:40 -04:00
psychobunny
828d937dec .jsbeautify 2013-09-17 13:03:53 -04:00
psychobunny
cf889cfe25 .jshintrc, massive dehinting adventure to follow 2013-09-17 12:59:04 -04:00
psychobunny
6bab2523d5 fixes #276 popup alert appearing under admin content 2013-09-17 12:55:20 -04:00
psychobunny
d714b5c592 editorconfig end_of_line 2013-09-17 12:54:03 -04:00
psychobunny
08316496cd fixes #289 recent page not responsive 2013-09-16 13:53:11 -04:00
psychobunny
d5fd985f0d applied previous commit to default theme instead 2013-09-16 13:50:14 -04:00
psychobunny
eab7839195 fixes #298 footer flash onload 2013-09-16 13:48:32 -04:00
Julian Lam
18717dd6f5 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-15 20:52:05 -04:00
Julian Lam
d249f411f8 closed #300 - issue where web socket connections were not working properly
with passworded redis instances
2013-09-15 20:51:36 -04:00
psychobunny
b85e2545d6 fixes #299 2013-09-15 16:32:30 -04:00
Julian Lam
79280b195e changed get_uid_by_userslug to be error-first 2013-09-15 10:15:23 -04:00
Julian Lam
4a18728e19 closed #297 2013-09-15 10:11:29 -04:00
Julian Lam
b7498416fa fixing redisstore sessions with passworded redis stores 2013-09-15 09:23:48 -04:00
Julian Lam
49b201db0f added heroku support for dynamic port reading via process.env 2013-09-15 09:09:44 -04:00
Julian Lam
be4d6761b1 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-15 07:58:07 -04:00
Julian Lam
c01ba1a3cb closed #296 2013-09-15 07:58:02 -04:00
Baris Soner Usakli
af59ff3209 closes #286, closes #287 2013-09-14 22:28:50 -04:00
Baris Soner Usakli
b0a37c6ac5 closes #293 2013-09-14 22:04:03 -04:00
Julian Lam
8b3fd9d1e9 fixed bug where deleted threads caused thread tools to disappear (js
error)
2013-09-14 11:44:06 -04:00
Julian Lam
95b16690e0 altering api route to use next() instead of echoing 404... 2013-09-14 11:01:28 -04:00
Julian Lam
f6b865a052 closed #292 2013-09-14 10:58:50 -04:00
Julian Lam
d1c756306a updates to allow dynamic addition of static directories provided by plugins 2013-09-13 11:10:17 -04:00
Julian Lam
ad5af8e123 updated screenshots for 0.0.6 2013-09-12 17:15:14 -04:00
psychobunny
ba89285c74 editorconfig; whitespace from favourites 2013-09-12 14:19:46 -04:00
psychobunny
43c0c2ec2a fix for favouriting 2013-09-12 14:16:13 -04:00
psychobunny
a277104ad5 dehinted favourites.js 2013-09-12 14:13:00 -04:00
psychobunny
84afffc761 categories.js jshinted 2013-09-12 14:07:29 -04:00
Julian Lam
5e5680fd13 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-12 13:55:45 -04:00
Julian Lam
727da38fb6 fixing issue where upgrade path only applies db fixes to default redis host and port 2013-09-12 13:55:38 -04:00
Baris Soner Usakli
79096cfdce online count fix for anon users 2013-09-12 13:10:14 -04:00
Baris Soner Usakli
a848f82b8f fix for upgrade script 2013-09-12 12:44:18 -04:00
Julian Lam
71bdd4608b removed defunct installation routes 2013-09-12 12:38:46 -04:00
Julian Lam
f04a948152 Merge pull request #282 from vincentbriglia/master
User search in non-admin removes search header/input
2013-09-12 09:17:33 -07:00
Vincent Briglia
15be3e52ae Merge remote-tracking branch 'upstream/master' 2013-09-12 16:05:43 +00:00
Vincent Briglia
b1003e954e user search shouldn't replace the whole top-level userbox 2013-09-12 16:04:04 +00:00
Julian Lam
f2b9a7ff0c Merge pull request #279 from vincentbriglia/master
isEmailAvailable returns inverted value
2013-09-12 06:39:53 -07:00
Vincent Briglia
19ad9ab224 inverted value required, double exclamation mark just casts as boolean 2013-09-12 13:37:03 +00:00
Vincent Briglia
8eae8a4fb5 !undefined = true
!!undefined = false
!!!undefined = true

!false = true
!!false = false
!!!false = true

!true = false
!!true = true
!!!true = false

when using isEmailAvailable (positive) in correlation with exists (positive) make sure that the outcome is a positive return (and not an inverted)
2013-09-12 13:07:00 +00:00
Baris Usakli
85fbe38e71 fixed to icon selection in admin/categories 2013-09-11 16:44:40 -04:00
Baris Usakli
e896fd1fd6 show created category right away 2013-09-11 16:20:00 -04:00
Baris Usakli
916150de01 closes #228 2013-09-11 16:04:34 -04:00
Julian Lam
732204f11b Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-11 15:41:48 -04:00
Julian Lam
1df50ff855 updated topic viewing so that markAsRead marks any relevant notifications read (issue #219) 2013-09-11 15:41:20 -04:00
psychobunny
11042858b8 Merge pull request #277 from designcreateplay/theme/cerulean
theme/cerulean
2013-09-11 12:31:00 -07:00
Baris Usakli
89ca2319f5 removed console.log 2013-09-11 15:28:20 -04:00
psychobunny
2f4fd310bd moved everything into the header class 2013-09-11 15:27:46 -04:00
Baris Usakli
6d7919ad85 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-11 15:24:15 -04:00
Baris Usakli
59467c906d misc fixes 2013-09-11 15:24:01 -04:00
psychobunny
def871ac89 fixed overlapping text in topic text-title 2013-09-11 15:21:23 -04:00
psychobunny
6fe5a93a73 header updates 2013-09-11 15:08:08 -04:00
psychobunny
7796c9269c cleaned up unread.tpl 2013-09-11 14:57:59 -04:00
psychobunny
ec150d4a4c removed unnecessary markup from users 2013-09-11 14:53:31 -04:00
psychobunny
49abff1609 moved footer style into cerulean 2013-09-11 14:49:31 -04:00
psychobunny
be59c16aad updated footer to follow standards 2013-09-11 14:47:58 -04:00
Julian Lam
f1144f3a7e Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-11 14:41:30 -04:00
Julian Lam
9ebff816dc fixing error where sometimes the admin panel js was not loaded 2013-09-11 14:41:08 -04:00
psychobunny
4c3eacd745 fixed footer markup 2013-09-11 14:37:43 -04:00
Baris Usakli
325e402d0f Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-11 13:53:51 -04:00
Baris Usakli
251587cb86 return err form updateProfile 2013-09-11 13:53:42 -04:00
Julian Lam
9fb1f8acf8 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-11 13:49:46 -04:00
Julian Lam
cffbc76da1 closed #275, refactored configs to use new method "list", which returns error first 2013-09-11 13:49:17 -04:00
Baris Usakli
be51025048 the online count on the footer uses the websockets now, it should also instantly update when people come online or go offline, #273 2013-09-11 13:24:16 -04:00
Baris Usakli
ae6f9fc87c changed notifications to use relative path 2013-09-11 13:04:04 -04:00
Baris Usakli
e61a7bff65 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-11 13:03:12 -04:00
Baris Usakli
bb14881b63 change getUserData to return err 2013-09-11 13:02:55 -04:00
Julian Lam
a7f1bfa7c9 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-11 12:55:34 -04:00
Julian Lam
7b3384a6be fixing some bad logic in app starting 2013-09-11 12:55:29 -04:00
Baris Usakli
efa8717fc5 getMultipleUserFields returns err now 2013-09-11 12:49:54 -04:00
psychobunny
9e42cee87c modules/taskbar.less, more cleanup of style 2013-09-11 12:34:56 -04:00
psychobunny
9fe30b905b modules.less, moved postWindow out. clean up unused css in style 2013-09-11 12:24:10 -04:00
Julian Lam
2fc9afa4f4 updated default category descriptions 2013-09-11 11:22:22 -04:00
psychobunny
732c8b1f7f header, footer,.. started cleaning up style (the big 'un) 2013-09-10 17:12:07 -04:00
psychobunny
19be3bc55c serious clean up of topic.less 2013-09-10 16:36:47 -04:00
Julian Lam
8a7e2577aa Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-10 16:26:38 -04:00
Julian Lam
e32494879c closed #270 2013-09-10 16:26:26 -04:00
psychobunny
ac4803961a topic cleanup and begin cerulean port 2013-09-10 15:50:21 -04:00
psychobunny
de8d6d3c8c category, removing deprecated thread-rating 2013-09-10 15:13:59 -04:00
psychobunny
392b80fe14 home.less 2013-09-10 15:10:51 -04:00
psychobunny
9fa75a8b45 init - cerulean theme 2013-09-10 15:02:03 -04:00
psychobunny
b19097ab8f moved .less files into the vanilla theme folder 2013-09-10 14:23:46 -04:00
psychobunny
31624b32e9 footer no longer overlaps composer; fixes 272 2013-09-10 13:16:10 -04:00
Julian Lam
b8b6558f53 deleting and restoring posts and topics now update the corresponding RSS feeds
fixed #257
2013-09-10 12:34:48 -04:00
Julian Lam
a53e75aeaa closed #271 2013-09-10 11:25:19 -04:00
Baris Usakli
7798004568 fixed active_users not deleting over 10 2013-09-09 16:27:16 -04:00
Baris Usakli
63873575a5 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-09 15:09:15 -04:00
Baris Usakli
9845df4d1b another fix to path in image upload 2013-09-09 15:09:05 -04:00
psychobunny
462d5f5d05 spacing between pin/lock icons in cat view 2013-09-09 14:34:39 -04:00
psychobunny
1d860923d0 booleanifying the isAdmin return... now we're admins again! :) 2013-09-09 14:31:22 -04:00
Baris Usakli
c9a3fac654 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-09 14:29:50 -04:00
Baris Usakli
a1c9685b49 fixed image upload, delete temp file if there is error 2013-09-09 14:29:40 -04:00
psychobunny
c16c4aac44 console.log 2013-09-09 14:17:11 -04:00
psychobunny
e80ff9c551 moved RSS icon away from the sharing buttons (category view); added back RSS icon to topic view. closes #259 2013-09-09 14:08:30 -04:00
psychobunny
3176ccc6e3 fixed footer flickering 2013-09-09 14:00:11 -04:00
Baris Usakli
b24196be36 closes #269 2013-09-09 13:37:50 -04:00
Baris Soner Usakli
52365a9755 upgrade user checks for undefined data 2013-09-07 19:12:49 -04:00
Julian Lam
41bea9f50c adding upgradeAdmin method to upgrade script -- pending fix to upgradeUsers 2013-09-07 19:01:17 -04:00
Julian Lam
3416c7bb3c Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-07 15:49:35 -04:00
Julian Lam
ce126b11fb fixes to administrator methods 2013-09-07 15:49:23 -04:00
Baris Soner Usakli
99db8fc3fe fixed admin/users page events and buttons 2013-09-07 15:48:38 -04:00
Julian Lam
780cec2596 missing alert-warning class in plugins admin page 2013-09-07 11:55:35 -04:00
Julian Lam
d3b4cb71c0 resolved race condition in plugin auto-enabling (not much of a race... I'd
always lose!!)
2013-09-07 11:53:55 -04:00
Julian Lam
1758c3e3f2 fix for admin templates 2013-09-07 11:51:37 -04:00
Julian Lam
995fa7d6fd interim commit -- enabling default plugins on setup 2013-09-07 11:45:04 -04:00
Julian Lam
87abe426d8 fixing 'use_port' to save into config as boolean 2013-09-07 11:29:26 -04:00
Julian Lam
bec0b46a2c refactoring installation scripts to use node prompt module, lots of other fixes
fixed #263, fixed #264, fixed #265
2013-09-07 10:40:20 -04:00
Baris Soner Usakli
a88ddc2a4d fixed image upload 2013-09-05 14:12:39 -04:00
Baris Soner Usakli
1f60578a63 closes #261 2013-09-05 12:18:51 -04:00
psychobunny
2f70489e22 outgoing links still BS2, fixed. 2013-09-05 23:55:57 +08:00
psychobunny
3b75734672 footer.less, added stats cards (ala soundsz) and replaced old footer 2013-09-05 23:28:15 +08:00
Julian Lam
ff4b35d6f1 minor bug with feed posttime if it was never edited 2013-09-04 14:16:11 -04:00
Julian Lam
e5b26fdad0 removing node-rss dep 2013-09-04 14:08:24 -04:00
Julian Lam
bcbcf40eae Merge branch 'feed_refactor' 2013-09-04 13:54:44 -04:00
Julian Lam
661fdfb43e bugfixing and allowing feeds to be generated on request (as opposed to just updated on posting 2013-09-04 13:52:28 -04:00
Julian Lam
31f08c49e7 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-04 13:36:33 -04:00
Julian Lam
2999d61ac9 minor fix... turning plugin libraries array into object 2013-09-04 13:36:25 -04:00
Baris Usakli
ca72a4b0fc fixed comma to semicolon 2013-09-04 12:13:36 -04:00
Julian Lam
164977972e totally derped commit 2013-09-03 23:42:26 -04:00
Julian Lam
b6fbfcc814 interim commit for new feed refactor 2013-09-03 23:18:25 -04:00
Julian Lam
418700ce3f changing info to warn when config file not found 2013-09-03 22:21:56 -04:00
Julian Lam
1d52557562 removing hook ordering message from non-development runs 2013-09-03 22:03:04 -04:00
psychobunny
45e24c54ce pagination scroll block fix + cleanup 2013-09-04 06:01:23 +08:00
psychobunny
abd909d23b pagination - scroll to top / bottom arrows 2013-09-04 04:50:51 +08:00
Julian Lam
f39932ece7 group join leave, and updating 2013-09-03 16:05:01 -04:00
Julian Lam
03fb649274 Merge branch 'master' into user_groups 2013-09-03 14:09:18 -04:00
Julian Lam
54e9e95076 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-03 13:20:49 -04:00
Julian Lam
201fb4d73e fixed #256 - where saving and retrieval of RSS feeds wasn't working on some instances due to a relative path being passed to read/writeFile 2013-09-03 13:20:19 -04:00
Baris Usakli
e0cc35ba66 creating topics shows up in user profile too issue #220 2013-09-03 13:19:51 -04:00
Baris Usakli
d3818e888e Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-03 13:11:44 -04:00
Baris Usakli
a2af4a3e91 closes #220 2013-09-03 13:11:34 -04:00
Julian Lam
02a02fa64c updated getTopicWithPosts to use a start and end option, and fixed issue with RSS feed saving (issue #256) 2013-09-03 13:11:21 -04:00
Julian Lam
9fae0d2505 removing dupe main post from posts array in topic noscript 2013-09-03 12:36:48 -04:00
Julian Lam
e23198bbcc Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-03 12:21:53 -04:00
Julian Lam
0a8c43901d more fixes to noscript 2013-09-03 12:21:48 -04:00
Baris Usakli
e9054301d1 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-09-03 12:18:38 -04:00
Baris Usakli
caaede7e84 added loading spinner to topic.tpl 2013-09-03 12:18:26 -04:00
Julian Lam
3ed9e1dd51 closed #253, closed #252 2013-09-03 12:17:55 -04:00
Julian Lam
207eccc505 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-03 11:48:39 -04:00
Julian Lam
45d5524df7 fixing minor errors in css in composer 2013-09-03 11:48:34 -04:00
Baris Usakli
1f08e407d1 closes #248 2013-09-03 11:45:15 -04:00
Baris Usakli
2c215afe33 closes #249 2013-09-03 11:29:56 -04:00
Julian Lam
d1d2b03dfd Merge branch 'master' into user_groups 2013-09-03 11:06:22 -04:00
Julian Lam
c1a41c6605 added hook priority to plugin hook registration 2013-09-02 21:53:15 -04:00
Julian Lam
d1a17b39ea allowing npm update of socket.io to newer version 2013-09-02 17:14:56 -04:00
Julian Lam
bf365bedfd pushing fix to issue where htmlfile transport for socket.io was causing
NodeBB to not work at all
2013-09-02 17:00:33 -04:00
Julian Lam
6a1ab47a08 hardcoding the exclusion of 'htmlfile' from web sockets, since it seems to
cause NodeBB to fail
2013-09-02 16:53:15 -04:00
Julian Lam
5fdaa6b0ee Merge branch 'master' into user_groups 2013-09-01 23:19:29 -04:00
Julian Lam
a6b0c2638a user list on group edit modal 2013-09-01 23:19:16 -04:00
Julian Lam
a671d08f0b updated readme - nginx not required 2013-09-01 19:17:40 -04:00
Julian Lam
5e869a5e5c Merge branch 'master' into user_groups 2013-09-01 16:14:24 -04:00
Julian Lam
0e6109ff2b a better conditional, just to please baris 2013-09-01 16:01:15 -04:00
Julian Lam
0bff6ee504 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-09-01 15:27:51 -04:00
Julian Lam
7cbe429be9 fixing issue with plugins trying to load 0 plugins and crashing 2013-09-01 15:27:45 -04:00
Baris Soner Usakli
09b578522f added prefic to less middleware 2013-09-01 15:21:28 -04:00
psychobunny
40897d0be6 themed reset.tpl and reset_code.tpl to BS3, closes #239 2013-08-31 03:46:48 +08:00
Baris Usakli
f49bc088fc Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-30 15:08:12 -04:00
Baris Usakli
7795a9ead2 fixed a crash 2013-08-30 15:07:58 -04:00
psychobunny
2c238f49e0 added search button, hiding the form by default. also fixes issue #241
notes: mobile needs a dedicated notification screen, imo, rather than
using the same popup. and /search needs a form on the page itself.
2013-08-31 02:59:50 +08:00
Baris Usakli
599789634a closes #227 2013-08-30 14:47:31 -04:00
Baris Usakli
77359f7b83 added space between user name and colon 2013-08-30 14:27:54 -04:00
Baris Usakli
7cff55a160 closes #209 2013-08-30 14:25:59 -04:00
Julian Lam
8d26eb4e07 minor stuff and such 2013-08-30 13:32:44 -04:00
Baris Usakli
ad5e3ebce3 closes #236 2013-08-30 12:36:06 -04:00
Baris Usakli
2deb0e1708 closes #238 2013-08-30 12:04:35 -04:00
Baris Usakli
b2f383f095 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-30 11:47:37 -04:00
Baris Usakli
22ababd87a closes #240 2013-08-30 11:47:26 -04:00
Julian Lam
167c1fa348 fixing topic CSS so the h3 styles only apply to the topic title 2013-08-30 11:43:46 -04:00
Baris Usakli
3b1bf67436 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-30 11:40:32 -04:00
Baris Usakli
d2eb73df96 can add and remove images from posts 2013-08-30 11:40:20 -04:00
Julian Lam
4d075efcd3 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-08-30 11:19:06 -04:00
Julian Lam
8a53c56a46 updated install script to only populate "socket" object in client config with "address", which takes "use_port" into account.
This closes #234
2013-08-30 11:18:15 -04:00
Julian Lam
73d4152d1d updated readme to add nginx version requirement 2013-08-30 11:07:44 -04:00
Julian Lam
c0a90bd677 interim commit 2013-08-30 07:43:47 -04:00
Baris Soner Usakli
106157a951 removed commented out line 2013-08-29 21:19:35 -04:00
Baris Soner Usakli
ab9cf6d036 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-29 21:18:34 -04:00
Baris Soner Usakli
54ba6efc93 can edit and add an image to a post, still cant remove previously added images #issue #233 2013-08-29 21:18:23 -04:00
Julian Lam
85ac4aac94 group creation and deletion 2013-08-29 14:55:30 -04:00
Baris Usakli
691b6611d0 user search uses reds now 2013-08-29 13:40:04 -04:00
Baris Usakli
1b33b4425b removed active from pill, #issue 231 2013-08-29 11:49:53 -04:00
Baris Usakli
41defbcf9c added delays to home page animations 2013-08-29 11:41:27 -04:00
Baris Soner Usakli
928594fc7c Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-28 22:08:54 -04:00
Baris Soner Usakli
cc1f668308 changed chat online offline messages 2013-08-28 22:08:46 -04:00
Julian Lam
f2b8813fb9 brain dumped groups lib 2013-08-28 22:06:55 -04:00
Julian Lam
5ed7c31278 removing console logs 2013-08-28 21:35:00 -04:00
Julian Lam
13b456bffd fixing up bs3 integration for themes page 2013-08-28 21:33:17 -04:00
Julian Lam
938dee481b Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-08-28 21:30:22 -04:00
Baris Soner Usakli
a69140faa9 show error message on failed login 2013-08-28 17:22:48 -04:00
psychobunny
6a5ebdb1ef fixed edit/delete/favourite buttons not working on subposts / topics 2013-08-29 05:06:22 +08:00
Julian Lam
ece4d083a5 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-08-28 16:33:09 -04:00
Julian Lam
96688a8ffe changing method to retrieve themes to use /node_modules 2013-08-28 16:32:59 -04:00
Baris Soner Usakli
e9b0aa537f center speech arrow 2013-08-28 16:32:45 -04:00
psychobunny
4052c3e817 Merge pull request #226 from designcreateplay/bootstrap3
Bootstrap3
2013-08-28 13:20:23 -07:00
psychobunny
4a6e838b18 updated new settings markup to bs3 2013-08-29 04:15:45 +08:00
psychobunny
3773f6b44f merge conflicts + updated search.tpl to BS3 2013-08-29 04:12:36 +08:00
psychobunny
a19e836d63 fixed taskbar, tabs were stacking vertically instead of horizontally 2013-08-29 04:03:36 +08:00
psychobunny
aa5e5f9cc0 fixed bootbox3 issue in categories 2013-08-29 04:00:43 +08:00
psychobunny
6647e75c77 updated bootbox to BS3 2013-08-29 03:45:15 +08:00
psychobunny
f85a514ee3 fixed a bug in ACP where you could accidentally delete or ban a user even if you clicked on cancel. 2013-08-29 03:43:14 +08:00
psychobunny
619dd84d81 help block text in picture uploader 2013-08-29 03:26:00 +08:00
psychobunny
f9fdfab19e accountedit.tpl -> modal updates for picture selector and uploader 2013-08-29 03:23:45 +08:00
psychobunny
ca46d0f8e1 fixed disconnect modal; fixed modal overlay BS3 issue 2013-08-29 03:14:43 +08:00
psychobunny
bb8f75b4be merged.. conflicted up the ass. registration looks gud again 2013-08-29 03:01:58 +08:00
Baris Soner Usakli
0db599a478 closes #205 2013-08-28 14:46:18 -04:00
Baris Soner Usakli
902e60fab2 added password settings to admin 2013-08-28 13:53:20 -04:00
Baris Soner Usakli
87f48e2cc9 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-28 13:48:05 -04:00
Baris Soner Usakli
cc55073107 issue #224 2013-08-28 13:47:52 -04:00
Julian Lam
96c43b4607 fixed #221 - issue where replies would not automatically refresh a post after editing 2013-08-28 12:29:15 -04:00
Julian Lam
f1b4367168 closed #180, closed #223 2013-08-28 11:00:34 -04:00
Julian Lam
4416f8530d matching connect-redis session with cookie ttl 2013-08-28 10:18:17 -04:00
Baris Soner Usakli
4e48ab2363 changed max age to milliseconds 2013-08-27 23:40:38 -04:00
psychobunny
b5a26696f8 fixed the chat modal 2013-08-28 04:36:14 +08:00
psychobunny
4307229ae0 added profile link and chat button fn to both user dropdowns 2013-08-28 04:09:53 +08:00
psychobunny
b681f01be9 fixed profile link in topic user dropdown menu 2013-08-28 03:56:34 +08:00
Baris Usakli
c262027728 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-27 15:55:48 -04:00
Baris Usakli
6a08fedf18 closes #210 2013-08-27 15:55:44 -04:00
psychobunny
e471b4edf5 category + recent replies layout rejigged 2013-08-28 03:43:05 +08:00
psychobunny
dd86812822 some BS2 buttons managed to escape my grasp.. until now. 2013-08-28 03:11:08 +08:00
psychobunny
ac311ab75d fixed derpy profile image size in /search 2013-08-28 03:08:05 +08:00
psychobunny
c9387313e2 ACP header and all admin pages BS3'd 2013-08-28 03:04:57 +08:00
Julian Lam
97641dbcda fixing teasers, that I broke in the last commit 2013-08-27 15:00:35 -04:00
Julian Lam
54fdbcd947 fixing broken category 2013-08-27 14:57:21 -04:00
psychobunny
7636e09284 admin hero-unit to jumbotron and updated welcome message to be slightly less embarassing 2013-08-28 02:35:07 +08:00
psychobunny
7666ed3010 fixed two bugs in admin, meta.buildTitle errors out because no notification icon is present; pagination element missing
& final less cleanup for today
2013-08-28 02:32:38 +08:00
psychobunny
e82a9ec37a more less cleanup 2013-08-28 02:25:17 +08:00
psychobunny
770d9e5b7c removed mobile menu markup + css, more cleanup 2013-08-28 02:19:59 +08:00
Julian Lam
5f0e0c993e adding localhost as default for email server 2013-08-27 14:16:56 -04:00
psychobunny
7be69b0b54 more cleanup, account.less, removed mobile sidebar functionality completely 2013-08-28 02:11:13 +08:00
psychobunny
251beb7f9b updated less to use .pointer mixin 2013-08-28 02:05:50 +08:00
Baris Usakli
1c27cbd90a Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-27 14:04:25 -04:00
Baris Usakli
4b4b26651a derp 2013-08-27 14:04:22 -04:00
Julian Lam
1a6ba8c230 fixed derpiness I introduced last commit 2013-08-27 14:04:09 -04:00
psychobunny
06904506d4 header.less, got rid of some unused css classes related to the original post window 2013-08-28 02:02:35 +08:00
psychobunny
62a28825f8 more css cleanup 2013-08-28 02:00:10 +08:00
psychobunny
c6c693acd2 some cleanup of topics.less 2013-08-28 01:58:56 +08:00
Julian Lam
8d04454457 closed #218 2013-08-27 13:52:30 -04:00
Baris Usakli
aeb831eeff closes #217 2013-08-27 13:47:19 -04:00
psychobunny
67db78ad66 styled topic's user dropdown 2013-08-28 01:44:41 +08:00
psychobunny
06809ab5fc got rid of a lot of junk markup and unused css classes; standardized the pulling of pid/uid across post.js code 2013-08-28 01:41:32 +08:00
Baris Usakli
08ba911738 closes #216 2013-08-27 13:38:09 -04:00
Baris Usakli
59f4b6788a Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-27 13:32:54 -04:00
Baris Usakli
a317a4d689 closes #206 2013-08-27 13:32:43 -04:00
psychobunny
6e164e61aa removed some unnecessary CSS 2013-08-28 01:30:43 +08:00
psychobunny
2098bf84a1 finished pagination for topic view 2013-08-28 01:23:19 +08:00
Julian Lam
860a83ba90 closed #212 2013-08-27 13:04:18 -04:00
Julian Lam
abce5fd120 refactored postTools.toHTML to fire post.parse hook, and removed auto-markdowning
closed #214
2013-08-27 12:50:15 -04:00
Julian Lam
0243e9c5be issue #214, preparing for addition of post.parse hook by renaming markdownToHTML to just "toHTML", and making it asynchronous. 2013-08-27 12:14:27 -04:00
Baris Usakli
8a4a0154f6 closes #211, closes #213 2013-08-27 12:10:23 -04:00
psychobunny
469a5221ed added postcount to topics return; started scrollspy behaviour for "postid / postcount" in topics. 2013-08-27 06:36:49 +08:00
psychobunny
f251b9c6c5 Merge branch 'master' into bootstrap3 2013-08-27 06:03:05 +08:00
Baris Usakli
c4228be86c bold active section in account page 2013-08-26 17:50:31 -04:00
psychobunny
94e565aa00 account pages done; 403; 404 2013-08-27 05:42:09 +08:00
psychobunny
cc6e028b1d fixed alert-notify (and blanks) to alert-warning 2013-08-27 05:16:49 +08:00
Julian Lam
d4d4c3cc92 0.0.6 2013-08-26 17:13:14 -04:00
psychobunny
33a69abece mark all as read button was unstyled 2013-08-27 05:11:39 +08:00
Julian Lam
3a12ba177a possibly fixing issue #202 again 2013-08-26 17:10:41 -04:00
psychobunny
6a4947533f fixed BS3 issue, navbar now centered; fixed topic view sub-post moderator tools layout 2013-08-27 05:07:52 +08:00
Julian Lam
28e1538fdb issue #203 2013-08-26 16:54:15 -04:00
psychobunny
879a31f51e had to remove hidden-xs from the footer - BS3's !important takes precedence over the fading animation and looks ugly (flex) 2013-08-27 04:51:29 +08:00
Julian Lam
eed66c099b fixing double notif error on new notif 2013-08-26 16:42:29 -04:00
psychobunny
49fc87e295 removed unnecessary css definitions (previous fixes for BS2), and fixed category width on mobile screens 2013-08-27 04:42:04 +08:00
Julian Lam
ece2edf579 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-08-26 16:37:37 -04:00
Julian Lam
1961f01cab possibly fixing issue #203 2013-08-26 16:37:22 -04:00
psychobunny
fe89f1f096 added a .hidden-mobile class for inline block elements. also removed button text on jumbotron for mobile devices 2013-08-27 04:37:16 +08:00
psychobunny
346681ba27 removed mobile menu until it can be pluginified. refactored topics UX a hell of a lot, looks much better on both desktop+mobile now. 2013-08-27 04:30:00 +08:00
Baris Usakli
4a214b6ef0 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-26 16:04:37 -04:00
Baris Usakli
dda429ab5d unread count shows total 2013-08-26 16:04:31 -04:00
Julian Lam
15feaafd68 attempting fix for #179, @barisusakli can you pull and test if this is still present? 2013-08-26 15:20:06 -04:00
Julian Lam
14e7907e06 closed #201 2013-08-26 14:56:00 -04:00
Baris Usakli
b4b483b35a removed console.log 2013-08-26 13:21:14 -04:00
Baris Usakli
79c9bdba7f removed console.log 2013-08-26 13:20:10 -04:00
Baris Usakli
a6837a7869 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-26 13:18:29 -04:00
Baris Usakli
0a485a7ff6 closes #109 2013-08-26 13:18:20 -04:00
Julian Lam
bca1602474 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-08-26 12:24:16 -04:00
Julian Lam
96ee0a2017 closed #184 2013-08-26 12:22:55 -04:00
Baris Usakli
25550e18d0 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-26 11:59:02 -04:00
Baris Usakli
154d0160bc closes #200 2013-08-26 11:58:52 -04:00
Julian Lam
aefa56221b closed #202 2013-08-26 11:56:28 -04:00
Baris Soner Usakli
dd40cbc139 check if topicData is valid 2013-08-24 18:51:24 -04:00
Baris Soner Usakli
23db2e5c9e better fix for #198 2013-08-24 18:47:10 -04:00
Baris Soner Usakli
eff1b174c0 closes #198 2013-08-24 18:43:06 -04:00
Baris Soner Usakli
545069b069 closes #199 2013-08-24 18:19:01 -04:00
psychobunny
13e13cd5a8 some changes to topic view + BS3 upgrade 2013-08-24 04:34:13 +08:00
Julian Lam
f767535ce5 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-08-23 16:25:22 -04:00
Julian Lam
aeebd069e2 fixing nconf issue where redis js was requiring redis configs before they were defined 2013-08-23 16:25:16 -04:00
psychobunny
0f8aad52b2 updated all alert-error to alert-danger (wtf did BS3 need to change that?) 2013-08-24 03:36:44 +08:00
psychobunny
b6a5cbf956 trim whitespace mode on 2013-08-24 03:30:34 +08:00
Julian Lam
d2aa2a9a29 derpiness 2013-08-23 15:22:26 -04:00
psychobunny
a482d4db5f fixed /recent, /unread 2013-08-24 03:10:15 +08:00
Julian Lam
d7eb30ccbd fuck git pt 2 2013-08-23 14:57:33 -04:00
Julian Lam
9bc12f28b4 fuck git 2013-08-23 14:55:25 -04:00
Julian Lam
4d11fba20a auto-focusing input on login screen 2013-08-23 14:30:58 -04:00
psychobunny
df15dceaef merging master to pull baris' latest fixes 2013-08-24 01:59:35 +08:00
Baris Usakli
cb6f587f24 closes #197 2013-08-23 13:45:57 -04:00
psychobunny
9f2e192993 jumbotron updates. I'll come back to fixing the button layout on mobile later 2013-08-24 01:27:12 +08:00
Baris Usakli
c647793512 meta config changes, refactors 2013-08-23 13:14:36 -04:00
psychobunny
d62f36c6a0 now /users looks as it should. made some tweaks to user search to improve UX as well 2013-08-24 01:11:50 +08:00
psychobunny
2427724868 navbar changes + logout screen + replaced hardcoded sitename on logout screen with breadcrumbs
note: perhaps breadcrumbs should be dynamically created in future
instead of copypasted everywhere.
2013-08-24 00:50:16 +08:00
psychobunny
9b35d8f8e1 migrating the rest of row-fluids to row 2013-08-24 00:44:27 +08:00
psychobunny
a859f4524c container-fluid to container 2013-08-24 00:43:38 +08:00
psychobunny
8be896aebb label-important to label-danger 2013-08-24 00:43:03 +08:00
psychobunny
a008cf971d register and login -> BS3 2013-08-24 00:38:40 +08:00
Julian Lam
caa057ff4d Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-08-22 14:42:13 -04:00
Julian Lam
43152bdaf9 closed #194 - refactoring of post creation so that, normalizing post
objects

also fixes julianlam/nodebb-plugin-mentions#1
2013-08-22 14:40:28 -04:00
Baris Soner Usakli
4cdb7ff32b closes #192 2013-08-22 13:47:07 -04:00
Julian Lam
7cbb01a78a making RDB available to plugins without require 2013-08-22 11:42:49 -04:00
Julian Lam
555eddff83 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-08-22 10:48:28 -04:00
Julian Lam
a3cab53b73 added username mentions plugin to default, and tweaked admin panel to show
plugins installed via npm
2013-08-22 10:47:24 -04:00
Baris Soner Usakli
454d5827fd overflow hidden on users recent posts 2013-08-22 10:18:17 -04:00
Baris Soner Usakli
186c426691 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-22 10:14:15 -04:00
Baris Soner Usakli
5e1e1ecf6f moved refreshTitle into load_template callback 2013-08-22 10:14:07 -04:00
Julian Lam
2d3d0f688a a couple minor 'tweaks' to the plugin system so that it works with npm installed plugins 2013-08-22 09:50:29 -04:00
Julian Lam
7975844e4d renamed two hooks and added filter:post.get hook 2013-08-21 22:40:47 -04:00
Baris Soner Usakli
f2b138510e removed console.log 2013-08-21 19:58:45 -04:00
Baris Soner Usakli
1c95ef4060 fix for infinite scroll crashing, issue #187 2013-08-21 19:57:11 -04:00
Baris Soner Usakli
b43e12a42a closes #187, closes #190 2013-08-21 19:21:49 -04:00
psychobunny
316077fffb category view starting to look like it should 2013-08-22 05:04:58 +08:00
psychobunny
4373037071 fixed composer window having 0 width; recent replies looks gud again 2013-08-22 04:05:48 +08:00
psychobunny
24e81c873c small user img-thumbnails changed to img-rounded 2013-08-22 03:55:31 +08:00
psychobunny
9e4a3905a0 moved most span12 and span9 over to BS3; img-polaroid to img-thumbnail 2013-08-22 03:39:43 +08:00
psychobunny
b54b4a6580 breadcrumbs don't need a container element anymore 2013-08-22 03:28:27 +08:00
psychobunny
f33a9c3941 updated hidden/visible device flags to BS3 2013-08-22 03:25:17 +08:00
psychobunny
d792798963 breadcrumbs 2013-08-22 03:22:33 +08:00
psychobunny
e5af4f6299 BS3 source files, damn you windows github 2013-08-22 03:18:03 +08:00
psychobunny
ef5bd9dc61 moved home categories into its own less file 2013-08-22 03:17:52 +08:00
psychobunny
8834feac65 BS3 sourcefiles + modified category row to new format. now mobile has two columns of categories, looks much neater. 2013-08-22 03:13:49 +08:00
psychobunny
2f70dd732d BS3 basic integration; btn-large to btn-lg (inc FA); navbar fixed 2013-08-22 02:57:18 +08:00
Baris Soner Usakli
3f793ae902 changed document.body.offsetHeight to .height() 2013-08-21 14:33:05 -04:00
Baris Soner Usakli
ac56f3a30a change document.body.scrollTop to .scrollTop() 2013-08-21 13:17:16 -04:00
psychobunny
e2ffac74bc added css classes to hide/show elements based on logged in status; hid unread category to anonymous users
added some general classes .nodebb-loggedin and .nodebb-loggedout for
toggling display based on user status
2013-08-22 00:40:37 +08:00
psychobunny
1c08ca54c5 added subtle glowing css animation to unread notification icon 2013-08-22 00:22:05 +08:00
psychobunny
f1547a7b1f added badge to header for unread topics count 2013-08-22 00:08:11 +08:00
psychobunny
746fa93c80 added API call for total unread topics; moved unread notification parsing to client side
also fixed a bug where the new notification icon glow would disappear on
page refresh even if there were existing notifications.
2013-08-21 23:34:35 +08:00
psychobunny
5ab1758d28 simple toaster popup on new notification 2013-08-21 23:08:51 +08:00
Julian Lam
2e4e1df3d9 closed #186 - infinite scroller not working in firefox 2013-08-20 22:36:46 -04:00
psychobunny
eded61d66e typo 2013-08-21 03:40:23 +08:00
psychobunny
d9360da9a5 default motd: removed version number and button text on mobile layouts 2013-08-21 03:37:48 +08:00
Baris Usakli
2b7a1b7515 changed the recursion to load posts to a while loop 2013-08-20 12:31:08 -04:00
Baris Usakli
1e66116e1d closes #181 2013-08-20 12:11:17 -04:00
Baris Soner Usakli
a95582b382 closes #183, closes #182 2013-08-20 00:50:59 -04:00
Baris Soner Usakli
7860cfdec3 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-20 00:26:58 -04:00
Baris Soner Usakli
30bbea9c74 closes #175 2013-08-20 00:26:50 -04:00
Baris Usakli
481105d6be reverted that back, it would take other users to the topic too 2013-08-19 14:54:11 -04:00
Baris Usakli
f939a632a6 take to topic after creation 2013-08-19 14:43:37 -04:00
Baris Usakli
c05f56d28c fix for category view when its empty 2013-08-19 14:28:51 -04:00
Baris Usakli
b844251587 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-19 14:03:31 -04:00
Baris Usakli
b9bd907a6b speech bubbles 2013-08-19 14:03:20 -04:00
psychobunny
17d86a2a35 force vertical scrollbar to prevent centering jumps during navigation 2013-08-20 01:50:19 +08:00
Baris Usakli
c70c67394a closes #171 2013-08-19 13:31:04 -04:00
Baris Usakli
92d3559146 closes #176 2013-08-19 11:56:40 -04:00
Baris Usakli
0e9a3c3a9f hide load more button if not topics are left 2013-08-19 11:02:31 -04:00
Baris Usakli
41263f0332 closes #178 2013-08-19 10:58:02 -04:00
Julian Lam
3747427538 updated readme to remove indiegogo info, and to add 0.0.5 screenshots 2013-08-19 10:13:18 -04:00
Baris Soner Usakli
b65554ca15 removed console.log 2013-08-16 17:04:41 -04:00
Baris Soner Usakli
00cb15d3c8 check if there is follow element 2013-08-16 17:04:08 -04:00
Baris Soner Usakli
6690f49c4e added profile views to users, little cleanup to use app.addCommasToNumbers 2013-08-16 13:03:56 -04:00
Baris Soner Usakli
ff805a704d closes #175 2013-08-15 17:03:43 -04:00
Baris Soner Usakli
f83be710a0 closes #172, #173, #174 2013-08-15 16:50:00 -04:00
Julian Lam
3933549659 committing fixes to composer window 2013-08-15 14:04:12 -04:00
Julian Lam
4993b74c23 Merge remote-tracking branch 'origin' 2013-08-15 11:40:53 -04:00
Julian Lam
76e7a98c88 style fixes to image-drop list in composer window 2013-08-15 11:40:41 -04:00
Baris Soner Usakli
999e98e43d add label to banned users, dont hide their posts 2013-08-14 17:42:36 -04:00
Baris Usakli
74af205426 banned users cant login, show error messages on failed logins 2013-08-14 15:49:56 -04:00
Baris Usakli
9ad82f4907 dont filter banned when searching if user is admin 2013-08-14 14:26:09 -04:00
Baris Usakli
2e6b37e018 wrapped search form in li 2013-08-14 13:56:06 -04:00
Baris Usakli
67070e335e removed console.log 2013-08-14 13:44:18 -04:00
Baris Usakli
22536e694c fixes wrong topics getting loaded into wrong categories 2013-08-14 13:43:42 -04:00
Baris Usakli
929282a2f7 ban users, closes #125, banning a user hides all posts topics of a user and their profile page becomes inaccessible 2013-08-14 13:32:07 -04:00
Baris Soner Usakli
b0092b68c6 closes #166 2013-08-13 17:29:16 -04:00
Baris Usakli
91446378bd require winston 2013-08-13 16:02:21 -04:00
Baris Usakli
dceec0ce46 more winston, issue #62 2013-08-13 16:00:24 -04:00
Baris Usakli
1856e394f3 more winston 2013-08-13 15:25:40 -04:00
Baris Usakli
8dc7a0dbbf changed favouriting to wait for socket call to end before changing star class 2013-08-13 15:05:35 -04:00
Baris Usakli
6e17ff7981 added winston, added wrapper for winston.error until they fix it, issue #62 2013-08-13 14:45:28 -04:00
Julian Lam
1d81f43249 0.0.5 2013-08-13 14:10:22 -04:00
Julian Lam
645d0f60e4 dropping back to 0.0.4 for republish of 0.0.5 2013-08-13 14:09:43 -04:00
Julian Lam
e1d7fed1b6 Merge pull request #167 from miduga/my-commits
Typo with ending bracket
2013-08-13 11:09:09 -07:00
Miguel Ángel Durán García
deff75ad06 Typo with ending bracket 2013-08-13 19:37:01 +02:00
Julian Lam
85fb03c0f5 0.0.5 2013-08-13 13:07:19 -04:00
Julian Lam
74445c3d30 temporarily dropping back to 0.0.4 for re-issue 2013-08-13 13:06:59 -04:00
Baris Usakli
ca3629d89b forgot to commit oops 2013-08-13 13:05:15 -04:00
Baris Usakli
16a95dd408 fixed welcome back message, it wasnt showing up in some cases 2013-08-13 12:58:07 -04:00
Julian Lam
b96084fb16 0.0.5 2013-08-13 12:14:11 -04:00
Julian Lam
c3c5f5ab92 closed #165 - issue where the site title was "undefined" if no title was set in the config, parenthesis issue 2013-08-13 12:10:07 -04:00
Baris Usakli
0fef0aa582 disable load more users button if there is not more users, dont show mark all read in unread if user isnt logged in 2013-08-13 11:39:19 -04:00
Baris Usakli
1894d0a469 moved confings into redis 2013-08-13 11:25:10 -04:00
Baris Usakli
259ba9b9b5 added post settings to admin page 2013-08-13 10:51:25 -04:00
Baris Soner Usakli
46afbc0ba0 assorted config fixes 2013-08-12 19:00:31 -04:00
Baris Soner Usakli
dd3b01dfed closes #144 2013-08-12 14:49:49 -04:00
Baris Soner Usakli
48bb1b06c2 no need to store container 2013-08-12 14:35:28 -04:00
Baris Soner Usakli
9fb63d45c1 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-12 14:33:02 -04:00
Baris Soner Usakli
ded0200355 upgraded userlist to 3 sorted sets, run node app -upgrade after updating to this commit, added infinite scrolling to all user pages, added ops per second to redis page, changed the percentage to 90% for infinite scrolling to kick in 2013-08-12 14:32:56 -04:00
Julian Lam
64b166ca8c Merge pull request #162 from miduga/my-commits
#161 - meta.js problem with empty config var
2013-08-12 09:17:32 -07:00
Miguel Ángel Durán García
33994ed638 #161 - meta.js problem with empty config var
If config is empty, give to it an empty object value.
2013-08-12 18:06:56 +02:00
Julian Lam
4457228903 closed #134 2013-08-11 16:41:49 -04:00
Julian Lam
f4573d23b5 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-08-11 16:13:04 -04:00
Julian Lam
e8f1d645fe closed #160
new build_title function to be called via socket

also added categories.getCategoryField and refactored all calls to
getTopicField to be error-first
2013-08-11 16:12:20 -04:00
Baris Soner Usakli
149e8ac78e Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-11 14:50:14 -04:00
Baris Soner Usakli
24b951ab5b added api route for 403 2013-08-11 14:50:12 -04:00
Julian Lam
04d94a7462 turns out it was working as intended(tm)
closed #158
2013-08-11 13:27:05 -04:00
Julian Lam
9bf8739841 removed debug comments 2013-08-11 13:23:41 -04:00
Julian Lam
26944ae686 addressed issue #158, where topic buttons in admin panel were not working
correctly
2013-08-11 13:22:48 -04:00
Julian Lam
dd6c9e03cb added message to admin panel if no themes are found 2013-08-11 13:13:44 -04:00
Julian Lam
45c10d75f3 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-08-11 13:10:11 -04:00
Julian Lam
272806a25d closed #159 - issue where theme listing would hang if a theme folder did
not contain theme.json

Also refactored theme socket event a bit
2013-08-11 13:09:27 -04:00
Julian Lam
27f874759e added message about using "forever" module to run production version of
nodebb
2013-08-11 12:45:44 -04:00
Baris Soner Usakli
e1d6b77eb1 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-10 16:20:28 -04:00
Baris Soner Usakli
0a7d41dafa updated reds to 0.2.4 2013-08-10 16:20:16 -04:00
Julian Lam
644fb375db Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-08-10 16:16:05 -04:00
Julian Lam
81f94c56e0 using hgetall instead of hkeys+asynchget, simplifying meta.js, closes #157 2013-08-10 16:15:58 -04:00
Baris Soner Usakli
50c34e4f33 added infinite scrolling to unread page, issue #141 2013-08-10 16:14:50 -04:00
Baris Soner Usakli
cbd34a4411 removed console.log 2013-08-09 20:45:12 -04:00
Baris Soner Usakli
244801a0bf added infinite loading to recent page, #141 2013-08-09 20:44:08 -04:00
Baris Soner Usakli
1cc8214d16 infinite scrolling for topics in category view, changed how topics are stored in categories, using sorted sets instead of sets now, if you update to this commit run node app --upgrade to upgrade the redis schema, #141 2013-08-09 20:03:19 -04:00
Baris Soner Usakli
04e0d075ec added upgrade file and nconf check 2013-08-09 15:17:50 -04:00
Julian Lam
917468d676 Merge pull request #156 from miduga/master
Remove unneded type tags for scripts
2013-08-09 07:34:42 -07:00
Miguel Ángel Durán García
1afc4f39a8 Remove unneded type tags for scripts
In HTML5 we can omit the type tag for scripts because it's useless in
javascript.

http://www.w3.org/html/wg/drafts/html/master/scripting-1.html#the-script
-element

"When used to include dynamic scripts, the scripts may either be
embedded inline or may be imported from an external file using the src
attribute. If the language is not that described by "text/javascript",
then the type attribute must be present, as described below. Whatever
language is used, the contents of the script element must conform with
the requirements of that language's specification."
2013-08-09 16:15:04 +02:00
Baris Usakli
02e707c3b5 removed console.log 2013-08-08 16:44:25 -04:00
Baris Usakli
34ce17e522 removed eventlisteners for scroll 2013-08-08 16:43:46 -04:00
Baris Usakli
a100eb1bb2 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-08 15:54:48 -04:00
Baris Usakli
b6281f020b removed console.logs 2013-08-08 15:54:39 -04:00
Julian Lam
78c1139ad9 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-08-08 15:05:00 -04:00
Julian Lam
08a45e40a2 fixed outgoing route to handle links with querystrings in it (using req.query instead of req.url). closes #154. 2013-08-08 15:04:22 -04:00
Baris Usakli
e979d1bf0d fixed home loading 2013-08-08 14:30:42 -04:00
Baris Usakli
e69928d624 strip tags in recent replies 2013-08-08 14:12:28 -04:00
Baris Usakli
8bc60be7c3 dont infinite load if there are no topics loaded 2013-08-08 14:00:40 -04:00
Baris Usakli
99ac782875 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-08-08 13:04:36 -04:00
Baris Usakli
c1c9d24ee5 deleted posts are collapsed clicking on them expands them, closes #138 2013-08-08 13:04:26 -04:00
Julian Lam
e2d0ca9669 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-08-08 13:04:11 -04:00
Julian Lam
661596e4cc updated reds package in package.json to accept any version in the 0.2.x branch 2013-08-08 13:03:54 -04:00
Baris Usakli
ac3fe1fc6f closes #93 2013-08-08 12:49:01 -04:00
Baris Usakli
0bd56196cf index topic titles too 2013-08-08 11:40:31 -04:00
Julian Lam
7251af56e3 refactored notifications library to mark all notifs read when the menu is
opened (closes #134)
2013-08-07 22:42:34 -04:00
Julian Lam
984ac21e52 updating notifications lib to not expose every method 2013-08-07 22:07:35 -04:00
Julian Lam
cb1258da9c removing aptana config file from repo 2013-08-07 21:42:39 -04:00
Baris Soner Usakli
f0759863e6 reindex all call 2013-08-06 15:46:15 -04:00
Baris Soner Usakli
0561710016 highlight search results 2013-08-04 14:48:36 -04:00
Baris Soner Usakli
8423684dee closes #145, fixed 404 not rendering 2013-08-04 14:08:05 -04:00
Baris Soner Usakli
6ff0c55dae swaped notif and search box 2013-08-03 20:57:03 -04:00
Baris Soner Usakli
d6b9a2799b full text search using reds, issue #142 2013-08-03 20:54:16 -04:00
Baris Soner Usakli
797d05a84a removed the other api_method routes 2013-08-02 14:29:40 -04:00
Baris Soner Usakli
a5acf31fc6 posts on user account page scroll to the post now 2013-08-01 18:00:32 -04:00
Baris Soner Usakli
23fcdde25e removed console.log and commented out code 2013-08-01 17:36:01 -04:00
Baris Soner Usakli
7297a26685 scroll to post 2 2013-08-01 17:27:37 -04:00
Baris Usakli
720dd9e960 scroll to posts 2013-08-01 16:11:00 -04:00
Baris Usakli
dbfd3c19a1 removed api_method route from user.js 2013-08-01 13:50:57 -04:00
Baris Soner Usakli
f20b7b5113 closes #133 2013-07-31 16:10:39 -04:00
Baris Soner Usakli
9f2838849e moved the imgur clientID to the server config file 2013-07-31 15:33:36 -04:00
Baris Soner Usakli
59381ee1d3 cleaned up webserver.js a bit, moved api routes to its own file, closes #54 2013-07-31 15:17:03 -04:00
Baris Soner Usakli
6fbecd00b0 allow - and space in username 2013-07-31 13:00:32 -04:00
Baris Soner Usakli
a0a1b14e2e only allow alphanumberic charactesr in username 2013-07-31 12:48:30 -04:00
Baris Soner Usakli
f4fdabd3ca changed to wrapper alert functions 2013-07-30 18:34:51 -04:00
Baris Soner Usakli
3f6f4e347d change some socket calls to use the callback, when user changes their email if they are using a gravatar picture it will be updated too, fixed email updating 2013-07-30 18:30:43 -04:00
Julian Lam
235553eaf6 Merge branch 'plugins'
Conflicts:
	src/posts.js
2013-07-29 16:01:00 -04:00
Julian Lam
1bee527f41 added note linking to wiki page for authoring plugins... also showing something if no plugins are installed 2013-07-29 15:57:14 -04:00
Julian Lam
3578ce1925 admin panel integration completion + styling of admin panel plugins page 2013-07-29 15:45:13 -04:00
Julian Lam
c2d7bf87e9 Merge branch 'plugins' of github.com:designcreateplay/NodeBB into plugins 2013-07-29 15:16:21 -04:00
Julian Lam
777173d9f4 adding admin panel integration to plugins (issue #143) 2013-07-29 15:15:49 -04:00
Julian Lam
0a3a970b52 fixed issue where if a hook had no attached methods, it wouldn't work at all... or put simply... nodebb'd break if you had no plugins, heh. 2013-07-29 15:14:41 -04:00
Baris Soner Usakli
b46d81e3e4 removed console.log 2013-07-29 13:37:16 -04:00
Baris Soner Usakli
3273c0558b anon users always see topics as unread 2013-07-29 13:33:54 -04:00
Baris Soner Usakli
6b2be772e7 removed test route 2013-07-28 18:31:20 -04:00
Baris Soner Usakli
78f462e1e6 added a new section that only shows unread topics, added mark all read button, closes #140 2013-07-28 18:27:49 -04:00
Julian Lam
871591b92d sanity check if a plugin's method was not found on hook call 2013-07-28 14:24:34 -04:00
Baris Soner Usakli
811d2df728 moved getTopicsByTids and getLatestTopics to topics.js 2013-07-28 14:02:50 -04:00
Julian Lam
307f6f34b9 added plugins.showInstalled method 2013-07-28 12:52:58 -04:00
Julian Lam
2d64c9979e sending pid as well as content in action:save_post_content hook 2013-07-28 03:01:58 -04:00
Julian Lam
34bb9dddb5 sticking to style guide for method names (camelcase) 2013-07-28 02:24:41 -04:00
Julian Lam
25a1d25108 tested filter-type hooks, working! :) 2013-07-28 01:37:40 -04:00
Julian Lam
ec4ab19a1e first pass at plugin system -- not tested! 2013-07-28 01:16:21 -04:00
Julian Lam
2e83ad448d added new plugins folder to repo 2013-07-27 21:45:51 -04:00
Baris Soner Usakli
b35ecd08ea use hasReadTopic 2013-07-27 13:59:14 -04:00
Baris Soner Usakli
d32b130d40 added function for marking all topics read #140 2013-07-27 13:05:03 -04:00
Baris Soner Usakli
cca83b9c5c bleh 2013-07-27 12:55:33 -04:00
Baris Soner Usakli
57a4741e9e show message if there are not recent topics 2013-07-26 15:49:03 -04:00
Baris Soner Usakli
23598361b8 closes #139 2013-07-26 15:04:18 -04:00
Baris Soner Usakli
3f8b3894d8 C:/Program Files (x86)/Git/recent shows only the last 24 hours 2013-07-26 14:48:16 -04:00
Julian Lam
557c6effdd updated screenshots for v0.0.4 2013-07-25 21:28:27 -04:00
Baris Soner Usakli
916b46618c another fix 2013-07-25 18:06:20 -04:00
Baris Usakli
2647666de6 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-07-25 17:02:06 -04:00
Baris Usakli
8cc3859e72 fixed for email visibility icon if data isnt set 2013-07-25 17:01:55 -04:00
Julian Lam
0ad9e84042 publishing 0.0.4 2013-07-25 16:35:10 -04:00
Baris Usakli
8f4d4664e4 changed class 2013-07-25 16:33:06 -04:00
Baris Usakli
6e5420fd64 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-07-25 16:20:28 -04:00
Baris Usakli
19b570cdcf closes #122 2013-07-25 16:20:18 -04:00
Julian Lam
eabba1cc1f swapped position of reply/quote button in main post in topic (#95) 2013-07-25 15:53:25 -04:00
Julian Lam
cb8c8f9e42 tweaked OG tags for topics 2013-07-25 15:49:55 -04:00
Julian Lam
7dbf18c1d0 removing authors from OG tags 2013-07-25 15:44:54 -04:00
Julian Lam
56dcdd0378 Merge branch 'master' of github.com:psychobunny/node-forum 2013-07-25 15:34:33 -04:00
Julian Lam
fe286870a3 closed #116 2013-07-25 15:34:22 -04:00
Baris Usakli
58ad74abb5 send new url when we are done 2013-07-25 15:26:35 -04:00
Baris Usakli
9160a135a9 changed to crop 2013-07-25 15:19:44 -04:00
Baris Usakli
6420e4c6a6 added this back, file extensions might change need to delete old pic 2013-07-25 14:51:31 -04:00
Baris Usakli
fa9c0e020a Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-07-25 14:44:52 -04:00
Baris Usakli
433c7d91eb some fixes 2013-07-25 14:44:43 -04:00
Julian Lam
2c95c19c9a Merge branch 'master' of github.com:psychobunny/node-forum 2013-07-25 14:37:14 -04:00
Julian Lam
c5f6a0d668 closed #95 2013-07-25 14:37:08 -04:00
Baris Usakli
3100bfcfd3 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-07-25 14:30:17 -04:00
Baris Usakli
472f40479e privacy page 2013-07-25 14:30:12 -04:00
Julian Lam
12e8423a24 closed #132 - issue where all auth routes were not rendering the header properly 2013-07-25 14:04:00 -04:00
Julian Lam
336345ee83 closed #137 2013-07-25 13:18:55 -04:00
Julian Lam
a2f46b9e59 updated app name (lowercase only) and added missing dep request 2013-07-25 13:09:11 -04:00
Julian Lam
1752be237b minor style changes to the composer (moved buttons to the bottom as well) 2013-07-25 12:36:43 -04:00
Baris Usakli
4260930523 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-07-25 12:31:03 -04:00
Baris Usakli
6af3b0ffc6 account settings 2013-07-25 12:30:59 -04:00
Julian Lam
53d001a751 Merge branch 'master' of github.com:psychobunny/node-forum 2013-07-25 12:30:46 -04:00
Julian Lam
5caf258238 fixing build_header refactor for user routes 2013-07-25 12:30:31 -04:00
Baris Usakli
5df7af6075 reset reconnect tries to 0 after a succesfull reconnect 2013-07-25 12:05:19 -04:00
Julian Lam
ce769a87ef refactored parallel to waterfall in topic and category routes (to allow
for better title generation)
2013-07-24 19:27:25 -04:00
Julian Lam
931beecc21 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-07-24 18:54:47 -04:00
Julian Lam
4588745b9a refactored all calls to app.build_header (in regular and auth routes) 2013-07-24 18:54:14 -04:00
Baris Soner Usakli
12d31517b0 removed console.log 2013-07-24 17:47:26 -04:00
Baris Soner Usakli
08e3eac008 closes #120 2013-07-24 16:29:17 -04:00
Baris Soner Usakli
5b349dbfaa more css 2013-07-24 15:46:18 -04:00
Baris Soner Usakli
370d931bc7 some css changes #95 2013-07-24 15:31:56 -04:00
Julian Lam
d6938f4818 first pass at a custom title function (not ready for prod) 2013-07-24 15:19:26 -04:00
Baris Soner Usakli
72a0082a28 admin user page fix, added routers for admin/users 2013-07-24 15:18:31 -04:00
Baris Soner Usakli
6865eb9f0f changed the drag and drop image upload, closes #108 2013-07-24 15:03:49 -04:00
Julian Lam
1f8f61d1d8 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-07-24 13:19:49 -04:00
Julian Lam
83b0b6a523 fixing issue with md parser 2013-07-24 13:19:36 -04:00
Baris Soner Usakli
744e4579b7 setUserFields 2013-07-24 13:12:56 -04:00
Baris Soner Usakli
2f00640b6b Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-07-24 12:57:44 -04:00
Baris Soner Usakli
cacc732015 fixed filename of first uploaded image, added a setUserFields method to user.js 2013-07-24 12:57:36 -04:00
Julian Lam
33e676b033 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-07-24 12:53:10 -04:00
Julian Lam
bea5dff563 fixed #31 - twitter profile picture now used as nodebb avatar in lieu of
email address for gravatar
2013-07-24 12:52:16 -04:00
Baris Soner Usakli
f7217f2d12 closes #130 2013-07-24 12:33:37 -04:00
Julian Lam
762cecf1c3 fixed #129 2013-07-24 12:04:32 -04:00
Julian Lam
42d1cade23 fixing websockets crash on server restart 2013-07-24 11:39:29 -04:00
Julian Lam
a990cf3e0d added missing "return" when a user creation doesn't pass all server-side
checks...
2013-07-24 11:26:49 -04:00
Julian Lam
10a42d4e08 minor var renaming 2013-07-24 11:25:14 -04:00
Julian Lam
24c235e360 fixed #128 - regression caused by removal of 'connect' package 2013-07-24 09:16:10 -04:00
Julian Lam
b5ecb9a762 removing dependency on package 'connect' 2013-07-24 01:43:39 -04:00
Julian Lam
ff065dcc2f Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-07-24 00:06:07 -04:00
Julian Lam
c5c6bcec4b closed #119 2013-07-24 00:05:58 -04:00
Julian Lam
6a12ecf8e7 Merge branch 'master' of github.com:psychobunny/node-forum 2013-07-23 17:22:26 -04:00
Julian Lam
cc1cc7cae4 first pass at meta tag construction abstraction (issue #116). Also addressed issue #118 2013-07-23 17:21:44 -04:00
Baris Soner Usakli
6e0c84f9e5 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-07-23 17:19:29 -04:00
Baris Soner Usakli
e7c9079449 anons cant follow, hide follow button if not logged in 2013-07-23 17:19:19 -04:00
Julian Lam
59029a0ef0 minor tweaks to theme engine 2013-07-23 16:43:02 -04:00
Baris Soner Usakli
bf6a38904a skip loading a topic if cant load its data 2013-07-23 14:44:13 -04:00
Baris Soner Usakli
6ab37bde09 closes #105 2013-07-23 13:17:54 -04:00
Baris Soner Usakli
8947553ecd closes #117 2013-07-23 12:35:45 -04:00
psychobunny
fe996f75b6 replaced the ascii > with the right chevron icon
http://fortawesome.github.io/Font-Awesome/icon/chevron-right/
2013-07-23 16:33:24 +08:00
psychobunny
45cb24fb53 UI: fixed recent replies in category sidebar 2013-07-23 16:18:56 +08:00
psychobunny
6f6a2e4127 closes #114. updated ajaxify to allow for get parameters to be passed in without issues. 2013-07-23 15:06:31 +08:00
Julian Lam
9e7afcf0ab fixing issue where navigating to a non-existant category_id caused NodeBB
to crash
2013-07-22 20:29:51 -04:00
Julian Lam
741a5843a1 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-07-22 20:08:28 -04:00
Julian Lam
84584a1b5b minor cleanup of header tpl 2013-07-22 20:08:18 -04:00
Baris Soner Usakli
96a779172b closes #106 2013-07-22 18:29:09 -04:00
Baris Soner Usakli
2237166e0f removed console.log 2013-07-22 17:59:49 -04:00
Baris Soner Usakli
85b0fe7175 images debug 2013-07-22 17:26:18 -04:00
Baris Soner Usakli
e9afd4a107 fixed broken view again 2013-07-22 17:08:07 -04:00
Baris Soner Usakli
667a102c8b added async.eachSeries to getCategories 2013-07-22 16:57:18 -04:00
Baris Soner Usakli
38aa5aa3e6 refactor to remove category_name and category_slug from topic hashes 2013-07-22 16:47:41 -04:00
psychobunny
676ffee459 removed text decoration from btn-link to match that of default nodebb anchors 2013-07-23 03:51:32 +08:00
Julian Lam
87baaacb8c Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-07-22 15:46:02 -04:00
Julian Lam
7a1e1b5b60 fixing issue where notifications toggle was causing an ajaxify 2013-07-22 15:45:40 -04:00
psychobunny
1e86f379d5 removed external link icon from signatures only 2013-07-23 03:34:45 +08:00
Julian Lam
93d4630433 Merge remote-tracking branch 'origin' 2013-07-22 15:31:31 -04:00
Julian Lam
123aac0862 limiting notification counts (issue #112) 2013-07-22 15:31:28 -04:00
psychobunny
240683ed24 merged conflicts. also fixed a potential issue where the external link icon would show up on internal links 2013-07-23 03:15:17 +08:00
psychobunny
e66cab23cf added a screening page for external links. removed forced target = _blank on external links for UX consideration
used http://www.deviantart.com/users/outgoing?http://www.nodebb.org/ for
inspiration
2013-07-23 03:07:27 +08:00
Julian Lam
48e14e9464 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-07-22 15:05:33 -04:00
Julian Lam
712eec0872 re: issue #104, added external link icon to external links 2013-07-22 15:03:33 -04:00
Baris Usakli
f0df2289e6 i keep forgetting console.logs in commits :/ 2013-07-22 14:50:34 -04:00
Baris Usakli
22d954d01f fixed for broken category view, after topic move 2013-07-22 14:40:52 -04:00
Baris Usakli
d9fa78a866 again 2013-07-22 13:06:31 -04:00
Julian Lam
99ba792e6d changing all calls to marked to instead go through
PostTools.markdownToHTML
2013-07-22 12:58:10 -04:00
Julian Lam
f40bf46656 closed #104 - anchors now have rel="nofollow" and open in a new window 2013-07-22 12:44:50 -04:00
Julian Lam
104dbea3f2 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-07-22 12:11:46 -04:00
Baris Usakli
52110016c7 closes #107 2013-07-22 12:07:05 -04:00
Julian Lam
770fb6d33d Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-07-22 12:01:33 -04:00
Julian Lam
54c75024b5 css fixes to post window on mobile screens 2013-07-22 12:01:19 -04:00
Baris Usakli
676765278e closes #111 2013-07-22 11:16:16 -04:00
Julian Lam
667c331a67 refactored User.create in preparation for twitter compatibility (issue 2013-07-22 00:24:37 -04:00
Julian Lam
5e7da6391c fixed #100 - composer window obscuring half of the page 2013-07-21 23:47:11 -04:00
Julian Lam
9626232e3b some more tweaks to make dark themes work better 2013-07-21 23:34:22 -04:00
Julian Lam
81cfe0c8d0 Merge branch 'master' of github.com:designcreateplay/NodeBB
fixing missing height in post-window, removed for some reason

Conflicts:
	public/src/modules/composer.js
2013-07-21 23:27:07 -04:00
Baris Soner Usakli
e39868c08e fixed regex 2013-07-21 16:32:59 -04:00
Baris Soner Usakli
b25033be45 removed console.log 2013-07-21 16:17:39 -04:00
Baris Soner Usakli
7c31e12e6b removed debug console.logs 2013-07-21 16:16:59 -04:00
Baris Soner Usakli
863f471020 closes #103 2013-07-21 16:16:07 -04:00
Baris Soner Usakli
aa54ac8495 updated passport and passport-twitter 2013-07-21 15:07:11 -04:00
Baris Soner Usakli
0b7da34a03 possible fix for #101 2013-07-21 14:25:42 -04:00
Baris Soner Usakli
e437b4df66 removed commented out code 2013-07-21 13:58:41 -04:00
Baris Soner Usakli
919efd4052 drag and drop image upload first pass 2013-07-21 12:29:57 -04:00
Julian Lam
6f759e840e Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-07-21 02:34:21 -04:00
Julian Lam
a66f2dfabe minor tweaks to positioning of composer window relative to taskbar 2013-07-21 02:34:04 -04:00
Julian Lam
7619fec78d fixing compatibility with dark themes 2013-07-21 02:29:53 -04:00
Julian Lam
18c991fd42 restyling composer window to be smaller widthwise
attempted to fix vertical-alignment of post_window relative to taskbar
2013-07-21 02:16:58 -04:00
Julian Lam
a6460169d4 - removing underline from composer style shortcut button grouping 2013-07-21 01:43:14 -04:00
Baris Soner Usakli
f7291631d8 when a post is restored update topic timestamp 2013-07-20 16:59:53 -04:00
Baris Soner Usakli
eec5249eb6 possible fix for wront sorting on /recent 2013-07-20 16:01:44 -04:00
Baris Soner Usakli
93c6228347 handle err 2013-07-20 15:23:04 -04:00
Julian Lam
97a70b808e Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-07-20 11:19:24 -04:00
Julian Lam
782858c728 added dynamically generated robots.txt 2013-07-20 11:19:08 -04:00
Baris Soner Usakli
343aba9eff added relative path to image upload url 2013-07-20 00:10:45 -04:00
Julian Lam
0b545c7056 removing extra console log... 2013-07-19 23:58:30 -04:00
Julian Lam
3c4b2c8075 fixed oddities in base_url and url generation for subdirectoried instances
of NodeBB
2013-07-19 23:56:30 -04:00
Baris Usakli
e5301deea2 more async in categories 2013-07-19 16:13:00 -04:00
Baris Usakli
ff9990701b changed to async.eachSeries 2013-07-19 15:26:29 -04:00
Baris Usakli
c1b170ec86 removed anchor around recent posts on account page 2013-07-19 12:03:54 -04:00
Baris Usakli
78358a8ccd forgot ] 2013-07-19 11:02:21 -04:00
Baris Usakli
04bc0cd2c9 oops 2013-07-19 10:59:52 -04:00
Baris Usakli
a4de1b247f decrease/increase post count on post deletion/restore 2013-07-19 10:59:24 -04:00
Baris Usakli
3adddf44ca removed console.log 2013-07-19 10:37:18 -04:00
Baris Usakli
68c011ce63 recent replies link to user and topic 2013-07-19 10:36:42 -04:00
Baris Soner Usakli
2f20831d25 removed extra ; oops 2013-07-18 15:45:17 -04:00
Baris Soner Usakli
7ff6cd9cb2 closes #99 2013-07-18 15:44:42 -04:00
Baris Soner Usakli
285e19fbbf closes #97 2013-07-18 15:14:06 -04:00
Baris Soner Usakli
f90eb72706 added minimum lengths into error messages 2013-07-18 14:50:58 -04:00
Baris Soner Usakli
f7d27cdef1 nconf fixes 2013-07-18 14:47:41 -04:00
Baris Soner Usakli
4d670006e1 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-07-18 13:50:45 -04:00
Baris Soner Usakli
65029ae169 content length changes 2013-07-18 13:50:42 -04:00
Julian Lam
d0c4302d24 removing non-existant unit tests from admin template, and setting admin theme to always be the bootstrap default (so errant themes don't render the admin panel useless) 2013-07-18 12:04:29 -04:00
Julian Lam
800ac86014 committing missing file pertaining to issue #96 2013-07-17 22:38:55 -04:00
Julian Lam
1fa900e615 added sitemap.xml to routes, closes #96 2013-07-17 22:35:16 -04:00
Julian Lam
6e91810231 introduction of theme engine parsing (themes go in /public/themes!) 2013-07-17 16:17:19 -04:00
Julian Lam
936d29d907 Merge branch 'master' of github.com:psychobunny/node-forum 2013-07-17 16:14:23 -04:00
Julian Lam
44f9fe9f6c fixing issue where the email check always failed... whoops! 2013-07-17 16:13:53 -04:00
Baris Usakli
ca81732661 show correct version on admin/index 2013-07-17 16:09:01 -04:00
Baris Usakli
03d3f59804 change to async.each for addUserInfoToPosts 2013-07-17 15:48:09 -04:00
Baris Usakli
8369e2278f Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-07-17 12:58:02 -04:00
Baris Usakli
2bb4aab6ac changes to online users code 2013-07-17 12:57:57 -04:00
Julian Lam
a06123579b issue #94 2013-07-17 12:21:40 -04:00
Julian Lam
1e4424d656 issue #94 again 2013-07-17 12:17:52 -04:00
Julian Lam
d3541da9dd resolving regression introduced by errant install script (again) - issue 94 2013-07-17 12:15:40 -04:00
Julian Lam
2f1ef4c2a1 fixing regression introduced where the client-side config was incorrectly generated (resolves #94) 2013-07-17 12:05:24 -04:00
Julian Lam
f63be472be updated link to roadmap and added new screenshots for readme 2013-07-17 11:33:37 -04:00
Baris Usakli
4f9a2d0b93 content check in posts 2013-07-17 11:22:09 -04:00
Baris Usakli
8d21d4f998 closes #91 2013-07-17 10:45:16 -04:00
Baris Usakli
582cd2f011 closes #89 2013-07-17 10:05:29 -04:00
Julian Lam
ed967a0e2f applied minor suggestion suggested by @damianb in issue #24
closed #88 (regression due to text selection enhancement)
2013-07-17 01:02:28 -04:00
Julian Lam
3feb977cc4 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-07-16 21:13:02 -04:00
Julian Lam
c2e9cd621d issue #57, just for Damian :) 2013-07-16 21:12:40 -04:00
Baris Soner Usakli
9e5ecf0ae8 Merge branch 'master' of https://github.com/designcreateplay/NodeBB 2013-07-16 20:30:54 -04:00
Baris Soner Usakli
cf5f9ad9bd share links wont refresh page 2013-07-16 20:30:46 -04:00
Julian Lam
7cdef19b94 issue #57 again - tightened the regex a bit more (escaped the dot) 2013-07-16 16:38:35 -04:00
Julian Lam
0553254a9b closed #57 2013-07-16 16:37:37 -04:00
Julian Lam
8234294be8 Merge branch 'master' of github.com:designcreateplay/NodeBB 2013-07-16 16:37:13 -04:00
Baris Soner Usakli
62919894b4 removed the bcrypt question from install, changed default to 12 2013-07-16 16:33:18 -04:00
Baris Soner Usakli
dd4ee28d26 removed ajaxify.enable, closes #85 2013-07-16 16:21:12 -04:00
Baris Soner Usakli
a5b324cbc4 closes #86 2013-07-16 16:19:50 -04:00
274 changed files with 39013 additions and 23106 deletions

4
.editorconfig Normal file
View File

@@ -0,0 +1,4 @@
root = true
[*.js, *.css, *.tpl]
indent_style = tab

17
.gitignore vendored
View File

@@ -1,12 +1,21 @@
#################
## npm
#################
npm-debug.log
node_modules/
sftp-config.json
config.json
public/src/nodebb.min.js
public/config.json
public/css/*.css
*.sublime-project
*.sublime-workspace
.project
.idea
*.swp
Vagrantfile
.vagrant
provision.sh
*.komodoproject
feeds/recent.rss
# winston?
error.log

17
.jsbeautifyrc Normal file
View File

@@ -0,0 +1,17 @@
{
"indent_size": 4,
"indent_char": " ",
"indent_level": 0,
"indent_with_tabs": true,
"preserve_newlines": true,
"max_preserve_newlines": 10,
"jslint_happy": true,
"brace_style": "collapse",
"keep_array_indentation": false,
"keep_function_indentation": false,
"space_before_conditional": true,
"break_chained_methods": false,
"eval_code": false,
"unescape_strings": false,
"wrap_line_length": 0
}

86
.jshintrc Normal file
View File

@@ -0,0 +1,86 @@
{
// JSHint Default Configuration File (as on JSHint website)
// See http://jshint.com/docs/ for more details
"maxerr" : 50, // {int} Maximum error before stopping
// Enforcing
"bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.)
"camelcase" : false, // true: Identifiers must be in camelCase
"curly" : true, // true: Require {} for every new block or scope
"eqeqeq" : true, // true: Require triple equals (===) for comparison
"forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty()
"immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());`
"indent" : 4, // {int} Number of spaces to use for indentation
"latedef" : false, // true: Require variables/functions to be defined before being used
"newcap" : false, // true: Require capitalization of all constructor functions e.g. `new F()`
"noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee`
"noempty" : true, // true: Prohibit use of empty blocks
"nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment)
"plusplus" : false, // true: Prohibit use of `++` & `--`
"quotmark" : false, // Quotation mark consistency:
// false : do nothing (default)
// true : ensure whatever is used is consistent
// "single" : require single quotes
// "double" : require double quotes
"undef" : true, // true: Require all non-global variables to be declared (prevents global leaks)
"unused" : false, // true: Require all defined variables be used TODO: Set this to true, update codebase.
"strict" : true, // true: Requires all functions run in ES5 Strict Mode
"trailing" : false, // true: Prohibit trailing whitespaces
"maxparams" : false, // {int} Max number of formal params allowed per function
"maxdepth" : false, // {int} Max depth of nested blocks (within functions)
"maxstatements" : false, // {int} Max number statements per function
"maxcomplexity" : false, // {int} Max cyclomatic complexity per function
"maxlen" : false, // {int} Max number of characters per line
// Relaxing
"asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons)
"boss" : false, // true: Tolerate assignments where comparisons would be expected
"debug" : false, // true: Allow debugger statements e.g. browser breakpoints.
"eqnull" : false, // true: Tolerate use of `== null`
"es5" : false, // true: Allow ES5 syntax (ex: getters and setters)
"esnext" : false, // true: Allow ES.next (ES6) syntax (ex: `const`)
"moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features)
// (ex: `for each`, multiple try/catch, function expression…)
"evil" : false, // true: Tolerate use of `eval` and `new Function()`
"expr" : false, // true: Tolerate `ExpressionStatement` as Programs
"funcscope" : false, // true: Tolerate defining variables inside control statements"
"globalstrict" : false, // true: Allow global "use strict" (also enables 'strict')
"iterator" : false, // true: Tolerate using the `__iterator__` property
"lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block
"laxbreak" : false, // true: Tolerate possibly unsafe line breakings
"laxcomma" : false, // true: Tolerate comma-first style coding
"loopfunc" : false, // true: Tolerate functions being defined in loops
"multistr" : false, // true: Tolerate multi-line strings
"proto" : false, // true: Tolerate using the `__proto__` property
"scripturl" : false, // true: Tolerate script-targeted URLs
"smarttabs" : false, // true: Tolerate mixed tabs/spaces when used for alignment
"shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;`
"sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation
"supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;`
"validthis" : false, // true: Tolerate using this in a non-constructor function
// Environments
"browser" : true, // Web Browser (window, document, etc)
"couch" : false, // CouchDB
"devel" : true, // Development/debugging (alert, confirm, etc)
"dojo" : false, // Dojo Toolkit
"jquery" : true, // jQuery
"mootools" : false, // MooTools
"node" : true, // Node.js
"nonstandard" : false, // Widely adopted globals (escape, unescape, etc)
"prototypejs" : false, // Prototype and Scriptaculous
"rhino" : false, // Rhino
"worker" : false, // Web Workers
"wsh" : false, // Windows Scripting Host
"yui" : false, // Yahoo User Interface
// Legacy
"nomen" : false, // true: Prohibit dangling `_` in variables
"onevar" : false, // true: Allow only one `var` statement per function
"passfail" : false, // true: Stop on first error
"white" : false, // true: Check against strict whitespace and indentation rules
// Custom Globals
"globals" : {} // additional predefined global variables
}

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>node-forum</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
<nature>com.aptana.projects.webnature</nature>
</natures>
</projectDescription>

View File

@@ -1,23 +1,30 @@
Please support NodeBB development! Check out our IndieGoGo campaign and like, share, and follow us :)
[NodeBB Homepage](http://www.nodebb.org/ "NodeBB") # [IndieGoGo campaign](https://www.indiegogo.com/projects/nodebb-the-discussion-platform-of-the-future/ "IndieGoGo") # [Follow on Twitter](http://www.twitter.com/NodeBB/ "NodeBB Twitter") # [Like us on Facebook](http://www.facebook.com/NodeBB/ "NodeBB Facebook")
# NodeBB
**NodeBB** is a robust Node.js driven forum built on a redis database. It is powered by web sockets, and is compatible down to IE8.
![NodeBB Screenshot](http://i.imgur.com/mxRmLAg.png)
* [NodeBB Homepage](http://www.nodebb.org/ "NodeBB")
* [Demo & Meta Discussion](http://try.nodebb.org)
* [Wiki Guides](https://github.com/designcreateplay/NodeBB/wiki) - includes setup for other platforms
* [Join us on IRC](https://kiwiirc.com/client/irc.freenode.net/nodebb) - #nodebb on Freenode
* [Follow on Twitter](http://www.twitter.com/NodeBB/ "NodeBB Twitter")
* [Like us on Facebook](http://www.facebook.com/NodeBB/ "NodeBB Facebook")
![NodeBB Login Page (with Social Logins)](http://i.imgur.com/q5tUUHW.png)
![NodeBB Main Category Listing](http://i.imgur.com/zffCFoh.png)
![NodeBB Topic Page](http://i.imgur.com/JihdcUa.png)
## How can I follow along/contribute?
* Our [Indiegogo campaign](https://www.indiegogo.com/projects/nodebb-the-discussion-platform-of-the-future/) is accepting contributions until August 17th, 2013
* Our feature roadmap is hosted on the [NodeBB Development/Roadmap Trello](https://trello.com/board/nodebb-development-roadmap/51c66b0d7c42d0a257002732)
* Our feature roadmap is hosted on the project wiki's [Version History / Roadmap](https://github.com/designcreateplay/NodeBB/wiki/Version-History-%26-Roadmap)
* If you are a developer, feel free to check out the source and submit pull requests.
* If you are a designer, NodeBB needs themes! NodeBB will accept any LESS or CSS file and use it in place of the default Twitter Bootstrap theme. Consider extending Bootstrap themes by extending the base bootstrap LESS file.
## Requirements
NodeBB requires a version of Node.js at least 0.8 or greater, and a Redis version 2.6 or greater.
NodeBB requires the following software to be installed:
* A version of Node.js at least 0.8 or greater
* Redis, version 2.6 or greater or MongoDB, version 2.4 or greater
* nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB)
## Installation
@@ -25,6 +32,8 @@ First, we install our base software stack:
# apt-get install git nodejs redis-server npm build-essential imagemagick
If you want to use MongoDB instead of Redis install it from http://www.mongodb.org/downloads and remove 'redis-server' from the above command. [MongoDB-Setup](https://github.com/designcreateplay/NodeBB/wiki/MongoDB-Setup)
**If your package manager only installed a version of Node.js that is less than 0.8 (e.g. Ubuntu 12.10, 13.04):**
# add-apt-repository ppa:chris-lea/node.js
@@ -55,3 +64,7 @@ NodeBB can also be started with helper programs, such as `supervisor` and `forev
*(Optional)* Some server configurations may install the node binary as `nodejs` instead of `node`. You can re-map it (so as to not break compatibility with `node-supervisor`) by running the following command:
# update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10
## Upgrading NodeBB
Detailed upgrade instructions are listed in [Upgrading NodeBB](https://github.com/designcreateplay/NodeBB/wiki/Upgrading-NodeBB)

236
app.js
View File

@@ -16,122 +16,170 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Read config.js to grab redis info
var fs = require('fs'),
nconf = require('nconf'),
pkg = require('./package.json'),
url = require('url');
(function () {
"use strict";
// Runtime environment
global.env = process.env.NODE_ENV || 'production',
// Configuration setup
var nconf = require('nconf');
nconf.argv().env();
// Configuration setup
nconf.argv().file({ file: __dirname + '/config.json'});
var fs = require('fs'),
async = require('async'),
semver = require('semver'),
winston = require('winston'),
pkg = require('./package.json'),
path = require('path'),
meta;
// Log GNU copyright info along with server info
console.log('Info: NodeBB v' + pkg.version + ' Copyright (C) 2013 DesignCreatePlay Inc.');
console.log('Info: This program comes with ABSOLUTELY NO WARRANTY.');
console.log('Info: This is free software, and you are welcome to redistribute it under certain conditions.');
console.log('Info: ===');
// Runtime environment
global.env = process.env.NODE_ENV || 'production';
if (!nconf.get('setup') && nconf.get('base_url')) {
nconf.set('url', nconf.get('base_url') + (nconf.get('use_port') ? ':' + nconf.get('port') : '') + '/');
nconf.set('upload_url', nconf.get('url') + 'uploads/');
global.nconf = nconf;
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console, {
colorize: true
});
console.log('Info: Initializing NodeBB v' + pkg.version + ', on port ' + nconf.get('port') + ', using Redis store at ' + nconf.get('redis:host') + ':' + nconf.get('redis:port') + '.');
console.log('Info: Base Configuration OK.');
winston.add(winston.transports.File, {
filename: 'error.log',
level: 'error'
});
// TODO: Replace this with nconf-redis
var meta = require('./src/meta.js');
global.config = {};
meta.config.get(function(config) {
for(c in config) {
if (config.hasOwnProperty(c)) {
global.config[c] = config[c];
}
// TODO: remove once https://github.com/flatiron/winston/issues/280 is fixed
winston.err = function (err) {
winston.error(err.stack);
};
require('child_process').exec('/usr/bin/which convert', function(err, stdout, stderr) {
if(err || !stdout) {
winston.warn('Couldn\'t find convert. Did you install imagemagick?');
}
});
// Log GNU copyright info along with server info
winston.info('NodeBB v' + pkg.version + ' Copyright (C) 2013 DesignCreatePlay Inc.');
winston.info('This program comes with ABSOLUTELY NO WARRANTY.');
winston.info('This is free software, and you are welcome to redistribute it under certain conditions.');
winston.info('');
if (!nconf.get('help') && !nconf.get('setup') && !nconf.get('install') && !nconf.get('upgrade') && fs.existsSync(__dirname + '/config.json')) {
// Load server-side configs
nconf.file({
file: __dirname + '/config.json'
});
meta = require('./src/meta');
nconf.set('url', nconf.get('base_url') + (nconf.get('use_port') ? ':' + nconf.get('port') : '') + nconf.get('relative_path') + '/');
nconf.set('upload_url', nconf.get('url') + 'uploads/');
nconf.set('base_dir', __dirname);
winston.info('Initializing NodeBB v' + pkg.version + ', on port ' + nconf.get('port') + ', using Redis store at ' + nconf.get('redis:host') + ':' + nconf.get('redis:port') + '.');
winston.info('NodeBB instance bound to: ' + ((nconf.get('bind_address') === "0.0.0.0" || !nconf.get('bind_address')) ? 'Any address (0.0.0.0)' : nconf.get('bind_address')));
if (process.env.NODE_ENV === 'development') {
winston.info('Base Configuration OK.');
}
var categories = require('./src/categories.js'),
RDB = require('./src/redis.js'),
templates = require('./public/src/templates.js'),
webserver = require('./src/webserver.js'),
websockets = require('./src/websockets.js'),
admin = {
'categories': require('./src/admin/categories.js')
};
if (semver.gt(pkg.dependencies['nodebb-theme-cerulean'], require('./node_modules/nodebb-theme-cerulean/package.json').version)) {
winston.error('nodebb-theme-cerulean is out of date - please run npm install.')
}
DEVELOPMENT = true;
require('./src/database').init(function(err) {
meta.configs.init(function () {
global.configuration = {};
global.templates = {};
var templates = require('./public/src/templates'),
translator = require('./public/src/translator'),
webserver = require('./src/webserver'),
SocketIO = require('socket.io').listen(global.server, { log: false, transports: ['websocket', 'xhr-polling', 'jsonp-polling', 'flashsocket'], 'browser client minification': true}),
websockets = require('./src/websockets'),
plugins = require('./src/plugins'),
notifications = require('./src/notifications'),
upgrade = require('./src/upgrade');
(function(config) {
config['ROOT_DIRECTORY'] = __dirname;
upgrade.check(function(schema_ok) {
if (schema_ok || nconf.get('check-schema') === false) {
websockets.init(SocketIO);
templates.init([
'header', 'footer', 'logout', 'admin/header', 'admin/footer', 'admin/index',
'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext',
'emails/header', 'emails/footer', 'install/header', 'install/footer', 'install/redis',
plugins.init();
global.templates = {};
global.translator = translator;
'noscript/header', 'noscript/home', 'noscript/category', 'noscript/topic'
]);
translator.loadServer();
templates.ready(function() {
webserver.init();
});
var customTemplates = meta.config['theme:templates'] ? path.join(__dirname, 'node_modules', meta.config['theme:id'], meta.config['theme:templates']) : false;
//setup scripts to be moved outside of the app in future.
function setup_categories() {
console.log('Info: Checking categories...');
categories.getAllCategories(function(data) {
if (data.categories.length === 0) {
console.log('Info: Setting up default categories...');
// todo: replace below with read directory code, derp.
templates.init([
'header', 'footer', 'logout', 'outgoing', 'admin/header', 'admin/footer', 'admin/index',
'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext',
'emails/header', 'emails/footer',
fs.readFile(config.ROOT_DIRECTORY + '/install/data/categories.json', function(err, default_categories) {
default_categories = JSON.parse(default_categories);
'noscript/header', 'noscript/home', 'noscript/category', 'noscript/topic'
], customTemplates);
for (var category in default_categories) {
admin.categories.create(default_categories[category]);
}
plugins.ready(function() {
templates.ready(webserver.init);
});
console.log('Info: Hardcoding uid 1 as an admin');
var user = require('./src/user.js');
user.makeAdministrator(1);
notifications.init();
} else {
console.log('Info: Categories OK. Found ' + data.categories.length + ' categories.');
winston.warn('Your NodeBB schema is out-of-date. Please run the following command to bring your dataset up to spec:');
winston.warn(' node app --upgrade');
winston.warn('To ignore this error (not recommended):');
winston.warn(' node app --no-check-schema')
process.exit();
}
});
}
setup_categories();
}(global.configuration));
});
} else {
// New install, ask setup questions
if (nconf.get('setup')) console.log('Info: NodeBB Setup Triggered via Command Line');
else console.log('Info: Configuration not found, starting NodeBB setup');
var install = require('./src/install');
process.stdout.write(
"\nWelcome to NodeBB!\nThis looks like a new installation, so you'll have to answer a " +
"few questions about your environment before we can proceed.\n\n" +
"Press enter to accept the default setting (shown in brackets).\n\n\n"
);
install.setup(function(err) {
if (err) {
console.log('Error: There was a problem completing NodeBB setup: ', err.message);
});
});
} else if (nconf.get('setup') || nconf.get('install') || !fs.existsSync(__dirname + '/config.json')) {
// New install, ask setup questions
if (nconf.get('setup')) {
winston.info('NodeBB Setup Triggered via Command Line');
} else {
if (!nconf.get('setup')) {
process.stdout.write(
"Please start NodeBB again and register a new user. This user will automatically become an administrator.\n\n"
);
}
winston.warn('Configuration not found, starting NodeBB setup');
}
process.exit();
});
}
nconf.file({
file: __dirname + '/config.json'
});
var install = require('./src/install');
winston.info('Welcome to NodeBB!');
winston.info('This looks like a new installation, so you\'ll have to answer a few questions about your environment before we can proceed.');
winston.info('Press enter to accept the default setting (shown in brackets).');
install.setup(function (err) {
if (err) {
winston.error('There was a problem completing NodeBB setup: ', err.message);
} else {
winston.info('NodeBB Setup Completed. Run \'node app\' to manually start your NodeBB server.');
}
process.exit();
});
} else if (nconf.get('upgrade')) {
nconf.file({
file: __dirname + '/config.json'
});
require('./src/database').init(function(err) {
meta = require('./src/meta.js');
meta.configs.init(function () {
require('./src/upgrade').upgrade();
});
});
} else/* if (nconf.get('help') */{
winston.info('Usage: node app [options] [arguments]');
winston.info(' [NODE_ENV=development | NODE_ENV=production] node app [--start] [arguments]');
winston.info('');
winston.info('Options:');
winston.info(' --help displays this usage information');
winston.info(' --setup configure your environment and setup NodeBB');
winston.info(' --upgrade upgrade NodeBB, first read: github.com/designcreateplay/NodeBB/wiki/Upgrading-NodeBB');
winston.info(' --start manually start NodeBB (default when no options are given)');
};
}());

View File

@@ -1 +1 @@
*.rss
*.rss

View File

@@ -1 +1 @@
*.rss
*.rss

View File

@@ -1,74 +1,98 @@
[
{
"name": "Announcements",
"description": "A place to talk about whateeeever you want",
"blockclass": "category-blue",
"icon" : "icon-bullhorn"
"description": "Announcements regarding our community",
"bgColor": "#0059B2",
"color": "#fff",
"icon" : "fa-bullhorn",
"order": 1
},
{
"name": "General Discussion",
"description": "A place to talk about whateeeever you want",
"blockclass": "category-blue",
"icon" : "icon-comment"
"bgColor": "#0059B2",
"color": "#fff",
"icon" : "fa-comment",
"order": 2
},
{
"name": "NodeBB Development",
"description": "Bugs? Dont worry, we dont read this thread, so post them here.",
"blockclass": "category-blue",
"icon" : "icon-github"
"description": "NodeBB development news and announcements",
"bgColor": "#0059B2",
"color": "#fff",
"icon" : "fa-github",
"order": 3
},
{
"name": "Blogs",
"description": "In future an example of how a hidden category should look like.",
"blockclass": "category-blue",
"icon" : "icon-pencil"
"description": "Blog posts from individual members",
"bgColor": "#0059B2",
"color": "#fff",
"icon" : "fa-pencil",
"order": 4
},
{
"name": "Feature Requests",
"description": "In future an example of how a hidden category should look like.",
"blockclass": "category-purple",
"icon" : "icon-lightbulb"
"description": "Got a feature request you'd like to see? Give us a shout here.",
"bgColor": "#ab1290",
"color": "#fff",
"icon" : "fa-lightbulb-o",
"order": 5
},
{
"name": "Bug Reports",
"description": "In future an example of how a hidden category should look like.",
"blockclass": "category-purple",
"icon" : "icon-cogs"
"description": "Having trouble with NodeBB? Let us know...",
"bgColor": "#ab1290",
"color": "#fff",
"icon" : "fa-cogs",
"order": 6
},
{
"name": "NodeBB Addons",
"description": "In future an example of how a hidden category should look like.",
"blockclass": "category-purple",
"icon" : "icon-plus-sign"
"name": "NodeBB Plugins",
"description": "Enhance your NodeBB with plugins!",
"bgColor": "#ab1290",
"color": "#fff",
"icon" : "fa-plus-square",
"order": 7
},
{
"name": "NodeBB Link Exchange",
"description": "In future an example of how a hidden category should look like.",
"blockclass": "category-purple",
"icon" : "icon-exchange"
"description": "Link exchange",
"bgColor": "#ab1290",
"color": "#fff",
"icon" : "fa-exchange",
"order": 8
},
{
"name": "News",
"description": "In future an example of how a hidden category should look like.",
"blockclass": "category-darkblue",
"icon" : "icon-globe"
"description": "News from around the world",
"bgColor": "#004C66",
"color": "#fff",
"icon" : "fa-globe",
"order": 9
},
{
"name": "Movies",
"description": "In future an example of how a hidden category should look like.",
"blockclass": "category-darkblue",
"icon" : "icon-film"
"description": "Discuss the latest movies here",
"bgColor": "#004C66",
"color": "#fff",
"icon" : "fa-film",
"order": 10
},
{
"name": "Games",
"description": "In future an example of how a hidden category should look like.",
"blockclass": "category-darkblue",
"icon" : "icon-screenshot"
"description": "Discuss the latest games here",
"bgColor": "#004C66",
"color": "#fff",
"icon" : "fa-crosshairs",
"order": 11
},
{
"name": "Random",
"description": "In future an example of how a hidden category should look like.",
"blockclass": "category-darkblue",
"icon" : "icon-beer"
"description": "Anything and (almost) everything welcome!",
"bgColor": "#004C66",
"color": "#fff",
"icon" : "fa-beer",
"order": 12
}
]

81
mocks/databasemock.js Normal file
View File

@@ -0,0 +1,81 @@
/**
* Database Mock - wrapper for database.js, makes system use separate test db, instead of production
* ATTENTION: testing db is flushed before every use!
*/
(function(module) {
'use strict';
var utils = require('./../public/src/utils.js'),
path = require('path'),
nconf = require('nconf'),
winston = require('winston'),
errorText;
nconf.file({ file: path.join(__dirname, '../config.json') });
var dbType = nconf.get('database'),
testDbConfig = nconf.get('test_database'),
productionDbConfig = nconf.get(dbType);
if(!testDbConfig){
errorText = 'test_database is not defined';
winston.info(
"\n===========================================================\n"+
"Please, add parameters for test database in config.json\n"+
"For example (redis):\n"+
'"test_database": {' + '\n' +
' "host": "127.0.0.1",' + '\n' +
' "port": "6379",' + '\n' +
' "password": "",' + '\n' +
' "database": "1"' + '\n' +
'}\n'+
" or (mongo):\n" +
'"test_database": {' + '\n' +
' "host": "127.0.0.1",' + '\n' +
' "port": "27017",' + '\n' +
' "password": "",' + '\n' +
' "database": "1"' + '\n' +
'}\n'+
"==========================================================="
);
winston.error(errorText);
throw new Error(errorText);
}
if( testDbConfig.database === productionDbConfig.database &&
testDbConfig.host === productionDbConfig.host &&
testDbConfig.port === productionDbConfig.port
){
errorText = 'test_database has the same config as production db';
winston.error(errorText);
throw new Error(errorText);
}
nconf.set(dbType, testDbConfig);
db = require('../src/database');
before(function(done) {
db.init(function(err) {
//Clean up
db.flushdb(function(err) {
if(err){
winston.error(err);
throw new Error(err);
} else {
winston.info('test_database flushed');
done();
}
//TODO: data seeding, if needed at all
});
});
});
module.exports = db;
}(module));

56
nodebb
View File

@@ -1,4 +1,54 @@
#!/bin/bash
clear
echo "Launching NodeBB in \"development\" mode"
NODE_ENV=development supervisor --extensions 'node|js|tpl' -- app $1
# $0 script path
# $1 action
# $2 subaction
case "$1" in
start)
node app
;;
dev)
echo "Launching NodeBB in \"development\" mode."
echo "To run the production build of NodeBB, please use \"forever\"."
echo "More Information: https://github.com/designcreateplay/NodeBB/wiki/How-to-run-NodeBB"
NODE_ENV=development node app
;;
watch)
echo "Launching NodeBB in \"development\" mode."
echo "To run the production build of NodeBB, please use \"forever\"."
echo "More Information: https://github.com/designcreateplay/NodeBB/wiki/How-to-run-NodeBB"
NODE_ENV=development supervisor -q --extensions 'node|js|tpl' -- app $1
;;
language)
case "$2" in
check)
node app --language="check"
;;
*)
echo "Language Settings"
echo $"Usage: $0 language {check}"
echo ''
column -s ' ' -t <<< '
check Compare language files against the /en directory
'
;;
esac
;;
*)
echo "Welcome to NodeBB"
echo $"Usage: $0 {start|dev|watch|language}"
echo ''
column -s ' ' -t <<< '
start Start NodeBB in production mode
dev Start NodeBB in development mode
watch Start NodeBB in development mode and watch for changes
language Language settings
'
exit 1
esac

View File

@@ -1,36 +1,59 @@
{
"name": "NodeBB",
"name": "nodebb",
"license": "GPLv3 or later",
"description": "NodeBB Forum",
"version": "0.0.3",
"version": "0.2.0",
"homepage": "http://www.nodebb.org",
"repository": {
"type": "git",
"url": "https://github.com/designcreateplay/NodeBB/"
},
"main": "app.js",
"scripts": {
"test": "mocha ./tests"
},
"dependencies": {
"socket.io": "0.9.14",
"redis": "0.8.3",
"socket.io": "~0.9.16",
"express": "3.2.0",
"express-namespace": "0.1.1",
"connect": "2.7.6",
"express-namespace": "~0.1.1",
"emailjs": "0.3.4",
"cookie": "0.0.6",
"connect-redis": "1.4.5",
"passport": "0.1.16",
"passport": "0.1.17",
"passport-local": "0.1.6",
"passport-twitter": "0.1.4",
"passport-twitter": "0.1.5",
"passport-google-oauth": "0.1.5",
"passport-facebook": "0.1.5",
"less-middleware": "0.1.12",
"marked": "0.2.8",
"bcrypt": "0.7.5",
"async": "0.2.8",
"async": "~0.2.8",
"node-imagemagick": "0.1.8",
"node-rss": "1.0.1",
"gravatar": "1.0.6",
"nconf": "~0.6.7"
"nconf": "~0.6.7",
"sitemap": "~0.6.0",
"request": "~2.25.0",
"reds": "~0.2.4",
"winston": "~0.7.2",
"rss": "~0.2.0",
"prompt": "~0.2.11",
"uglify-js": "~2.4.0",
"validator": "~1.5.1",
"nodebb-plugin-mentions": "~0.1.16",
"nodebb-plugin-markdown": "~0.2.1",
"nodebb-theme-vanilla": "~0.0.10",
"nodebb-theme-cerulean": "0.0.10",
"cron": "~1.0.1",
"semver": "~2.2.1"
},
"optionalDependencies": {
"redis": "0.8.3",
"mongodb": "~1.3.19",
"connect-redis": "1.4.5",
"connect-mongo": "0.4.0",
"hiredis": "~0.1.15"
},
"devDependencies": {
"mocha": "~1.13.0"
},
"bugs": {
"url": "https://github.com/designcreateplay/NodeBB/issues"
@@ -41,15 +64,22 @@
"contributors": [
{
"name": "Andrew Rodrigues",
"email": "andrew@designcreateplay.com"
"email": "andrew@designcreateplay.com",
"url": "https://github.com/psychobunny"
},
{
"name": "Julian Lam",
"email": "julian@designcreateplay.com"
"email": "julian@designcreateplay.com",
"url": "https://github.com/julianlam"
},
{
"name": "Barış Soner Uşaklı",
"email": "baris@designcreateplay.com"
"email": "baris@designcreateplay.com",
"url": "https://github.com/barisusakli"
},
{
"name": "Andrew Darqui",
"url": "https://github.com/adarqui"
},
{
"name": "Damian Bushong",
@@ -58,6 +88,10 @@
{
"name": "Matt Smith",
"url": "https://github.com/soimafreak"
},
{
"name": "Quinton Marchi",
"url": "https://github.com/iamcardinal"
}
]
}

View File

@@ -1,144 +0,0 @@
@import "mixins";
.admin {
.entry-row {
border-radius: 10px;
margin-bottom: 10px;
padding: 10px;
cursor: move;
width: 800px;
}
.entry-row {
border-radius: 10px;
margin-bottom: 10px;
padding: 10px;
cursor: move;
width: 695px;
}
input.description {
width: 400px;
}
.admin-categories {
form {
margin: 0 0 0px;
}
input {
height: 20px;
padding: 5px;
margin-left: 10px;
width: 150px;
border: 0;
border-radius: 5px;
margin-top: -8px;
}
.category_description {
width: 300px;
}
select {
border: 0;
margin-left: 10px;
padding: 5px;
margin-top: -8px;
}
button {
margin-top: -7px;
}
.icon{
width: 30px;
height: 30px;
text-align: center;
line-height: 35px;
display: inline-block;
}
}
.themes {
margin: 0;
padding: 0;
li {
padding: 10px 16px;
margin: 0.25em 1em;
list-style-type: none;
.pointer;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
-webkit-transition: background-color 250ms linear;
-moz-transition: background-color 250ms linear;
-ms-transition: background-color 250ms linear;
-o-transition: background-color 250ms linear;
transition: background-color 250ms linear;
img {
max-width: 150px;
float: left;
}
h4, p {
margin-left: 170px;
}
p {
font-size: 0.9em;
}
&:hover {
background-color: rgba(128, 128, 128, 0.2);
}
}
}
.motd textarea {
width: 100%;
}
.topics {
margin: 0;
padding: 0;
> li {
.zebra;
list-style-type: none;
padding: 1em;
margin-bottom: 1em;
ul {
margin: 0.5em 0;
li {
list-style-type: none;
}
}
}
}
.icon-container {
.row {
margin: 0;
.span3 {
width: 20px;
height: 20px;
margin: 1px;
cursor: pointer;
line-height: 20px;
text-align: center;
&:hover, &.selected {
background: black;
color: white;
}
}
}
}
}

View File

@@ -1,227 +0,0 @@
.category {
.span9 {
margin-bottom: 50px;
}
a {
li {
list-style: none;
//border-bottom: 1px solid #eee;
margin-bottom: 10px;
padding-bottom: 10px;
&.deleted {
-moz-opacity: 0.30;
opacity: 0.30;
}
}
&:last-child li {
border-bottom: 0;
}
color: #333;
&:hover {
color: #333
}
}
ul {
margin-left: 0;
}
.thread-rating {
color: #444;
text-align: center;
margin-top: 7px;
span {
display: inline-block; margin-left: 5px;
i {
padding-left: 2.4px;
}
@media (max-width: 1200px)
{
margin-left: -1px;
}
}
}
.topic-row {
border-radius: 5px;
padding-left: 20px;
small {
vertical-align: 2px;
strong {
color: #666;
}
color: #999;
font-size: 14px;
}
h3 {
padding: 0;
margin: 0;
margin-top: 4px;
color: rgb(0, 136, 204);
line-height: 25px;
.topic-title {
width: 50%;
display: inline-block;
font-size: 20px;
white-space: nowrap;
text-overflow:ellipsis;
overflow: hidden;
.badge {
margin-right: 6px;
}
@media (max-width: 979px)
{
width: 100%;
}
}
}
@media (max-width: 979px)
{
width: 100%;
margin-left: 0px;
}
}
.latest-post {
float: right;
padding-top: 2px;
margin-right: 0px;
width: 40%;
.pull-right {
width: 100%;
height: 50px;
line-height: 16px;
margin-left: 1px;
padding: 5px;
border-left: 1px solid #bbb;
padding-left: 20px;
img {
display: block;
float: left;
}
p {
display: block;
float: left;
width: 70%;
margin-left: 10px;
overflow: hidden;
height: 32px;
}
span {
display: block;
float: left;
width: 70%;
margin-left: 10px;
overflow: hidden;
height: 16px;
margin-top: -10px;
color: #666;
}
}
}
.recent-replies {
overflow-y: auto;
overflow-x: hidden;
ul {
width: 100%;
height: 50px;
line-height: 16px;
margin-left: 1px;
padding: 5px 5px 5px 0px;
li {
clear: both;
line-height: 16px;
margin-bottom: 1em;
&:last-child {
margin-bottom: 0;
}
img {
display: block;
float: left;
}
p {
display: block;
padding-left:5px;
overflow: hidden;
height: 32px;
margin-bottom: 0.5em;
}
span {
font-size: 12px;
display: block;
overflow: hidden;
height: 16px;
padding-left:5px;
color: #666;
}
}
}
}
.sidebar-block {
.block-header {
padding: 8px;
padding-left: 13px;
display: block;
background: rgb(245,245,245);
color: #676;
font-weight: 400;
font-size: 14px;
border-radius: 5px 5px 0 0;
border-bottom: 1px solid #ddd;
}
.block-content {
padding: 10px;
.img-polaroid {
width: 20%;
height: auto;
max-width: 48px;
}
}
border-radius: 5px;
background: white;
padding: 0;
margin-bottom: 20px;
.img-polaroid {
margin-top: 2px;
}
}
}

View File

@@ -1,33 +0,0 @@
.no-select {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.pointer {
cursor: pointer;
*cursor: hand;
}
.inline-block {
display: inline-block;
*display: inline;
zoom: 1;
}
.clear {
clear: both;
}
.zebra {
&:nth-child(even) {
background: rgba(191,191,191,0.2);
}
&:nth-child(odd) {
background: rgba(223,223,223,0.2);
}
}

View File

@@ -1,5 +0,0 @@
@import "style";
@import "topic";
@import "category";
@import "noscript";

View File

@@ -1,57 +0,0 @@
@import "mixins";
noscript {
.default {
list-style-type: none;
padding: 1em;
margin-bottom: 1em;
.zebra;
}
.categories {
li {
.default;
.icon {
float: left;
margin-right: 1em;
}
a {
font-size: 20px;
}
}
}
.topics {
li {
.default;
}
.teaser {
margin-left: 16px;
margin-top: 8px;
img {
float: left;
width: 32px;
}
p {
color: #666;
font-size: 13px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
margin-left: 64px;
padding-top: 10px;
}
}
}
.posts {
li {
.default;
}
}
}

View File

@@ -1,763 +0,0 @@
@import "mixins";
body {
/*background: #fdfdfd;*/ // port to default theme when it is implemented.
-webkit-transition: margin-bottom 250ms ease;
-moz-transition: margin-bottom 250ms ease;
-ms-transition: margin-bottom 250ms ease;
-o-transition: margin-bottom 250ms ease;
transition: margin-bottom 250ms ease;
&.composing {
margin-bottom: 350px;
}
@media (min-width: 979px)
{
padding-top: 70px;
}
@media (max-width: 979px)
{
padding-bottom: 50px;
}
}
button, a {
-webkit-tap-highlight-color: rgba(0,0,0,0);
}
.none {
display: none !important;
}
.block, .show {
display: block;
}
.badge {
vertical-align: 17%;
}
.nav .badge {
vertical-align: 10%;
}
#alert_window {
position: fixed;
right: 20px;
top: 60px;
width: 300px;
height: 0px;
}
.toaster-alert {
cursor: pointer;
}
footer.footer {
color: #555;
text-align: center;
a {
color: #222;
}
}
#post_window {
width: 100%;
position: fixed;
height: 350px;
left: 0px;
bottom: 0px;
background: white;
z-index: 1500;
input {
width: 100%;
height: 30px;
padding: 5px;
}
textarea {
width: 100%;
background: #222;
height: 220px;
resize: none;
border-radius: 0;
border: 1px solid #111;
font-size: 16px;
color: #bebebe;
outline: 0;
&:focus {
outline: 0;
border:none !important;
box-shadow:none !important;
}
}
.post-title-container {
opacity: 0.8;
height: 50px;
}
.post-content-container {
opacity: 0.8;
background: #000;
width: 100%;
height: 300px;
}
}
#user_label { //belongs in header.less
img {
border: 1px solid #454;
margin-right: 8px;
margin-top: -2px;
float: left;
width:24px;
height:24px;
}
span {
font-size: 14px;
font-weight: 400;
color: #ded;
}
}
#reply_title {
font-size: 17px;
padding-top: 14px;
font-weight: 600;
}
.alt-logins {
margin: 0 0 0 1em;
padding: 0;
li {
vertical-align: top;
background: transparent;
display: none;
margin: 0.25em;
.pointer;
&.active {
.inline-block;
}
i {
-webkit-transition: color 100ms linear;
-moz-transition: color 100ms linear;
-ms-transition: color 100ms linear;
-o-transition: color 100ms linear;
transition: color 100ms linear;
&.icon-twitter-sign:hover {
color: #4099FF;
}
&.icon-facebook-sign:hover {
color: #3b5999;
}
&.icon-google-plus-sign:hover {
color: #d34836;
}
}
}
}
#thread_active_users {
float: right;
color: rgb(153,153,153);
strong {
color: rgb(100,100,100);
font-weight: 600;
cursor: pointer;
}
}
.account-username-box{
border-bottom:1px solid #e3e3e3;
margin-bottom:10px;
}
.account-sub-links a{
margin-left:10px;
}
.account-username{
font-size:20px;
font-weight:bold;
}
.account-picture-block{
display:inline-block;
vertical-align:top;
}
.user-profile-picture {
width:128px;
margin-bottom:10px;
}
.user-picture-label {
font-size:20px;
}
.account-bio-block{
display:inline-block;
vertical-align:top;
}
.account-bio-label{
display:inline-block;
width:100px;
}
.user-recent-posts {
div {
color: #333;
margin-bottom: 10px;
}
span {
padding-top: 10px;
}
}
.category-icon {
width: 100%;
height: 90px;
text-align: center;
border-radius: 0px;
margin: 0;
padding-top:25px;
cursor: pointer;
margin-bottom: 20px;
border-radius: 5px;
overflow:hidden;
}
.category-row h4 {
font-weight: 700;
text-align: left;
/*color: #555;*/ // NOTE: color for cat/topic header links should be grey in the default theme when we get around to it.
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.category-row a {
text-decoration: none;
border: 0;
}
.category-purple {
@color: #ab1290;
background: @color;
color: white;
&:hover {
background: lighten(@color, 10%);
}
}
.category-darkblue {
@color: #004C66;
background: @color;
color: white;
&:hover {
background: lighten(@color, 10%);
}
}
.category-blue {
@color: #0059B2;
background: @color;
color: white;
&:hover {
background: lighten(@color, 10%);
}
}
.category-darkgreen {
@color: #004000;
background: @color;
color: white;
&:hover {
background: lighten(@color, 10%);
}
}
.category-orange {
@color: #FF7A4D;
color: white;
background: @color;
&:hover {
background: lighten(@color, 10%);
}
}
.category-list {
li {
.inline-block;
.pointer;
padding: 0.5em 0;
text-align: center;
margin: 0.5em;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
padding: 0.5em;
}
}
.hero-unit {
background: #56BCDA;
color: white;
padding: 30px;
word-wrap: break-word;
}
.users-box{
display: inline-block;
margin-top: 20px;
text-align: center;
vertical-align: top;
max-width: 104px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
img {
width:80px;
height:80px;
}
a {
margin:5px;
}
}
a:hover {
text-decoration:none;
}
.formatting-bar {
.no-select;
span:focus {
outline: none;
}
}
.breadcrumb {
li {
max-width: 35%;
white-space: nowrap;
text-overflow:ellipsis;
overflow: hidden;
}
}
body .navbar .nodebb-inline-block {
display:inline-block;
}
#right-menu{
float:right;
}
#admin-redis-info {
span {
display:inline-block;
width:200px;
}
}
.post-signature {
color: #666;
font-size: 12px;
border-top: 1px solid #ddd;
display: inline-block;
img {
max-width:200px;
max-height:60px;
}
}
.username-field {
.icon-circle {
font-size: 12px;
color: green;
}
.icon-circle-blank {
font-size: 12px;
color: red;
}
}
#chat-content {
width:95%;
height:200px;
resize:none;
}
#chat-message-input {
width:95%;
}
#content{
padding-bottom:20px;
}
.dropdown-toggle {
i {
font-size: 12px;
&.active {
color: #558;
text-shadow: 0 0 1em #aaf, 0 0 1em #aaf, 0 0 1em #aaf;
}
}
}
#notif-list {
li {
font-size: 12px;
width: 300px;
text-align: left;
a {
white-space: normal;
}
&.unread {
background: #eceff5;
}
}
}
.taskbar {
display: none;
-moz-opacity: 0.5;
opacity: 0.5;
margin-top: 0;
-webkit-transition: opacity 250ms ease-in;
-moz-transition: opacity 250ms ease-in;
-ms-transition: opacity 250ms ease-in;
-o-transition: opacity 250ms ease-in;
transition: opacity 250ms ease-in;
&[data-active="1"] {
display: block;
}
&:hover {
-moz-opacity: 1;
opacity: 1;
}
li {
a > span {
.inline-block;
max-width: 200px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
img {
max-width: 24px;
max-height: 24px;
margin-right: 1em;
}
&.pulse {
-webkit-animation: pulsate 2500ms linear;
-webkit-animation-iteration-count: infinite;
}
@-webkit-keyframes pulsate {
0% { background: none; }
50% { background: #e5e5e5; }
100% { background: none; }
}
}
}
.post-window {
position: fixed;
bottom: 45px;
height: 450px;
display: none;
> div {
height: 100%;
background: rgba(64, 64, 64, 0.6);
.btn-toolbar {
width: 90%;
margin: 0 auto;
span {
color: white;
}
}
input {
width: 100%;
text-align: center;
background: rgba(255, 255, 255, 0.9);
border: none;
padding: 0.5em 0;
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
border-radius: 0px;
}
textarea {
background: rgba(64, 64, 64, 0.95);
border: none;
padding: 0.5em;
display: block;
width: 90%;
margin: 1em auto;
resize: none;
color: white;
height: 330px;
}
}
}
@media (max-width: 979px) {
.post-window {
position: static;
}
}
#mobile-menu {
position: fixed;
bottom: 0px;
height: 50px;
background: #333;
width: 100%;
left: 0px;
}
#mobile-menu, #mobile-menu-overlay {
z-index: 999;
@media (min-width: 979px)
{
display: none !important;
}
}
.btn-none,
.btn-none:active,
.btn-none[disabled] {
background-color: transparent;
background-image: none;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
.btn-none {
cursor: pointer;
border-color: transparent;
-webkit-border-radius: 0;
-moz-border-radius: 0;
border-radius: 0;
}
.btn-none:hover,
.btn-none:focus {
text-decoration: none;
background-color: transparent;
}
.btn-none[disabled]:hover,
.btn-none[disabled]:focus {
text-decoration: none;
}
.btn-none {
.icon-white {
color: white;
}
}
#mobile-menu {
button {
color: #eee;
padding: 10px;
text-shadow: none;
-webkit-tap-highlight-color: rgba(0,0,0,0);
}
}
#mobile-menu-overlay {
background: rgba(0, 0, 0, 0.85);
position: fixed;
top: 0px;
left: 0px;
height: 100%;
width: 100%;
//margin-top: 50px;
padding-top: 20px;
opacity: 0;
-webkit-transition: opacity 150ms ease;
-moz-transition: opacity 150ms ease;
-ms-transition: opacity 150ms ease;
-o-transition: opacity 150ms ease;
transition: opacity 150ms ease;
z-index: -1;
&.menu-visible {
z-index: 99;
opacity: 1;
}
.mobile-menu-icon {
color: white;
width: 20%;
min-width: 85px;
height: auto;
text-align: center;
padding: 10px;
display: inline-block;
cursor: pointer;
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-transition: margin-top 250ms ease;
-moz-transition: margin-top 250ms ease;
-ms-transition: margin-top 250ms ease;
-o-transition: margin-top 250ms ease;
transition: margin-top 250ms ease;
margin-top: 20%;
&.menu-visible {
margin-top: 0%;
}
i {
width: 100%;
}
}
}
#mobile-sidebar {
height: 100%;
position: absolute;
left: 100%;
top: 0px;
overflow: hidden;
margin-top: 60px;
}
.category-box {
height:90px;
.post-preview {
padding-left:10px;
padding-right:10px;
text-align:left;
img {
width:60px;
height:60px;
padding-right:5px;
}
p {
overflow: hidden;
text-overflow:ellipsis;
height:60px;
}
}
}
@-webkit-keyframes scroll-2 /* Safari and Chrome */
{
0% {top: 0px;}
25% {top: -90px;}
50% {top: -180px;}
75% {top: -270px;}
100% {top: -360px;}
}
@keyframes scroll-2
{
0% {top: 0px;}
25% {top: -90px;}
50% {top: -180px;}
75% {top: -270px;}
100% {top: -360px;}
}
@-webkit-keyframes scroll-1 /* Safari and Chrome */
{
0% {top: 0px;}
33% {top: -90px;}
66% {top: -180px;}
100% {top: -270px;}
}
@keyframes scroll-1
{
0% {top: 0px;}
33% {top: -90px;}
66% {top: -180px;}
100% {top: -270px;}
}
@-webkit-keyframes scroll-0 /* Safari and Chrome */
{
0% {top: 0px;}
50% {top: -90px;}
100% {top: -180px;}
}
@keyframes scroll-0
{
0% {top: 0px;}
50% {top: -90px;}
100% {top: -180px;}
}
.category-slider-2:hover {
position:relative;
-webkit-animation: scroll-2 10s ease 0.5s infinite normal;
animation: scroll-2 10s ease 0.5s infinite normal;/* Safari and Chrome: */
}
.category-slider-1:hover {
position:relative;
-webkit-animation: scroll-1 8s ease 0.5s infinite normal;
animation: scroll-1 8s ease 0.5s infinite normal;/* Safari and Chrome: */
}
.category-slider-0:hover {
position:relative;
-webkit-animation: scroll-0 6s ease 0.5s infinite normal;
animation: scroll-0 6s ease 0.5s infinite normal;/* Safari and Chrome: */
}

View File

@@ -1,166 +0,0 @@
.post-container {
list-style-type: none;
padding: 0;
margin: 0;
clear: both;
.profile-image-block {
background: white;
display: inline-block;
text-align: center;
font-size: 12px;
}
li {
padding-bottom: 15px;
&.deleted {
-moz-opacity: 0.30;
opacity: 0.30;
}
}
.profile-block, .post-block {
border: 1px solid #f0f0f0;
border-radius: 5px;
padding: 10px;
}
.profile-block {
background: #fafafa;
margin-right: -11px;
margin-left: -11px;
margin-bottom: -11px;
margin-top: 15px;
border-radius: 0 0 5px 5px;
font-size: 10px;
line-height: 18px;
padding: 5px;
padding-left: 10px;
img.hidden-desktop {
max-width: 10px;
max-height: 10px;
}
}
.post-content {
min-height: 50px;
padding: 2px 5px 0 5px;
word-wrap: break-word;
}
.post-block {
.post-buttons {
font-size: 12px;
float: right;
margin-right: 5px;
button {
display: inline-block;
padding-left: 15px;
padding-right: 15px;
border: none;
border-left: 1px solid #f0f0f0;
cursor: pointer;
background: none;
font-size: 12px;
height: 20px;
&:last-child {
padding-right: 5px;
}
}
.icon-star {
//theme this to make it yellow eventually
}
}
background: #fff;
}
&.deleted {
-moz-opacity: 0.30;
opacity: 0.30;
}
.main-post {
h3 {
margin: 0;
.topic-title {
width: auto;
white-space: nowrap;
text-overflow:ellipsis;
overflow: hidden;
margin: 0;
padding: 0;
padding-top: 5px;
margin-bottom: -5px;
padding-bottom: 5px;
}
}
.main-avatar {
color: white;
position: relative;
float: left;
margin-right: 25px;
margin-bottom: 0px;
padding-bottom: 0px;
text-align: center;
width:80px;
@media (max-width: 767px) {
display: none;
}
}
.main-avatar:hover .hover-overlay {
opacity: 0.75;
}
.hover-overlay {
margin: 5px;
position: absolute;
bottom: 0px;
height: 35px;
padding-top: 2px;
width: 80px;
font-size: 13px;
line-height: 16px;
background: #000;
opacity: 0;
transition: opacity 0.3s;
}
.post-content {
min-height: 80px;
}
hr {
margin-top: 0;
margin-right: 10px;
margin-bottom: 0;
}
.post-block {
.post-buttons {
div {
border: 0;
}
}
}
.favourite {
cursor: pointer;
}
.btn {
display: inline-block;
}
.topic-buttons {
margin-top: 8px;
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

3
public/language/TODO Normal file
View File

@@ -0,0 +1,3 @@
NPM INSTALL
For now, language packs will be stored here. Eventually, will be moved to server side to allow for npm install-ability.
When that happens, server code will generate compressed JSON language files in this folder.

View File

@@ -0,0 +1,14 @@
{
"new_topic_button": "Neues Thema",
"no_topics": "<strong>Es gibt noch keine Threads in dieser Kategorie.</strong><br />Warum beginnst du nicht den ersten?",
"sidebar.recent_replies": "Neuste Antworten",
"sidebar.active_participants": "Aktive Teilnehmer",
"sidebar.moderators": "Moderatoren",
"posts": "Posts",
"views": "Aufrufe",
"posted": "Geposted",
"browsing": "Sieht zu",
"no_replies": "Niemand hat geantwortet",
"replied": "geantwortet",
"last_edited_by": "zuletzt editiert durch"
}

View File

@@ -0,0 +1,10 @@
{
"chat.chatting_with": "Chatten mit <span id='chat-with-name'></span>",
"chat.placeholder": "schreibe hier etwas, und drücke Enter zum absenden",
"chat.send": "Senden",
"stats.online": "Online",
"stats.users": "Benutzer",
"stats.topics": "Themen",
"stats.posts": "Beiträge",
"success": "erfolg"
}

View File

@@ -0,0 +1,31 @@
{
"home": "Übersicht",
"search": "Suche",
"buttons.close": "Schließen",
"403.title": "Zugriff Verweigert",
"403.message": "Du bist nicht dazu berechtigt, diese Seite aufzurufen. <a href='/login'>Logge dich ein</a> und versuche es erneut.",
"404.title": " Nicht Gefunden",
"404.message": "Die abgefragte Seite wurde nicht gefunden. <a href='/''>Zurück zur Übersicht</a>.",
"500.title": "Internal error.",
"500.message": "Ooops! Looks like something went wrong!",
"register": "Registrierung",
"login": "Login",
"logout": "Logout",
"logout.title": "Du bist ausgeloggt.",
"logout.message": "Du hast dich soeben erfolgreich aus dem Forum ausgeloggt.",
"save_changes": "Speichere Änderungen",
"close": "Schließen",
"header.admin": "Admin",
"header.recent": "Aktuell",
"header.unread": "Ungelesen",
"header.users": "Benutzer",
"header.search": "Suche",
"header.profile": "Profil",
"notifications.loading": "Benachrichtigungen laden",
"chats.loading": "Nachrichten werden geladen"
}

View File

@@ -0,0 +1,10 @@
{
"login": "Einloggen",
"username": "Benutzername",
"password": "Passwort",
"remember_me": "Eingeloggt bleiben?",
"forgot_password": "Passwort vergessen?",
"alternative_logins": "Login Alternativen",
"failed_login_attempt": " Anmeldeversuch fehlgeschlagen, versuche es erneut.",
"login_successful": "Du hast dich erfolgreich eingeloggt!"
}

View File

@@ -0,0 +1,9 @@
{
"title": "Benachrichtigungen",
"back_to_home": "Zurück zur Startseite",
"mark_all_as_read": "Alles als gelesen markieren",
"outgoing_link": "Externer Link",
"outgoing_link_message": "Du verlässt nun",
"continue_to": "Gehe weiter zu",
"return_to": "Kehre zurück zu"
}

View File

@@ -0,0 +1,5 @@
{
"day": "Tag",
"week": "Woche",
"month": "Monat"
}

View File

@@ -0,0 +1,16 @@
{
"register": "Registrieren",
"help.email": "Deine E-Mail Adresse ist standardmäßig nicht öffentlich sichtbar.",
"help.username_restrictions": "Einen einmaligen Benutzernamen. 3-16 Zeichen. Andere Benutzer können dich mit @<span id='yourUsername'>Benutzername</span> anschreiben.",
"help.minimum_password_length": "Dein Passwort muss mindestens sechs Zeichen lang sein.",
"email_address": "E-Mail",
"email_address_placeholder": "E-Mail Adresse hier eingeben",
"username": "Benutzername",
"username_placeholder": "Benutzernamen eingeben",
"password": "Passwort",
"password_placeholder": "Passwort eingeben",
"confirm_password": "Passwort bestätigen",
"confirm_password_placeholder": "Passwort zur Bestätigung erneut eingeben",
"register_now_button": "Jetzt registrieren",
"alternative_registration": "Alternative Registrierung"
}

View File

@@ -0,0 +1,13 @@
{
"reset_password": "Passwort zurücksetzen",
"update_password": "Ändere Passwort",
"password_change": "Passwort wurde geändert",
"password_reset_successful": "<p>Das Passwort wurde erfolgreich zurückgesetzt. <a href=\"/login\">Log dich neu ein</a>.",
"wrong_reset_code.title": "Der Reset-Code ist falsch.",
"wrong_reset_code.message": "Der empfangene Reset-Code war falsch. Bitte versuche es erneut oder <a href=\"/reset\">fordere einen neuen Code an</a>.",
"new_password": "Neues Passwort",
"repeat_password": "Wiederhole das Passwort",
"enter_email": "Bitte gib Deine <strong>E-Mail Adresse</strong> ein und wir senden Dir eine Anleitung, wie Du Dein Passwort zurücksetzen kannst.",
"password_reset_sent": "Passwortzrücksetzung beantragt.",
"invalid_email": "Ungültige E-Mail / Adresse existiert nicht!"
}

View File

@@ -0,0 +1,43 @@
{
"topic": "Thema",
"topics": "Themen",
"no_topics_found": "Keine passende Themen gefunden.",
"profile": "Profil",
"posted_by": "geschrieben von",
"chat": "Chat",
"notify_me": "Werde bei neues Antworten auf dieses Thema benachrichtigt.",
"quote": "zitieren",
"reply": "antworten",
"edit": "bearbeiten",
"delete": "löschen",
"banned": "gesperrt",
"link": "Link",
"thread_tools.title": "Thread Tools",
"thread_tools.pin": "Thread pinnen",
"thread_tools.unpin": "Thread nicht mehr pinnen",
"thread_tools.lock": "Thread sperren",
"thread_tools.move": "Thread verschieben",
"thread_tools.delete": "Thread löschen",
"load_categories": "Kategorien laden",
"disabled_categories_note": "Deaktivierte Kategorien sind ausgegraut.",
"confirm_move": "verschieben",
"favourite": "Favorit",
"favourites": "Favoriten",
"favourites.not_logged_in.title": "Nicht eingeloggt!",
"favourites.not_logged_in.message": "Bitte logge dich ein, um diesen Beitrag favorisieren zu können.",
"favourites.has_no_favourites":"Du hast noch keine Favoriten.",
"posted_by": "Geposted von",
"loading": "Lade",
"more_posts": "Mehr Posts",
"move_topic": "Thema verschieben",
"topic_will_be_moved_to": "Dieses Thema wird verschoben nach",
"reputation": "Reputation",
"posts": "Posts"
}

View File

@@ -0,0 +1,5 @@
{
"no_unread_topics": "Es gibt keine ungelesenen Themen.",
"mark_all_read": "alle als gelesen markieren",
"load_more": "mehr laden"
}

View File

@@ -0,0 +1,38 @@
{
"banned": "Gebannt",
"offline": "offline",
"email": "E-Mail",
"fullname": "Kompletter Name",
"website": "Homepage",
"location": "Wohnort",
"age": "Alter",
"joined": "Beigetreten",
"profile_views": "Profilaufrufe",
"reputation": "Reputation",
"posts": "Posts",
"followers": "Follower",
"following": "Folgt",
"signature": "Signatur",
"gravatar": "Gravatar",
"birthday": "Geburtstag",
"change_picture": "Ändere Profilbild",
"edit": "Ändern",
"uploaded_picture": "Hochgeladene Bilder",
"upload_new_picture": "Neues Bild hochladen",
"change_password": "Ändere Passwort",
"confirm_password": "Passwort wiederholen",
"password": "Passwort",
"upload_picture": "Bild hochladen",
"upload_a_picture": "Ein Bild hochladen",
"image_spec": "Du solltest nur Dateien die PNG, JPG, oder GIF kleiner als 256kb hochladen.",
"settings": "Einstellungen",
"show_email": "Zeige meine E-Mail Adresse an.",
"has_no_follower": "Dieser User hat noch keine Follower.",
"follows_no_one": "Dieser User folgt noch niemanden."
}

View File

@@ -0,0 +1,9 @@
{
"latest_users": "neuste Benutzer",
"top_posters": "meiste Beiträge",
"most_reputation": "höhstes Ansehen",
"online": "Online",
"search": "Suchen",
"enter_username": "Benutzer durchsuchen",
"load_more": "mehr laden"
}

View File

@@ -0,0 +1,14 @@
{
"new_topic_button": "New Topic",
"no_topics": "<strong>There are no topics in this category.</strong><br />Why don't you try posting one?",
"sidebar.recent_replies": "Recent Replies",
"sidebar.active_participants": "Active Participants",
"sidebar.moderators": "Moderators",
"posts": "posts",
"views": "views",
"posted": "posted",
"browsing": "browsing",
"no_replies": "No one has replied",
"replied": "replied",
"last_edited_by": "last edited by"
}

View File

@@ -0,0 +1,10 @@
{
"chat.chatting_with": "Chat with <span id=\"chat-with-name\"></span>",
"chat.placeholder": "type chat message here, press enter to send",
"chat.send": "Send",
"stats.online": "Online",
"stats.users": "Users",
"stats.topics": "Topics",
"stats.posts": "Posts",
"success": "success"
}

View File

@@ -0,0 +1,31 @@
{
"home": "Home",
"search": "Search",
"buttons.close": "Close",
"403.title": "Access Denied",
"403.message": "You seem to have stumbled upon a page that you do not have access to. Perhaps you should <a href='/login'>try logging in</a>?",
"404.title": "Not Found",
"404.message": "You seem to have stumbled upon a page that does not exist. Return to the <a href='/'>home page</a>.",
"500.title": "Internal error.",
"500.message": "Oops! Looks like something went wrong!",
"register": "Register",
"login": "Login",
"logout": "Logout",
"logout.title": "You are now logged out.",
"logout.message": "You have successfully logged out of NodeBB",
"save_changes": "Save Changes",
"close": "Close",
"header.admin": "Admin",
"header.recent": "Recent",
"header.unread": "Unread",
"header.users": "Users",
"header.search": "Search",
"header.profile": "Profile",
"notifications.loading": "Loading Notifications",
"chats.loading": "Loading Chats"
}

View File

@@ -0,0 +1,10 @@
{
"login": "Login",
"username": "Username",
"password": "Password",
"remember_me": "Remember Me?",
"forgot_password": "Forgot Password?",
"alternative_logins": "Alternative Logins",
"failed_login_attempt": "Failed login attempt, please try again.",
"login_successful": "You have successfully logged in!"
}

View File

@@ -0,0 +1,9 @@
{
"title": "Notifications",
"back_to_home": "back to NodeBB",
"mark_all_as_read": "Mark All as Read",
"outgoing_link": "Outgoing Link",
"outgoing_link_message": "You are now leaving",
"continue_to": "Continue to",
"return_to": "Return to "
}

View File

@@ -0,0 +1,5 @@
{
"day": "Day",
"week": "Week",
"month": "Month"
}

View File

@@ -0,0 +1,16 @@
{
"register": "Register",
"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.minimum_password_length": "Your password's length must be at least %1 characters.",
"email_address": "Email Address",
"email_address_placeholder": "Enter Email Address",
"username": "Username",
"username_placeholder": "Enter Username",
"password": "Password",
"password_placeholder": "Enter Password",
"confirm_password": "Confirm Password",
"confirm_password_placeholder": "Confirm Password",
"register_now_button": "Register Now",
"alternative_registration": "Alternative Registration"
}

View File

@@ -0,0 +1,13 @@
{
"reset_password": "Reset Password",
"update_password": "Update Password",
"password_changed.title": "Password Changed",
"password_changed.message": "<p>Password successfully reset, please <a href=\"/login\">log in again</a>.",
"wrong_reset_code.title": "Incorrect Reset Code",
"wrong_reset_code.message": "The reset code received was incorrect. Please try again, or <a href=\"/reset\">request a new reset code</a>.",
"new_password": "New Password",
"repeat_password": "Confirm Password",
"enter_email": "Please enter your <strong>email address</strong> and we will send you an email with instructions on how to reset your account.",
"password_reset_sent": "Password Reset Sent",
"invalid_email": "Invalid Email / Email does not exist!"
}

View File

@@ -0,0 +1,42 @@
{
"topic": "Topic",
"topics": "Topics",
"no_topics_found": "No topics found!",
"profile": "Profile",
"posted_by": "Posted by",
"chat": "Chat",
"notify_me": "Be notified of new replies in this topic",
"quote": "Quote",
"reply": "Reply",
"edit": "Edit",
"delete": "Delete",
"banned": "banned",
"link": "Link",
"thread_tools.title": "Thread Tools",
"thread_tools.pin": "Pin Thread",
"thread_tools.lock": "Lock Thread",
"thread_tools.move": "Move Thread",
"thread_tools.delete": "Delete Thread",
"load_categories": "Loading Categories",
"disabled_categories_note": "Disabled Categories are greyed out",
"confirm_move": "Move",
"favourite": "Favourite",
"favourites": "Favorites",
"favourites.not_logged_in.title": "Not Logged In",
"favourites.not_logged_in.message": "Please log in in order to favourite this post",
"favourites.has_no_favourites": "You don't have any favourites, favourite some posts to see them here!",
"posted_by": "posted by",
"loading": "Loading",
"more_posts": "More Posts",
"move_topic": "Move Topic",
"topic_will_be_moved_to": "This topic will be moved to the category",
"reputation": "Reputation",
"posts": "Posts"
}

View File

@@ -0,0 +1,5 @@
{
"no_unread_topics": "There are no unread topics.",
"mark_all_read": "Mark all as Read",
"load_more": "Load More"
}

View File

@@ -0,0 +1,39 @@
{
"banned": "Banned",
"offline": "Offline",
"email": "Email",
"fullname": "Full Name",
"website": "Website",
"location": "Location",
"age": "Age",
"joined": "Joined",
"profile_views": "Profile views",
"reputation": "Reputation",
"posts": "Posts",
"followers": "Followers",
"following": "Following",
"signature": "Signature",
"gravatar": "Gravatar",
"birthday": "Birthday",
"change_picture": "Change Picture",
"edit": "Edit",
"uploaded_picture": "Uploaded Picture",
"upload_new_picture": "Upload New Picture",
"change_password": "Change Password",
"confirm_password": "Confirm Password",
"password": "Password",
"upload_picture": "Upload picture",
"upload_a_picture": "Upload a picture",
"image_spec": "You may only upload PNG, JPG, or GIF files under 256kb.",
"settings": "settings",
"show_email": "Show My Email",
"has_no_follower": "This user doesn't have any followers :(",
"follows_no_one": "This user isn't following anyone :(",
"email_hidden": "Email Hidden",
"hidden": "hidden"
}

View File

@@ -0,0 +1,9 @@
{
"latest_users": "Latest Users",
"top_posters": "Top Posters",
"most_reputation": "Most Reputation",
"online": "Online",
"search": "Search",
"enter_username": "Enter a username to search",
"load_more": "Load More"
}

View File

@@ -0,0 +1,14 @@
{
"new_topic_button": "Nuevo Tema",
"no_topics": "<strong>No hay temas en esta categoría.</strong><br />Por que no te animas y publicas uno?",
"sidebar.recent_replies": "Respuestas recientes",
"sidebar.active_participants": "Miembros más activos",
"sidebar.moderators": "Moderadores",
"posts": "respuestas",
"views": "visitas",
"posted": "posted",
"browsing": "viendo ahora",
"no_replies": "Nadie ha respondido aún",
"replied": "respondio",
"last_edited_by": "ultima edición por"
}

View File

@@ -0,0 +1,10 @@
{
"chat.chatting_with": "Chatear con <span id='chat-with-name'></span>",
"chat.placeholder": "ingresa tu mensaje aqui, y presiona enter para enviar",
"chat.send": "Enviar",
"stats.online": "Online",
"stats.users": "Usuarios",
"stats.topics": "Temas",
"stats.posts": "Posts",
"success": "exito!"
}

View File

@@ -0,0 +1,31 @@
{
"home": "Inicio",
"search": "Buscar",
"buttons.close": "Cerrar",
"403.title": "Acceso denegado",
"403.message": "Al parecer no tienes premisos necesarios para estar en este lugar. Tal vez puedes <a href='/login'>intentar conectarte</a>?",
"404.title": "Ups... 404, no se encontra che!",
"404.message": "Al parecer lo que estas buscando no existe. Te recomendamos que vuelvas al <a href='/''>inicio</a>.",
"500.title": "Error Interno.",
"500.message": "Ooops! Algo salio mal!, No te alarmes. Nuestros simios hiperinteligentes lo solucionarán",
"register": "Registrarse",
"login": "Conectarse",
"logout": "Salir",
"logout.title": "Te has desconectado.",
"logout.message": "Haz sido desconectado correctamente",
"save_changes": "Guardar Cambios",
"close": "Cerrar",
"header.admin": "Admin",
"header.recent": "Recientes",
"header.unread": "No Leeidos",
"header.users": "Miembros",
"header.search": "Buscar",
"header.profile": "Perfil",
"notifications.loading": "Cargando Notificaciones",
"chats.loading": "Cargando Chats"
}

View File

@@ -0,0 +1,10 @@
{
"login": "Conectarse",
"username": "Usuario",
"password": "Contraseña",
"remember_me": "Recordarme?",
"forgot_password": "Olvidaste tu contraseña?",
"alternative_logins": "Conexiones Alternativas",
"failed_login_attempt": "Error al loguearte, intenta de nuevo.",
"login_successful": "Te has conectado con exito!"
}

View File

@@ -0,0 +1,9 @@
{
"title": "Notificaciones",
"back_to_home": "volver al Inicio",
"mark_all_as_read": "Marcar todo como leeido",
"outgoing_link": "Link Externo",
"outgoing_link_message": "Estas saliendo del sitio",
"continue_to": "Continuar",
"return_to": "Volver a "
}

View File

@@ -0,0 +1,5 @@
{
"day": "Día",
"week": "Semana",
"month": "Mes"
}

View File

@@ -0,0 +1,16 @@
{
"register": "Registrase",
"help.email": "Por defecto, tu email será oculto al publico.",
"help.username_restrictions": "El nombre de usuario debe tener entre %1 y %2 caracteres. Los miembros pueden responderte escribiendo @<span id='yourUsername'>usuario</span>.",
"help.minimum_password_length": "Tu contraseña debe tener al menos %1 caracteres.",
"email_address": "Email",
"email_address_placeholder": "Escribe tu email",
"username": "Usuario",
"username_placeholder": "Escribe tu usuario",
"password": "Contraseña",
"password_placeholder": "Escribe tu Contraseña",
"confirm_password": "Confirmar Contraseña",
"confirm_password_placeholder": "Confirmar Contraseña",
"register_now_button": "Registrarme ahora",
"alternative_registration": "Otros metodos interesantes para registrarse"
}

View File

@@ -0,0 +1,13 @@
{
"reset_password": "Resetear Contraseña",
"update_password": "Actualizar contraseña",
"password_changed.title": "Contraseña editada",
"password_changed.message": "<p>La contraseña fue modificada con exito, por favor <a href=\"/login\">conectate de nuevo</a>.",
"wrong_reset_code.title": "Código de Reseteo Incorrecto",
"wrong_reset_code.message": "El código de reseteo ingresado no es correcto. Por favor intentalo de nuevo o <a href=\"/reset\">pide un nuevo código</a>.",
"new_password": "Nueva Contraseña",
"repeat_password": "Confirmar Contraseña",
"enter_email": "Por favor ingresa tu <strong>email</strong> y te enviaremos un email de como resetear tu cuenta.",
"password_reset_sent": "Resteo de contraseña enviado",
"invalid_email": "Email Invalido o no existe!"
}

View File

@@ -0,0 +1,42 @@
{
"topic": "Tema",
"topics": "Temas",
"no_topics_found": "No se encontraron temas!",
"profile": "Perfil",
"posted_by": "Publicado por",
"chat": "Chat",
"notify_me": "Seras notificado cuando haya nuevas respuestas en este tema",
"quote": "Citar",
"reply": "Responder",
"edit": "Editar",
"delete": "Borrar",
"banned": "banneado",
"link": "Link",
"thread_tools.title": "Herramientas del Tema",
"thread_tools.pin": "Poner Sticky",
"thread_tools.lock": "Cerrar Tema",
"thread_tools.move": "Mover Tema",
"thread_tools.delete": "Borrar Tema",
"load_categories": "Cargando Categorias",
"disabled_categories_note": "Las categorías deshabilidas estan en gris",
"confirm_move": "Mover",
"favourite": "Favorito",
"favourites": "Favoritos",
"favourites.not_logged_in.title": "No estas conectado :(",
"favourites.not_logged_in.message": "Por favor, conectate para agregar a favorito este post.",
"favourites.has_no_favourites": "No tienes favoritos, puedes agregar alguno y volver a verlos aqui!",
"posted_by": "Publicado por",
"loading": "Cargando",
"more_posts": "Más posts",
"move_topic": "Mover Tema",
"topic_will_be_moved_to": "Este tema sera movido a la categoría",
"reputation": "Reputación",
"posts": "Posts"
}

View File

@@ -0,0 +1,5 @@
{
"no_unread_topics": "No hay temas nuevos para leer.",
"mark_all_read": "Marcar todo como leeido",
"load_more": "Cargar más"
}

View File

@@ -0,0 +1,36 @@
{
"banned": "Banneado",
"offline": "Desconectado",
"email": "Email",
"fullname": "Nombre Completo",
"website": "Website",
"location": "Ubicación",
"age": "Edad",
"joined": "Registro",
"profile_views": "Visitas en su perfil",
"reputation": "Reputación",
"posts": "Posts",
"followers": "Seguidores",
"following": "Siguiendo",
"signature": "Firma",
"gravatar": "Gravatar",
"birthday": "Cumpleaños",
"change_picture": "Cambiar Foto",
"edit": "Editar",
"uploaded_picture": "Fotos Cargadas",
"upload_new_picture": "Cargar Nueva Foto",
"change_password": "Cambiar Contraseña",
"confirm_password": "Confirmar Contraseña",
"password": "Contraseña",
"upload_picture": "Cargar foto",
"upload_a_picture": "Cargar una foto",
"image_spec": "Solo puedes usar PNG, JPG, o GIF hasta 256kb.",
"settings": "Opciones",
"show_email": "Mostrar mi Email",
"has_no_follower": "Este miembro no tiene seguidores :(",
"follows_no_one": "Este miembro no sigue a nadie, que pena :("
}

View File

@@ -0,0 +1,9 @@
{
"latest_users": "Ultimos Miembros",
"top_posters": "Top Posteadores",
"most_reputation": "Mayor Reputación",
"online": "Conectados",
"search": "Buscar",
"enter_username": "Ingresa el nombre de usuario para buscar",
"load_more": "Cargar más"
}

View File

@@ -0,0 +1,14 @@
{
"new_topic_button": "Nouveau Sujet",
"no_topics": "<strong>Il n'y a aucun topic dans cette catégorie.</strong><br />Pourquoi ne pas en créer un?",
"sidebar.recent_replies": "Réponses Récentes",
"sidebar.active_participants": "Participants Actifs",
"sidebar.moderators": "Modérateurs",
"posts": "messages",
"views": "vues",
"posted": "posté",
"browsing": "naviguer",
"no_replies": "Personne n'a répondu",
"replied": "répondu",
"last_edited_by": "dernière édition par"
}

View File

@@ -0,0 +1,10 @@
{
"chat.chatting_with": "Chat avec <span id=\"chat-with-name\"></span>",
"chat.placeholder": "taper le message ici, presser entrer pour envoyer",
"chat.send": "Envoyer",
"stats.online": "Online",
"stats.users": "Utilisateurs",
"stats.topics": "Sujets",
"stats.posts": "Message",
"success": "succès"
}

View File

@@ -0,0 +1,31 @@
{
"home": "Accueil",
"search": "Recherche",
"buttons.close": "Fermer",
"403.title": "Accès Refusé",
"403.message": "Il semble que vous vous soyez retrouvé sur une page dont vous n'avez pas accès. Peut-être devriez vous <a href='/login'>essayez de vous connecter</a>?",
"404.title": "Introuvable",
"404.message": "Il semble que vous vous soyez retrouvé sur une page qui n'existe pas. Retourner à <a href='/'>l'accueil</a>.",
"500.title": "Erreur Interne.",
"500.message": "Oops! Il semblerait que quelque chose se soit mal passé!",
"register": "S'inscrire",
"login": "Connecter",
"logout": "Déconnection",
"logout.title": "Vous êtes maintenant déconnecté.",
"logout.message": "Vous vous êtes déconnecté de NodeBB avec succès",
"save_changes": "Enregistrer les changements",
"close": "Fermer",
"header.admin": "Admin",
"header.recent": "Récent",
"header.unread": "Non Lu",
"header.users": "Utilisateurs",
"header.search": "Recherche",
"header.profile": "Profile",
"notifications.loading": "Chargement des Notifications",
"chats.loading": "Chargement des Chats"
}

View File

@@ -0,0 +1,10 @@
{
"login": "Connexion",
"username": "Identifiant",
"password": "Mot de passe",
"remember_me": "Se souvenir de moi?",
"forgot_password": "Mot de passe oublié?",
"alternative_logins": "Connexion Alternative",
"failed_login_attempt": "Echèc d'authentification, veuillez réessayer.",
"login_successful": "Vous êtes maintenant connecté!"
}

View File

@@ -0,0 +1,9 @@
{
"title": "Notifications",
"back_to_home": "retour à NodeBB",
"mark_all_as_read": "Tout marquer comme lu",
"outgoing_link": "Lien Sortant",
"outgoing_link_message": "Vous quitter NodeBB",
"continue_to": "Continuer vers",
"return_to": "Retour vers"
}

View File

@@ -0,0 +1,5 @@
{
"day": "Jour",
"week": "Semaine",
"month": "Mois"
}

View File

@@ -0,0 +1,16 @@
{
"register": "S'inscrire",
"help.email": "Par défault, votre email est masqué du public.",
"help.username_restrictions": "Un identifiant unique entre %1 et %2 charactères. Les autres utilisateurs peuvent vous citer avec @<span id='yourUsername'>username</span>.",
"help.minimum_password_length": "Votre mot de passe doit avoir au moins %1 charactères.",
"email_address": "Adresse Email",
"email_address_placeholder": "Entrer l'addresse Email",
"username": "Nom d'utilisateur",
"username_placeholder": "Entré le Nom d'utilisateur",
"password": "Mot de passe",
"password_placeholder": "Entrer le Mot de passe",
"confirm_password": "Confirmer le Mot de passe",
"confirm_password_placeholder": "Confirmer le Mot de passe",
"register_now_button": "S'enregistrer maintenant",
"alternative_registration": "Enregistrement Alternatif"
}

View File

@@ -0,0 +1,13 @@
{
"reset_password": "Réinitialiser le Mot de passe",
"update_password": "Mettre à jour le Mot de passe",
"password_changed.title": "Mot de passe modifié",
"password_changed.message": "<p>Mot de passe réinitialisé avec succès, veuillez vous <a href=\"/login\">reconnecter</a>.",
"wrong_reset_code.title": "Code de Réinisialisation Incorrect",
"wrong_reset_code.message": "Le Code de Réinisialisation est Incorrect. Veillez réessayer, ou <a href=\"/reset\">demander un nouveau Code de Réinisialisation</a>.",
"new_password": "Nouveau Mot de passe",
"repeat_password": "Confirmer le Mot de passe",
"enter_email": "Veuillez entrer votre <strong>adresse email</strong> et vous recevrez un email avec les instruction pour réinitialiser votre compte.",
"password_reset_sent": "Réinitialisation de Mot de Passe Envoyée",
"invalid_email": "Email Invalide / L'Email n'existe pas!"
}

View File

@@ -0,0 +1,42 @@
{
"topic": "Sujet",
"topics": "Sujets",
"no_topics_found": "Aucun sujet trouvé!",
"profile": "Profile",
"posted_by": "Envoyé by",
"chat": "Chat",
"notify_me": "Être notifié des réponses dans ce sujet",
"quote": "Citer",
"reply": "Répondre",
"edit": "Editer",
"delete": "Supprimer",
"banned": "bannir",
"link": "Lien",
"thread_tools.title": "Outils du Fil",
"thread_tools.pin": "Epingler le fil",
"thread_tools.lock": "Verrouiller le fil",
"thread_tools.move": "Déplacer le fil",
"thread_tools.delete": "Supprimer le fil",
"load_categories": "Chargement des Categories",
"disabled_categories_note": "Les Catégories Désactivées sont grisées",
"confirm_move": "Déplacer",
"favourite": "Favoris",
"favourites": "Favoris",
"favourites.not_logged_in.title": "Non Connecté",
"favourites.not_logged_in.message": "Veuillez vous connecter avant de mettre ce message en Favoris",
"favourites.has_no_favourites": "Vous n'avez aucun Favoris, mettre en favoris des messages pour les voir apparaître ici!",
"posted_by": "posté par",
"loading": "Chargement",
"more_posts": "d'autres Messages",
"move_topic": "Déplacer le Sujet",
"topic_will_be_moved_to": "Ce sujet sera déplacé vers la catégorie",
"reputation": "réputation",
"posts": "messages"
}

View File

@@ -0,0 +1,5 @@
{
"no_unread_topics": "Aucun sujet non lu.",
"mark_all_read": "Marquer tout comme lu",
"load_more": "Charger la suite"
}

View File

@@ -0,0 +1,36 @@
{
"banned": "Banni",
"offline": "Hors-ligne",
"email": "email",
"fullname": "Nom",
"website": "Site Web",
"location": "Emplacement",
"age": "age",
"joined": "adhésion",
"profil_views": "vues du profil",
"reputation": "réputation",
"posts": "messages",
"followers": "suiveurs",
"following": "suivis",
"signature": "signature",
"gravatar": "gravatar",
"birthday": "anniversaire",
"change_picture": "changer d'image",
"edit": "editer",
"uploaded_picture": "images uploadées",
"upload_new_picture": "uploader une nouvelle image",
"change_password": "chnger le mot de passe",
"confirm_password": "confirmer le mot de passe",
"password": "mot de passe",
"upload_picture": "Uploader un image",
"upload_a_picture": "Uploader un image",
"image_spec": "Vous pouvez uploader seulement des fichiers de types PNG, JPG, ou GIF en dessous de 256kb.",
"settings": "paramètres",
"show_my_email": "montrer mon email",
"has_no_follower": "Cet utilisateur n'a aucun suiver :(",
"follows_no_one": "Cet utilisateur ne suit personne :("
}

View File

@@ -0,0 +1,9 @@
{
"latest_users": "Derniers Utilisateurs",
"top_posters": "Meilleurs Publieur",
"most_reputation": "Meilleur Réputation",
"online": "En Ligne",
"search": "Rechercher",
"enter_username": "Entrer un nom d'utilisateur pour rechercher",
"load_more": "Charger la suite"
}

BIN
public/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,8 +1,10 @@
"use strict";
var ajaxify = {};
(function ($) {
/*global app, templates, utils*/
(function($) {
var location = document.location || window.location,
rootUrl = location.protocol + '//' + (location.hostname || location.host) + (location.port ? ':' + location.port : ''),
content = null;
@@ -11,8 +13,8 @@ var ajaxify = {};
var executed = {};
var events = [];
ajaxify.register_events = function(new_page_events) {
for (var i = 0, ii = events.length; i<ii; i++) {
ajaxify.register_events = function (new_page_events) {
for (var i = 0, ii = events.length; i < ii; i++) {
socket.removeAllListeners(events[i]); // optimize this to user removeListener(event, listener) instead.
}
@@ -20,104 +22,185 @@ var ajaxify = {};
};
window.onpopstate = function(event) {
window.onpopstate = function (event) {
// "quiet": If set to true, will not call pushState
if (event !== null && event.state && event.state.url !== undefined) ajaxify.go(event.state.url, null, null, true);
if (event !== null && event.state && event.state.url !== undefined) {
ajaxify.go(event.state.url, null, true);
}
};
ajaxify.go = function(url, callback, template, quiet) {
// leave room and join global
app.enter_room('global');
var pagination, paginator_bar;
var url = url.replace(/\/$/, "");
ajaxify.currentPage = null;
if(url.indexOf(RELATIVE_PATH.slice(1)) !== -1) {
ajaxify.go = function (url, callback, quiet) {
// start: the following should be set like so: ajaxify.onchange(function(){}); where the code actually belongs
$(window).off('scroll');
app.enterRoom('global');
pagination = pagination || document.getElementById('pagination');
paginator_bar = pagination ? document.body.querySelector('.progress-container') : undefined;
if (pagination) {
pagination.parentNode.style.display = 'none';
paginator_bar.style.display = 'none';
}
window.onscroll = null;
// end
// Remove trailing slash
url = url.replace(/\/$/, "");
var hash = window.location.hash;
if (url.indexOf(RELATIVE_PATH.slice(1)) !== -1) {
url = url.slice(RELATIVE_PATH.length);
}
var tpl_url = templates.get_custom_map(url);
var tpl_url = templates.get_custom_map(url.split('?')[0]);
if (tpl_url == false && !templates[url]) {
if(url === '' || url === '/') {
if (url === '' || url === '/') {
tpl_url = 'home';
} else {
tpl_url = url.split('/')[0];
tpl_url = url.split('/')[0].split('?')[0];
}
} else if (templates[url]) {
tpl_url = url;
}
if (templates.is_available(tpl_url) && !templates.force_refresh(tpl_url)) {
if (quiet !== true) {
window.history.pushState({
"url": url
}, url, RELATIVE_PATH + "/" + url);
ajaxify.currentPage = tpl_url;
if (window.history && window.history.pushState) {
window.history[!quiet ? 'pushState' : 'replaceState']({
url: url
}, url, RELATIVE_PATH + '/' + url);
$.ajax(RELATIVE_PATH + '/plugins/fireHook', {
type: 'PUT',
data: {
_csrf: $('#csrf_token').val(),
hook: 'page.load',
args: {
template: tpl_url,
url: url,
uid: app.uid
}
}
});
}
jQuery('#footer, #content').fadeOut(100);
translator.load(tpl_url);
jQuery('#footer, #content').removeClass('hide').addClass('ajaxifying');
templates.flush();
templates.load_template(function() {
templates.load_template(function () {
exec_body_scripts(content);
require(['forum/' + tpl_url], function(script) {
if (script && script.init) {
script.init();
}
});
if (callback) {
callback();
}
app.process_page();
jQuery('#content, #footer').stop(true, true).fadeIn(200);
}, url, template);
app.processPage();
jQuery('#content, #footer').stop(true, true).removeClass('ajaxifying');
if (window.location.hash) {
hash = window.location.hash;
}
if (hash) {
require(['forum/topic'], function(topic) {
topic.scrollToPost(hash.substr(1));
});
}
app.refreshTitle(url);
}, url);
return true;
}
return false;
}
};
ajaxify.onclick = function(ev) {
}
ajaxify.refresh = function() {
ajaxify.go(ajaxify.currentPage);
};
$('document').ready(function() {
if (!window.history || !window.history.pushState) return; // no ajaxification for old browsers
$('document').ready(function () {
if (!window.history || !window.history.pushState) {
return; // no ajaxification for old browsers
}
content = content || document.getElementById('content');
// Enhancing all anchors to ajaxify...
$(document.body).on('click', 'a', function(e) {
if (this.href == window.location.href + "#") return;
var url = this.href.replace(rootUrl +'/', '');
if (this.target !== '') return;
$(document.body).on('click', 'a', function (e) {
function hrefEmpty(href) {
return href === 'javascript:;' || href === window.location.href + "#" || href.slice(-1) === "#";
}
if (!e.ctrlKey && e.which === 1) {
if (ajaxify.go(url)) {
e.preventDefault();
if (hrefEmpty(this.href) || this.target !== '' || this.protocol === 'javascript:') {
return;
}
if(!window.location.pathname.match(/\/(403|404)$/g)) {
app.previousUrl = window.location.href;
}
if (this.getAttribute('data-ajaxify') === 'false') {
return;
}
if ((!e.ctrlKey && !e.shiftKey) && e.which === 1) {
if (this.host === window.location.host) {
// Internal link
var url = this.href.replace(rootUrl + '/', '');
if (ajaxify.go(url)) {
e.preventDefault();
}
} else if (window.location.pathname !== '/outgoing') {
// External Link
if (config.useOutgoingLinksPage == true) {
ajaxify.go('outgoing?url=' + encodeURIComponent(this.href));
e.preventDefault();
}
}
}
});
});
function exec_body_scripts(body_el) {
// modified from http://stackoverflow.com/questions/2592092/executing-script-elements-inserted-with-innerhtml
function nodeName(elem, name) {
return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
};
}
function evalScript(elem) {
var data = (elem.text || elem.textContent || elem.innerHTML || "" ),
head = document.getElementsByTagName("head")[0] ||
document.documentElement,
var data = (elem.text || elem.textContent || elem.innerHTML || ""),
head = document.getElementsByTagName("head")[0] ||
document.documentElement,
script = document.createElement("script");
script.type = "text/javascript";
try {
script.appendChild(document.createTextNode(data));
} catch(e) {
script.text = data;
script.appendChild(document.createTextNode(data));
} catch (e) {
script.text = data;
}
if (elem.src) {
@@ -127,18 +210,18 @@ var ajaxify = {};
head.insertBefore(script, head.firstChild);
//TODO: remove from head before inserting?, doing this breaks scripts in safari so commented out for now
//head.removeChild(script);
};
}
var scripts = [],
script,
children_nodes = body_el.childNodes,
children_nodes = $(body_el).find('script'),
child,
i;
for (i = 0; children_nodes[i]; i++) {
child = children_nodes[i];
if (nodeName(child, "script" ) &&
(!child.type || child.type.toLowerCase() === "text/javascript")) {
if (nodeName(child, "script") &&
(!child.type || child.type.toLowerCase() === "text/javascript")) {
scripts.push(child);
}
}
@@ -150,6 +233,6 @@ var ajaxify = {};
}
evalScript(scripts[i]);
}
};
}(jQuery));
}
}(jQuery));

View File

@@ -1,314 +1,488 @@
var socket,
config,
app = {},
API_URL = null;
app = {
"username": null,
"uid": null,
"isFocused": true,
"currentRoom": null
};
(function () {
var showWelcomeMessage = false;
(function() {
function loadConfig() {
app.loadConfig = function() {
$.ajax({
url: RELATIVE_PATH + '/config.json?v=' + new Date().getTime(),
success: function(data) {
API_URL = data.api_url;
url: RELATIVE_PATH + '/api/config',
success: function (data) {
config = data;
socket = io.connect(config.socket.address + (config.socket.port ? ':' + config.socket.port : ''));
var reconnecting = false;
var reconnectTries = 0;
socket.on('event:connect', function(data) {
console.log('connected to nodebb socket: ', data);
});
socket.on('event:alert', function(data) {
app.alert(data);
});
socket.on('event:consolelog', function(data) {
console.log(data);
});
socket.on('connect', function(data){
if(reconnecting) {
setTimeout(function(){
app.alert({
alert_id: 'connection_alert',
title: 'Connected',
message: 'Connection successful.',
type: 'success',
timeout: 5000
});
}, 1000);
reconnecting = false;
socket.emit('api:updateHeader', { fields: ['username', 'picture', 'userslug'] });
}
});
socket.on('reconnecting', function(data) {
function showDisconnectModal() {
$('#disconnect-modal').modal({
backdrop:'static',
show:true
});
$('#reload-button').on('click',function(){
$('#disconnect-modal').modal('hide');
window.location.reload();
});
}
reconnecting = true;
reconnectTries++;
if(reconnectTries > 4) {
showDisconnectModal();
return;
}
app.alert({
alert_id: 'connection_alert',
title: 'Reconnecting',
message: 'You have disconnected from NodeBB, we will try to reconnect you. <br/><i class="icon-refresh icon-spin"></i>',
type: 'notify',
timeout: 5000
if(socket) {
socket.disconnect();
setTimeout(function() {
socket.socket.connect();
}, 200);
} else {
var max_reconnection_attemps = 5;
var reconnection_delay = 200;
socket = io.connect(RELATIVE_PATH, {
'max reconnection attempts': max_reconnection_attemps,
'reconnection delay': reconnection_delay
});
});
socket.on('api:user.get_online_users', function(users) {
jQuery('.username-field').each(function() {
if (this.processed === true)
return;
var el = jQuery(this),
uid = el.parents('li').attr('data-uid');
if (uid && jQuery.inArray(uid, users) !== -1) {
el.prepend('<i class="icon-circle"></i>&nbsp;');
} else {
el.prepend('<i class="icon-circle-blank"></i>&nbsp;');
}
el.processed = true;
});
});
app.enter_room('global');
var reconnecting = false,
reconnectEl, reconnectTimer;
socket.on('event:connect', function (data) {
app.username = data.username;
app.uid = data.uid;
app.showLoginMessage();
socket.emit('api:updateHeader', {
fields: ['username', 'picture', 'userslug']
});
});
socket.on('event:alert', function (data) {
app.alert(data);
});
socket.on('connect', function (data) {
if (reconnecting) {
reconnectEl.tooltip('destroy');
reconnectEl.html('<i class="fa fa-check"></i>');
reconnecting = false;
// Rejoin room that was left when we disconnected
var url_parts = document.location.pathname.slice(RELATIVE_PATH.length).split('/').slice(1),
room;
switch(url_parts[0]) {
case 'user':
room = 'user/' + templates.get('theirid');
case 'topic':
room = 'topic_' + url_parts[1];
break;
case 'category':
room = 'category_' + url_parts[1];
break;
case 'recent': // intentional fall-through
case 'unread':
room = 'recent_posts';
break;
case 'admin':
room = 'admin';
break;
default:
room = 'global';
break;
}
app.enterRoom(room, true);
socket.emit('reconnected');
setTimeout(function() {
reconnectEl.removeClass('active').addClass("hide");
}, 3000);
}
socket.emit('api:updateHeader', {
fields: ['username', 'picture', 'userslug']
});
});
socket.on('event:disconnect', function() {
socket.socket.connect();
});
socket.on('reconnecting', function (data, attempt) {
if(attempt == max_reconnection_attemps) {
socket.socket.reconnectionAttempts = 0;
socket.socket.reconnectionDelay = reconnection_delay;
return;
}
if (!reconnectEl) reconnectEl = $('#reconnect');
reconnecting = true;
if (!reconnectEl.hasClass('active')) reconnectEl.html('<i class="fa fa-spinner fa-spin"></i>');
reconnectEl.addClass('active').removeClass("hide");
reconnectEl.tooltip({
placement: 'bottom'
});
});
socket.on('api:user.get_online_users', function (users) {
jQuery('a.username-field').each(function () {
if (this.processed === true)
return;
var el = jQuery(this),
uid = el.parents('li').attr('data-uid');
if (uid && jQuery.inArray(uid, users) !== -1) {
el.find('i').remove();
el.prepend('<i class="fa fa-circle"></i>');
} else {
el.find('i').remove();
el.prepend('<i class="fa fa-circle-o"></i>');
}
el.processed = true;
});
jQuery('button .username-field').each(function () {
//DRY FAIL
if (this.processed === true)
return;
var el = jQuery(this),
uid = el.parents('li').attr('data-uid');
if (uid && jQuery.inArray(uid, users) !== -1) {
el.parent().addClass('btn-success');
} else {
el.parent().addClass('btn-danger');
}
el.processed = true;
});
});
socket.on('event:banned', function() {
app.alert({
title: 'Banned',
message: 'You are banned you will be logged out!',
type: 'warning',
timeout: 1000
});
setTimeout(app.logout, 1000);
});
app.enterRoom('global');
}
},
async: false
});
}
};
app.logout = function() {
$.post(RELATIVE_PATH + '/logout', {
_csrf: $('#csrf_token').val()
}, function() {
window.location.href = RELATIVE_PATH + '/';
});
};
// takes a string like 1000 and returns 1,000
app.addCommas = function(text) {
app.addCommas = function (text) {
return text.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
}
};
// Willingly stolen from: http://phpjs.org/functions/strip_tags/
app.strip_tags = function(input, allowed) {
app.strip_tags = function (input, allowed) {
allowed = (((allowed || "") + "").toLowerCase().match(/<[a-z][a-z0-9]*>/g) || []).join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return input.replace(commentsAndPhpTags, '').replace(tags, function ($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
}
};
// use unique alert_id to have multiple alerts visible at a time, use the same alert_id to fade out the current instance
// use unique alert_id to have multiple alerts visible at a time, use the same alert_id to fade out the current instance
// type : error, success, info, warning/notify
// title = bolded title text
// message = alert message content
// timeout default = permanent
// location : alert_window (default) or content
app.alert = function(params) {
var alert_id = 'alert_button_' + ((params.alert_id) ? params.alert_id : new Date().getTime());
app.alert = function (params) {
var alert_id = 'alert_button_' + ((params.alert_id) ? params.alert_id : new Date().getTime());
var alert = $('#'+alert_id);
var alert = $('#' + alert_id);
var title = params.title || '';
function startTimeout(div, timeout) {
var timeoutId = setTimeout(function() {
$(div).fadeOut(1000, function() {
var timeoutId = setTimeout(function () {
$(div).fadeOut(1000, function () {
$(this).remove();
});
}, timeout);
$(div).attr('timeoutId', timeoutId);
}
if(alert.length > 0) {
alert.find('strong').html(params.title);
if (alert.length > 0) {
alert.find('strong').html(title);
alert.find('p').html(params.message);
alert.attr('class', "alert toaster-alert " + ((params.type=='warning') ? '' : "alert-" + params.type));
alert.attr('class', "alert toaster-alert " + "alert-" + params.type);
clearTimeout(alert.attr('timeoutId'));
startTimeout(alert, params.timeout);
}
else {
var div = document.createElement('div'),
button = document.createElement('button'),
strong = document.createElement('strong'),
p = document.createElement('p');
} else {
var div = $('<div id="' + alert_id + '" class="alert toaster-alert alert-' + params.type +'"></div>'),
button = $('<button class="close">&times;</button>'),
strong = $('<strong>' + title + '</strong>'),
p = $('<p>' + params.message + '</p>');
p.innerHTML = params.message;
strong.innerHTML = params.title;
div.append(button)
.append(strong)
.append(p);
div.className = "alert toaster-alert " + ((params.type=='warning') ? '' : "alert-" + params.type);
div.setAttribute('id', alert_id);
div.appendChild(button);
div.appendChild(strong);
div.appendChild(p);
button.on('click', function () {
div.remove();
});
button.className = 'close';
button.innerHTML = '&times;';
button.onclick = function(ev) {
div.parentNode.removeChild(div);
}
if (params.location == null)
if (params.location == null)
params.location = 'alert_window';
jQuery('#'+params.location).prepend(jQuery(div).fadeIn('100'));
$('#' + params.location).prepend(div.fadeIn('100'));
if (params.timeout) {
startTimeout(div, params.timeout);
}
if (params.clickfn) {
div.onclick = function() {
div.on('click', function () {
params.clickfn();
jQuery(div).fadeOut(500, function() {
this.remove();
div.fadeOut(500, function () {
$(this).remove();
});
}
});
}
}
}
app.current_room = null;
app.enter_room = function(room) {
if(socket) {
if (app.current_room === room)
return;
socket.emit('event:enter_room', {
'enter': room,
'leave': app.current_room
});
app.current_room = room;
}
};
app.process_page = function() {
app.alertSuccess = function (message, timeout) {
if (!timeout)
timeout = 2000;
function populate_online_users() {
var uids = [];
app.alert({
title: 'Success',
message: message,
type: 'success',
timeout: timeout
});
};
jQuery('.post-row').each(function() {
uids.push(this.getAttribute('data-uid'));
app.alertError = function (message, timeout) {
if (!timeout)
timeout = 2000;
app.alert({
title: 'Error',
message: message,
type: 'danger',
timeout: timeout
});
};
app.enterRoom = function (room, force) {
if (socket) {
if (app.currentRoom === room && !force) {
return;
}
socket.emit('event:enter_room', {
'enter': room,
'leave': app.currentRoom
});
socket.emit('api:user.get_online_users', uids);
}
// here is where all modules' onNavigate should be called, I think.
require(['mobileMenu'], function(mobileMenu) {
mobileMenu.onNavigate();
app.currentRoom = room;
}
};
app.populateOnlineUsers = function () {
var uids = [];
jQuery('.post-row').each(function () {
uids.push(this.getAttribute('data-uid'));
});
socket.emit('api:user.get_online_users', uids);
};
populate_online_users();
function highlightNavigationLink() {
var path = window.location.pathname,
parts = path.split('/'),
active = parts[parts.length - 1];
setTimeout(function() {
window.scrollTo(0, 1); // rehide address bar on mobile after page load completes.
}, 100);
}
jQuery('document').ready(function() {
// On menu click, change "active" state
var menuEl = document.querySelector('.nav'),
liEls = menuEl.querySelectorAll('li'),
logoutEl = document.getElementById('logout'),
parentEl;
menuEl.addEventListener('click', function(e) {
parentEl = e.target.parentNode;
if (parentEl.nodeName === 'LI') {
for(var x=0,numLis=liEls.length;x<numLis;x++) {
if (liEls[x] !== parentEl) liEls[x].className = '';
else parentEl.className = 'active';
jQuery('#main-nav li').removeClass('active');
if (active) {
jQuery('#main-nav li a').each(function () {
var href = this.getAttribute('href');
if (active == "sort-posts" || active == "sort-reputation" || active == "search" || active == "latest" || active == "online")
active = 'users';
if (href && href.match(active)) {
jQuery(this.parentNode).addClass('active');
return false;
}
}
}, false);
});
}
};
addTouchEvents();
app.createUserTooltips = function() {
$('img[title].teaser-pic,img[title].user-img').each(function() {
$(this).tooltip({
placement: 'top',
title: $(this).attr('title')
});
});
};
app.makeNumbersHumanReadable = function(elements) {
elements.each(function() {
$(this).html(utils.makeNumberHumanReadable($(this).attr('title')));
});
};
app.processPage = function () {
app.populateOnlineUsers();
highlightNavigationLink();
$('span.timeago').timeago();
$('.post-content img').addClass('img-responsive');
app.makeNumbersHumanReadable($('.human-readable-number'));
app.createUserTooltips();
setTimeout(function () {
window.scrollTo(0, 1); // rehide address bar on mobile after page load completes.
}, 100);
};
app.showLoginMessage = function () {
function showAlert() {
app.alert({
type: 'success',
title: 'Welcome Back ' + app.username + '!',
message: 'You have successfully logged in!',
timeout: 5000
});
}
if (showWelcomeMessage) {
showWelcomeMessage = false;
if (document.readyState !== 'complete') {
$(document).ready(showAlert);
} else {
showAlert();
}
}
};
app.addCommasToNumbers = function () {
$('.formatted-number').each(function (index, element) {
$(element).html(app.addCommas($(element).html()));
});
};
app.openChat = function (username, touid) {
if (username === app.username) {
app.alert({
type: 'warning',
title: 'Invalid Chat',
message: "You can't chat with yourself!",
timeout: 5000
});
return;
}
if (!app.username) {
app.alert({
type: 'danger',
title: 'Not Logged In',
message: 'Please log in to chat with <strong>' + username + '</strong>',
timeout: 5000
});
return;
}
require(['chat'], function (chat) {
var chatModal;
if (!chat.modalExists(touid)) {
chatModal = chat.createModal(username, touid);
} else {
chatModal = chat.getModal(touid);
}
chat.load(chatModal.attr('UUID'));
chat.center(chatModal);
});
};
app.scrollToTop = function () {
$('body,html').animate({
scrollTop: 0
});
};
app.scrollToBottom = function () {
$('body,html').animate({
scrollTop: $('html').height() - 100
});
};
var titleObj = {
active: false,
interval: undefined,
titles: []
};
app.alternatingTitle = function (title) {
if (typeof title !== 'string') return;
if (title.length > 0) {
titleObj.titles[1] = title;
if (titleObj.interval) {
clearInterval(titleObj.interval);
}
titleObj.interval = setInterval(function() {
window.document.title = titleObj.titles[titleObj.titles.indexOf(window.document.title) ^ 1];
}, 2000);
} else {
if (titleObj.interval) {
clearInterval(titleObj.interval);
}
if (titleObj.titles[0]) window.document.title = titleObj.titles[0];
}
};
app.refreshTitle = function(url) {
if (!url) {
var a = document.createElement('a');
a.href = document.location;
url = a.pathname.slice(1);
}
socket.emit('api:meta.buildTitle', url, function(title, numNotifications) {
titleObj.titles[0] = (numNotifications > 0 ? '(' + numNotifications + ') ' : '') + title;
app.alternatingTitle('');
});
};
jQuery('document').ready(function () {
$('#search-form').on('submit', function () {
var input = $(this).find('input');
ajaxify.go("search/" + input.val());
input.val('');
return false;
});
$(window).blur(function(){
app.isFocused = false;
});
$(window).focus(function(){
app.isFocused = true;
app.alternatingTitle('');
});
});
loadConfig();
showWelcomeMessage = location.href.indexOf('loggedin') !== -1;
function addTouchEvents() {
return; // later.
// click simulation just for testing/sanity purposes.
var el = jQuery("#content"),
sidebar = jQuery('#mobile-sidebar'),
width = el.width();
function onTouchMove(ev) {
var coordinates = window.event ? window.event.touches[0] : ev.touches[0];
el.css({
marginLeft: -parseInt(width - coordinates.pageX) + 'px',
paddingRight: parseInt(width - coordinates.pageX) + 'px'});
sidebar.css({
marginLeft: -parseInt(width - coordinates.pageX) + 'px',
width: parseInt(width - coordinates.pageX) + 'px'
});
}
function onMouseMove(ev) {
ev.touches = [{pageX: ev.pageX, pageY: ev.pageY}];
onTouchMove(ev);
}
function onTouchEnd() {
el.css({
marginLeft: '0px',
paddingRight: '0px'
});
sidebar.css({
marginLeft: '0px',
width: '0px'
});
}
el.on('touchmove', onTouchMove);
el.on('mousedown', function() {
el.on('mousemove', onMouseMove);
});
el.on('touchend', onTouchEnd);
el.on('mouseup', function() {
el.off('mousemove');
onTouchEnd();
});
}
}());
app.loadConfig();
app.alternatingTitle('');
}());

View File

@@ -1,37 +1,101 @@
(function() {
var yourid = templates.get('yourid'),
theirid = templates.get('theirid'),
isFollowing = templates.get('isFollowing');
define(['forum/accountheader'], function(header) {
var Account = {};
$(document).ready(function() {
Account.init = function() {
header.init();
var yourid = templates.get('yourid'),
theirid = templates.get('theirid'),
isFollowing = templates.get('isFollowing');
$(document).ready(function() {
var username = $('.account-username a').html();
app.enterRoom('user/' + theirid);
app.addCommasToNumbers();
$('.user-recent-posts img').addClass('img-responsive');
var followBtn = $('#follow-btn');
var unfollowBtn = $('#unfollow-btn');
var chatBtn = $('#chat-btn');
if (yourid !== theirid && yourid !== "0") {
if (isFollowing) {
followBtn.addClass('hide');
unfollowBtn.removeClass('hide');
} else {
followBtn.removeClass('hide');
unfollowBtn.addClass('hide');
}
chatBtn.removeClass('hide');
} else {
followBtn.addClass('hide');
unfollowBtn.addClass('hide');
chatBtn.addClass('hide');
}
followBtn.on('click', function() {
socket.emit('api:user.follow', {
uid: theirid
}, function(success) {
if (success) {
followBtn.addClass('hide');
unfollowBtn.removeClass('hide');
app.alertSuccess('You are now following ' + username + '!');
} else {
app.alertError('There was an error following' + username + '!');
}
});
return false;
});
unfollowBtn.on('click', function() {
socket.emit('api:user.unfollow', {
uid: theirid
}, function(success) {
if (success) {
followBtn.removeClass('hide');
unfollowBtn.addClass('hide');
app.alertSuccess('You are no longer following ' + username + '!');
} else {
app.alertError('There was an error unfollowing ' + username + '!');
}
});
return false;
});
chatBtn.on('click', function() {
app.openChat(username, theirid);
});
$('.user-recent-posts .topic-row').on('click', function() {
ajaxify.go($(this).attr('topic-url'));
});
socket.on('api:user.isOnline', Account.handleUserOnline);
socket.emit('api:user.isOnline', theirid, Account.handleUserOnline);
socket.on('event:new_post', function(data) {
var html = templates.prepare(templates['account'].blocks['posts']).parse(data);
$('.user-recent-posts').prepend(html);
$('.user-recent-posts span.timeago').timeago();
});
var rep = $('#reputation');
rep.html(app.addCommas(rep.html()));
var postcount = $('#postcount');
postcount.html(app.addCommas(postcount.html()));
var editLink = $('#editLink');
var followBtn = $('#follow-btn');
if( yourid !== theirid) {
editLink.hide();
if(isFollowing)
followBtn.hide();
else
followBtn.show();
}
else {
followBtn.hide();
}
followBtn.on('click', function() {
followBtn.remove();
socket.emit('api:user.follow', {uid: theirid});
return false;
});
};
});
Account.handleUserOnline = function(data) {
var onlineStatus = $('.account-online-status');
}());
if (data.online) {
onlineStatus.find('span span').text('online');
onlineStatus.find('i').attr('class', 'fa fa-circle');
} else {
onlineStatus.find('span span').text('offline');
onlineStatus.find('i').attr('class', 'fa fa-circle-o');
}
};
return Account;
});

View File

@@ -1,254 +1,243 @@
define(['forum/accountheader', 'uploader'], function(header, uploader) {
var AccountEdit = {},
gravatarPicture = '',
uploadedPicture = '';
AccountEdit.init = function() {
header.init();
var gravatarPicture = templates.get('gravatarpicture');
var uploadedPicture = templates.get('uploadedpicture');
gravatarPicture = templates.get('gravatarpicture');
uploadedPicture = templates.get('uploadedpicture');
$(document).ready(function() {
var selectedImageType = '';
$('#submitBtn').on('click', function() {
$('#uploadForm').submit(function() {
status('uploading the file ...');
$('#upload-progress-bar').css('width', '0%');
$('#upload-progress-box').show();
if(!$('#userPhotoInput').val()) {
error('select an image to upload!');
return false;
}
$(this).find('#imageUploadCsrf').val($('#csrf_token').val());
var userData = {
uid: $('#inputUID').val(),
email: $('#inputEmail').val(),
fullname: $('#inputFullname').val(),
website: $('#inputWebsite').val(),
birthday: $('#inputBirthday').val(),
location: $('#inputLocation').val(),
signature: $('#inputSignature').val()
};
$(this).ajaxSubmit({
error: function(xhr) {
error('Error: ' + xhr.status);
},
uploadProgress : function(event, position, total, percent) {
$('#upload-progress-bar').css('width', percent+'%');
},
success: function(response) {
if(response.error) {
error(response.error);
return;
socket.emit('api:user.updateProfile', userData, function(err, data) {
if (data.success) {
app.alertSuccess('Your profile has been updated successfully!');
if (data.picture) {
$('#user-current-picture').attr('src', data.picture);
$('#user_label img').attr('src', data.picture);
}
if (data.gravatarpicture) {
$('#user-gravatar-picture').attr('src', data.gravatarpicture);
gravatarPicture = data.gravatarpicture;
}
} else {
app.alertError('There was an error updating your profile! ' + err.error);
}
var imageUrlOnServer = response.path;
$('#user-current-picture').attr('src', imageUrlOnServer);
$('#user-uploaded-picture').attr('src', imageUrlOnServer);
uploadedPicture = imageUrlOnServer;
setTimeout(function() {
hideAlerts();
$('#upload-picture-modal').modal('hide');
}, 750);
socket.emit('api:updateHeader', { fields: ['username', 'picture', 'userslug'] });
success('File uploaded successfully!');
}
});
return false;
});
function hideAlerts() {
$('#alert-status').hide();
$('#alert-success').hide();
$('#alert-error').hide();
$('#upload-progress-box').hide();
}
function status(message) {
hideAlerts();
$('#alert-status').text(message).show();
}
function success(message) {
hideAlerts();
$('#alert-success').text(message).show();
}
function error(message) {
hideAlerts();
$('#alert-error').text(message).show();
}
function changeUserPicture(type) {
var userData = {
type: type
};
socket.emit('api:user.changePicture', userData);
}
var selectedImageType = '';
$('#submitBtn').on('click',function(){
var userData = {
uid:$('#inputUID').val(),
email:$('#inputEmail').val(),
fullname:$('#inputFullname').val(),
website:$('#inputWebsite').val(),
birthday:$('#inputBirthday').val(),
location:$('#inputLocation').val(),
signature:$('#inputSignature').val()
};
socket.emit('api:user.updateProfile', userData);
return false;
});
function updateImages() {
var currentPicture = $('#user-current-picture').attr('src');
if(gravatarPicture) {
$('#user-gravatar-picture').attr('src', gravatarPicture);
$('#gravatar-box').show();
}
else
$('#gravatar-box').hide();
if(uploadedPicture) {
$('#user-uploaded-picture').attr('src', uploadedPicture);
$('#uploaded-box').show();
}
else
$('#uploaded-box').hide();
if(currentPicture == gravatarPicture)
$('#gravatar-box .icon-ok').show();
else
$('#gravatar-box .icon-ok').hide();
if(currentPicture == uploadedPicture)
$('#uploaded-box .icon-ok').show();
else
$('#uploaded-box .icon-ok').hide();
}
$('#changePictureBtn').on('click', function() {
selectedImageType = '';
updateImages();
$('#change-picture-modal').modal('show');
return false;
});
$('#gravatar-box').on('click', function(){
$('#gravatar-box .icon-ok').show();
$('#uploaded-box .icon-ok').hide();
selectedImageType = 'gravatar';
});
$('#uploaded-box').on('click', function(){
$('#gravatar-box .icon-ok').hide();
$('#uploaded-box .icon-ok').show();
selectedImageType = 'uploaded';
});
$('#savePictureChangesBtn').on('click', function() {
$('#change-picture-modal').modal('hide');
if(selectedImageType) {
changeUserPicture(selectedImageType);
if(selectedImageType == 'gravatar')
$('#user-current-picture').attr('src', gravatarPicture);
else if(selectedImageType == 'uploaded')
$('#user-current-picture').attr('src', uploadedPicture);
}
});
$('#upload-picture-modal').on('hide', function() {
$('#userPhotoInput').val('');
});
$('#uploadPictureBtn').on('click', function(){
$('#change-picture-modal').modal('hide');
$('#upload-picture-modal').modal('show');
hideAlerts();
return false;
});
$('#pictureUploadSubmitBtn').on('click', function() {
$('#uploadForm').submit();
});
(function handlePasswordChange() {
var currentPassword = $('#inputCurrentPassword');
var password_notify = $('#password-notify');
var password_confirm_notify = $('#password-confirm-notify');
var password = $('#inputNewPassword');
var password_confirm = $('#inputNewPasswordAgain');
var passwordvalid = false;
var passwordsmatch = false;
function onPasswordChanged() {
passwordvalid = utils.isPasswordValid(password.val());
if (password.val().length < 6) {
password_notify.html('Password too short');
password_notify.attr('class', 'label label-important');
} else if(!passwordvalid) {
password_notify.html('Invalid password');
password_notify.attr('class', 'label label-important');
} else {
password_notify.html('OK!');
password_notify.attr('class', 'label label-success');
}
onPasswordConfirmChanged();
}
function onPasswordConfirmChanged() {
if(password.val() !== password_confirm.val()) {
password_confirm_notify.html('Passwords must match!');
password_confirm_notify.attr('class', 'label label-important');
passwordsmatch = false;
} else {
password_confirm_notify.html('OK!');
password_confirm_notify.attr('class', 'label label-success');
passwordsmatch = true;
}
}
password.on('keyup', onPasswordChanged);
password_confirm.on('keyup', onPasswordConfirmChanged);
$('#changePasswordBtn').on('click', function() {
if(passwordvalid && passwordsmatch && currentPassword.val()) {
socket.emit('api:user.changePassword', {
'currentPassword': currentPassword.val(),
'newPassword': password.val()
});
}
});
return false;
});
socket.on('api:user.changePassword', function(data) {
currentPassword.val('');
password.val('');
password_confirm.val('');
password_notify.html('');
password_confirm_notify.html('');
passwordsmatch = false;
passwordvalid = false;
function getSignatureCharsLeft() {
return '(' + $('#inputSignature').val().length + '/' + config.maximumSignatureLength + ')';
}
$('#signatureCharCountLeft').html(getSignatureCharsLeft());
$('#inputSignature').on('keyup change', function(ev) {
$('#signatureCharCountLeft').html(getSignatureCharsLeft());
});
}());
$('#changePictureBtn').on('click', function() {
selectedImageType = '';
AccountEdit.updateImages();
$('#change-picture-modal').modal('show');
$('#change-picture-modal').removeClass('hide');
return false;
});
$('#gravatar-box').on('click', function() {
$('#gravatar-box .fa-check').show();
$('#uploaded-box .fa-check').hide();
selectedImageType = 'gravatar';
});
$('#uploaded-box').on('click', function() {
$('#gravatar-box .fa-check').hide();
$('#uploaded-box .fa-check').show();
selectedImageType = 'uploaded';
});
$('#savePictureChangesBtn').on('click', function() {
$('#change-picture-modal').modal('hide');
if (selectedImageType) {
AccountEdit.changeUserPicture(selectedImageType);
if (selectedImageType == 'gravatar')
$('#user-current-picture').attr('src', gravatarPicture);
else if (selectedImageType == 'uploaded')
$('#user-current-picture').attr('src', uploadedPicture);
}
});
$('#upload-picture-modal').on('hide', function() {
$('#userPhotoInput').val('');
});
$('#uploadPictureBtn').on('click', function() {
$('#change-picture-modal').modal('hide');
uploader.open(RELATIVE_PATH + '/user/uploadpicture', function(imageUrlOnServer) {
imageUrlOnServer = imageUrlOnServer + '?' + new Date().getTime();
$('#user-current-picture').attr('src', imageUrlOnServer);
$('#user-uploaded-picture').attr('src', imageUrlOnServer);
uploadedPicture = imageUrlOnServer;
socket.emit('api:updateHeader', {
fields: ['username', 'picture', 'userslug']
});
});
return false;
});
function showError(element, msg) {
element.html(msg);
element.parent()
.removeClass('alert-success')
.addClass('alert-danger');
element.show();
validationError = true;
}
function showSuccess(element, msg) {
element.html(msg);
element.parent()
.removeClass('alert-danger')
.addClass('alert-success');
element.show();
}
(function handlePasswordChange() {
var currentPassword = $('#inputCurrentPassword');
var password_notify = $('#password-notify');
var password_confirm_notify = $('#password-confirm-notify');
var password = $('#inputNewPassword');
var password_confirm = $('#inputNewPasswordAgain');
var passwordvalid = false;
var passwordsmatch = false;
var successIcon = '<i class="fa fa-check"></i>';
function onPasswordChanged() {
passwordvalid = utils.isPasswordValid(password.val());
if (password.val().length < config.minimumPasswordLength) {
showError(password_notify, 'Password too short!');
} else if (!passwordvalid) {
showError(password_notify, 'Invalid password!');
} else {
showSuccess(password_notify, successIcon);
}
}
function onPasswordConfirmChanged() {
if(password.val()) {
if (password.val() !== password_confirm.val()) {
showError(password_confirm_notify, 'Passwords must match!')
passwordsmatch = false;
} else {
showSuccess(password_confirm_notify, successIcon);
passwordsmatch = true;
}
}
}
password.on('blur', onPasswordChanged);
password_confirm.on('blur', onPasswordConfirmChanged);
$('#changePasswordBtn').on('click', function() {
if (passwordvalid && passwordsmatch && currentPassword.val()) {
socket.emit('api:user.changePassword', {
'currentPassword': currentPassword.val(),
'newPassword': password.val()
}, function(err) {
currentPassword.val('');
password.val('');
password_confirm.val('');
passwordsmatch = false;
passwordvalid = false;
if (err) {
app.alertError(err.error);
return;
}
app.alertSuccess('Your password is updated!');
});
}
return false;
});
}());
};
AccountEdit.changeUserPicture = function(type) {
var userData = {
type: type
};
socket.emit('api:user.changePicture', userData, function(success) {
if (!success) {
app.alertError('There was an error changing picture!');
}
});
}
AccountEdit.updateImages = function() {
var currentPicture = $('#user-current-picture').attr('src');
if (gravatarPicture) {
$('#user-gravatar-picture').attr('src', gravatarPicture);
$('#gravatar-box').show();
} else {
$('#gravatar-box').hide();
}
if (uploadedPicture) {
$('#user-uploaded-picture').attr('src', uploadedPicture);
$('#uploaded-box').show();
} else {
$('#uploaded-box').hide();
}
if (currentPicture == gravatarPicture) {
$('#gravatar-box .fa-check').show();
} else {
$('#gravatar-box .fa-check').hide();
}
if (currentPicture == uploadedPicture) {
$('#uploaded-box .fa-check').show();
} else {
$('#uploaded-box .fa-check').hide();
}
}
return AccountEdit;
});

View File

@@ -0,0 +1,43 @@
define(function() {
var AccountHeader = {};
AccountHeader.init = function() {
var yourid = templates.get('yourid'),
theirid = templates.get('theirid');
AccountHeader.createMenu();
var editLink = $('#editLink');
var settingsLink = $('#settingsLink');
var favouritesLink = $('#favouritesLink');
if (yourid === "0" || yourid !== theirid) {
editLink.hide();
settingsLink.hide();
favouritesLink.hide();
}
jQuery('.account-sub-links span a').removeClass('bold').each(function() {
var href = this.getAttribute('href');
if (window.location.href.indexOf(href) !== -1) {
jQuery(this).addClass('bold');
return false;
}
});
}
AccountHeader.createMenu = function() {
var userslug = $('.account-username-box').attr('data-userslug');
var links = $('<div class="account-sub-links inline-block pull-right">\
<span id="settingsLink" class="pull-right"><a href="/user/' + userslug + '/settings">settings</a></span>\
<span id="favouritesLink" class="pull-right"><a href="/user/' + userslug + '/favourites">favourites</a></span>\
<span class="pull-right"><a href="/user/' + userslug + '/followers">followers</a></span>\
<span class="pull-right"><a href="/user/' + userslug + '/following">following</a></span>\
<span id="editLink" class="pull-right"><a href="/user/' + userslug + '/edit">edit</a></span>\
</div>');
$('.account-username-box').append(links);
}
return AccountHeader;
});

View File

@@ -0,0 +1,25 @@
define(['forum/accountheader'], function(header) {
var AccountSettings = {};
AccountSettings.init = function() {
header.init();
$('#submitBtn').on('click', function() {
var settings = {
showemail: $('#showemailCheckBox').is(':checked') ? 1 : 0
};
socket.emit('api:user.saveSettings', settings, function(err) {
if (!err) {
app.alertSuccess('Settings saved!');
} else {
app.alertError('There was an error saving settings!');
}
});
return false;
});
};
return AccountSettings;
});

View File

@@ -1,79 +1,350 @@
define(['uploader'], function(uploader) {
var Categories = {};
var modified_categories = {};
Categories.init = function() {
var modified_categories = {};
function modified(el) {
var cid = $(el).parents('li').attr('data-cid');
modified_categories[cid] = modified_categories[cid] || {};
modified_categories[cid][el.getAttribute('data-name')] = el.value;
}
function save() {
socket.emit('api:admin.categories.update', modified_categories);
modified_categories = {};
}
function select_icon(el) {
var selected = el.className.replace(' icon-2x', '');
jQuery('#icons .selected').removeClass('selected');
jQuery('#icons .' + selected).parent().addClass('selected');
bootbox.confirm('<h2>Select an icon.</h2>' + document.getElementById('icons').innerHTML, function(confirm) {
if (confirm) {
var iconClass = jQuery('.bootbox .selected').children(':first').attr('class');
el.className = iconClass + ' icon icon-2x';
el.value = iconClass;
modified(el);
function modified(el) {
var cid = $(el).parents('li').attr('data-cid');
if(cid) {
modified_categories[cid] = modified_categories[cid] || {};
modified_categories[cid][$(el).attr('data-name')] = $(el).val();
}
}
});
jQuery('.bootbox .span3').on('click', function() {
jQuery('.bootbox .selected').removeClass('selected');
jQuery(this).addClass('selected');
});
}
function save() {
socket.emit('api:admin.categories.update', modified_categories);
modified_categories = {};
}
function select_icon(el) {
var selected = el.attr('class').replace(' fa-2x', '');
$('#icons .selected').removeClass('selected');
if (selected)
$('#icons .' + selected).parent().addClass('selected');
function update_blockclass(el) {
el.parentNode.parentNode.className = 'entry-row ' + el.value;
}
bootbox.confirm('<h2>Select an icon.</h2>' + document.getElementById('icons').innerHTML, function(confirm) {
if (confirm) {
var iconClass = $('.bootbox .selected').children(':first').attr('class');
jQuery('#entry-container').sortable();
jQuery('.blockclass').each(function() {
jQuery(this).val(this.getAttribute('data-value'));
});
el.attr('class', iconClass + ' fa-2x');
// remove the 'fa ' from the class name, just need the icon name itself
var categoryIconClass = iconClass.replace('fa ', '');
el.val(categoryIconClass);
el.attr('value', categoryIconClass);
modified(el);
}
});
setTimeout(function() { //bootbox was rewritten for BS3 and I had to add this timeout for the previous code to work. TODO: to look into
$('.bootbox .col-md-3').on('click', function() {
$('.bootbox .selected').removeClass('selected');
$(this).addClass('selected');
});
}, 500);
}
//DRY Failure. this needs to go into an ajaxify onready style fn. Currently is copy pasted into every single function so after ACP is off the ground fix asap
(function() {
jQuery('document').ready(function() {
var url = window.location.href,
parts = url.split('/'),
active = parts[parts.length-1];
function update_blockclass(el) {
el.parentNode.parentNode.className = 'entry-row ' + el.value;
}
jQuery('.nav-pills li').removeClass('active');
jQuery('.nav-pills li a').each(function() {
if (this.getAttribute('href').match(active)) {
jQuery(this.parentNode).addClass('active');
return false;
function updateCategoryOrders() {
var categories = $('.admin-categories #entry-container').children();
for(var i=0; i<categories.length; ++i) {
var input = $(categories[i]).find('input[data-name="order"]');
input.val(i+1).attr('data-value', i+1);
modified(input);
}
}
$('#entry-container').sortable({
stop: function( event, ui ) {
updateCategoryOrders();
}
});
jQuery('#save').on('click', save);
jQuery('.icon').on('click', function(ev) {
select_icon(ev.target);
$('.blockclass').each(function() {
$(this).val(this.getAttribute('data-value'));
});
jQuery('.blockclass').on('change', function(ev) {
update_blockclass(ev.target);
function showCreateCategoryModal() {
$('#new-category-modal').modal();
}
function createNewCategory() {
var category = {
name: $('#inputName').val(),
description: $('#inputDescription').val(),
icon: $('#new-category-modal i').val(),
bgColor: '#0059b2',
color: '#fff',
order: $('.admin-categories #entry-container').children().length + 1
};
socket.emit('api:admin.categories.create', category, function(err, data) {
if (!err) {
app.alert({
alert_id: 'category_created',
title: 'Created',
message: 'Category successfully created!',
type: 'success',
timeout: 2000
});
var html = templates.prepare(templates['admin/categories'].blocks['categories']).parse({
categories: [data]
});
$('#entry-container').append(html);
$('#new-category-modal').modal('hide');
}
});
}
$('document').ready(function() {
var url = window.location.href,
parts = url.split('/'),
active = parts[parts.length - 1];
$('.nav-pills li').removeClass('active');
$('.nav-pills li a').each(function() {
if (this.getAttribute('href').match(active)) {
$(this.parentNode).addClass('active');
return false;
}
});
$('#save').on('click', save);
$('#addNew').on('click', showCreateCategoryModal);
$('#create-category-btn').on('click', createNewCategory);
$('#entry-container').on('click', '.icon', function(ev) {
select_icon($(this).find('i'));
});
$('#new-category-modal').on('click', '.icon', function(ev) {
select_icon($(this).find('i'));
});
$('.admin-categories form input').on('change', function(ev) {
modified(ev.target);
});
$('.dropdown li[data-disabled]').each(function(index, element) {
var disabled = $(element).attr('data-disabled');
if (disabled == "0" || disabled == "") {
$(element).html('<a href="#"><i class="fa fa-power-off"></i> Disable</a>');
} else {
$(element).html('<a href="#"><i class="fa fa-power-off"></i> Enable</a>');
}
});
$('.dropdown').on('click', '[data-disabled]', function(ev) {
var btn = $(this);
var categoryRow = btn.parents('li');
var cid = categoryRow.attr('data-cid');
var disabled = this.getAttribute('data-disabled') === '0' ? '1' : '0';
categoryRow.remove();
modified_categories[cid] = modified_categories[cid] || {};
modified_categories[cid]['disabled'] = disabled;
save();
return false;
});
// Colour Picker
$('[data-name="bgColor"], [data-name="color"]').each(function(idx, inputEl) {
var jinputEl = $(this),
previewEl = jinputEl.parents('[data-cid]').find('.preview-box');
jinputEl.ColorPicker({
color: this.value || '#000',
onChange: function(hsb, hex) {
jinputEl.val('#' + hex);
if (inputEl.getAttribute('data-name') === 'bgColor') previewEl.css('background', '#' + hex);
else if (inputEl.getAttribute('data-name') === 'color') previewEl.css('color', '#' + hex);
modified(inputEl);
}
});
});
// Permissions modal
$('.permissions').on('click', function() {
var cid = $(this).parents('li[data-cid]').attr('data-cid');
Categories.launchPermissionsModal(cid);
});
$('.upload-button').on('click', function() {
var inputEl = this;
uploader.open(RELATIVE_PATH + '/admin/category/uploadpicture', function(imageUrlOnServer) {
inputEl.value = imageUrlOnServer;
$(inputEl).parents('li[data-cid]').find('.preview-box').css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')');
modified(inputEl);
});
});
$('.admin-categories').delegate('.delete-image', 'click', function() {
var parent = $(this).parents('li[data-cid]'),
inputEl = parent.find('.upload-button'),
preview = parent.find('.preview-box'),
bgColor = parent.find('.category_bgColor').val();
inputEl.value = '';
modified(inputEl);
preview.css('background', bgColor);
$(this).hide();
});
});
};
Categories.launchPermissionsModal = function(cid) {
var modal = $('#category-permissions-modal'),
searchEl = modal.find('#permission-search'),
resultsEl = modal.find('.search-results'),
groupsResultsEl = modal.find('.groups-results'),
searchDelay;
searchEl.off().on('keyup', function() {
var searchEl = this,
resultsFrag = document.createDocumentFragment(),
liEl = document.createElement('li');
clearTimeout(searchDelay);
searchDelay = setTimeout(function() {
socket.emit('api:admin.categories.search', searchEl.value, cid, function(err, results) {
var numResults = results.length,
resultObj;
for(var x=0;x<numResults;x++) {
resultObj = results[x];
liEl.setAttribute('data-uid', resultObj.uid);
liEl.innerHTML = '<div class="pull-right">' +
'<div class="btn-group">' +
'<button type="button" data-priv="+r" class="btn btn-default' + (resultObj.privileges['+r'] ? ' active' : '') + '">Read</button>' +
'<button type="button" data-priv="+w" class="btn btn-default' + (resultObj.privileges['+w'] ? ' active' : '') + '">Write</button>' +
'</div>' +
'</div>' +
'<img src="' + resultObj.picture + '" /> ' + resultObj.username;
resultsFrag.appendChild(liEl.cloneNode(true));
}
resultsEl.html(resultsFrag);
});
}, 250);
});
jQuery('.category_name, .category_description, .blockclass').on('change', function(ev) {
modified(ev.target);
Categories.refreshPrivilegeList(cid);
resultsEl.off().on('click', '[data-priv]', function(e) {
var btnEl = $(this),
uid = btnEl.parents('li[data-uid]').attr('data-uid'),
privilege = this.getAttribute('data-priv');
e.preventDefault();
socket.emit('api:admin.categories.setPrivilege', cid, uid, privilege, !btnEl.hasClass('active'), function(err, privileges) {
btnEl.toggleClass('active', privileges[privilege]);
Categories.refreshPrivilegeList(cid);
});
});
});
modal.off().on('click', '.members li > img', function() {
searchEl.val(this.getAttribute('title'));
searchEl.keyup();
});
// User Groups and privileges
socket.emit('api:admin.categories.groupsearch', cid, function(err, results) {
var groupsFrag = document.createDocumentFragment(),
liEl = document.createElement('li');
var numResults = results.length,
resultObj;
for(var x=0;x<numResults;x++) {
resultObj = results[x];
liEl.setAttribute('data-gid', resultObj.gid);
liEl.innerHTML = '<div class="pull-right">' +
'<div class="btn-group">' +
'<button type="button" data-gpriv="+gr" class="btn btn-default' + (resultObj.privileges['+gr'] ? ' active' : '') + '">Read</button>' +
'<button type="button" data-gpriv="+gw" class="btn btn-default' + (resultObj.privileges['+gw'] ? ' active' : '') + '">Write</button>' +
'</div>' +
'</div>' +
' '+resultObj.name;
}());
groupsFrag.appendChild(liEl.cloneNode(true));
}
groupsResultsEl.html(groupsFrag);
});
groupsResultsEl.off().on('click', '[data-gpriv]', function(e) {
var btnEl = $(this),
gid = btnEl.parents('li[data-gid]').attr('data-gid'),
privilege = this.getAttribute('data-gpriv');
e.preventDefault();
socket.emit('api:admin.categories.setGroupPrivilege', cid, gid, privilege, !btnEl.hasClass('active'), function(err, privileges) {
btnEl.toggleClass('active', privileges[privilege]);
});
})
modal.modal();
};
Categories.refreshPrivilegeList = function (cid) {
var modalEl = $('#category-permissions-modal'),
readMembers = modalEl.find('#category-permissions-read'),
writeMembers = modalEl.find('#category-permissions-write');
socket.emit('api:admin.categories.getPrivilegeSettings', cid, function(err, privilegeList) {
var readLength = privilegeList['+r'].length,
writeLength = privilegeList['+w'].length,
readFrag = document.createDocumentFragment(),
writeFrag = document.createDocumentFragment(),
liEl = document.createElement('li'),
x, userObj;
if (readLength > 0) {
for(x=0;x<readLength;x++) {
userObj = privilegeList['+r'][x];
liEl.setAttribute('data-uid', userObj.uid);
liEl.innerHTML = '<img src="' + userObj.picture + '" title="' + userObj.username + '" />';
readFrag.appendChild(liEl.cloneNode(true));
}
} else {
liEl.className = 'empty';
liEl.innerHTML = 'No users are in this list';
readFrag.appendChild(liEl.cloneNode(true));
}
if (writeLength > 0) {
for(x=0;x<writeLength;x++) {
userObj = privilegeList['+w'][x];
liEl.setAttribute('data-uid', userObj.uid);
liEl.innerHTML = '<img src="' + userObj.picture + '" title="' + userObj.username + '" />';
writeFrag.appendChild(liEl.cloneNode(true));
}
} else {
liEl.className = 'empty';
liEl.innerHTML = 'No users are in this list';
writeFrag.appendChild(liEl.cloneNode(true));
}
readMembers.html(readFrag);
writeMembers.html(writeFrag);
});
};
return Categories;
});

View File

@@ -1,122 +1,42 @@
jQuery('document').ready(function() {
// On menu click, change "active" state
var menuEl = document.querySelector('.sidebar-nav'),
liEls = menuEl.querySelectorAll('li')
parentEl = null;
var nodebb_admin = (function(nodebb_admin) {
nodebb_admin.config = undefined;
nodebb_admin.prepare = function() {
// Come back in 500ms if the config isn't ready yet
if (nodebb_admin.config === undefined) {
setTimeout(function() {
nodebb_admin.prepare();
}, 500);
return;
}
// Populate the fields on the page from the config
var fields = document.querySelectorAll('#content [data-field]'),
numFields = fields.length,
saveBtn = document.getElementById('save'),
x, key, inputType;
for(x=0;x<numFields;x++) {
key = fields[x].getAttribute('data-field');
inputType = fields[x].getAttribute('type');
if (fields[x].nodeName === 'INPUT') {
if (nodebb_admin.config[key]) {
switch(inputType) {
case 'text':
case 'textarea':
case 'number':
fields[x].value = nodebb_admin.config[key];
break;
case 'checkbox':
fields[x].checked = nodebb_admin.config[key] === '1' ? true : false;
break;
}
}
} else if (fields[x].nodeName === 'TEXTAREA') {
if (nodebb_admin.config[key]) fields[x].value = nodebb_admin.config[key];
menuEl.addEventListener('click', function(e) {
parentEl = e.target.parentNode;
if (parentEl.nodeName === 'LI') {
for (var x = 0, numLis = liEls.length; x < numLis; x++) {
if (liEls[x] !== parentEl) jQuery(liEls[x]).removeClass('active');
else jQuery(parentEl).addClass('active');
}
}
}, false);
});
saveBtn.addEventListener('click', function(e) {
var key, value;
e.preventDefault();
socket.once('api:config.get', function(config) {
app.config = config;
});
for(x=0;x<numFields;x++) {
key = fields[x].getAttribute('data-field');
if (fields[x].nodeName === 'INPUT') {
inputType = fields[x].getAttribute('type');
switch(inputType) {
case 'text':
case 'number':
value = fields[x].value;
break;
socket.emit('api:config.get');
case 'checkbox':
value = fields[x].checked ? '1' : '0';
break;
}
} else if (fields[x].nodeName === 'TEXTAREA') {
value = fields[x].value;
}
socket.emit('api:config.set', { key: key, value: value });
}
socket.on('api:config.set', function(data) {
if (data.status === 'ok') {
app.alert({
alert_id: 'config_status',
timeout: 2500,
title: 'Changes Saved',
message: 'Your changes to the NodeBB configuration have been saved.',
type: 'success'
});
} else {
app.alert({
alert_id: 'config_status',
timeout: 2500,
title: 'Changes Not Saved',
message: 'NodeBB encountered a problem saving your changes',
type: 'danger'
});
}
nodebb_admin.remove = function(key) {
socket.emit('api:config.remove', key);
}
jQuery('document').ready(function() {
// On menu click, change "active" state
var menuEl = document.querySelector('.sidebar-nav'),
liEls = menuEl.querySelectorAll('li')
parentEl = null;
menuEl.addEventListener('click', function(e) {
parentEl = e.target.parentNode;
if (parentEl.nodeName === 'LI') {
for(var x=0,numLis=liEls.length;x<numLis;x++) {
if (liEls[x] !== parentEl) jQuery(liEls[x]).removeClass('active');
else jQuery(parentEl).addClass('active');
}
}
}, false);
});
socket.once('api:config.get', function(config) {
nodebb_admin.config = config;
});
socket.emit('api:config.get');
socket.on('api:config.set', function(data) {
if (data.status === 'ok') {
app.alert({
alert_id: 'config_status',
timeout: 2500,
title: 'Changes Saved',
message: 'Your changes to the NodeBB configuration have been saved. You may have to restart NodeBB to see the changes.',
type: 'success'
});
} else {
app.alert({
alert_id: 'config_status',
timeout: 2500,
title: 'Changes Not Saved',
message: 'NodeBB encountered a problem saving your changes',
type: 'error'
});
}
});
return nodebb_admin;
}(nodebb_admin || {}));
});

View File

@@ -0,0 +1,204 @@
define(function() {
var Groups = {};
Groups.init = function() {
var createEl = document.getElementById('create'),
createModal = $('#create-modal'),
createSubmitBtn = document.getElementById('create-modal-go'),
createNameEl = $('#create-group-name'),
detailsModal = $('#group-details-modal'),
detailsSearch = detailsModal.find('#group-details-search'),
searchResults = detailsModal.find('#group-details-search-results'),
groupMembersEl = detailsModal.find('ul.current_members'),
detailsModalSave = detailsModal.find('.btn-primary'),
searchDelay = undefined,
listEl = $('#groups-list');
createEl.addEventListener('click', function() {
createModal.modal('show');
setTimeout(function() {
createNameEl.focus();
}, 250);
}, false);
createSubmitBtn.addEventListener('click', function() {
var submitObj = {
name: createNameEl.val(),
description: $('#create-group-desc').val()
},
errorEl = $('#create-modal-error'),
errorText;
socket.emit('api:groups.create', submitObj, function(err, data) {
if (err) {
switch (err) {
case 'group-exists':
errorText = '<strong>Please choose another name</strong><p>There seems to be a group with this name already.</p>';
break;
case 'name-too-short':
errorText = '<strong>Please specify a grou name</strong><p>A group name is required for administrative purposes.</p>';
break;
default:
errorText = '<strong>Uh-Oh</strong><p>There was a problem creating your group. Please try again later!</p>';
break;
}
errorEl.html(errorText).removeClass('hide');
} else {
errorEl.addClass('hide');
createNameEl.val('');
createModal.on('hidden.bs.modal', function() {
ajaxify.go('admin/groups');
});
createModal.modal('hide');
}
});
});
listEl.on('click', 'button[data-action]', function() {
var action = this.getAttribute('data-action'),
gid = $(this).parents('li[data-gid]').attr('data-gid');
switch (action) {
case 'delete':
bootbox.confirm('Are you sure you wish to delete this group?', function(confirm) {
if (confirm) {
socket.emit('api:groups.delete', gid, function(err, data) {
if (data === 'OK') ajaxify.go('admin/groups');
});
}
});
break;
case 'members':
socket.emit('api:groups.get', gid, function(err, groupObj) {
var formEl = detailsModal.find('form'),
nameEl = formEl.find('#change-group-name'),
descEl = formEl.find('#change-group-desc'),
memberIcon = document.createElement('li'),
numMembers = groupObj.members.length,
membersFrag = document.createDocumentFragment(),
memberIconImg, x;
nameEl.val(groupObj.name);
descEl.val(groupObj.description);
// Member list
memberIcon.innerHTML = '<img /><span></span>';
memberIconImg = memberIcon.querySelector('img');
memberIconLabel = memberIcon.querySelector('span');
if (numMembers > 0) {
for (x = 0; x < numMembers; x++) {
memberIconImg.src = groupObj.members[x].picture;
memberIconLabel.innerHTML = groupObj.members[x].username;
memberIcon.setAttribute('data-uid', groupObj.members[x].uid);
membersFrag.appendChild(memberIcon.cloneNode(true));
}
groupMembersEl.html('');
groupMembersEl[0].appendChild(membersFrag);
}
detailsModal.attr('data-gid', groupObj.gid);
detailsModal.modal('show');
});
break;
}
});
detailsSearch.on('keyup', function() {
var searchEl = this;
if (searchDelay) clearTimeout(searchDelay);
searchDelay = setTimeout(function() {
var searchText = searchEl.value,
resultsEl = document.getElementById('group-details-search-results'),
foundUser = document.createElement('li'),
foundUserImg, foundUserLabel;
foundUser.innerHTML = '<img /><span></span>';
foundUserImg = foundUser.getElementsByTagName('img')[0];
foundUserLabel = foundUser.getElementsByTagName('span')[0];
socket.emit('api:admin.user.search', searchText, function(err, results) {
if (!err && results && results.length > 0) {
var numResults = results.length,
resultsSlug = document.createDocumentFragment(),
x;
if (numResults > 4) numResults = 4;
for (x = 0; x < numResults; x++) {
foundUserImg.src = results[x].picture;
foundUserLabel.innerHTML = results[x].username;
foundUser.setAttribute('title', results[x].username);
foundUser.setAttribute('data-uid', results[x].uid);
resultsSlug.appendChild(foundUser.cloneNode(true));
}
resultsEl.innerHTML = '';
resultsEl.appendChild(resultsSlug);
} else resultsEl.innerHTML = '<li>No Users Found</li>';
});
}, 200);
});
searchResults.on('click', 'li[data-uid]', function() {
var userLabel = this,
uid = parseInt(this.getAttribute('data-uid')),
gid = detailsModal.attr('data-gid'),
members = [];
groupMembersEl.find('li[data-uid]').each(function() {
members.push(parseInt(this.getAttribute('data-uid')));
});
if (members.indexOf(uid) === -1) {
socket.emit('api:groups.join', {
gid: gid,
uid: uid
}, function(err, data) {
if (!err) {
groupMembersEl.append(userLabel.cloneNode(true));
}
});
}
});
groupMembersEl.on('click', 'li[data-uid]', function() {
var uid = this.getAttribute('data-uid'),
gid = detailsModal.attr('data-gid');
socket.emit('api:groups.leave', {
gid: gid,
uid: uid
}, function(err, data) {
if (!err) {
groupMembersEl.find('li[data-uid="' + uid + '"]').remove();
}
});
});
detailsModalSave.on('click', function() {
var formEl = detailsModal.find('form'),
nameEl = formEl.find('#change-group-name'),
descEl = formEl.find('#change-group-desc'),
gid = detailsModal.attr('data-gid');
socket.emit('api:groups.update', {
gid: gid,
values: {
name: nameEl.val(),
description: descEl.val()
}
}, function(err) {
if (!err) {
detailsModal.on('hidden.bs.modal', function() {
ajaxify.go('admin/groups');
});
detailsModal.modal('hide');
}
});
});
};
return Groups;
});

View File

@@ -1,25 +1,36 @@
define(function() {
var Admin = {};
(function() {
ajaxify.register_events(['api:get_all_rooms']);
socket.on('api:get_all_rooms', function(data) {
Admin.init = function() {
ajaxify.register_events(['api:get_all_rooms']);
socket.on('api:get_all_rooms', function(data) {
var active_users = document.getElementById('active_users'),
total = 0;
active_users.innerHTML = '';
for(var room in data) {
if (room !== '') {
var count = data[room].length;
total += count;
active_users.innerHTML = active_users.innerHTML + "<div class='alert alert-success'><strong>" + room + "</strong> " + count + " active user" + (count > 1 ? "s" : "") + "</div>";
var active_users = document.getElementById('active_users'),
total = 0;
active_users.innerHTML = '';
for (var room in data) {
if (room !== '') {
var count = data[room].length;
total += count;
active_users.innerHTML = active_users.innerHTML + "<div class='alert alert-success'><strong>" + room + "</strong> " + count + " active user" + (count > 1 ? "s" : "") + "</div>";
}
}
}
document.getElementById('connections').innerHTML = total;
});
document.getElementById('connections').innerHTML = total;
});
app.enter_room('admin');
socket.emit('api:get_all_rooms');
app.enterRoom('admin');
socket.emit('api:get_all_rooms');
}());
$('#logout-link').on('click', function() {
$.post(RELATIVE_PATH + '/logout', {
_csrf: $('#csrf_token').val()
}, function() {
window.location.href = RELATIVE_PATH + '/';
});
})
};
return Admin;
});

View File

@@ -0,0 +1,33 @@
define(function() {
var Plugins = {
init: function() {
var pluginsList = $('.plugins'),
numPlugins = pluginsList[0].querySelectorAll('li').length,
pluginID, pluginTgl;
if (numPlugins > 0) {
pluginsList.on('click', 'button[data-action="toggleActive"]', function() {
pluginID = $(this).parents('li').attr('data-plugin-id');
socket.emit('api:admin.plugins.toggle', pluginID);
});
socket.on('api:admin.plugins.toggle', function(status) {
pluginTgl = document.querySelector('.plugins li[data-plugin-id="' + status.id + '"] button');
pluginTgl.innerHTML = '<i class="fa fa-power-off"></i> ' + (status.active ? 'Dea' : 'A') + 'ctivate';
app.alert({
alert_id: 'plugin_toggled_' + status.id,
title: 'Plugin Enabled',
message: 'You may need to restart NodeBB in order for these changes to be reflected.',
type: 'warning',
timeout: 5000
})
});
} else {
pluginsList.append('<li><p><i>No plugins found.</i></p></li>');
}
}
};
return Plugins;
});

View File

@@ -0,0 +1,99 @@
define(['uploader'], function(uploader) {
var Settings = {};
Settings.init = function() {
Settings.prepare();
};
Settings.prepare = function() {
// Come back in 125ms if the config isn't ready yet
if (!app.config) {
setTimeout(function() {
Settings.prepare();
}, 125);
return;
}
// Populate the fields on the page from the config
var fields = document.querySelectorAll('#content [data-field]'),
numFields = fields.length,
saveBtn = document.getElementById('save'),
x, key, inputType;
for (x = 0; x < numFields; x++) {
key = fields[x].getAttribute('data-field');
inputType = fields[x].getAttribute('type');
if (fields[x].nodeName === 'INPUT') {
if (app.config[key]) {
switch (inputType) {
case 'text':
case 'textarea':
case 'number':
fields[x].value = app.config[key];
break;
case 'checkbox':
fields[x].checked = parseInt(app.config[key], 10) === 1;
break;
}
}
} else if (fields[x].nodeName === 'TEXTAREA') {
if (app.config[key]) fields[x].value = app.config[key];
} else if (fields[x].nodeName === 'SELECT') {
if (app.config[key]) fields[x].value = app.config[key];
}
}
saveBtn.addEventListener('click', function(e) {
var key, value;
e.preventDefault();
for (x = 0; x < numFields; x++) {
key = fields[x].getAttribute('data-field');
if (fields[x].nodeName === 'INPUT') {
inputType = fields[x].getAttribute('type');
switch (inputType) {
case 'text':
case 'number':
value = fields[x].value;
break;
case 'checkbox':
value = fields[x].checked ? '1' : '0';
break;
}
} else if (fields[x].nodeName === 'TEXTAREA') {
value = fields[x].value;
} else if (fields[x].nodeName === 'SELECT') {
value = fields[x].value;
}
socket.emit('api:config.set', {
key: key,
value: value
});
}
});
$('#uploadLogoBtn').on('click', function() {
uploader.open(RELATIVE_PATH + '/admin/uploadlogo', function(image) {
$('#logoUrl').val(image);
});
uploader.hideAlerts();
});
$('#uploadFaviconBtn').on('click', function() {
uploader.open(RELATIVE_PATH + '/admin/uploadfavicon', function(icon) {
$('#faviconUrl').val(icon);
});
uploader.hideAlerts();
});
};
Settings.remove = function(key) {
socket.emit('api:config.remove', key);
};
return Settings;
});

View File

@@ -1,79 +1,132 @@
define(function() {
var Themes = {};
Themes.init = function() {
var scriptEl = document.createElement('script');
scriptEl.src = 'http://api.bootswatch.com/3/?callback=bootswatchListener';
document.body.appendChild(scriptEl);
var nodebb_admin = (function(nodebb_admin) {
var bootstrapThemeContainer = document.querySelector('#bootstrap_themes'),
installedThemeContainer = document.querySelector('#installed_themes'),
themeEvent = function(e) {
if (e.target.hasAttribute('data-action')) {
switch (e.target.getAttribute('data-action')) {
case 'preview':
var cssSrc = $(e.target).parents('li').attr('data-css'),
cssEl = document.getElementById('base-theme');
var themes = {};
cssEl.href = cssSrc;
break;
case 'use':
var parentEl = $(e.target).parents('li'),
themeType = parentEl.attr('data-type'),
cssSrc = parentEl.attr('data-css'),
themeId = parentEl.attr('data-theme');
themes.render = function(bootswatch) {
socket.emit('api:admin.theme.set', {
type: themeType,
id: themeId,
src: cssSrc
}, function(err) {
app.alert({
alert_id: 'admin:theme',
type: 'success',
title: 'Theme Changed',
message: 'You have successfully changed your NodeBB\'s theme. Please restart to see the changes.',
timeout: 2500
});
});
break;
}
}
};
bootstrapThemeContainer.addEventListener('click', themeEvent);
installedThemeContainer.addEventListener('click', themeEvent);
var revertEl = document.getElementById('revert_theme');
revertEl.addEventListener('click', function() {
bootbox.confirm('Are you sure you wish to remove the custom theme and restore the NodeBB default theme?', function(confirm) {
if (confirm) {
socket.emit('api:admin.theme.set', {
type: 'local',
id: 'nodebb-theme-cerulean'
}, function(err) {
app.alert({
alert_id: 'admin:theme',
type: 'success',
title: 'Theme Changed',
message: 'You have successfully reverted your NodeBB back to it\'s default theme. Please restart to see the changes.',
timeout: 3500
});
});
}
});
}, false);
// Installed Themes
socket.emit('api:admin.themes.getInstalled', function(themes) {
var instListEl = document.getElementById('installed_themes'),
themeFrag = document.createDocumentFragment(),
liEl = document.createElement('li');
liEl.setAttribute('data-type', 'local');
if (themes.length > 0) {
for (var x = 0, numThemes = themes.length; x < numThemes; x++) {
liEl.setAttribute('data-theme', themes[x].id);
liEl.innerHTML = '<img src="' + (themes[x].screenshot ? '/css/previews/' + themes[x].id : RELATIVE_PATH + '/images/themes/default.png') + '" />' +
'<div>' +
'<div class="pull-right">' +
'<button class="btn btn-primary" data-action="use">Use</button> ' +
'<button class="btn btn-default" data-action="preview">Preview</button>' +
'</div>' +
'<h4>' + themes[x].name + '</h4>' +
'<p>' +
themes[x].description +
(themes[x].url ? ' (<a href="' + themes[x].url + '">Homepage</a>)' : '') +
'</p>' +
'</div>' +
'<div class="clear">';
themeFrag.appendChild(liEl.cloneNode(true));
}
} else {
// No themes found
liEl.className = 'no-themes';
liEl.innerHTML = 'No installed themes found';
themeFrag.appendChild(liEl);
}
instListEl.innerHTML = '';
instListEl.appendChild(themeFrag);
});
}
Themes.render = function(bootswatch) {
var themeFrag = document.createDocumentFragment(),
themeEl = document.createElement('li'),
themeContainer = document.querySelector('#content .themes'),
themeContainer = document.querySelector('#bootstrap_themes'),
numThemes = bootswatch.themes.length;
for(var x=0;x<numThemes;x++) {
themeEl.setAttribute('data-type', 'bootswatch');
for (var x = 0; x < numThemes; x++) {
var theme = bootswatch.themes[x];
themeEl.setAttribute('data-css', theme.cssMin);
themeEl.setAttribute('data-theme', theme.name);
themeEl.innerHTML = '<img src="' + theme.thumbnail + '" />' +
'<div>' +
'<div class="pull-right">' +
'<button class="btn btn-primary" data-action="use">Use</button> ' +
'<button class="btn" data-action="preview">Preview</button>' +
'</div>' +
'<h4>' + theme.name + '</h4>' +
'<p>' + theme.description + '</p>' +
'</div>' +
'<div class="clear">';
themeEl.innerHTML = '<img src="' + theme.thumbnail + '" />' +
'<div>' +
'<div class="pull-right">' +
'<button class="btn btn-primary" data-action="use">Use</button> ' +
'<button class="btn btn-default" data-action="preview">Preview</button>' +
'</div>' +
'<h4>' + theme.name + '</h4>' +
'<p>' + theme.description + '</p>' +
'</div>' +
'<div class="clear">';
themeFrag.appendChild(themeEl.cloneNode(true));
}
themeContainer.innerHTML = '';
themeContainer.appendChild(themeFrag);
}
nodebb_admin.themes = themes;
return nodebb_admin;
}(nodebb_admin || {}));
(function() {
var scriptEl = document.createElement('script');
scriptEl.src = 'http://api.bootswatch.com?callback=nodebb_admin.themes.render';
document.body.appendChild(scriptEl);
var themeContainer = document.querySelector('#content .themes');
themeContainer.addEventListener('click', function(e) {
if (e.target.hasAttribute('data-action')) {
switch(e.target.getAttribute('data-action')) {
case 'preview':
var cssSrc = $(e.target).parents('li').attr('data-css'),
cssEl = document.getElementById('base-theme');
cssEl.href = cssSrc;
break;
case 'use':
var parentEl = $(e.target).parents('li'),
cssSrc = parentEl.attr('data-css'),
cssName = parentEl.attr('data-theme');
socket.emit('api:config.set', {
key: 'theme:id', value: 'bootswatch:' + cssName
});
socket.emit('api:config.set', {
key: 'theme:src', value: cssSrc
});
break;
}
}
}, false);
var revertEl = document.getElementById('revert_theme');
revertEl.addEventListener('click', function() {
bootbox.confirm('Are you sure you wish to remove the custom theme and restore the NodeBB default theme?', function(confirm) {
if (confirm) {
nodebb_admin.remove('theme:id');
nodebb_admin.remove('theme:src');
}
});
}, false);
})();
return Themes;
});

View File

@@ -1,118 +1,158 @@
$(document).ready(function() {
var topicsListEl = document.querySelector('.topics'),
loadMoreEl = document.getElementById('topics_loadmore');
define(function() {
var Topics = {};
$(topicsListEl).on('click', '[data-action]', function() {
var $this = $(this),
action = this.getAttribute('data-action'),
tid = $this.parents('[data-tid]').attr('data-tid');
Topics.init = function() {
var topicsListEl = document.querySelector('.topics'),
loadMoreEl = document.getElementById('topics_loadmore');
switch(action) {
case 'pin':
if (!$this.hasClass('active')) socket.emit('api:topic.pin', { tid: tid });
else socket.emit('api:topic.unpin', { tid: tid });
break;
case 'lock':
if (!$this.hasClass('active')) socket.emit('api:topic.lock', { tid: tid });
else socket.emit('api:topic.unlock', { tid: tid });
break;
case 'delete':
if (!$this.hasClass('active')) socket.emit('api:topic.delete', { tid: tid });
else socket.emit('api:topic.restore', { tid: tid });
break;
this.resolveButtonStates();
$(topicsListEl).on('click', '[data-action]', function() {
var $this = $(this),
action = this.getAttribute('data-action'),
tid = $this.parents('[data-tid]').attr('data-tid');
switch (action) {
case 'pin':
if (!$this.hasClass('active')) socket.emit('api:topic.pin', {
tid: tid
});
else socket.emit('api:topic.unpin', {
tid: tid
});
break;
case 'lock':
if (!$this.hasClass('active')) socket.emit('api:topic.lock', {
tid: tid
});
else socket.emit('api:topic.unlock', {
tid: tid
});
break;
case 'delete':
if (!$this.hasClass('active')) socket.emit('api:topic.delete', {
tid: tid
});
else socket.emit('api:topic.restore', {
tid: tid
});
break;
}
});
loadMoreEl.addEventListener('click', function() {
if (this.className.indexOf('disabled') === -1) {
var topics = document.querySelectorAll('.topics li[data-tid]');
if(!topics.length) {
return;
}
var lastTid = parseInt(topics[topics.length - 1].getAttribute('data-tid'));
this.innerHTML = '<i class="fa fa-refresh fa-spin"></i> Retrieving topics';
socket.emit('api:admin.topics.getMore', {
limit: 10,
after: lastTid
}, function(topics) {
var btnEl = document.getElementById('topics_loadmore');
topics = JSON.parse(topics);
if (topics.length > 0) {
var html = templates.prepare(templates['admin/topics'].blocks['topics']).parse({
topics: topics
}),
topicsListEl = document.querySelector('.topics');
// Fix relative paths
html = html.replace(/\{relative_path\}/g, RELATIVE_PATH);
topicsListEl.innerHTML += html;
Topics.resolveButtonStates();
btnEl.innerHTML = 'Load More Topics';
$('span.timeago').timeago();
} else {
// Exhausted all topics
btnEl.className += ' disabled';
btnEl.innerHTML = 'No more topics';
}
});
}
}, false);
socket.on('api:topic.pin', function(response) {
if (response.status === 'ok') {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="pin"]');
$(btnEl).addClass('active');
}
});
socket.on('api:topic.unpin', function(response) {
if (response.status === 'ok') {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="pin"]');
$(btnEl).removeClass('active');
}
});
socket.on('api:topic.lock', function(response) {
if (response.status === 'ok') {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="lock"]');
$(btnEl).addClass('active');
}
});
socket.on('api:topic.unlock', function(response) {
if (response.status === 'ok') {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="lock"]');
$(btnEl).removeClass('active');
}
});
socket.on('api:topic.delete', function(response) {
if (response.status === 'ok') {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="delete"]');
$(btnEl).addClass('active');
$(btnEl).siblings('[data-action="lock"]').addClass('active');
}
});
socket.on('api:topic.restore', function(response) {
if (response.status === 'ok') {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="delete"]');
$(btnEl).removeClass('active');
$(btnEl).siblings('[data-action="lock"]').removeClass('active');
}
});
};
Topics.resolveButtonStates = function() {
// Resolve proper button state for all topics
var topicsListEl = document.querySelector('.topics'),
topicEls = topicsListEl.querySelectorAll('li'),
numTopics = topicEls.length;
for (var x = 0; x < numTopics; x++) {
if (topicEls[x].getAttribute('data-pinned') === '1') {
topicEls[x].querySelector('[data-action="pin"]').className += ' active';
topicEls[x].removeAttribute('data-pinned');
}
if (topicEls[x].getAttribute('data-locked') === '1') {
topicEls[x].querySelector('[data-action="lock"]').className += ' active';
topicEls[x].removeAttribute('data-locked');
}
if (topicEls[x].getAttribute('data-deleted') === '1') {
topicEls[x].querySelector('[data-action="delete"]').className += ' active';
topicEls[x].removeAttribute('data-deleted');
}
}
});
loadMoreEl.addEventListener('click', function() {
if (this.className.indexOf('disabled') === -1) {
var topics = document.querySelectorAll('.topics li[data-tid]'),
lastTid = parseInt(topics[topics.length - 1].getAttribute('data-tid'));
this.innerHTML = '<i class="icon-refresh icon-spin"></i> Retrieving topics';
socket.emit('api:admin.topics.getMore', {
limit: 10,
after: lastTid
});
}
}, false);
// Resolve proper button state for all topics
var topicEls = topicsListEl.querySelectorAll('li'),
numTopics = topicEls.length;
for(var x=0;x<numTopics;x++) {
if (topicEls[x].getAttribute('data-pinned')) topicEls[x].querySelector('[data-action="pin"]').className += ' active';
if (topicEls[x].getAttribute('data-locked')) topicEls[x].querySelector('[data-action="lock"]').className += ' active';
if (topicEls[x].getAttribute('data-deleted')) topicEls[x].querySelector('[data-action="delete"]').className += ' active';
topicEls[x].removeAttribute('data-pinned');
topicEls[x].removeAttribute('data-locked');
topicEls[x].removeAttribute('data-deleted');
}
});
socket.on('api:topic.pin', function(response) {
if (response.status === 'ok') {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="pin"]');
$(btnEl).addClass('active');
}
});
socket.on('api:topic.unpin', function(response) {
if (response.status === 'ok') {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="pin"]');
$(btnEl).removeClass('active');
}
});
socket.on('api:topic.lock', function(response) {
if (response.status === 'ok') {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="lock"]');
$(btnEl).addClass('active');
}
});
socket.on('api:topic.unlock', function(response) {
if (response.status === 'ok') {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="lock"]');
$(btnEl).removeClass('active');
}
});
socket.on('api:topic.delete', function(response) {
if (response.status === 'ok') {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="delete"]');
$(btnEl).addClass('active');
}
});
socket.on('api:topic.restore', function(response) {
if (response.status === 'ok') {
var btnEl = document.querySelector('li[data-tid="' + response.tid + '"] button[data-action="delete"]');
$(btnEl).removeClass('active');
}
});
socket.on('api:admin.topics.getMore', function(topics) {
var btnEl = document.getElementById('topics_loadmore');
topics = JSON.parse(topics);
console.log(topics);
if (topics.length > 0) {
var html = templates.prepare(templates['admin/topics'].blocks['topics']).parse({
topics: topics
}),
topicsListEl = document.querySelector('.topics');
topicsListEl.innerHTML += html;
btnEl.innerHTML = 'Load More Topics';
} else {
// Exhausted all topics
btnEl.className += ' disabled';
btnEl.innerHTML = 'No more topics';
}
return Topics;
});

View File

@@ -1,144 +1,210 @@
define(function() {
var Users = {};
(function() {
function initUsers() {
Users.init = function() {
var yourid = templates.get('yourid');
function isUserAdmin(element) {
var parent = $(element).parents('.users-box');
return (parent.attr('data-admin') !== "0");
}
function getUID(element) {
function isUserBanned(element) {
var parent = $(element).parents('.users-box');
return parent.attr('data-uid');
return (parent.attr('data-banned') !== "" && parent.attr('data-banned') !== "0");
}
jQuery('.admin-btn').each(function(index, element) {
var adminBtn = $(element);
var isAdmin = isUserAdmin(adminBtn);
if(isAdmin)
adminBtn.addClass('btn-success');
else
adminBtn.removeClass('btn-success');
function getUID(element) {
var parent = $(element).parents('.users-box');
return parent.attr('data-uid');
}
});
function updateUserButtons() {
jQuery('.ban-btn').each(function(index, element) {
var banBtn = $(element);
var uid = getUID(banBtn);
if (isUserAdmin(banBtn) || uid === yourid)
banBtn.addClass('disabled');
else if (isUserBanned(banBtn))
banBtn.addClass('btn-warning');
else
banBtn.removeClass('btn-warning');
jQuery('.delete-btn').each(function(index, element) {
var deleteBtn = $(element);
var isAdmin = isUserAdmin(deleteBtn);
if(isAdmin)
deleteBtn.addClass('disabled');
else
deleteBtn.show();
});
});
}
jQuery('.admin-btn').on('click', function() {
var adminBtn = $(this);
var isAdmin = isUserAdmin(adminBtn);
var parent = adminBtn.parents('.users-box');
var uid = getUID(adminBtn);
function initUsers() {
if(isAdmin) {
socket.emit('api:admin.user.removeAdmin', uid);
adminBtn.removeClass('btn-success');
parent.find('.delete-btn').removeClass('disabled');
parent.attr('data-admin', 0);
}
else {
bootbox.confirm('Do you really want to make "' + parent.attr('data-username') +'" an admin?', function(confirm) {
if(confirm) {
socket.emit('api:admin.user.makeAdmin', uid);
adminBtn.addClass('btn-success');
parent.find('.delete-btn').addClass('disabled');
parent.attr('data-admin', 1);
updateUserButtons();
$('#users-container').on('click', '.ban-btn', function() {
var banBtn = $(this);
var isAdmin = isUserAdmin(banBtn);
var isBanned = isUserBanned(banBtn);
var parent = banBtn.parents('.users-box');
var uid = getUID(banBtn);
if (!isAdmin) {
if (isBanned) {
socket.emit('api:admin.user.unbanUser', uid);
banBtn.removeClass('btn-warning');
parent.attr('data-banned', 0);
} else {
bootbox.confirm('Do you really want to ban "' + parent.attr('data-username') + '"?', function(confirm) {
if (confirm) {
socket.emit('api:admin.user.banUser', uid);
banBtn.addClass('btn-warning');
parent.attr('data-banned', 1);
}
});
}
});
}
return false;
});
}
jQuery('.delete-btn').on('click', function() {
var deleteBtn = $(this);
var isAdmin = isUserAdmin(deleteBtn);
var parent = deleteBtn.parents('.users-box');
var uid = getUID(deleteBtn);
if(!isAdmin) {
bootbox.confirm('Do you really want to delete "' + parent.attr('data-username') +'"?', function(confirm) {
socket.emit('api:admin.user.deleteUser', uid);
});
}
return false;
});
}
jQuery('document').ready(function() {
var yourid = templates.get('yourid');
var timeoutId = 0;
var url = window.location.href,
parts = url.split('/'),
active = parts[parts.length-1];
jQuery('.nav-pills li').removeClass('active');
jQuery('.nav-pills li a').each(function() {
if (this.getAttribute('href').match(active)) {
jQuery(this.parentNode).addClass('active');
return false;
}
});
});
}
jQuery('#search-user').on('keyup', function () {
if(timeoutId !== 0) {
clearTimeout(timeoutId);
timeoutId = 0;
}
function handleUserCreate() {
$('#createUser').on('click', function() {
$('#create-modal').modal('show');
});
timeoutId = setTimeout(function() {
var username = $('#search-user').val();
jQuery('.icon-spinner').removeClass('none');
socket.emit('api:admin.user.search', username);
}, 250);
});
initUsers();
socket.removeAllListeners('api:admin.user.search');
socket.on('api:admin.user.search', function(data) {
$('#create-modal-go').on('click', function() {
var username = $('#create-user-name').val(),
email = $('#create-user-email').val(),
password = $('#create-user-password').val(),
passwordAgain = $('#create-user-password-again').val(),
errorEl = $('#create-modal-error');
var html = templates.prepare(templates['admin/users'].blocks['users']).parse({
if(password !== passwordAgain) {
return errorEl.html('<strong>Error</strong><p>Passwords must match!</p>').removeClass('hide');
}
var user = {
username: username,
email: email,
password: password
};
socket.emit('api:admin.user.createUser', user, function(err, data) {
if(err) {
return errorEl.html('<strong>Error</strong><p>' + err + '</p>').removeClass('hide');
}
$('#create-modal').modal('hide');
app.alertSuccess('User created!');
ajaxify.go('admin/users');
});
});
}
jQuery('document').ready(function() {
var timeoutId = 0,
loadingMoreUsers = false;
var url = window.location.href,
parts = url.split('/'),
active = parts[parts.length - 1];
jQuery('.nav-pills li').removeClass('active');
jQuery('.nav-pills li a').each(function() {
if (this.getAttribute('href').match(active)) {
jQuery(this.parentNode).addClass('active');
return false;
}
});
jQuery('#search-user').on('keyup', function() {
if (timeoutId !== 0) {
clearTimeout(timeoutId);
timeoutId = 0;
}
timeoutId = setTimeout(function() {
var username = $('#search-user').val();
jQuery('.fa-spinner').removeClass('none');
socket.emit('api:admin.user.search', username);
}, 250);
});
initUsers();
handleUserCreate();
socket.removeAllListeners('api:admin.user.search');
socket.on('api:admin.user.search', function(data) {
var html = templates.prepare(templates['admin/users'].blocks['users']).parse({
users: data
}),
userListEl = document.querySelector('.users');
userListEl = document.querySelector('.users');
userListEl.innerHTML = html;
jQuery('.icon-spinner').addClass('none');
userListEl.innerHTML = html;
jQuery('.fa-spinner').addClass('none');
if(data && data.length === 0) {
$('#user-notfound-notify').html('User not found!')
.show()
.addClass('label-important')
.removeClass('label-success');
if (data && data.length === 0) {
$('#user-notfound-notify').html('User not found!')
.show()
.addClass('label-danger')
.removeClass('label-success');
} else {
$('#user-notfound-notify').html(data.length + ' user' + (data.length > 1 ? 's' : '') + ' found!')
.show()
.addClass('label-success')
.removeClass('label-danger');
}
initUsers();
});
function onUsersLoaded(users) {
var html = templates.prepare(templates['admin/users'].blocks['users']).parse({
users: users
});
$('#users-container').append(html);
updateUserButtons();
}
else {
$('#user-notfound-notify').html(data.length + ' user'+(data.length>1?'s':'') + ' found!')
.show()
.addClass('label-success')
.removeClass('label-important');
function loadMoreUsers() {
var set = '';
if (active === 'latest') {
set = 'users:joindate';
} else if (active === 'sort-posts') {
set = 'users:postcount';
} else if (active === 'sort-reputation') {
set = 'users:reputation';
}
if (set) {
loadingMoreUsers = true;
socket.emit('api:users.loadMore', {
set: set,
after: $('#users-container').children().length
}, function(data) {
if (data.users.length) {
onUsersLoaded(data.users);
}
loadingMoreUsers = false;
});
}
}
initUsers();
$('#load-more-users-btn').on('click', loadMoreUsers);
$(window).off('scroll').on('scroll', function() {
var bottom = ($(document).height() - $(window).height()) * 0.9;
if ($(window).scrollTop() > bottom && !loadingMoreUsers) {
loadMoreUsers();
}
});
});
});
}());
};
return Users;
});

View File

@@ -1,90 +1,171 @@
(function() {
var cid = templates.get('category_id'),
room = 'category_' + cid,
twitterEl = document.getElementById('twitter-intent'),
facebookEl = document.getElementById('facebook-share'),
googleEl = document.getElementById('google-share'),
twitter_url = templates.get('twitter-intent-url'),
facebook_url = templates.get('facebook-share-url'),
google_url = templates.get('google-share-url');
app.enter_room(room);
define(['composer'], function(composer) {
var Category = {},
loadingMoreTopics = false;
twitterEl.addEventListener('click', function() {
window.open(twitter_url, '_blank', 'width=550,height=420,scrollbars=no,status=no');
}, false);
facebookEl.addEventListener('click', function() {
window.open(facebook_url, '_blank', 'width=626,height=436,scrollbars=no,status=no');
}, false);
googleEl.addEventListener('click', function() {
window.open(google_url, '_blank', 'width=500,height=570,scrollbars=no,status=no');
}, false);
Category.init = function() {
var cid = templates.get('category_id'),
twitterEl = jQuery('#twitter-intent'),
facebookEl = jQuery('#facebook-share'),
googleEl = jQuery('#google-share'),
twitter_url = templates.get('twitter-intent-url'),
facebook_url = templates.get('facebook-share-url'),
google_url = templates.get('google-share-url');
var new_post = document.getElementById('new_post');
new_post.onclick = function() {
require(['composer'], function(cmp) {
cmp.push(0, cid);
app.enterRoom('category_' + cid);
twitterEl.on('click', function () {
window.open(twitter_url, '_blank', 'width=550,height=420,scrollbars=no,status=no');
return false;
});
facebookEl.on('click', function () {
window.open(facebook_url, '_blank', 'width=626,height=436,scrollbars=no,status=no');
return false;
});
googleEl.on('click', function () {
window.open(google_url, '_blank', 'width=500,height=570,scrollbars=no,status=no');
return false;
});
$('#new_post').on('click', function () {
composer.newTopic(cid);
});
ajaxify.register_events([
'event:new_topic'
]);
socket.on('event:new_topic', Category.onNewTopic);
socket.emit('api:categories.getRecentReplies', cid);
socket.on('api:categories.getRecentReplies', function (posts) {
if (!posts || posts.length === 0) {
return;
}
var recent_replies = document.getElementById('category_recent_replies');
recent_replies.innerHTML = '';
var frag = document.createDocumentFragment(),
li = document.createElement('li');
for (var i = 0, numPosts = posts.length; i < numPosts; i++) {
li.setAttribute('data-pid', posts[i].pid);
li.innerHTML = '<a href="/user/' + posts[i].userslug + '"><img title="' + posts[i].username + '" style="width: 48px; height: 48px; /*temporary*/" class="img-rounded user-img" src="' + posts[i].picture + '" class="" /></a>' +
'<a href="/topic/' + posts[i].topicSlug + '#' + posts[i].pid + '">' +
'<strong><span>'+ posts[i].username + '</span></strong>' +
'<p>' +
posts[i].content +
'</p>' +
'</a>' +
'<span class="timeago pull-right" title="' + posts[i].relativeTime + '"></span>';
frag.appendChild(li.cloneNode(true));
recent_replies.appendChild(frag);
}
$('#category_recent_replies span.timeago').timeago();
app.createUserTooltips();
});
$(window).off('scroll').on('scroll', function (ev) {
var bottom = ($(document).height() - $(window).height()) * 0.9;
if ($(window).scrollTop() > bottom && !loadingMoreTopics) {
Category.loadMoreTopics(cid);
}
});
};
Category.onNewTopic = function(data) {
var html = templates.prepare(templates['category'].blocks['topics']).parse({
topics: [data]
});
translator.translate(html, function(translatedHTML) {
var topic = $(translatedHTML),
container = $('#topics-container'),
topics = $('#topics-container').children('.category-item'),
numTopics = topics.length;
jQuery('#topics-container, .category-sidebar').removeClass('hidden');
jQuery('#category-no-topics').remove();
if (numTopics > 0) {
for (var x = 0; x < numTopics; x++) {
if ($(topics[x]).find('.fa-thumb-tack').length) {
if(x === numTopics - 1) {
topic.insertAfter(topics[x]);
}
continue;
}
topic.insertBefore(topics[x]);
break;
}
} else {
container.append(topic);
}
topic.hide().fadeIn('slow');
socket.emit('api:categories.getRecentReplies', templates.get('category_id'));
addActiveUser(data);
$('#topics-container span.timeago').timeago();
});
}
ajaxify.register_events([
'event:new_topic'
]);
socket.on('event:new_topic', function(data) {
var html = templates.prepare(templates['category'].blocks['topics']).parse({ topics: [data] }),
topic = document.createElement('div'),
container = document.getElementById('topics-container'),
topics = document.querySelectorAll('#topics-container a'),
numTopics = topics.length,
x;
jQuery('#topics-container, .category-sidebar').removeClass('hidden');
jQuery('#category-no-topics').remove();
topic.innerHTML = html;
topic = topic.querySelector('a');
if (numTopics > 0) {
for(x=0;x<numTopics;x++) {
if (topics[x].querySelector('.icon-pushpin')) continue;
container.insertBefore(topic, topics[x]);
$(topic).hide().fadeIn('slow');
break;
}
} else {
container.insertBefore(topic, null);
$(topic).hide().fadeIn('slow');
function addActiveUser(data) {
var activeUser = $('.category-sidebar .active-users').find('a[data-uid="' + data.uid + '"]');
if(!activeUser.length) {
var newUser = templates.prepare(templates['category'].blocks['active_users']).parse({
active_users: [{
uid: data.uid,
username: data.username,
userslug: data.userslug,
picture: data.teaser_userpicture
}]
});
$(newUser).appendTo($('.category-sidebar .active-users'));
}
}
ajaxify.enable();
});
Category.onTopicsLoaded = function(topics) {
var html = templates.prepare(templates['category'].blocks['topics']).parse({
topics: topics
});
translator.translate(html, function(translatedHTML) {
var container = $('#topics-container');
socket.emit('api:categories.getRecentReplies', cid);
socket.on('api:categories.getRecentReplies', function(posts) {
if (!posts || posts.length === 0) {
jQuery('#topics-container, .category-sidebar').removeClass('hidden');
jQuery('#category-no-topics').remove();
html = $(translatedHTML);
container.append(html);
$('#topics-container span.timeago').timeago();
app.makeNumbersHumanReadable(html.find('.human-readable-number'));
});
}
Category.loadMoreTopics = function(cid) {
if (loadingMoreTopics) {
return;
}
var recent_replies = document.getElementById('category_recent_replies');
loadingMoreTopics = true;
socket.emit('api:category.loadMore', {
cid: cid,
after: $('#topics-container').children('.category-item').length
}, function (data) {
if (data.topics.length) {
Category.onTopicsLoaded(data.topics);
}
loadingMoreTopics = false;
});
}
recent_replies.innerHTML = '';
var frag = document.createDocumentFragment(),
li = document.createElement('li');
for (var i=0,numPosts=posts.length; i<numPosts; i++) {
var dateString = utils.relativeTime(posts[i].timestamp);
li.setAttribute('data-pid', posts[i].pid);
li.innerHTML = '<img title="' + posts[i].username + '" style="width: 48px; height: 48px; /*temporary*/" class="img-polaroid" src="' + posts[i].picture + '" class="" />' +
'<p>' +
'<strong>' + posts[i].username + '</strong>: ' + posts[i].content +
'</p>' +
'<span>posted ' + utils.relativeTime(posts[i].timestamp) + ' ago</span>';
frag.appendChild(li.cloneNode(true));
recent_replies.appendChild(frag);
}
});
})();
return Category;
});

View File

@@ -0,0 +1,9 @@
define(['forum/accountheader'], function(header) {
var AccountHeader = {};
AccountHeader.init = function() {
header.init();
};
return AccountHeader;
});

View File

@@ -1,29 +1,20 @@
(function() {
define(['forum/accountheader'], function(header) {
var Followers = {};
var yourid = templates.get('yourid'),
theirid = templates.get('theirid'),
followersCount = templates.get('followersCount');
Followers.init = function() {
header.init();
$(document).ready(function() {
if(parseInt(followersCount, 10) === 0) {
$('#no-followers-notice').show();
}
var editLink = $('#editLink');
var yourid = templates.get('yourid'),
theirid = templates.get('theirid'),
followersCount = templates.get('followersCount');
if(yourid !== theirid) {
editLink.hide();
}
$('.reputation').each(function(index, element) {
$(element).html(app.addCommas($(element).html()));
});
$('.postcount').each(function(index, element) {
$(element).html(app.addCommas($(element).html()));
});
});
if (parseInt(followersCount, 10) === 0) {
$('#no-followers-notice').removeClass('hide');
}
}());
app.addCommasToNumbers();
};
return Followers;
});

View File

@@ -1,41 +1,17 @@
(function() {
define(['forum/accountheader'], function(header) {
var Following = {};
var yourid = templates.get('yourid'),
theirid = templates.get('theirid'),
followingCount = templates.get('followingCount');
Following.init = function() {
header.init();
$(document).ready(function() {
if(parseInt(followingCount, 10) === 0) {
$('#no-following-notice').show();
}
var editLink = $('#editLink');
var followingCount = templates.get('followingCount');
if(yourid !== theirid) {
editLink.hide();
$('.unfollow-btn').hide();
}
else {
$('.unfollow-btn').on('click',function() {
var removeBtn = $(this);
var followingUid = $(this).attr('followingUid');
removeBtn.parent().remove();
socket.emit('api:user.unfollow', {uid: followingUid});
return false;
});
if (parseInt(followingCount, 10) === 0) {
$('#no-following-notice').removeClass('hide');
}
$('.reputation').each(function(index, element) {
$(element).html(app.addCommas($(element).html()));
});
$('.postcount').each(function(index, element) {
$(element).html(app.addCommas($(element).html()));
});
});
app.addCommasToNumbers();
};
}());
return Following;
});

View File

@@ -1,166 +1,270 @@
(function() {
var num_users = document.getElementById('number_of_users'),
post_stats = document.getElementById('post_stats'),
latest_user = document.getElementById('latest_user'),
active_users = document.getElementById('active_users'),
user_label = document.getElementById('user_label'),
active_record = document.getElementById('active_record'),
right_menu = document.getElementById('right-menu');
socket.emit('user.count', {});
socket.on('user.count', function(data) {
num_users.innerHTML = "We currently have <b>" + data.count + "</b> registered users.";
socket.emit('api:updateHeader', {
fields: ['username', 'picture', 'userslug']
});
socket.emit('post.stats');
socket.on('post.stats', function(data) {
post_stats.innerHTML = "Our users have created <b>" + data.topics + "</b> topics and made <b>" + data.posts + "</b> posts.";
});
socket.emit('user.latest', {});
socket.on('user.latest', function(data) {
if (data.username == '') {
latest_user.innerHTML = '';
} else {
latest_user.innerHTML = "The most recent user to register is <b><a href='/users/"+data.userslug+"'>" + data.username + "</a></b>.";
}
});
socket.emit('api:user.active.get');
socket.on('api:user.active.get', function(data) {
var plural_users = parseInt(data.users) !== 1,
plural_anon = parseInt(data.anon) !== 1;
active_users.innerHTML = 'There ' + (plural_users ? 'are' : 'is') + ' <strong>' + data.users + '</strong> user' + (plural_users ? 's' : '') + ' and <strong>' + data.anon + '</strong> guest' + (plural_anon ? 's' : '') + ' online';
});
socket.emit('api:user.active.get_record');
socket.on('api:user.active.get_record', function(data) {
active_record.innerHTML = "most users ever online was <strong>" + data.record + "</strong> on <strong>" + (new Date(parseInt(data.timestamp,10))).toUTCString() + "</strong>";
});
socket.emit('api:updateHeader', { fields: ['username', 'picture', 'userslug'] });
socket.on('api:updateHeader', function(data) {
var rightMenu = $('#right-menu');
if (data.uid > 0) {
$('#search-button').on('click', function() {
$('#search-fields').removeClass('hide').show();
$(this).hide();
$('#search-fields input').focus();
var userLabel = rightMenu.find('#user_label');
if(userLabel.length) {
if(data['userslug'])
userLabel.attr('href','/users/' + data['userslug']);
if(data['picture'])
userLabel.find('img').attr('src',data['picture']+"?s=24&default=identicon");
if(data['username'])
$('#search-form').on('submit', function() {
$('#search-fields').hide();
$('#search-button').show();
});
$('#search-fields input').on('blur', function() {
$('#search-fields').hide();
$('#search-button').show();
});
});
var loggedInMenu = $('#logged-in-menu'),
isLoggedIn = data.uid > 0,
allowGuestSearching = (data.config || {}).allowGuestSearching === '1';
if (isLoggedIn) {
$('.nodebb-loggedin').show();
$('.nodebb-loggedout').hide();
$('#logged-out-menu').addClass('hide');
$('#logged-in-menu').removeClass('hide');
$('#search-button').removeClass("hide").show();
var userLabel = loggedInMenu.find('#user_label');
if (userLabel.length) {
if (data['userslug'])
userLabel.find('#user-profile-link').attr('href', '/user/' + data['userslug']);
if (data['picture'])
userLabel.find('img').attr('src', data['picture']);
if (data['username'])
userLabel.find('span').html(data['username']);
}
else {
var userli = $('<li> \
<a id="user_label" href="/users/'+data['userslug']+'"> \
<img src="'+data['picture']+"?s=24&default=identicon"+'"/> \
<span>'+data['username']+'</span> \
</a> \
</li>');
rightMenu.append(userli);
var logoutli = $('<li><a href="' + RELATIVE_PATH + '/logout">Log out</a></li>');
rightMenu.append(logoutli);
$('#logout-link').on('click', app.logout);
}
} else {
rightMenu.html('');
if (allowGuestSearching) {
$('#search-button').removeClass("hide").show();
} else {
$('#search-button').addClass("hide").hide();
}
var registerEl = document.createElement('li'),
loginEl = document.createElement('li');
$('.nodebb-loggedin').hide();
$('.nodebb-loggedout').show();
registerEl.innerHTML = '<a href="/register">Register</a>';
loginEl.innerHTML = '<a href="/login">Login</a>';
$('#logged-out-menu').removeClass('hide');
$('#logged-in-menu').addClass('hide');
right_menu.appendChild(registerEl);
right_menu.appendChild(loginEl);
}
$('#main-nav a,#user-control-list a,#logged-out-menu .dropdown-menu a').off('click').on('click', function() {
if($('.navbar .navbar-collapse').hasClass('in'))
$('.navbar-header button').click();
});
});
// Notifications dropdown
var notifContainer = document.getElementsByClassName('notifications')[0],
notifTrigger = notifContainer.querySelector('a'),
notifList = document.getElementById('notif-list');
notifTrigger.addEventListener('click', function() {
if (notifContainer.className.indexOf('open') === -1) socket.emit('api:notifications.get');
notifList = document.getElementById('notif-list'),
notifIcon = $('.notifications a');
notifTrigger.addEventListener('click', function(e) {
e.preventDefault();
if (notifContainer.className.indexOf('open') === -1) {
socket.emit('api:notifications.get', null, function(data) {
var notifFrag = document.createDocumentFragment(),
notifEl = document.createElement('li'),
numRead = data.read.length,
numUnread = data.unread.length,
x;
notifList.innerHTML = '';
if ((data.read.length + data.unread.length) > 0) {
for (x = 0; x < numUnread; x++) {
notifEl.setAttribute('data-nid', data.unread[x].nid);
notifEl.className = 'unread';
notifEl.innerHTML = '<a href="' + data.unread[x].path + '"><span class="pull-right">' + utils.relativeTime(data.unread[x].datetime, true) + '</span>' + data.unread[x].text + '</a>';
notifFrag.appendChild(notifEl.cloneNode(true));
}
for (x = 0; x < numRead; x++) {
notifEl.setAttribute('data-nid', data.read[x].nid);
notifEl.className = '';
notifEl.innerHTML = '<a href="' + data.read[x].path + '"><span class="pull-right">' + utils.relativeTime(data.read[x].datetime, true) + '</span>' + data.read[x].text + '</a>';
notifFrag.appendChild(notifEl.cloneNode(true));
}
} else {
notifEl.className = 'no-notifs';
notifEl.innerHTML = '<a>You have no notifications</a>';
notifFrag.appendChild(notifEl.cloneNode(true));
}
// Add dedicated link to /notifications
notifEl.removeAttribute('data-nid');
notifEl.className = 'pagelink';
notifEl.innerHTML = '<a href="' + RELATIVE_PATH + '/notifications">See all Notifications</a>';
notifFrag.appendChild(notifEl.cloneNode(true));
notifList.appendChild(notifFrag);
if (data.unread.length > 0) {
notifIcon.toggleClass('active', true);
} else {
notifIcon.toggleClass('active', false);
}
socket.emit('api:notifications.mark_all_read', null, function() {
notifIcon.toggleClass('active', false);
app.refreshTitle();
// Update favicon + local count
Tinycon.setBubble(0);
localStorage.setItem('notifications:count', 0);
});
});
}
});
notifList.addEventListener('click', function(e) {
var target;
switch(e.target.nodeName) {
case 'SPAN': target = e.target.parentNode.parentNode; break;
case 'A': target = e.target.parentNode; break;
case 'li': target = e.target; break;
switch (e.target.nodeName) {
case 'SPAN':
target = e.target.parentNode.parentNode;
break;
case 'A':
target = e.target.parentNode;
break;
case 'li':
target = e.target;
break;
}
if (target) {
var nid = parseInt(target.getAttribute('data-nid'));
if (nid > 0) socket.emit('api:notifications.mark_read', nid);
}
})
socket.on('api:notifications.get', function(data) {
var notifFrag = document.createDocumentFragment(),
notifEl = document.createElement('li'),
notifIcon = document.querySelector('.notifications a i'),
numRead = data.read.length,
numUnread = data.unread.length,
x;
notifList.innerHTML = '';
if (data.read.length + data.unread.length > 0) {
for(x=0;x<numUnread;x++) {
notifEl.setAttribute('data-nid', data.unread[x].nid);
notifEl.className = 'unread';
notifEl.innerHTML = '<a href="' + data.unread[x].path + '"><span class="pull-right">' + utils.relativeTime(data.unread[x].datetime, true) + '</span>' + data.unread[x].text + '</a>';
notifFrag.appendChild(notifEl.cloneNode(true));
}
for(x=0;x<numRead;x++) {
notifEl.setAttribute('data-nid', data.read[x].nid);
notifEl.className = '';
notifEl.innerHTML = '<a href="' + data.read[x].path + '"><span class="pull-right">' + utils.relativeTime(data.read[x].datetime, true) + '</span>' + data.read[x].text + '</a>';
notifFrag.appendChild(notifEl.cloneNode(true));
}
});
var updateNotifCount = function(count) {
// Update notification icon, if necessary
if (count > 0) {
notifIcon.toggleClass('active', true);
} else {
notifEl.innerHTML = '<a>You have no notifications</a>';
notifFrag.appendChild(notifEl);
notifIcon.toggleClass('active', false);
}
notifList.appendChild(notifFrag);
socket.emit('api:notifications.removeFlag');
notifIcon.className = 'icon-circle-blank';
});
socket.on('api:notifications.hasFlag', function(flag) {
var notifIcon = document.querySelector('.notifications a i');
if(notifIcon) {
if (flag > 0) notifIcon.className = 'icon-circle active';
else notifIcon.className = 'icon-circle-blank';
// Update the favicon + saved local count
Tinycon.setBubble(count);
localStorage.setItem('notifications:count', count);
};
socket.emit('api:notifications.getCount', function(err, count) {
if (!err) {
updateNotifCount(count);
} else {
updateNotifCount(0);
}
});
socket.on('event:new_notification', function() {
document.querySelector('.notifications a i').className = 'icon-circle active';
notifIcon.toggleClass('active', true);
app.alert({
alert_id: 'new_notif',
title: 'New notification',
message: 'You have unread notifications.',
type: 'warning',
timeout: 2000
});
app.refreshTitle();
if (ajaxify.currentPage === 'notifications') {
ajaxify.refresh();
}
// Update the favicon + local storage
var savedCount = parseInt(localStorage.getItem('notifications:count'),10) || 0;
updateNotifCount(savedCount+1);
});
socket.on('event:notifications.updateCount', function(count) {
updateNotifCount(count);
});
socket.emit('api:notifications.hasFlag');
// Chats Dropdown
var chatsToggleEl = $('#chat_dropdown'),
chatsListEl = $('#chat-list'),
chatDropdownEl = chatsToggleEl.parent();
chatsToggleEl.on('click', function() {
if (chatDropdownEl.hasClass('open')) {
return;
}
socket.on('chatMessage', function(data) {
var username = data.username;
var fromuid = data.fromuid;
var message = data.message;
require(['chat'], function(chat) {
var chatModal = chat.createModalIfDoesntExist(username, fromuid);
chatModal.show();
chat.bringModalToTop(chatModal);
chat.appendChatMessage(chatModal, message);
socket.emit('api:chats.list', function(chats) {
var chatsFrag = document.createDocumentFragment(),
chatEl = document.createElement('li'),
numChats = chats.length,
x, userObj;
if (numChats > 0) {
for(x=0;x<numChats;x++) {
userObj = chats[x];
chatEl.setAttribute('data-uid', userObj.uid);
chatEl.innerHTML = '<a href="javascript:app.openChat(\'' + userObj.username + '\', ' + userObj.uid + ');"><img src="' + userObj.picture + '" title="' + userObj.username + '" />' + userObj.username + '</a>';
chatsFrag.appendChild(chatEl.cloneNode(true));
}
} else {
chatEl.innerHTML = '<a href="#">No Recent Chats</a>';
chatsFrag.appendChild(chatEl.cloneNode(true));
}
chatsListEl.empty();
chatsListEl.html(chatsFrag);
});
});
socket.on('event:chats.receive', function(data) {
require(['chat'], function(chat) {
var modal = null;
if (chat.modalExists(data.fromuid)) {
modal = chat.getModal(data.fromuid);
chat.appendChatMessage(modal, data.message, data.timestamp);
require(['mobileMenu'], function(mobileMenu) {
mobileMenu.init();
if (modal.is(":visible")) {
chat.load(modal.attr('UUID'));
} else {
chat.toggleNew(modal.attr('UUID'), true);
}
if (!modal.is(":visible") || !app.isFocused) {
app.alternatingTitle(data.username + ' has messaged you');
}
} else {
modal = chat.createModal(data.username, data.fromuid);
chat.toggleNew(modal.attr('UUID'), true);
app.alternatingTitle(data.username + ' has messaged you');
}
});
});
}());
function updateUnreadCount(count) {
var badge = $('#numUnreadBadge');
badge.html(count > 20 ? '20+' : count);
if (count > 0) {
badge
.removeClass('badge-inverse')
.addClass('badge-important');
} else {
badge
.removeClass('badge-important')
.addClass('badge-inverse');
}
}
socket.on('event:unread.updateCount', updateUnreadCount);
socket.emit('api:unread.count', updateUnreadCount);
}());

30
public/src/forum/home.js Normal file
View File

@@ -0,0 +1,30 @@
define(function() {
var home = {};
home.init = function() {
ajaxify.register_events([
'user.count',
'post.stats',
'api:user.active.get'
]);
socket.emit('user.count', {});
socket.on('user.count', function(data) {
$('#stats_users').html(utils.makeNumberHumanReadable(data.count)).attr('title', data.count);
});
socket.emit('post.stats');
socket.on('post.stats', function(data) {
$('#stats_topics').html(utils.makeNumberHumanReadable(data.topics)).attr('title', data.topics);
$('#stats_posts').html(utils.makeNumberHumanReadable(data.posts)).attr('title', data.posts);
});
socket.emit('api:user.active.get');
socket.on('api:user.active.get', function(data) {
$('#stats_online').html(data.users);
});
}
return home;
});

View File

@@ -1,44 +1,65 @@
define(function() {
var Login = {};
Login.init = function() {
$('#login').on('click', function() {
var loginData = {
'username': $('#username').val(),
'password': $('#password').val(),
'_csrf': $('#csrf-token').val()
};
(function() {
// Alternate Logins
var altLoginEl = document.querySelector('.alt-logins');
altLoginEl.addEventListener('click', function(e) {
var target;
switch(e.target.nodeName) {
case 'LI': target = e.target; break;
case 'I': target = e.target.parentNode; break;
}
if (target) {
document.location.href = target.getAttribute('data-url');
}
});
$('#login').on('click', function() {
var loginData = {
'username': $('#username').val(),
'password': $('#password').val(),
'_csrf': $('#csrf-token').val()
};
$.ajax({
type: "POST",
url: RELATIVE_PATH + '/login',
data: loginData,
success: function(data, textStatus, jqXHR) {
$('#login-error-notify').hide();
window.location.replace(RELATIVE_PATH + "/");
},
error : function(data, textStatus, jqXHR) {
$('#login-error-notify').show().delay(1000).fadeOut(250);
},
dataType: 'json',
async: true,
timeout: 2000
$('#login').attr('disabled', 'disabled').html('Logging in...');
$('#login-error-notify').hide();
$.ajax({
type: "POST",
url: RELATIVE_PATH + '/login',
data: loginData,
success: function(data, textStatus, jqXHR) {
if (!data.success) {
$('#login-error-notify').show();
$('#login').removeAttr('disabled').html('Login');
} else {
$('#login').html('Redirecting...');
if(!app.previousUrl) {
app.previousUrl = '/';
}
if(app.previousUrl.indexOf('/reset/') != -1)
window.location.replace(RELATIVE_PATH + "/?loggedin");
else
window.location.replace(app.previousUrl + "?loggedin");
app.loadConfig();
}
},
error: function(data, textStatus, jqXHR) {
$('#login-error-notify').show();
$('#login').removeAttr('disabled').html('Login');
},
dataType: 'json',
async: true,
timeout: 2000
});
return false;
});
return false;
});
}());
$('#login-error-notify button').on('click', function() {
$('#login-error-notify').hide();
return false;
});
document.querySelector('#content input').focus();
if(!config.emailSetup)
$('#reset-link').addClass('hide');
else
$('#reset-link').removeClass('hide');
};
return Login;
});

View File

@@ -0,0 +1,31 @@
define(function() {
var Notifications = {};
Notifications.init = function() {
var listEl = $('.notifications-list'),
markAllReadEl = document.getElementById('mark-all-notifs-read');
$('span.timeago').timeago();
// Allow the user to click anywhere in the LI
listEl.on('click', 'li', function(e) {
this.querySelector('a').click();
});
// Mark all as read button
$(markAllReadEl).click(function() {
socket.emit('api:notifications.mark_all_read', {}, function() {
ajaxify.go('notifications');
app.alert({
alert_id: "notifications:mark_all_read",
title: "All Notifications Read",
message: "Successfully marked all notifications read",
type: 'success',
timeout: 2500
})
});
});
}
return Notifications;
});

View File

@@ -1,50 +1,114 @@
(function() {
app.enter_room('recent_posts');
define(function() {
var Recent = {};
ajaxify.register_events([
'event:new_topic',
'event:new_post'
]);
Recent.newTopicCount = 0;
Recent.newPostCount = 0;
Recent.loadingMoreTopics = false;
var newTopicCount = 0, newPostCount = 0;
var active = '';
$('#new-topics-alert').on('click', function() {
$(this).hide();
});
Recent.init = function() {
app.enterRoom('recent_posts');
socket.on('event:new_topic', function(data) {
++newTopicCount;
updateAlertText();
});
function updateAlertText() {
ajaxify.register_events([
'event:new_topic',
'event:new_post'
]);
function getActiveSection() {
var url = window.location.href,
parts = url.split('/'),
active = parts[parts.length - 1];
return active;
}
active = getActiveSection();
jQuery('.nav-pills li').removeClass('active');
jQuery('.nav-pills li a').each(function() {
if (this.getAttribute('href').match(active)) {
jQuery(this.parentNode).addClass('active');
return false;
}
});
$('#new-topics-alert').on('click', function() {
$(this).addClass('hide');
});
socket.on('event:new_topic', function(data) {
++Recent.newTopicCount;
Recent.updateAlertText();
});
socket.on('event:new_post', function(data) {
++Recent.newPostCount;
Recent.updateAlertText();
});
$(window).off('scroll').on('scroll', function() {
var bottom = ($(document).height() - $(window).height()) * 0.9;
if ($(window).scrollTop() > bottom && !Recent.loadingMoreTopics) {
Recent.loadMoreTopics();
}
});
};
Recent.updateAlertText = function() {
var text = '';
if(newTopicCount > 1)
text = 'There are ' + newTopicCount + ' new topics';
else if(newTopicCount === 1)
if (Recent.newTopicCount > 1)
text = 'There are ' + Recent.newTopicCount + ' new topics';
else if (Recent.newTopicCount === 1)
text = 'There is 1 new topic';
else
text = 'There are no new topics';
if(newPostCount > 1)
text += ' and ' + newPostCount + ' new posts.';
else if(newPostCount === 1)
if (Recent.newPostCount > 1)
text += ' and ' + Recent.newPostCount + ' new posts.';
else if (Recent.newPostCount === 1)
text += ' and 1 new post.';
else
text += ' and no new posts.';
text += ' Click here to reload.';
$('#new-topics-alert').html(text).fadeIn('slow');
$('#new-topics-alert').html(text).removeClass('hide').fadeIn('slow');
}
socket.on('event:new_post', function(data) {
++newPostCount;
updateAlertText();
});
Recent.onTopicsLoaded = function(topics) {
var html = templates.prepare(templates['recent'].blocks['topics']).parse({
topics: topics
});
translator.translate(html, function(translatedHTML) {
var container = $('#topics-container');
})();
$('#category-no-topics').remove();
html = $(html);
container.append(html);
$('span.timeago').timeago();
app.makeNumbersHumanReadable(html.find('.human-readable-number'));
});
}
Recent.loadMoreTopics = function() {
Recent.loadingMoreTopics = true;
socket.emit('api:topics.loadMoreRecentTopics', {
after: $('#topics-container').children('li').length,
term: active
}, function(data) {
if (data.topics && data.topics.length) {
Recent.onTopicsLoaded(data.topics);
}
Recent.loadingMoreTopics = false;
});
}
return Recent;
});

View File

@@ -1,156 +1,157 @@
(function() {
var username = document.getElementById('username'),
password = document.getElementById('password'),
password_confirm = document.getElementById('password-confirm'),
register = document.getElementById('register'),
emailEl = document.getElementById('email'),
username_notify = document.getElementById('username-notify'),
email_notify = document.getElementById('email-notify'),
password_notify = document.getElementById('password-notify'),
password_confirm_notify = document.getElementById('password-confirm-notify'),
usernamevalid = false;
emailexists = false,
emailvalid = false,
userexists = false,
passwordsmatch = false,
passwordvalid = false;
define(function() {
var Register = {};
$(username).on('keyup change', function() {
usernamevalid = utils.isUserNameValid(username.value);
Register.init = function() {
var username = $('#username'),
password = $('#password'),
password_confirm = $('#password-confirm'),
register = $('#register'),
emailEl = $('#email'),
username_notify = $('#username-notify'),
email_notify = $('#email-notify'),
password_notify = $('#password-notify'),
password_confirm_notify = $('#password-confirm-notify'),
validationError = false,
successIcon = '<i class="fa fa-check"></i>';
if(username.value.length < 3) {
username_notify.innerHTML = 'Username too short';
username_notify.className = 'label label-important';
}
else if(!usernamevalid) {
username_notify.innerHTML = 'Invalid username';
username_notify.className = 'label label-important';
}
else {
socket.emit('user.exists', {username: username.value});
}
});
$('#referrer').val(app.previousUrl);
$(emailEl).on('keyup change', function() {
emailvalid = utils.isEmailValid(email.value);
if(!emailvalid) {
email_notify.innerHTML = 'Invalid email address';
email_notify.className = 'label label-important';
}
else
socket.emit('user.email.exists', { email: emailEl.value });
});
$(password).on('keyup', function() {
passwordvalid = utils.isPasswordValid(password.value);
if (password.value.length < 6) {
password_notify.innerHTML = 'Password too short';
password_notify.className = 'label label-important';
} else if(!passwordvalid) {
password_notify.innerHTML = 'Invalid password';
password_notify.className = 'label label-important';
} else {
password_notify.innerHTML = 'OK!';
password_notify.className = 'label label-success';
}
if(password.value !== password_confirm.value) {
password_confirm_notify.innerHTML = 'Passwords must match!';
password_confirm_notify.className = 'label label-important';
passwordsmatch = false;
}
});
$(password_confirm).on('keyup', function() {
if(password.value !== password_confirm.value) {
password_confirm_notify.innerHTML = 'Passwords must match!';
password_confirm_notify.className = 'label label-important';
passwordsmatch = false;
}
else {
password_confirm_notify.innerHTML = 'OK!';
password_confirm_notify.className = 'label label-success';
passwordsmatch = true;
}
});
ajaxify.register_events(['user.exists', 'user.email.exists']);
socket.on('user.exists', function(data) {
userexists = data.exists;
if (data.exists === true) {
username_notify.innerHTML = 'Username exists';
username_notify.className = 'label label-important';
} else {
username_notify.innerHTML = 'OK!';
username_notify.className = 'label label-success';
}
});
socket.on('user.email.exists', function(data) {
emailexists = data.exists;
if (data.exists === true) {
email_notify.innerHTML = 'Email Address exists';
email_notify.className = 'label label-important';
}
else {
email_notify.innerHTML = 'OK!';
email_notify.className = 'label label-success';
}
});
// Alternate Logins
var altLoginEl = document.querySelector('.alt-logins');
altLoginEl.addEventListener('click', function(e) {
var target;
switch(e.target.nodeName) {
case 'LI': target = e.target; break;
case 'I': target = e.target.parentNode; break;
}
if (target) {
document.location.href = target.getAttribute('data-url');
}
});
function validateForm() {
var validated = true;
if (username.value.length < 2 || !usernamevalid) {
username_notify.innerHTML = 'Invalid username';
username_notify.className = 'label label-important';
validated = false;
function showError(element, msg) {
element.html(msg);
element.parent()
.removeClass('alert-success')
.addClass('alert-danger');
element.show();
validationError = true;
}
if (password.value.length < 5) {
password_notify.innerHTML = 'Password too short';
validated = false;
}
if(password.value !== password_confirm.value) {
password_confirm_notify.innerHTML = 'Passwords must match!';
function showSuccess(element, msg) {
element.html(msg);
element.parent()
.removeClass('alert-danger')
.addClass('alert-success');
element.show();
}
if (!emailvalid) {
email_notify.innerHTML = 'Invalid email address';
validated = false;
}
if(emailexists) {
email_notify.innerHTML = 'Email Address exists';
validated = false;
function validateEmail() {
if (!emailEl.val()) {
validationError = true;
return;
}
if (!utils.isEmailValid(emailEl.val())) {
showError(email_notify, 'Invalid email address.');
} else {
socket.emit('user.email.exists', {
email: emailEl.val()
});
}
}
if(userexists || !passwordsmatch || !passwordvalid)
validated = false;
emailEl.on('blur', function() {
validateEmail();
});
return validated;
}
register.addEventListener('click', function(e) {
if (!validateForm()) e.preventDefault();
}, false);
}());
function validateUsername() {
if (!username.val()) {
validationError = true;
return;
}
if (username.val().length < config.minimumUsernameLength) {
showError(username_notify, 'Username too short!');
} else if (username.val().length > config.maximumUsernameLength) {
showError(username_notify, 'Username too long!');
} else if (!utils.isUserNameValid(username.val()) || !utils.slugify(username.val())) {
showError(username_notify, 'Invalid username!');
} else {
socket.emit('user.exists', {
username: username.val()
});
}
}
username.on('keyup', function() {
jQuery('#yourUsername').html(this.value.length > 0 ? this.value : 'username');
});
username.on('blur', function() {
validateUsername();
});
function validatePassword() {
if (!password.val()) {
validationError = true;
return;
}
if (password.val().length < config.minimumPasswordLength) {
showError(password_notify, 'Password too short!');
} else if (!utils.isPasswordValid(password.val())) {
showError(password_notify, 'Invalid password!');
} else {
showSuccess(password_notify, successIcon);
}
if (password.val() !== password_confirm.val() && password_confirm.val() !== '') {
showError(password_confirm_notify, 'Passwords must match!');
}
}
$(password).on('blur', function() {
validatePassword();
});
function validatePasswordConfirm() {
if (!password.val() || password_notify.hasClass('alert-error')) {
return;
}
if (password.val() !== password_confirm.val()) {
showError(password_confirm_notify, 'Passwords must match!');
} else {
showSuccess(password_confirm_notify, successIcon);
}
}
$(password_confirm).on('blur', function() {
validatePasswordConfirm();
});
ajaxify.register_events(['user.exists', 'user.email.exists']);
socket.on('user.exists', function(data) {
if (data.exists === true) {
showError(username_notify, 'Username already taken!');
} else {
showSuccess(username_notify, successIcon);
}
});
socket.on('user.email.exists', function(data) {
if (data.exists === true) {
showError(email_notify, 'Email address already taken!');
} else {
showSuccess(email_notify, successIcon);
}
});
function validateForm() {
validationError = false;
validateEmail();
validateUsername();
validatePassword();
validatePasswordConfirm();
return validationError;
}
register.on('click', function(e) {
if (validateForm()) {
e.preventDefault();
}
});
};
return Register;
});

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