Skip to content

Commit 4cea92c

Browse files
committed
work in progress add support for groups
1 parent a6170db commit 4cea92c

20 files changed

Lines changed: 268 additions & 117 deletions
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Discourse.AdminGroupsController = Ember.ArrayController.extend({
2+
itemController: 'adminGroup',
3+
edit: function(action){
4+
this.get('content').select(action);
5+
}
6+
});
7+
8+
Discourse.AdminGroupController = Ember.ObjectController.extend({
9+
10+
});
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
Discourse.Group = Discourse.Model.extend({
2+
3+
});
4+
5+
Discourse.Group.reopenClass({
6+
findAll: function(){
7+
var list = Discourse.SelectableArray.create();
8+
9+
list.addObject(Discourse.Group.create({id: 1, name: "all mods", members: ["A","b","c"]}));
10+
list.addObject(Discourse.Group.create({id: 2, name: "other mods", members: ["A","b","c"]}));
11+
12+
return list;
13+
},
14+
15+
find: function(id) {
16+
var promise = new Em.Deferred();
17+
18+
setTimeout(function(){
19+
promise.resolve(Discourse.Group.create({id: 1, name: "all mods", members: ["A","b","c"]}));
20+
}, 1000);
21+
22+
return promise;
23+
}
24+
});
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Discourse.AdminGroupsRoute = Discourse.Route.extend({
2+
model: function() {
3+
return Discourse.Group.findAll();
4+
},
5+
renderTemplate: function() {
6+
this.render('admin/templates/groups',{into: 'admin/templates/admin'});
7+
}
8+
});
9+

app/assets/javascripts/admin/routes/admin_routes.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ Discourse.Route.buildRoutes(function() {
2525
this.route('old', { path: '/old' });
2626
});
2727

28+
this.route('groups', {path: '/groups'});
29+
2830
this.resource('adminUsers', { path: '/users' }, function() {
2931
this.resource('adminUser', { path: '/:username' });
3032
this.resource('adminUsersList', { path: '/list' }, function() {

app/assets/javascripts/admin/templates/admin.js.handlebars

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<li>{{#linkTo 'admin.site_settings'}}{{i18n admin.site_settings.title}}{{/linkTo}}</li>
88
<li>{{#linkTo 'adminSiteContents'}}{{i18n admin.site_content.title}}{{/linkTo}}</li>
99
<li>{{#linkTo 'adminUsersList.active'}}{{i18n admin.users.title}}{{/linkTo}}</li>
10+
<li>{{#linkTo 'admin.groups'}}{{i18n admin.groups.title}}{{/linkTo}}</li>
1011
<li>{{#linkTo 'admin.email_logs'}}{{i18n admin.email_logs.title}}{{/linkTo}}</li>
1112
<li>{{#linkTo 'adminFlags.active'}}{{i18n admin.flags.title}}{{/linkTo}}</li>
1213
<li>{{#linkTo 'admin.customize'}}{{i18n admin.customize.title}}{{/linkTo}}</li>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<div class='row'>
2+
<div class='content-list span6'>
3+
<h3>{{i18n admin.groups.edit}}</h3>
4+
<ul>
5+
{{#each group in controller}}
6+
<li>
7+
<a href="#" {{action "edit" group}} {{bindAttr class="group.active"}}>{{group.name}}</a>
8+
</li>
9+
{{/each}}
10+
</ul>
11+
</div>
12+
13+
<div class='content-editor'>
14+
{{#if content.active}}
15+
{{#with content.active}}
16+
{{name}}
17+
{{view Discourse.UserSelector id="private-message-users" class="span8" placeholderKey="admin.groups.selector_placeholder" tabindex="1" usernamesBinding="usernames"}}
18+
{{/with}}
19+
{{else}}
20+
nothing here yet
21+
{{/if}}
22+
</div>
23+
</div>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Discourse.AdminGroupsView = Discourse.View.extend({
2+
});
3+
4+
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// this allows you to track the selected item in an array, ghetto for now
2+
Discourse.SelectableArray = Em.ArrayProxy.extend({
3+
content: [],
4+
selectIndex: function(index){
5+
this.select(this[index]);
6+
},
7+
select: function(selected){
8+
this.content.each(function(item){
9+
if(item === selected){
10+
Em.set(item, "active", true)
11+
} else {
12+
if (item.get("active")) {
13+
Em.set(item, "active", false)
14+
}
15+
}
16+
});
17+
this.set("active", selected);
18+
}
19+
});

app/assets/javascripts/discourse/templates/composer.js.handlebars

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
{{#if content.editTitle}}
2929
<div class='form-element clearfix'>
3030
{{#if content.creatingPrivateMessage}}
31-
{{view Discourse.TextField id="private-message-users" class="span8" placeholderKey="composer.users_placeholder" tabindex="1"}}
31+
{{view Discourse.UserSelector topicIdBinding="controller.controllers.topic.content.id" excludeCurrentUser="true" id="private-message-users" class="span8" placeholderKey="composer.users_placeholder" tabindex="1" usernamesBinding="content.targetUsernames"}}
3232
{{/if}}
3333
{{view Discourse.TextField valueBinding="content.title" tabindex="2" id="reply-title" maxlength="255" class="span8" placeholderKey="composer.title_placeholder"}}
3434
{{#unless content.creatingPrivateMessage}}

app/assets/javascripts/discourse/views/composer_view.js

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -167,17 +167,7 @@ Discourse.ComposerView = Discourse.View.extend({
167167

168168
$LAB.script(assetPath('defer/html-sanitizer-bundle'));
169169
Discourse.ComposerView.trigger("initWmdEditor");
170-
template = Handlebars.compile("<div class='autocomplete'>" +
171-
"<ul>" +
172-
"{{#each options}}" +
173-
"<li>" +
174-
"<a href='#'>{{avatar this imageSize=\"tiny\"}} " +
175-
"<span class='username'>{{this.username}}</span> " +
176-
"<span class='name'>{{this.name}}</span></a>" +
177-
"</li>" +
178-
"{{/each}}" +
179-
"</ul>" +
180-
"</div>");
170+
template = Discourse.UserSelector.templateFunction();
181171

182172
transformTemplate = Handlebars.compile("{{avatar this imageSize=\"tiny\"}} {{this.username}}");
183173
$wmdInput.data('init', true);
@@ -193,38 +183,6 @@ Discourse.ComposerView = Discourse.View.extend({
193183
transformComplete: function(v) { return v.username; }
194184
});
195185

196-
selected = [];
197-
$('#private-message-users').val(this.get('content.targetUsernames')).autocomplete({
198-
template: template,
199-
200-
dataSource: function(term) {
201-
return Discourse.UserSearch.search({
202-
term: term,
203-
topicId: _this.get('controller.controllers.topic.content.id'),
204-
exclude: selected.concat([Discourse.get('currentUser.username')])
205-
});
206-
},
207-
208-
onChangeItems: function(items) {
209-
items = $.map(items, function(i) {
210-
if (i.username) {
211-
return i.username;
212-
} else {
213-
return i;
214-
}
215-
});
216-
_this.set('content.targetUsernames', items.join(","));
217-
selected = items;
218-
},
219-
220-
transformComplete: transformTemplate,
221-
222-
reverseTransform: function(i) {
223-
return { username: i };
224-
}
225-
226-
});
227-
228186
topic = this.get('topic');
229187
this.editor = editor = Discourse.Markdown.createEditor({
230188
lookupAvatar: function(username) {

0 commit comments

Comments
 (0)