Completed
Push — master ( 4e7b1b...283f76 )
by Maxence
03:03
created

nav.displayAddMemberInput   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 3
rs 10
cc 1
nc 1
nop 0
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: resultCircles */
34
/** global: resultLinks */
35
/** global: curr */
36
/** global: api */
37
/** global: define */
38
39
var nav = {
40
41
	initNavigation: function () {
42
		this.initElementsAddMemberNavigation();
43
		this.initElementsLinkCircleNavigation();
44
		this.initElementsCircleNavigation();
45
46
		this.displayCirclesList('all');
47
48
		var circleId = window.location.hash.substr(1);
49
		if (circleId) {
50
			actions.selectCircle(circleId);
51
		}
52
	},
53
54
55
	initElementsAddMemberNavigation: function () {
56
57
		elements.addMember.hide();
58
		elements.addMember.on('input propertychange paste focus', function () {
59
			var search = $(this).val().trim();
60
			if (search === '') {
61
				elements.membersSearchResult.fadeOut(400);
62
				return;
63
			}
64
65
			actions.searchMembersRequest(search);
66
			if (elements.membersSearchResult.children().length === 0) {
67
				elements.membersSearchResult.fadeOut(400);
68
			} else {
69
				elements.membersSearchResult.fadeIn(400);
70
			}
71
		}).blur(function () {
72
			elements.membersSearchResult.fadeOut(400);
73
			nav.circlesActionReturn();
74
		});
75
		elements.addMember.on('keydown', function (e) {
76
			if (e.keyCode === 27) {
77
				nav.circlesActionReturn();
78
			}
79
			if (e.keyCode === 13) {
80
				api.addMember(curr.circle, $(this).val(), resultMembers.addMemberResult);
0 ignored issues
show
Bug introduced by
The variable resultMembers seems to be never declared. If this is a global, consider adding a /** global: resultMembers */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
81
			}
82
83
		});
84
85
	},
86
87
88
	initElementsLinkCircleNavigation: function () {
89
90
		elements.linkCircle.hide();
91
		elements.linkCircle.on('keydown', function (e) {
92
93
			if (e.keyCode === 27) {
94
				nav.circlesActionReturn();
95
			}
96
			if (e.keyCode !== 13) {
97
				return;
98
			}
99
100
			api.linkCircle(curr.circle, elements.linkCircle.val(), resultLinks.linkCircleResult);
101
		}).blur(function () {
102
			nav.circlesActionReturn();
103
		});
104
	},
105
106
107
	initElementsCircleNavigation: function () {
108
109
		elements.joinCircle.hide();
110
		elements.joinCircle.on('click', function () {
111
			api.joinCircle(curr.circle, resultCircles.joinCircleResult);
112
			nav.circlesActionReturn();
113
		});
114
115
		elements.leaveCircle.hide();
116
		elements.leaveCircle.on('click', function () {
117
			api.leaveCircle(curr.circle, resultCircles.leaveCircleResult);
118
			nav.circlesActionReturn();
119
		});
120
121
		elements.destroyCircle.on('click', function () {
122
			OC.dialogs.confirm(
123
				t('circles', 'Are you sure you want to delete this circle?'),
124
				t('circles', 'Please confirm'),
125
				function (e) {
126
					if (e === true) {
127
						api.destroyCircle(curr.circle, resultCircles.destroyCircleResult);
128
					}
129
				});
130
		});
131
132
		elements.joinCircleAccept.on('click', function () {
133
			api.joinCircle(curr.circle, resultCircles.joinCircleResult);
134
		});
135
136
		elements.joinCircleReject.on('click', function () {
137
			api.leaveCircle(curr.circle, resultCircles.leaveCircleResult);
138
		});
139
	},
140
141
142
	displayCirclesList: function (type) {
143
144
		curr.circlesType = type;
145
		curr.searchCircle = '';
146
		curr.searchUser = '';
147
148
		curr.circle = 0;
149
		curr.circleLevel = 0;
150
151
		elements.navigation.show('slide', 800);
152
		elements.emptyContent.show(800);
153
		elements.mainUI.fadeOut(800);
154
155
		elements.circlesSearch.val('');
156
		elements.addMember.val('');
157
		elements.linkCircle.val('');
158
159
		this.resetCirclesTypeSelection(type);
160
		elements.resetCirclesList();
161
		api.listCircles(type, '', 0, resultCircles.listCirclesResult);
162
	},
163
164
165
	resetCirclesTypeSelection: function (type) {
166
		elements.circlesList.children('div').removeClass('selected');
167
		elements.circlesList.children().each(function () {
168
			if ($(this).attr('circle-type') === type.toLowerCase()) {
169
				$(this).addClass('selected');
170
			}
171
		});
172
	},
173
174
175
	circlesActionReturn: function () {
176
		nav.displayCircleButtons(true);
177
		nav.displayAddMemberInput(false);
178
		nav.displayLinkCircleInput(false);
179
		nav.displayJoinCircleButton(false);
180
		nav.displayInviteCircleButtons(false);
181
	},
182
183
	joinCircleAction: function () {
184
		nav.displayCircleButtons(false);
185
		nav.displayAddMemberInput(false);
186
		nav.displayLinkCircleInput(false);
187
		nav.displayJoinCircleButton(true);
188
	},
189
190
	displayCircleButtons: function (display) {
191
		if (display) {
192
			elements.buttonCircleActionReturn.hide(define.animationMenuSpeed);
193
			elements.buttonCircleActions.delay(define.animationMenuSpeed).show(
194
				define.animationMenuSpeed);
195
		} else {
196
			elements.buttonCircleActions.hide(define.animationMenuSpeed);
197
			elements.buttonCircleActionReturn.delay(define.animationMenuSpeed).show(
198
				define.animationMenuSpeed);
199
		}
200
	},
201
202
	displayAddMemberInput: function (display) {
203
		if (display) {
204
			elements.addMember.val('');
205
			elements.addMember.delay(define.animationMenuSpeed).show(define.animationMenuSpeed,
206
				function () {
207
					$(this).focus();
208
				});
209
		} else {
210
			elements.addMember.hide(define.animationMenuSpeed);
211
		}
212
	},
213
214
	displayLinkCircleInput: function (display) {
215
		if (display) {
216
			elements.linkCircle.val('');
217
			elements.linkCircle.delay(define.animationMenuSpeed).show(define.animationMenuSpeed,
218
				function () {
219
					$(this).focus();
220
				});
221
		} else {
222
			elements.linkCircle.hide(define.animationMenuSpeed);
223
		}
224
	},
225
226
	displayInviteCircleButtons: function (display) {
227
		if (display) {
228
			elements.joinCircleAccept.show(define.animationMenuSpeed);
229
			elements.joinCircleReject.delay(define.animationMenuSpeed).show(
230
				define.animationMenuSpeed);
231
		} else {
232
			elements.joinCircleAccept.hide(define.animationMenuSpeed);
233
			elements.joinCircleReject.hide(define.animationMenuSpeed);
234
		}
235
	},
236
237
	displayJoinCircleButton: function (display) {
238
		if (display) {
239
			if (curr.circleStatus === 'Invited') {
240
				elements.joinCircle.hide(define.animationMenuSpeed);
241
				elements.leaveCircle.hide(define.animationMenuSpeed);
242
				nav.displayInviteCircleButtons(true);
243
244
			} else {
245
				nav.displayInviteCircleButtons(false);
246
247
				if (curr.circleLevel === 0 && curr.circleStatus !== 'Requesting') {
248
					elements.joinCircle.delay(define.animationMenuSpeed).show(
249
						define.animationMenuSpeed);
250
					elements.leaveCircle.hide(define.animationMenuSpeed);
251
					elements.joinCircleAccept.hide(define.animationMenuSpeed);
252
					elements.joinCircleReject.hide(define.animationMenuSpeed);
253
254
				}
255
				else {
256
					elements.leaveCircle.delay(define.animationMenuSpeed).show(
257
						define.animationMenuSpeed);
258
					elements.joinCircle.hide(define.animationMenuSpeed);
259
				}
260
			}
261
		} else {
262
			elements.joinCircle.hide(define.animationMenuSpeed);
263
			elements.leaveCircle.hide(define.animationMenuSpeed);
264
		}
265
	},
266
267
268
	/**
269
	 *
270
	 * @param display
271
	 */
272
	displayOptionsNewCircle: function (display) {
273
		if (display) {
274
			elements.newType.fadeIn(300);
275
			elements.newSubmit.fadeIn(500);
276
			elements.newTypeDefinition.fadeIn(700);
277
		}
278
		else {
279
			elements.newType.fadeOut(700);
280
			elements.newSubmit.fadeOut(500);
281
			elements.newTypeDefinition.fadeOut(300);
282
		}
283
	},
284
285
286
	displayMembers: function (members) {
287
288
		elements.remMember.fadeOut(300);
289
		elements.rightPanel.fadeOut(300);
290
291
		elements.mainUIMembers.emptyTable();
292
		if (members === null) {
293
			elements.mainUIMembers.hide(200);
294
			return;
295
		}
296
297
		elements.mainUIMembers.show(200);
298
		for (var i = 0; i < members.length; i++) {
299
			var tmpl = elements.generateTmplMember(members[i]);
300
			elements.mainUIMembers.append(tmpl);
301
		}
302
303
		for (i = 0; i < 10; i++) {
304
			if (curr.circleLevel < 9 && curr.circleLevel <= i) {
305
				$('.level-select option[value="' + i + '"]').attr('disabled', 'disabled');
306
			}
307
		}
308
309
310
		elements.mainUIMembers.children('tr.entry').each(function () {
311
312
				var userId = $(this).attr('member-id');
313
314
				//
315
				// level
316
				var level = $(this).attr('member-level');
317
				var levelSelect = $(this).find('.level-select');
318
				if (level === '0') {
319
					levelSelect.hide();
320
				}
321
				else {
322
					levelSelect.show(200).val(level);
323
				}
324
				levelSelect.on('change', function () {
325
					actions.changeMemberLevel(userId, $(this).val());
326
				});
327
328
				//
329
				// status
330
				var status = $(this).attr('member-status');
331
				var statusSelect = $(this).find('.status-select');
332
333
				statusSelect.on('change', function () {
334
					actions.changeMemberStatus(userId, $(this).val());
335
				});
336
				statusSelect.append($('<option>', {
337
					value: status,
338
					text: t('circles', status)
339
				})).val(status);
340
341
				if (curr.circleLevel <= $(this).attr('member-level')) {
342
					return;
343
				}
344
345
				if (status === 'Member' || status === 'Invited') {
346
					statusSelect.append($('<option>', {
347
						value: 'remove_member',
348
						text: t('circles', 'Kick this member')
349
					}));
350
				}
351
352
				if (status === 'Requesting') {
353
					statusSelect.append($('<option>', {
354
						value: 'accept_request',
355
						text: t('circles', 'Accept the request')
356
					}));
357
					statusSelect.append($('<option>', {
358
						value: 'dismiss_request',
359
						text: t('circles', 'Dismiss the request')
360
					}));
361
				}
362
363
			}
364
		)
0 ignored issues
show
Coding Style introduced by
There should be a semicolon.

Requirement of semicolons purely is a coding style issue since JavaScript has specific rules about semicolons which are followed by all browsers.

Further Readings:

Loading history...
365
	},
366
367
368
	displayCircleDetails: function (details) {
369
		elements.circlesDetails.children('#name').text(details.name);
370
		elements.circlesDetails.children('#type').text(t('circles', details.typeLongString));
371
372
		elements.buttonCircleActions.show(300);
373
		elements.addMember.hide(300);
374
	},
375
376
377
	displayMembersInteraction: function (details) {
378
		if (details.user.level < define.levelModerator) {
379
			elements.buttonAddMember.hide();
380
		} else {
381
			elements.buttonAddMember.show();
382
		}
383
384
		if (curr.allowed_federated === '0' || details.type === 'Personal' ||
385
			details.user.level < define.levelAdmin) {
386
			elements.buttonLinkCircle.hide();
387
		} else {
388
			elements.buttonLinkCircle.show();
389
		}
390
391
		elements.joinCircleInteraction.hide();
392
		this.displayNonMemberInteraction(details);
393
394
		if (details.user.level === define.levelOwner) {
395
			elements.destroyCircle.show();
396
			elements.buttonCircleSettings.show();
397
			elements.buttonJoinCircle.hide();
398
			return;
0 ignored issues
show
Unused Code introduced by
This return has no effect and can be removed.
Loading history...
399
		}
400
401
	},
402
403
404
	displayNonMemberInteraction: function (details) {
405
		elements.joinCircleAccept.hide();
406
		elements.joinCircleReject.hide();
407
		elements.joinCircleRequest.hide();
408
		elements.joinCircleInvite.hide();
409
		elements.buttonCircleSettings.hide();
410
		elements.destroyCircle.hide();
411
412
		if (details.user.status === 'Requesting') {
413
			elements.joinCircleRequest.show();
414
			return;
415
		}
416
417
		if (details.user.level > 0) {
418
			return;
419
		}
420
421
		setTimeout(function () {
422
			nav.joinCircleAction();
423
		}, 200);
424
	}
425
426
};
427
428