summaryrefslogtreecommitdiffstats
path: root/core/js/jquery.contactsmenu.js
blob: 3c782cc5bfd2de56555fbbcdb3ee8eb0571f2645 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/**
 * Copyright (c) 2017 Georg Ehrke <oc.list@georgehrke.com>
 * This file is licensed under the Affero General Public License version 3 or
 * later.
 * See the COPYING-README file.
 */

(function ($) {
	var ENTRY = ''
		+ '<li>'
		+ '    <a href="{{hyperlink}}">'
		+ '        {{#if icon}}<img src="{{icon}}">{{/if}}'
		+ '        <span>{{title}}</span>'
		+ '    </a>'
		+ '</li>';

	$.fn.contactsMenu = function(shareWith, shareType, appendTo) {
		if (typeof(shareWith) !== 'undefined') {
			shareWith = String(shareWith);
		} else {
			if (typeof(this.data('share-with')) !== 'undefined') {
				shareWith = this.data('share-with');
			}
		}
		if (typeof(shareType) !== 'undefined') {
			shareType = Number(shareType);
		} else {
			if (typeof(this.data('share-type')) !== 'undefined') {
				shareType = this.data('share-type');
			}
		}
		if (typeof(appendTo) === 'undefined') {
			appendTo = this;
		}

		// 0 - user, 4 - email, 6 - remote
		var allowedTypes = [0, 4, 6];
		if (allowedTypes.indexOf(shareType) === -1) {
			return;
		}

		var $div = this;
		appendTo.append('<div class="menu popovermenu bubble hidden contactsmenu-popover"><ul><li><a><span class="icon-loading-small"></span></a></li></ul></div>');
		var $list = appendTo.find('div.contactsmenu-popover');
		var url = OC.generateUrl('/contactsmenu/findOne');

		$div.click(function() {
			$list.show();

			if ($list.hasClass('loaded')) {
				return;
			}

			$list.addClass('loaded');
			$.ajax(url, {
				method: 'POST',
				data: {
					shareType: shareType,
					shareWith: shareWith
				}
			}).then(function(data) {
				$list.find('ul').find('li').addClass('hidden');

				var actions;
				if (!data.topAction) {
					actions = [{
						hyperlink: '#',
						title: t('core', 'No action available')
					}];
				} else {
					actions = [data.topAction].concat(data.actions);
				}

				actions.forEach(function(action) {
					var template = Handlebars.compile(ENTRY);
					$list.find('ul').append(template(action));
				});

				if (actions.length === 0) {

				}
			});
		});

		$(document).click(function(event) {
			var clickedList = $.contains($list, event.target);
			var clickedLi = $.contains($div, event.target);

			$div.each(function() {
				if ($(this).is(event.target)) {
					clickedLi = true;
				}
			});

			if (clickedList) {
				return;
			}

			if (clickedLi) {
				return;
			}

			$list.hide();

		});
	};
}(jQuery));