21
21
* Gets the html select element associated with a given
22
* role id for role_id.
24
24
get_role_element: function(role_id) {
25
25
return $('select[id^="id_role_' + role_id + '"]');
29
* Gets the html ul element associated with a given
30
* user id. I.e., the user's row.
32
get_user_element: function(user_id) {
33
return $('li[data-user-id$=' + user_id + ']').parent();
29
38
* Gets the html select element associated with a given
118
* Checks to see whether a user is a member of the current project.
119
* If they are, returns the id of their primary role.
127
* Returns the ids of roles the user is a member of.
121
is_project_member: function(user_id) {
129
get_user_roles: function(user_id) {
122
131
for (var role in horizon.projects.current_membership) {
123
132
if ($.inArray(user_id, horizon.projects.current_membership[role]) >= 0) {
134
143
update_role_lists: function(role_id, new_list) {
135
144
this.get_role_element(role_id).val(new_list);
136
this.get_role_element(role_id).find("option[value='" + role_id + "").attr("selected", "selected");
138
145
horizon.projects.current_membership[role_id] = new_list;
178
185
horizon.projects.update_role_lists(role_id, role_list);
188
update_user_role_dropdown: function(user_id, role_ids, user_el) {
189
if (typeof(role_ids) === 'undefined') {
190
role_ids = horizon.projects.get_user_roles(user_id);
192
if (typeof(user_el) === 'undefined') {
193
user_el = horizon.projects.get_user_element(user_id);
196
var $dropdown = user_el.find("li.member").siblings('.dropdown');
197
var $role_items = $dropdown.children('.role_dropdown').children('li');
199
$role_items.each(function (idx, el) {
200
if (_.contains(role_ids, $(el).data('role-id'))) {
201
$(el).addClass('selected');
203
$(el).removeClass('selected');
207
// set the selection back to default role
208
var $roles_display = $dropdown.children('.dropdown-toggle').children('.roles_display');
209
var roles_to_display = [];
210
for (var i = 0; i < role_ids.length; i++) {
212
roles_to_display.push('...');
215
roles_to_display.push(horizon.projects.roles[role_ids[i]]);
217
text = roles_to_display.join(', ');
218
if (text.length == 0) text = 'No roles';
219
$roles_display.text(text);
182
223
* Generates the HTML structure for a user that will be displayed
183
224
* as a list item in the project member list.
185
generate_user_element: function(user_name, user_id, text) {
226
generate_user_element: function(user_name, user_id, role_ids, text) {
186
227
var str_id = "id_user_" + user_id;
216
set_selected_role: function(selected_el, role_id) {
217
$(selected_el).text(horizon.projects.roles[role_id]);
218
$(selected_el).attr('data-role-id', role_id);
222
259
* Generates the HTML structure for the project membership UI.
226
263
for (user in horizon.projects.users) {
227
264
var user_id = user;
228
265
var user_name = horizon.projects.users[user];
229
var role_id = this.is_project_member(user_id);
231
$(".project_members").append(this.generate_user_element(user_name, user_id, "-"));
232
var $selected_role = $("li[data-user-id$='" + user_id + "']").siblings('.dropdown').children('.dropdown-toggle').children('span');
233
horizon.projects.set_selected_role($selected_role, role_id);
266
var role_ids = this.get_user_roles(user_id);
267
if (role_ids.length > 0) {
268
$(".project_members").append(this.generate_user_element(user_name, user_id, role_ids, "-"));
236
$(".available_users").append(this.generate_user_element(user_name, user_id, "+"));
271
$(".available_users").append(this.generate_user_element(user_name, user_id, role_ids, "+"));
239
274
horizon.projects.detect_no_results();
313
348
evt.preventDefault();
314
349
var available = $(".available_users").has($(this)).length;
315
350
var user_id = horizon.projects.get_field_id($(this).parent().siblings().attr('data-user-id'));
351
var user_el = $(this).parent().parent();
318
354
$(this).text("-");
355
$(".project_members").append(user_el);
319
357
if (horizon.projects.has_roles) {
358
var default_role = horizon.projects.default_role_id;
320
359
$(this).parent().siblings(".role_options").show();
360
horizon.projects.add_user_to_role(user_id, default_role);
361
horizon.projects.update_user_role_dropdown(user_id, [default_role], user_el);
322
$(".project_members").append($(this).parent().parent());
324
horizon.projects.add_user_to_role(user_id, horizon.projects.default_role_id);
327
365
$(this).text("+");
328
366
$(this).parent().siblings(".role_options").hide();
329
$(".available_users").append($(this).parent().parent());
367
$(".available_users").append(user_el);
331
368
horizon.projects.remove_user_from_role(user_id);
333
// set the selection back to default role
334
var $selected_role = $(this).parent().siblings('.dropdown').children('.dropdown-toggle').children('.selected_role');
335
horizon.projects.set_selected_role($selected_role, horizon.projects.default_role_id);
369
402
select_member_role: function() {
370
403
$(".available_users, .project_members").on('click', '.role_dropdown li', function (evt) {
371
var $selected_el = $(this).parent().prev().children('.selected_role');
372
$selected_el.text($(this).text());
404
evt.preventDefault();
405
evt.stopPropagation();
374
407
// get the newly selected role and the member's name
375
408
var new_role_id = $(this).attr("data-role-id");
377
410
var user_id = horizon.projects.get_field_id(id_str);
379
412
// update role lists
380
horizon.projects.remove_user_from_role(user_id, $selected_el.attr('data-role-id'));
381
horizon.projects.add_user_to_role(user_id, new_role_id);
413
if ($(this).hasClass('selected')) {
414
$(this).removeClass('selected');
415
horizon.projects.remove_user_from_role(user_id, new_role_id);
417
$(this).addClass('selected');
418
horizon.projects.add_user_to_role(user_id, new_role_id);
420
horizon.projects.update_user_role_dropdown(user_id);
390
429
// add the user to the visible list
391
430
var user_name = $(this).find("option").text();
392
431
var user_id = $(this).find("option").attr("value");
393
$(".project_members").append(horizon.projects.generate_user_element(user_name, user_id, "-"));
432
var default_role_id = horizon.projects.default_role_id;
433
$(".project_members").append(horizon.projects.generate_user_element(user_name, user_id, [default_role_id], "-"));
395
435
// add the user to the hidden role lists and the users list
396
436
horizon.projects.users[user_id] = user_name;
397
437
$("select[multiple='multiple']").append("<option value='" + user_id + "'>" + horizon.projects.users[user_id] + "</option>");
398
horizon.projects.add_user_to_role(user_id, horizon.projects.default_role_id);
438
horizon.projects.add_user_to_role(user_id, default_role_id);
400
440
// remove option from hidden select
401
441
$(this).text("");