Completed
Push — federated-circles ( 1e2c73...673aab )
by Maxence
02:33
created

nav.displayMembersInteraction   C

Complexity

Conditions 7
Paths 12

Size

Total Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 28
rs 6.7272
c 1
b 0
f 0
cc 7
nc 12
nop 1
1
/*
2
 * Circles - Bring cloud-users closer together.
3
 *
4
 * This file is licensed under the Affero General Public License version 3 or
5
 * later. See the COPYING file.
6
 *
7
 * @author Maxence Lange <[email protected]>
8
 * @copyright 2017
9
 * @license GNU AGPL version 3 or any later version
10
 *
11
 * This program is free software: you can redistribute it and/or modify
12
 * it under the terms of the GNU Affero General Public License as
13
 * published by the Free Software Foundation, either version 3 of the
14
 * License, or (at your option) any later version.
15
 *
16
 * This program is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
 * GNU Affero General Public License for more details.
20
 *
21
 * You should have received a copy of the GNU Affero General Public License
22
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23
 *
24
 */
25
26
/** global: OC */
27
/** global: OCA */
28
/** global: Notyf */
29
30
/** global: actions */
31
/** global: nav */
32
/** global: elements */
33
/** global: curr */
34
/** global: api */
35
36
37
var nav = {
38
39
40
	initNavigation: function () {
41
		this.initElementsMemberNavigation();
42
		this.initElementsLinkCircleNavigation();
43
		this.initElementsCircleNavigation();
44
45
		this.displayCirclesList('all');
46
	},
47
48
49
	initElementsMemberNavigation: function () {
50
51
		elements.addMember.on('input propertychange paste focus', function () {
52
			var search = $(this).val().trim();
53
			if (search === '') {
54
				elements.membersSearchResult.fadeOut(400);
55
				return;
56
			}
57
58
			actions.searchMembersRequest(search);
59
			if (elements.membersSearchResult.children().length === 0) {
60
				elements.membersSearchResult.fadeOut(400);
61
			} else {
62
				elements.membersSearchResult.fadeIn(400);
63
			}
64
		}).blur(function () {
65
			elements.membersSearchResult.fadeOut(400);
66
		});
67
	},
68
69
70
	initElementsLinkCircleNavigation: function () {
71
72
		elements.linkCircle.on('keydown', function (e) {
73
74
			if (e.keyCode !== 13) {
75
				return;
76
			}
77
78
			api.linkCircle(curr.circle, elements.linkCircle.val(), actions.linkCircleResult);
79
		});
80
	},
81
82
	initElementsCircleNavigation: function () {
83
84
		elements.joinCircle.on('click', function () {
85
			api.joinCircle(curr.circle, actions.joinCircleResult);
86
		});
87
88
		elements.leaveCircle.on('click', function () {
89
			api.leaveCircle(curr.circle, actions.leaveCircleResult);
90
		});
91
92
		elements.destroyCircle.on('click', function () {
93
			OC.dialogs.confirm(
94
				t('circles', 'Are you sure you want to delete this circle?'),
95
				t('circles', 'Please confirm'),
96
				function (e) {
97
					if (e === true) {
98
						api.destroyCircle(curr.circle, actions.destroyCircleResult);
99
					}
100
				});
101
		});
102
103
		elements.joinCircleAccept.on('click', function () {
104
			api.joinCircle(curr.circle, actions.joinCircleResult);
105
		});
106
107
		elements.joinCircleReject.on('click', function () {
108
			api.leaveCircle(curr.circle, actions.leaveCircleResult);
109
		});
110
	},
111
112
113
	displayCirclesList: function (type) {
114
115
		curr.circlesType = type;
116
		curr.searchCircle = '';
117
		curr.searchUser = '';
118
119
		curr.circle = 0;
120
		curr.circleLevel = 0;
121
122
		elements.navigation.show('slide', 800);
123
		elements.emptyContent.show(800);
124
		elements.mainUI.fadeOut(800);
125
126
		elements.circlesSearch.val('');
127
		elements.addMember.val('');
128
		elements.linkCircle.val('');
129
130
		this.resetCirclesTypeSelection(type);
131
		elements.resetCirclesList();
132
		api.searchCircles(type, '', 0, actions.listCirclesResult);
133
	},
134
135
136
	resetCirclesTypeSelection: function (type) {
137
		elements.circlesList.children('div').removeClass('selected');
138
		elements.circlesList.children().each(function () {
139
			if ($(this).attr('circle-type') === type.toLowerCase()) {
140
				$(this).addClass('selected');
141
			}
142
		});
143
	},
144
145
	/**
146
	 *
147
	 * @param display
148
	 */
149
	displayOptionsNewCircle: function (display) {
150
		if (display) {
151
			elements.newType.fadeIn(300);
152
			elements.newSubmit.fadeIn(500);
153
			elements.newTypeDefinition.fadeIn(700);
154
		}
155
		else {
156
			elements.newType.fadeOut(700);
157
			elements.newSubmit.fadeOut(500);
158
			elements.newTypeDefinition.fadeOut(300);
159
		}
160
	},
161
162
163
	displayMembers: function (members) {
164
165
		elements.remMember.fadeOut(300);
166
		elements.rightPanel.fadeOut(300);
167
168
		elements.mainUIMembers.emptyTable();
169
		if (members === null) {
170
			elements.mainUIMembers.hide(200);
171
			return;
172
		}
173
174
		elements.mainUIMembers.show(200);
175
		for (var i = 0; i < members.length; i++) {
176
			var tmpl = elements.generateTmplMember(members[i]);
177
			elements.mainUIMembers.append(tmpl);
178
		}
179
180
		$('tr.entry').on('click', function () {
181
			nav.displayMemberDetails($(this).attr('member-id'), $(this).attr('member-level'),
182
				$(this).attr('member-levelstring'), $(this).attr('member-status'));
183
		});
184
	},
185
186
187
	displayMemberDetails: function (id, level, levelstring, status) {
188
189
		level = parseInt(level);
190
		curr.member = id;
191
		curr.memberLevel = level;
192
		curr.memberStatus = status;
193
194
		elements.rightPanel.fadeIn(300);
195
		elements.memberDetails.children('#member_name').text(id);
196
		if (level === 0) {
197
			levelstring += ' / ' + status;
198
		}
199
		elements.memberDetails.children('#member_levelstatus').text(levelstring);
200
201
		this.displayMemberDetailsAsModerator();
202
	},
203
204
205
	displayMemberDetailsAsModerator: function () {
206
		if (curr.circleLevel >= 6 && curr.memberLevel < curr.circleLevel) {
207
			if (curr.memberStatus === 'Requesting') {
208
				elements.memberRequest.fadeIn(300);
209
				elements.remMember.fadeOut(300);
210
			}
211
			else {
212
				elements.memberRequest.fadeOut(300);
213
				elements.remMember.fadeIn(300);
214
			}
215
		} else {
216
			elements.remMember.fadeOut(300);
217
			elements.memberRequest.fadeOut(300);
218
		}
219
	},
220
221
222
	displayCircleDetails: function (details) {
223
		elements.circlesDetails.children('#name').text(details.name);
224
		elements.circlesDetails.children('#type').text(t('circles', details.typeLongString));
225
	},
226
227
228
	displayMembersInteraction: function (details) {
229
		if (details.user.level < 6) {
230
			elements.addMember.hide();
231
		} else {
232
			elements.addMember.show();
233
		}
234
235
		if (curr.allowed_federated === 0 || details.type === 'Personal' || details.user.level < 9) {
236
			elements.linkCircle.hide();
237
		} else {
238
			elements.linkCircle.show();
239
		}
240
241
		elements.joinCircleInteraction.hide();
242
		this.displayNonMemberInteraction(details);
243
244
		if (details.user.level === 9) {
245
			elements.joinCircle.hide();
246
			elements.leaveCircle.hide();
247
			elements.destroyCircle.show();
248
			return;
249
		}
250
251
		if (details.user.level >= 1) {
252
			elements.joinCircle.hide();
253
			elements.leaveCircle.show();
254
		}
255
	},
256
257
258
	displayNonMemberInteraction: function (details) {
259
		elements.joinCircleAccept.hide();
260
		elements.joinCircleReject.hide();
261
		elements.joinCircleRequest.hide();
262
		elements.joinCircleInvite.hide();
263
264
		if (details.user.status === 'Invited') {
265
			this.displayInvitedMemberInteraction();
266
			return;
267
		}
268
269
		if (details.user.status === 'Requesting') {
270
			this.displayRequestingMemberInteraction();
271
			return;
272
		}
273
274
		elements.joinCircle.show();
275
		elements.leaveCircle.hide();
276
		elements.destroyCircle.hide();
277
	},
278
279
280
	displayInvitedMemberInteraction: function () {
281
		elements.joinCircleInteraction.show();
282
		elements.joinCircleInvite.show();
283
		elements.joinCircleAccept.show();
284
		elements.joinCircleReject.show();
285
		elements.joinCircle.hide();
286
		elements.leaveCircle.hide();
287
		elements.destroyCircle.hide();
288
	},
289
290
	displayRequestingMemberInteraction: function () {
291
		elements.joinCircleInteraction.show();
292
		elements.joinCircleRequest.show();
293
		elements.joinCircle.hide();
294
		elements.leaveCircle.show();
295
		elements.destroyCircle.hide();
296
	}
297
298
};
299
300