Completed
Push — master ( fa4c5d...fa4c5d )
by Maxence
05:16 queued 02:40
created

elements.initExperienceCircleButtons   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 3
rs 10
c 0
b 0
f 0
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: nav */
31
/** global: actions */
32
/** global: settings */
33
/** global: resultCircles */
34
/** global: curr */
35
/** global: api */
36
/** global: define */
37
38
var elements = {
39
40
	newTypeDefinition: null,
41
	newType: null,
42
	newSubmit: null,
43
	newName: null,
44
	navigation: null,
45
	circlesList: null,
46
	circlesSearch: null,
47
	circlesFilters: null,
48
	circlesDetails: null,
49
	emptyContent: null,
50
	mainUI: null,
51
	mainUIMembersTable: null,
52
	membersSearchResult: null,
53
	memberDetails: null,
54
	memberRequest: null,
55
56
	joinCircleInteraction: null,
57
	joinCircleAccept: null,
58
	joinCircleReject: null,
59
	joinCircleRequest: null,
60
	joinCircleInvite: null,
61
	joinCircle: null,
62
	leaveCircle: null,
63
	destroyCircle: null,
64
65
	settingsPanel: null,
66
	settingsName: null,
67
	settingsLink: null,
68
	settingsLinkAuto: null,
69
	settingsLinkFiles: null,
70
	settingsEntryLink: null,
71
	settingsEntryLinkAuto: null,
72
	settingsEntryLinkFiles: null,
73
	settingsSave: null,
74
75
	rightPanel: null,
76
	addMember: null,
77
	remMember: null,
78
	linkCircle: null,
79
80
	buttonCircleActions: null,
81
	buttonCircleActionReturn: null,
82
	buttonCircleSettings: null,
83
	buttonAddMember: null,
84
	buttonLinkCircle: null,
85
86
87
	initElements: function () {
88
89
		elements.newTypeDefinition = $('#circles_new_type_definition');
90
		elements.newType = $('#circles_new_type');
91
		elements.newSubmit = $('#circles_new_submit');
92
		elements.newName = $('#circles_new_name');
93
		elements.navigation = $('#app-navigation.circles');
94
		elements.circlesList = $('#circles_list');
95
		elements.circlesSearch = $('#circles_search');
96
		elements.circlesFilters = $('#circles_filters');
97
		elements.circlesDetails = $('#circle_details');
98
		elements.emptyContent = $('#emptycontent');
99
		elements.mainUI = $('#mainui');
100
101
		elements.mainUIMembers = $('#memberslist');
102
		elements.mainUIMembersTable = $('#memberslist_table');
103
		elements.membersSearchResult = $('#members_search_result');
104
		elements.memberDetails = $('#memberdetails');
105
		elements.memberRequest = $('#member_request');
106
107
		elements.joinCircleInteraction = $('#sjoincircle_interact');
108
		elements.joinCircleAccept = $('#joincircle_acceptinvit');
109
		elements.joinCircleReject = $('#joincircle_rejectinvit');
110
		elements.joinCircleRequest = $('#joincircle_request');
111
		elements.joinCircleInvite = $('#joincircle_invit');
112
		elements.joinCircle = $('#joincircle');
113
		elements.leaveCircle = $('#leavecircle');
114
		elements.destroyCircle = $('#circle-actions-delete');
115
116
		elements.settingsPanel = $('#settings-panel');
117
		elements.settingsName = $('#settings-name');
118
		elements.settingsLink = $('#settings-link');
119
		elements.settingsLinkAuto = $('#settings-link-auto');
120
		elements.settingsLinkFiles = $('#settings-link-files');
121
		elements.settingsEntryLink = $('#settings-entry-link');
122
		elements.settingsEntryLinkAuto = $('#settings-entry-link-auto');
123
		elements.settingsEntryLinkFiles = $('#settings-entry-link-files');
124
		elements.settingsSave = $('#settings-submit');
125
126
		elements.rightPanel = $('#rightpanel');
127
		elements.addMember = $('#addmember');
128
		elements.remMember = $('#remmember');
129
		elements.linkCircle = $('#linkcircle');
130
131
		elements.buttonCircleActions = $('#circle-actions-buttons');
132
		elements.buttonCircleActionReturn = $('#circle-actions-return');
133
		elements.buttonCircleSettings = $('#circle-actions-settings');
134
		elements.buttonAddMember = $('#circle-actions-add');
135
		elements.buttonLinkCircle = $('#circle-actions-link');
136
		elements.buttonJoinCircle = $('#circle-actions-join');
137
	},
138
139
140
	initTweaks: function () {
141
		$.fn.emptyTable = function () {
142
			this.children('tr').each(function () {
143
				if ($(this).attr('class') !== 'header') {
144
					$(this).remove();
145
				}
146
			});
147
		};
148
	},
149
150
151
	initUI: function () {
152
		elements.newTypeDefinition.children('div').fadeOut(0);
153
		$('#circles_new_type_' + elements.newType.children('option:selected').val()).fadeIn(
154
			0);
155
156
		elements.newType.hide();
157
		elements.newSubmit.hide();
158
		elements.newTypeDefinition.hide();
159
160
		$('.icon-circles').css('background-image',
161
			'url(' + OC.imagePath('circles', 'colored') + ')');
162
163
		var theme = $('#body-user').find('#header').css('background-color');
164
		elements.circlesList.css('background-color', theme);
165
		elements.circlesDetails.css('background-color', theme);
166
		elements.rightPanel.css('background-color', theme);
167
168
		elements.membersSearchResult.hide();
169
	},
170
171
172
	/**
173
	 *
174
	 */
175
	initExperienceCirclesList: function () {
176
177
		elements.circlesList.children('div').on('click', function () {
178
			nav.displayCirclesList($(this).attr('circle-type'));
179
		});
180
181
		this.initExperienceCirclesListFromSearch();
182
		this.initExperienceCirclesListFromFilter();
183
	},
184
185
186
	initExperienceCirclesListFromSearch: function () {
187
188
		this.circlesSearch.on('input property paste focus', function () {
189
			var search = $(this).val().trim();
190
			if (curr.searchCircle === search) {
191
				return;
192
			}
193
194
			curr.searchCircle = search;
195
			api.listCircles(curr.circlesType, curr.searchCircle, curr.searchFilter,
196
				resultCircles.listCirclesResult);
197
		});
198
	},
199
200
201
	initExperienceCirclesListFromFilter: function () {
202
203
		this.circlesFilters.on('input property paste focus', function () {
204
			var searchFilter = $(this).val();
205
			if (curr.searchFilter === searchFilter) {
206
				return;
207
			}
208
209
			curr.searchFilter = searchFilter;
210
			api.listCircles(curr.circlesType, curr.searchCircle, curr.searchFilter,
211
				resultCircles.listCirclesResult);
212
		});
213
214
	},
215
216
217
	/**
218
	 *
219
	 */
220
	initExperienceCircleButtons: function () {
221
222
		elements.buttonCircleActionReturn.hide();
223
		elements.buttonCircleActionReturn.on('click', function () {
224
			nav.circlesActionReturn();
225
		});
226
227
		elements.buttonAddMember.on('click', function () {
228
			settings.displaySettings(false);
229
			nav.displayCircleButtons(false);
230
			nav.displayAddMemberInput(true);
231
			nav.displayLinkCircleInput(false);
232
			nav.displayJoinCircleButton(false);
233
		});
234
235
		elements.buttonLinkCircle.on('click', function () {
236
			settings.displaySettings(false);
237
			nav.displayCircleButtons(false);
238
			nav.displayAddMemberInput(false);
239
			nav.displayLinkCircleInput(true);
240
			nav.displayJoinCircleButton(false);
241
		});
242
243
		elements.buttonCircleSettings.on('click', function () {
244
			settings.displaySettings(true);
245
			nav.displayCircleButtons(false);
246
			nav.displayAddMemberInput(false);
247
			nav.displayLinkCircleInput(false);
248
			nav.displayJoinCircleButton(false);
249
		});
250
251
		elements.buttonJoinCircle.on('click', function () {
252
			nav.joinCircleAction();
253
		});
254
255
256
		elements.settingsSave.on('click', function () {
257
				actions.saveSettings();
258
			}
259
		);
260
	},
261
262
263
	/**
264
	 *
265
	 */
266
	initAnimationNewCircle: function () {
267
268
		elements.newName.on('keyup', function () {
269
			actions.onEventNewCircleName();
270
		});
271
272
		elements.newType.on('change', function () {
273
			actions.onEventNewCircleType();
274
		});
275
276
		elements.newSubmit.on('click', function () {
277
			api.createCircle(elements.newType.val(), elements.newName.val(),
278
				resultCircles.createCircleResult);
279
		});
280
281
	},
282
283
284
	emptyCircleCreation: function () {
285
		elements.newName.val('');
286
		elements.newType.val('');
287
	},
288
289
	fillMembersSearch: function (exact, partial) {
290
		this.fillExactMembersSearch(exact);
291
		this.fillPartialMembersSearch(partial);
292
		elements.membersSearchResult.children().first().css('border-top-width', '0px');
293
	},
294
295
296
	fillExactMembersSearch: function (exact) {
297
		$.each(exact, function (index, value) {
298
			elements.membersSearchResult.append(
299
				'<div class="members_search exact" searchresult="' +
300
				escapeHTML(value.value.shareWith) + '">' + escapeHTML(value.label) + '   (' +
301
				escapeHTML(value.value.shareWith) + ')</div>');
302
		});
303
304
	},
305
306
307
	fillPartialMembersSearch: function (partial) {
308
		$.each(partial, function (index, value) {
309
			var currSearch = elements.addMember.val().trim();
310
			var line = escapeHTML(value.label) + '   (' + escapeHTML(value.value.shareWith) + ')';
311
			if (currSearch.length > 0) {
312
				line = line.replace(new RegExp('(' + currSearch + ')', 'gi'), '<b>$1</b>');
313
			}
314
315
			elements.membersSearchResult.append(
316
				'<div class="members_search" searchresult="' + escapeHTML(value.value.shareWith) +
317
				'">' + line +
318
				'</div>');
319
		});
320
321
	},
322
323
324
	resetCirclesList: function () {
325
326
		elements.navigation.addClass('selected');
327
		elements.navigation.children().each(function () {
328
			if ($(this).attr('id') !== 'circles_search' &&
329
				$(this).attr('id') !== 'circles_filters') {
330
				$(this).remove();
331
			}
332
		});
333
	},
334
335
336
	removeMemberslistEntry: function (membername) {
337
		this.mainUIMembersTable.children("[member-id='" + escapeHTML(membername) + "']").each(
338
			function () {
339
				$(this).hide(300);
340
			});
341
	},
342
343
344
	generateTmplCircle: function (entry) {
345
		var tmpl = $('#tmpl_circle').html();
346
347
		tmpl = tmpl.replace(/%title%/g, escapeHTML(entry.name));
348
		tmpl = tmpl.replace(/%type%/g, t('circles', escapeHTML(entry.type)));
349
		tmpl = tmpl.replace(/%owner%/g, escapeHTML(entry.owner.user_id));
350
		tmpl = tmpl.replace(/%status%/g, t('circles', escapeHTML(entry.user.status)));
351
		tmpl = tmpl.replace(/%level_string%/g, t('circles', escapeHTML(entry.user.level_string)));
352
		tmpl = tmpl.replace(/%creation%/g, escapeHTML(entry.creation));
353
354
		return tmpl;
355
	},
356
357
358
	generateTmplMember: function (entry) {
359
		var tmpl = $('#tmpl_member').html();
360
361
		tmpl = tmpl.replace(/%username%/g, escapeHTML(entry.user_id));
362
		tmpl = tmpl.replace(/%level%/g, escapeHTML(entry.level));
363
		tmpl = tmpl.replace(/%status%/g, escapeHTML(entry.status));
364
		tmpl = tmpl.replace(/%joined%/g, escapeHTML(entry.joined));
365
366
		return tmpl;
367
	}
368
369
370
};