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
108
109
110
111
112
113
114
115
116
117
|
/**
* 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>';
var LIST = ''
+ '<div class="menu popovermenu bubble hidden contactsmenu-popover">'
+ ' <ul>'
+ ' <li>'
+ ' <a>'
+ ' <span class="icon-loading-small"></span>'
+ ' </a>'
+ ' </li>'
+ ' </ul>'
+ '</div>';
$.fn.contactsMenu = function(shareWith, shareType, appendTo) {
// 0 - user, 4 - email, 6 - remote
var allowedTypes = [0, 4, 6];
if (allowedTypes.indexOf(shareType) === -1) {
return;
}
var $div = this;
appendTo.append(LIST);
var $list = appendTo.find('div.contactsmenu-popover');
$div.click(function() {
if (!$list.hasClass('hidden')) {
$list.addClass('hidden');
$list.hide();
return;
}
$list.removeClass('hidden');
$list.show();
if ($list.hasClass('loaded')) {
return;
}
$list.addClass('loaded');
$.ajax(OC.generateUrl('/contactsmenu/findOne'), {
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) {
}
}, function(jqXHR) {
$list.find('ul').find('li').addClass('hidden');
var title;
if (jqXHR.status === 404) {
title = t('core', 'No action available');
} else {
title = t('core', 'Error fetching contact actions');
}
var template = Handlebars.compile(ENTRY);
$list.find('ul').append(template({
hyperlink: '#',
title: title
}));
});
});
$(document).click(function(event) {
var clickedList = ($list.has(event.target).length > 0);
var clickedTarget = ($div.has(event.target).length > 0);
$div.each(function() {
if ($(this).is(event.target)) {
clickedTarget = true;
}
});
if (clickedList || clickedTarget) {
return;
}
$list.addClass('hidden');
$list.hide();
});
};
}(jQuery));
|