Refactor to make more manageable
This commit is contained in:
parent
9b65b57024
commit
64580bfd3d
64
converse.js
64
converse.js
|
@ -3365,6 +3365,38 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getGroup: function (name) {
|
||||||
|
var groups, $groups, group_lower, index;
|
||||||
|
var $group = $el.find('.roster-group[data-group="'+name+'"]');
|
||||||
|
if ($group.length > 0) {
|
||||||
|
return $group;
|
||||||
|
}
|
||||||
|
$groups = $el.find('.roster-group');
|
||||||
|
$group = $(converse.templates.group_header({
|
||||||
|
label_group: name,
|
||||||
|
desc_group_toggle: DESC_GROUP_TOGGLE,
|
||||||
|
toggle_state: 'opened' // TODO: remember state...
|
||||||
|
}));
|
||||||
|
if ($groups.length) {
|
||||||
|
group_lower = name.toLowerCase();
|
||||||
|
groups = $.map($groups, function(o) { return o.dataset.name.toLowerCase(); })
|
||||||
|
groups.push(group_lower);
|
||||||
|
index = groups.sort().indexOf(group_lower);
|
||||||
|
if (index == 0) {
|
||||||
|
$($groups.first()).before($group);
|
||||||
|
} else if (index == groups.length) {
|
||||||
|
$($groups.last()).after($group);
|
||||||
|
} else {
|
||||||
|
$($groups.eq(index)).before($group);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// This shouldn't actually happen, since
|
||||||
|
// there's always the Ungrouped.
|
||||||
|
this.getRosterElement().append($group);
|
||||||
|
}
|
||||||
|
return $group;
|
||||||
|
},
|
||||||
|
|
||||||
addCurrentContact: function (view) {
|
addCurrentContact: function (view) {
|
||||||
var $el = this.getRosterElement(),
|
var $el = this.getRosterElement(),
|
||||||
item = view.model;
|
item = view.model;
|
||||||
|
@ -3373,37 +3405,7 @@
|
||||||
$el.find('.roster-group[data-group="'+HEADER_UNGROUPED+'"]').after(view.el);
|
$el.find('.roster-group[data-group="'+HEADER_UNGROUPED+'"]').after(view.el);
|
||||||
} else {
|
} else {
|
||||||
_.each(item.get('groups'), $.proxy(function (group) {
|
_.each(item.get('groups'), $.proxy(function (group) {
|
||||||
var groups, $groups, group_lower, index, header;
|
this.getGroup(group).after(view.el);
|
||||||
var $group = $el.find('.roster-group[data-group="'+group+'"]');
|
|
||||||
if ($group.length > 0) {
|
|
||||||
$group.after(view.el);
|
|
||||||
} else {
|
|
||||||
$groups = $el.find('.roster-group');
|
|
||||||
|
|
||||||
header = $(converse.templates.group_header({
|
|
||||||
label_group: group,
|
|
||||||
desc_group_toggle: DESC_GROUP_TOGGLE,
|
|
||||||
toggle_state: 'opened' // TODO: remember state...
|
|
||||||
})).after(view.el)
|
|
||||||
|
|
||||||
if ($groups.length) {
|
|
||||||
group_lower = group.toLowerCase();
|
|
||||||
groups = $.map($groups, function(o) { return o.dataset.group.toLowerCase(); })
|
|
||||||
groups.push(group_lower);
|
|
||||||
index = groups.sort().indexOf(group_lower);
|
|
||||||
if (index == 0) {
|
|
||||||
$($groups.first()).before(header);
|
|
||||||
} else if (index == groups.length) {
|
|
||||||
$($groups.last()).after(header);
|
|
||||||
} else {
|
|
||||||
$($groups.eq(index)).before(header);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// This shouldn't actually happen, since
|
|
||||||
// there's always the Ungrouped.
|
|
||||||
this.getRosterElement().append(header);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},this));
|
},this));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -128,6 +128,47 @@
|
||||||
|
|
||||||
describe("The Contacts Roster", $.proxy(function (mock, utils) {
|
describe("The Contacts Roster", $.proxy(function (mock, utils) {
|
||||||
|
|
||||||
|
describe("Roster Groups", $.proxy(function () {
|
||||||
|
function _clearContacts () {
|
||||||
|
utils.clearBrowserStorage();
|
||||||
|
converse.rosterview.model.reset();
|
||||||
|
converse.rosterview.initialize(); // Register new listeners and document fragment
|
||||||
|
};
|
||||||
|
|
||||||
|
it("can be used to organize existing contacts", $.proxy(function () {
|
||||||
|
_clearContacts();
|
||||||
|
var i=0, j=0, t;
|
||||||
|
spyOn(converse, 'emit');
|
||||||
|
spyOn(this.rosterview, 'updateCount').andCallThrough();
|
||||||
|
converse.roster_groups = true;
|
||||||
|
converse.rosterview.render();
|
||||||
|
var groups = {
|
||||||
|
'colleagues': 3,
|
||||||
|
'friends & acquaintences': 3,
|
||||||
|
'Family': 4,
|
||||||
|
'ænemies': 3,
|
||||||
|
'Ungrouped': 2
|
||||||
|
};
|
||||||
|
_.each(_.keys(groups), $.proxy(function (name) {
|
||||||
|
j = i;
|
||||||
|
for (i=j; i<j+groups[name]; i++) {
|
||||||
|
this.roster.create({
|
||||||
|
jid: mock.cur_names[i].replace(/ /g,'.').toLowerCase() + '@localhost',
|
||||||
|
subscription: 'both',
|
||||||
|
ask: null,
|
||||||
|
groups: name === 'ungrouped'? [] : [name],
|
||||||
|
fullname: mock.cur_names[i],
|
||||||
|
is_last: i===(mock.cur_names.length-1)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, converse));
|
||||||
|
// Check that the groups appear alphabetically
|
||||||
|
t = this.rosterview.$el.find('dt.roster-group a.group-toggle').text();
|
||||||
|
expect(t).toEqual('colleaguesFamilyfriends & acquaintencesUngrouped');
|
||||||
|
}, converse));
|
||||||
|
}, converse));
|
||||||
|
|
||||||
|
|
||||||
describe("Pending Contacts", $.proxy(function () {
|
describe("Pending Contacts", $.proxy(function () {
|
||||||
function _clearContacts () {
|
function _clearContacts () {
|
||||||
utils.clearBrowserStorage();
|
utils.clearBrowserStorage();
|
||||||
|
@ -269,38 +310,6 @@
|
||||||
expect(t).toEqual(mock.cur_names.slice(0,i+1).sort().join(''));
|
expect(t).toEqual(mock.cur_names.slice(0,i+1).sort().join(''));
|
||||||
}, converse));
|
}, converse));
|
||||||
|
|
||||||
it("can be assigned to groups inside the roster", $.proxy(function () {
|
|
||||||
_clearContacts();
|
|
||||||
var i=0, j=0, t;
|
|
||||||
spyOn(converse, 'emit');
|
|
||||||
spyOn(this.rosterview, 'updateCount').andCallThrough();
|
|
||||||
converse.roster_groups = true;
|
|
||||||
converse.rosterview.render();
|
|
||||||
var groups = {
|
|
||||||
'colleagues': 3,
|
|
||||||
'friends & acquaintences': 3,
|
|
||||||
'Family': 4,
|
|
||||||
'ænemies': 3,
|
|
||||||
'Ungrouped': 2
|
|
||||||
};
|
|
||||||
_.each(_.keys(groups), $.proxy(function (name) {
|
|
||||||
j = i;
|
|
||||||
for (i=j; i<j+groups[name]; i++) {
|
|
||||||
this.roster.create({
|
|
||||||
jid: mock.cur_names[i].replace(/ /g,'.').toLowerCase() + '@localhost',
|
|
||||||
subscription: 'both',
|
|
||||||
ask: null,
|
|
||||||
groups: name === 'ungrouped'? [] : [name],
|
|
||||||
fullname: mock.cur_names[i],
|
|
||||||
is_last: i===(mock.cur_names.length-1)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}, converse));
|
|
||||||
// Check that the groups appear alphabetically
|
|
||||||
t = this.rosterview.$el.find('dt.roster-group a.group-toggle').text();
|
|
||||||
expect(t).toEqual('colleaguesFamilyfriends & acquaintencesUngrouped');
|
|
||||||
}, converse));
|
|
||||||
|
|
||||||
it("can change their status to online and be sorted alphabetically", $.proxy(function () {
|
it("can change their status to online and be sorted alphabetically", $.proxy(function () {
|
||||||
_addContacts();
|
_addContacts();
|
||||||
var item, view, jid, t;
|
var item, view, jid, t;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user