~ubuntu-branches/ubuntu/raring/horizon/raring

« back to all changes in this revision

Viewing changes to horizon/static/horizon/js/horizon.projects.js

  • Committer: Package Import Robot
  • Author(s): James Page, James Page, Adam Gandelman
  • Date: 2013-03-20 11:20:17 UTC
  • mfrom: (1.1.25)
  • Revision ID: package-import@ubuntu.com-20130320112017-15h2zdnqy20lc089
Tags: 1:2013.1~rc1-0ubuntu1
[ James Page ]
* New upstream release candidate for Grizzly:
  - Recompress static JS and CSS and generate new manifest.json for
    offline compression.
* d/watch: Update uversionmangle to deal with upstream versioning
  changes, remove tarballs.openstack.org.
* d/control: Version python-compressor >= 1.2 (LP: #1130610).

[ Adam Gandelman ]
* debian/patches/ubuntu_local_settings.py: Refresh, specify memcache
  location as part of CACHES, as per upstream changes to example config.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 
20
20
  /*
21
21
   * Gets the html select element associated with a given
22
 
   * role id for role_id.
 
22
   * role id.
23
23
   **/
24
24
  get_role_element: function(role_id) {
25
25
      return $('select[id^="id_role_' + role_id + '"]');
26
26
  },
 
27
 
 
28
  /*
 
29
   * Gets the html ul element associated with a given
 
30
   * user id. I.e., the user's row.
 
31
   **/
 
32
  get_user_element: function(user_id) {
 
33
      return $('li[data-user-id$=' + user_id + ']').parent();
 
34
  },
 
35
 
27
36
  /*
28
37
 
29
38
   * Gets the html select element associated with a given
115
124
    });
116
125
  },
117
126
  /*
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.
120
128
   **/
121
 
  is_project_member: function(user_id) {
 
129
  get_user_roles: function(user_id) {
 
130
    var roles = [];
122
131
    for (var role in horizon.projects.current_membership) {
123
132
      if ($.inArray(user_id, horizon.projects.current_membership[role]) >= 0) {
124
 
        return role;
 
133
        roles.push(role);
125
134
      }
126
135
    }
127
 
    return false;
 
136
    return roles;
128
137
  },
129
138
 
130
139
  /*
133
142
   **/
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");
137
 
 
138
145
    horizon.projects.current_membership[role_id] = new_list;
139
146
  },
140
147
 
178
185
    horizon.projects.update_role_lists(role_id, role_list);
179
186
  },
180
187
 
 
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);
 
191
    }
 
192
    if (typeof(user_el) === 'undefined') {
 
193
       user_el = horizon.projects.get_user_element(user_id);
 
194
    }
 
195
 
 
196
    var $dropdown = user_el.find("li.member").siblings('.dropdown');
 
197
    var $role_items = $dropdown.children('.role_dropdown').children('li');
 
198
 
 
199
    $role_items.each(function (idx, el) {
 
200
      if (_.contains(role_ids, $(el).data('role-id'))) {
 
201
        $(el).addClass('selected');
 
202
      } else {
 
203
        $(el).removeClass('selected');
 
204
      }
 
205
    });
 
206
 
 
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++) {
 
211
        if (i == 2) {
 
212
            roles_to_display.push('...');
 
213
            break;
 
214
        }
 
215
        roles_to_display.push(horizon.projects.roles[role_ids[i]]);
 
216
    }
 
217
    text = roles_to_display.join(', ');
 
218
    if (text.length == 0) text = 'No roles';
 
219
    $roles_display.text(text);
 
220
  },
 
221
 
181
222
  /*
182
223
   * Generates the HTML structure for a user that will be displayed
183
224
   * as a list item in the project member list.
184
225
   **/
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;
187
228
 
188
229
    var roles = [];
200
241
              text: text,
201
242
              roles: roles},
202
243
    user_el = $(template.render(params));
 
244
    this.update_user_role_dropdown(str_id, role_ids, user_el);
203
245
    return $(user_el);
204
246
  },
205
247
 
213
255
    return $li;
214
256
  },
215
257
 
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);
219
 
  },
220
 
 
221
258
  /*
222
259
  * Generates the HTML structure for the project membership UI.
223
260
  **/
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);
230
 
      if (role_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, "-"));
234
269
      }
235
270
      else {
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, "+"));
237
272
      }
238
273
    }
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();
316
352
 
317
353
      if (available) {
318
354
        $(this).text("-");
 
355
        $(".project_members").append(user_el);
 
356
 
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);
321
362
        }
322
 
        $(".project_members").append($(this).parent().parent());
323
 
 
324
 
        horizon.projects.add_user_to_role(user_id, horizon.projects.default_role_id);
325
363
      }
326
364
      else {
327
365
        $(this).text("+");
328
366
        $(this).parent().siblings(".role_options").hide();
329
 
        $(".available_users").append($(this).parent().parent());
330
 
 
 
367
        $(".available_users").append(user_el);
331
368
        horizon.projects.remove_user_from_role(user_id);
332
 
 
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);
336
369
      }
337
370
 
338
371
      // update lists
368
401
  **/
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();
373
406
 
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);
378
411
 
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);
 
416
      } else {
 
417
        $(this).addClass('selected');
 
418
        horizon.projects.add_user_to_role(user_id, new_role_id);
 
419
      }
 
420
      horizon.projects.update_user_role_dropdown(user_id);
382
421
    });
383
422
  },
384
423
 
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], "-"));
394
434
 
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);
399
439
 
400
440
      // remove option from hidden select
401
441
      $(this).text("");