mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
[#1489] add edit-gropu server route, basic editing of group info for now (with markdown!)
This commit is contained in:
@@ -13,10 +13,9 @@
|
|||||||
padding-right: 14px
|
padding-right: 14px
|
||||||
display: inline-block
|
display: inline-block
|
||||||
|
|
||||||
.bailey-modal .popover
|
.wide-popover
|
||||||
max-width: 400px
|
max-width: 400px
|
||||||
|
|
||||||
|
|
||||||
// variables
|
// variables
|
||||||
|
|
||||||
gpColor = #FBEFC0
|
gpColor = #FBEFC0
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A
|
|||||||
$scope.Members = Members;
|
$scope.Members = Members;
|
||||||
$scope._editing = {group:false};
|
$scope._editing = {group:false};
|
||||||
|
|
||||||
|
$scope.save = function(group){
|
||||||
|
group.$save();
|
||||||
|
group._editing = false;
|
||||||
|
}
|
||||||
|
|
||||||
// ------ Loading ------
|
// ------ Loading ------
|
||||||
|
|
||||||
$scope.groups = Groups.groups;
|
$scope.groups = Groups.groups;
|
||||||
|
|||||||
@@ -19,6 +19,10 @@ var api = module.exports;
|
|||||||
var usernameFields = 'auth.local.username auth.facebook.displayName auth.facebook.givenName auth.facebook.familyName auth.facebook.name';
|
var usernameFields = 'auth.local.username auth.facebook.displayName auth.facebook.givenName auth.facebook.familyName auth.facebook.name';
|
||||||
var partyFields = 'profile preferences items stats achievements party backer flags.rest ' + usernameFields;
|
var partyFields = 'profile preferences items stats achievements party backer flags.rest ' + usernameFields;
|
||||||
|
|
||||||
|
function removeSelf(group, user){
|
||||||
|
group.members = _.filter(group.members, function(m){return m._id != user._id});
|
||||||
|
}
|
||||||
|
|
||||||
api.getMember = function(req, res) {
|
api.getMember = function(req, res) {
|
||||||
User.findById(req.params.uid).select(partyFields).exec(function(err, user){
|
User.findById(req.params.uid).select(partyFields).exec(function(err, user){
|
||||||
if (err) return res.json(500,{err:err});
|
if (err) return res.json(500,{err:err});
|
||||||
@@ -70,8 +74,7 @@ api.getGroups = function(req, res, next) {
|
|||||||
|
|
||||||
// Remove self from party (see above failing `match` directive in `populate`
|
// Remove self from party (see above failing `match` directive in `populate`
|
||||||
if (results.party) {
|
if (results.party) {
|
||||||
var i = _.findIndex(results.party.members, {_id:user._id});
|
removeSelf(results.party, user);
|
||||||
if (~i) results.party.members.splice(i,1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort public groups by members length (not easily doable in mongoose)
|
// Sort public groups by members length (not easily doable in mongoose)
|
||||||
@@ -104,8 +107,7 @@ api.getGroup = function(req, res, next) {
|
|||||||
}
|
}
|
||||||
// Remove self from party (see above failing `match` directive in `populate`
|
// Remove self from party (see above failing `match` directive in `populate`
|
||||||
if (group.type == 'party') {
|
if (group.type == 'party') {
|
||||||
var i = _.findIndex(group.members, {_id:user._id});
|
removeSelf(group, user);
|
||||||
if (~i) group.members.splice(i,1);
|
|
||||||
}
|
}
|
||||||
res.json(group);
|
res.json(group);
|
||||||
|
|
||||||
@@ -121,6 +123,24 @@ api.createGroup = function(req, res, next) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
api.updateGroup = function(req, res, next) {
|
||||||
|
var group = res.locals.group;
|
||||||
|
'name description logo websites logo leaderMessage'.split(' ').forEach(function(attr){
|
||||||
|
group[attr] = req.body[attr];
|
||||||
|
});
|
||||||
|
async.series([
|
||||||
|
function(cb){group.save(cb);},
|
||||||
|
function(cb){
|
||||||
|
var fields = group.type == 'party' ? partyFields : usernameFields;
|
||||||
|
Group.findById(group._id).populate('members', fields).exec(cb);
|
||||||
|
}
|
||||||
|
], function(err, results){
|
||||||
|
if (err) return res.json(500,{err:err});
|
||||||
|
removeSelf(results[1], res.locals.user);
|
||||||
|
res.json(results[1]);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
api.attachGroup = function(req, res, next) {
|
api.attachGroup = function(req, res, next) {
|
||||||
Group.findById(req.params.gid, function(err, group){
|
Group.findById(req.params.gid, function(err, group){
|
||||||
if(err) return res.json(500, {err:err});
|
if(err) return res.json(500, {err:err});
|
||||||
@@ -160,7 +180,7 @@ api.postChat = function(req, res, next) {
|
|||||||
|
|
||||||
// TODO This is less efficient, but see https://github.com/lefnire/habitrpg/commit/41255dc#commitcomment-4014583
|
// TODO This is less efficient, but see https://github.com/lefnire/habitrpg/commit/41255dc#commitcomment-4014583
|
||||||
var saved = results[1];
|
var saved = results[1];
|
||||||
saved.members = _.filter(saved.members, function(m){return m._id != user._id});
|
removeSelf(saved, user);
|
||||||
|
|
||||||
res.json(saved);
|
res.json(saved);
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ router['delete']('/user/tags/:tid', auth.auth, user.deleteTag);
|
|||||||
router.get('/groups', auth.auth, groups.getGroups);
|
router.get('/groups', auth.auth, groups.getGroups);
|
||||||
router.post('/groups', auth.auth, groups.createGroup);
|
router.post('/groups', auth.auth, groups.createGroup);
|
||||||
router.get('/groups/:gid', auth.auth, groups.getGroup);
|
router.get('/groups/:gid', auth.auth, groups.getGroup);
|
||||||
//PUT /groups/:gid (edit group)
|
router.post('/groups/:gid', auth.auth, groups.attachGroup, groups.updateGroup);
|
||||||
//DELETE /groups/:gid
|
//DELETE /groups/:gid
|
||||||
|
|
||||||
router.post('/groups/:gid/join', auth.auth, groups.attachGroup, groups.join);
|
router.post('/groups/:gid/join', auth.auth, groups.attachGroup, groups.join);
|
||||||
|
|||||||
@@ -9,15 +9,19 @@ a.pull-right.gem-wallet(rel='popover', data-trigger='hover', data-title='Guild B
|
|||||||
// ------ Information -------
|
// ------ Information -------
|
||||||
.modal(style='position: relative;top: auto;left: auto;right: auto;margin: 0 auto 20px;z-index: 1;max-width: 100%;')
|
.modal(style='position: relative;top: auto;left: auto;right: auto;margin: 0 auto 20px;z-index: 1;max-width: 100%;')
|
||||||
.modal-header
|
.modal-header
|
||||||
|
span(ng-if='group.leader == user.id')
|
||||||
|
button.btn.btn-primary.pull-right(ng-click='save(group)', ng-show='group._editing') Save
|
||||||
|
button.btn.btn-default.pull-right(ng-click='group._editing = true', ng-hide='group._editing') Edit Group
|
||||||
h3 {{group.name}}
|
h3 {{group.name}}
|
||||||
.modal-body
|
.modal-body
|
||||||
div.whatever-options(ng-show='_editing.group')
|
div.whatever-options(ng-show='group._editing')
|
||||||
.control-group.option-large
|
.control-group.option-large
|
||||||
label.control-label Group Name
|
label.control-label Group Name
|
||||||
input.option-content(type='text', ng-model='group.name', placeholder='Group Name')
|
input.option-content(type='text', ng-model='group.name', placeholder='Group Name')
|
||||||
.control-group.option-large
|
.control-group.option-large
|
||||||
label.control-label Description
|
label.control-label Description
|
||||||
textarea.option-content(style='height:15em;', placeholder='Description', ng-model='group.description')
|
textarea.option-content(style='height:15em;', placeholder='Description', ng-model='group.description')
|
||||||
|
include ../../shared/formatting-help
|
||||||
.control-group.option-large
|
.control-group.option-large
|
||||||
label.control-label Logo URL
|
label.control-label Logo URL
|
||||||
input.option-content(type='url', placeholder='Logo URL', ng-model='group.logo')
|
input.option-content(type='url', placeholder='Logo URL', ng-model='group.logo')
|
||||||
@@ -39,7 +43,7 @@ a.pull-right.gem-wallet(rel='popover', data-trigger='hover', data-title='Guild B
|
|||||||
i.icon-trash
|
i.icon-trash
|
||||||
a(target='_blank', href='{{website}}') {{website}}
|
a(target='_blank', href='{{website}}') {{website}}
|
||||||
|
|
||||||
div(ng-show='!_editing.group')
|
div(ng-show='!group._editing')
|
||||||
img.pull-right(ng-show='group.logo', style='max-width:150px', ng-src='{{group.logo}}')
|
img.pull-right(ng-show='group.logo', style='max-width:150px', ng-src='{{group.logo}}')
|
||||||
markdown(ng-model='group.description')
|
markdown(ng-model='group.description')
|
||||||
div(ng-show='group.websites')
|
div(ng-show='group.websites')
|
||||||
@@ -95,20 +99,16 @@ a.pull-right.gem-wallet(rel='popover', data-trigger='hover', data-title='Guild B
|
|||||||
a.btn.btn-danger(data-id='{{group.id}}', ng-click='leave(group)') Leave
|
a.btn.btn-danger(data-id='{{group.id}}', ng-click='leave(group)') Leave
|
||||||
|
|
||||||
.span8
|
.span8
|
||||||
div(ng-if='group.leader == user.id')
|
div.blah-options(ng-show='group._editing')
|
||||||
div.blah-options(ng-show='_editing.group')
|
.option-large
|
||||||
button.btn.btn-primary.pull-right(ng-click='_editing.group = false') Save
|
textarea.option-content(style='height:15em;', placeholder='Message from group leader', ng-model='group.leaderMessage')
|
||||||
i.icon-ok
|
include ../../shared/formatting-help
|
||||||
.option-large
|
|
||||||
textarea.option-content(style='height:15em;', placeholder='Message from group leader', ng-model='group.leaderMessage')
|
|
||||||
div(ng-hide='_editing.group')
|
|
||||||
button.btn.btn-default.pull-right(ng-click='_editing.group = true') Edit Group
|
|
||||||
table(ng-show='group.leaderMessage')
|
table(ng-show='group.leaderMessage')
|
||||||
tr
|
tr
|
||||||
td
|
td
|
||||||
app:avatar:avatar(profile='{{Members.members[group.leader]}}')
|
app:avatar:avatar(profile='{{Members.members[group.leader]}}')
|
||||||
td
|
td
|
||||||
.popover.static-popover.fade.right.in
|
.popover.static-popover.fade.right.in.wide-popover
|
||||||
.arrow
|
.arrow
|
||||||
h3.popover-title {{username(Members.members[group.leader].auth, Members.members[group.leader].profile.name)}}
|
h3.popover-title {{username(Members.members[group.leader].auth, Members.members[group.leader].profile.name)}}
|
||||||
.popover-content
|
.popover-content
|
||||||
|
|||||||
@@ -72,8 +72,7 @@
|
|||||||
.control-group.option-large
|
.control-group.option-large
|
||||||
label.control-label Blurb
|
label.control-label Blurb
|
||||||
textarea.option-content(style='height:15em;', placeholder='Blurb', ng-model='user.profile.blurb', ng-blur='set("profile.blurb", user.profile.blurb)')
|
textarea.option-content(style='height:15em;', placeholder='Blurb', ng-model='user.profile.blurb', ng-blur='set("profile.blurb", user.profile.blurb)')
|
||||||
small
|
include ../shared/formatting-help
|
||||||
a(target='_blank', href='http://daringfireball.net/projects/markdown/') Use Markdown form formatting
|
|
||||||
.control-group.option-large
|
.control-group.option-large
|
||||||
label.control-label Websites
|
label.control-label Websites
|
||||||
form(ng-submit='addWebsite()')
|
form(ng-submit='addWebsite()')
|
||||||
|
|||||||
2
views/shared/formatting-help.jade
Normal file
2
views/shared/formatting-help.jade
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
small
|
||||||
|
a(target='_blank', href='http://daringfireball.net/projects/markdown/') Use Markdown form formatting
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
div(modal='user.flags.rewrite !== false')
|
div(modal='user.flags.rewrite !== false')
|
||||||
.modal-header
|
.modal-header
|
||||||
h3 Mega Ultra Update!
|
h3 Mega Ultra Update!
|
||||||
.modal-body.bailey-modal
|
.modal-body
|
||||||
table
|
table
|
||||||
tr
|
tr
|
||||||
td
|
td
|
||||||
.NPC-Bailey
|
.NPC-Bailey
|
||||||
td
|
td
|
||||||
.popover.static-popover.fade.right.in
|
.popover.static-popover.fade.right.in.wide-popover
|
||||||
.arrow
|
.arrow
|
||||||
h3.popover-title
|
h3.popover-title
|
||||||
a(target='_blank', href='http://www.kickstarter.com/profile/mihakuu') Bailey
|
a(target='_blank', href='http://www.kickstarter.com/profile/mihakuu') Bailey
|
||||||
@@ -47,13 +47,13 @@ div(modal='user.flags.rewrite !== false')
|
|||||||
div(modal='modals.newStuff')
|
div(modal='modals.newStuff')
|
||||||
.modal-header
|
.modal-header
|
||||||
h3 New Stuff!
|
h3 New Stuff!
|
||||||
.modal-body.bailey-modal
|
.modal-body
|
||||||
table
|
table
|
||||||
tr
|
tr
|
||||||
td
|
td
|
||||||
.NPC-Bailey
|
.NPC-Bailey
|
||||||
td
|
td
|
||||||
.popover.static-popover.fade.right.in
|
.popover.static-popover.fade.right.in.wide-popover
|
||||||
.arrow
|
.arrow
|
||||||
h3.popover-title
|
h3.popover-title
|
||||||
a(target='_blank', href='http://www.kickstarter.com/profile/mihakuu') Bailey
|
a(target='_blank', href='http://www.kickstarter.com/profile/mihakuu') Bailey
|
||||||
|
|||||||
Reference in New Issue
Block a user