solid-panes 4.2.5 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -0
- package/dist/0314353e28ce6e5539af.svg +9 -0
- package/dist/04567ff683933c35c465.png +0 -0
- package/dist/10163fd9b5a0e00d63a0.png +0 -0
- package/dist/1234dcb2eec2e45f252b.png +0 -0
- package/dist/20899934157df4db56cb.png +0 -0
- package/dist/33760bf79f097f449da5.png +0 -0
- package/dist/4cceba29ab33b1ddd9bb.svg +6 -0
- package/dist/578d2b6ed32e7624164e.png +0 -0
- package/dist/5f62a5b2b7e99b9640c7.png +0 -0
- package/dist/6525766ecd288ec60129.png +0 -0
- package/dist/7800be6f6c4b5b0f4f20.png +0 -0
- package/dist/7b7538c6f6b317968009.svg +9 -0
- package/dist/92d03142abe6efc0b42d.svg +6 -0
- package/dist/976473cf5fe24d657d4b.png +0 -0
- package/dist/RDFXMLPane.js +1 -0
- package/dist/bda84f59e7216675a208.png +0 -0
- package/dist/cd68e8f3990ba8b2139e.png +0 -0
- package/dist/dashboard/basicPreferences.d.ts.map +1 -1
- package/dist/dashboard/basicPreferences.js +1 -0
- package/dist/dashboard/dashboardPane.d.ts.map +1 -1
- package/dist/dashboard/dashboardPane.js +9 -3
- package/dist/dashboard/homepage.d.ts +1 -1
- package/dist/dashboard/homepage.d.ts.map +1 -1
- package/dist/dashboard/homepage.js +5 -35
- package/dist/e7074a7e2cb69e51cfd3.png +0 -0
- package/dist/f3772696fb7ee53c23d8.png +0 -0
- package/dist/form/pane.js +1 -1
- package/dist/home/homePane.d.ts.map +1 -1
- package/dist/home/homePane.js +2 -0
- package/dist/humanReadablePane.js +34 -8
- package/dist/icons/clock.svg +7 -0
- package/dist/icons/comment.svg +6 -0
- package/dist/icons/dashboard.svg +9 -0
- package/dist/icons/downArrow.svg +6 -0
- package/dist/icons/folder.svg +6 -0
- package/dist/icons/friends.svg +9 -0
- package/dist/icons/help.svg +8 -0
- package/dist/icons/iconHelper.d.ts +2 -0
- package/dist/icons/iconHelper.d.ts.map +1 -0
- package/dist/icons/iconHelper.js +23 -0
- package/dist/icons/menu.svg +8 -0
- package/dist/icons/person.svg +6 -0
- package/dist/icons/personInCircle.svg +8 -0
- package/dist/icons/sharing.svg +10 -0
- package/dist/icons/signOut.svg +8 -0
- package/dist/icons/signup.png +0 -0
- package/dist/icons/star.svg +3 -0
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -4
- package/dist/internal/internalPane.d.ts.map +1 -1
- package/dist/internal/internalPane.js +1 -0
- package/dist/mainPage/footer.d.ts +14 -2
- package/dist/mainPage/footer.d.ts.map +1 -1
- package/dist/mainPage/footer.js +21 -13
- package/dist/mainPage/header.d.ts +16 -1
- package/dist/mainPage/header.d.ts.map +1 -1
- package/dist/mainPage/header.js +179 -61
- package/dist/mainPage/index.d.ts +15 -1
- package/dist/mainPage/index.d.ts.map +1 -1
- package/dist/mainPage/index.js +38 -7
- package/dist/mainPage/menu.css +243 -0
- package/dist/mainPage/menu.d.ts +7 -0
- package/dist/mainPage/menu.d.ts.map +1 -0
- package/dist/mainPage/menu.js +409 -0
- package/dist/n3Pane.js +1 -0
- package/dist/outline/context.d.ts +2 -2
- package/dist/outline/context.d.ts.map +1 -1
- package/dist/outline/context.js +5 -2
- package/dist/outline/manager.css +12 -14
- package/dist/outline/manager.js +152 -81
- package/dist/outline/userInput.js +6 -3
- package/dist/pad/padPane.css +36 -0
- package/dist/pad/padPane.d.ts +1 -0
- package/dist/pad/padPane.d.ts.map +1 -1
- package/dist/pad/padPane.js +32 -21
- package/dist/playlist/playlistPane.js +2 -6
- package/dist/profileUtils/ownerProfile.d.ts +5 -0
- package/dist/profileUtils/ownerProfile.d.ts.map +1 -0
- package/dist/profileUtils/ownerProfile.js +84 -0
- package/dist/registerPanes.js +4 -4
- package/dist/slideshow/slideshowPane.js +1 -1
- package/dist/social/editProfileDetails.d.ts +19 -0
- package/dist/social/editProfileDetails.d.ts.map +1 -0
- package/dist/social/editProfileDetails.js +267 -0
- package/dist/social/icons.d.ts +5 -0
- package/dist/social/icons.d.ts.map +1 -0
- package/dist/social/icons.js +60 -0
- package/dist/social/socialPane.css +804 -0
- package/dist/social/socialPane.d.ts +30 -0
- package/dist/social/socialPane.d.ts.map +1 -0
- package/dist/social/socialPane.js +558 -0
- package/dist/social/socialSections.d.ts +66 -0
- package/dist/social/socialSections.d.ts.map +1 -0
- package/dist/social/socialSections.js +317 -0
- package/dist/solid-panes.js +28903 -13713
- package/dist/solid-panes.js.map +1 -1
- package/dist/solid-panes.min.js +2235 -247
- package/dist/solid-panes.min.js.map +1 -1
- package/dist/style/tabbedtab.css +0 -124
- package/dist/tabbed/tabbedPane.d.ts.map +1 -1
- package/dist/tabbed/tabbedPane.js +2 -0
- package/dist/versionInfo.js +7 -7
- package/package.json +15 -10
- package/dist/socialPane.js +0 -430
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createAllFriendsSection = createAllFriendsSection;
|
|
7
|
+
exports.createHeaderSection = createHeaderSection;
|
|
8
|
+
exports.createMutualSection = createMutualSection;
|
|
9
|
+
var _profilePane = require("profile-pane");
|
|
10
|
+
var _solidUi = require("solid-ui");
|
|
11
|
+
var _editProfileDetails = require("./editProfileDetails");
|
|
12
|
+
var _icons = require("./icons");
|
|
13
|
+
function createHeaderSection(context, subject, controls, stats, getProfileData) {
|
|
14
|
+
const dom = context.dom;
|
|
15
|
+
const kb = context.session.store;
|
|
16
|
+
const header = document.createElement('header');
|
|
17
|
+
header.className = 'social-pane__header';
|
|
18
|
+
let headerControls = controls;
|
|
19
|
+
const renderHeader = function () {
|
|
20
|
+
header.replaceChildren();
|
|
21
|
+
const profileData = getProfileData();
|
|
22
|
+
const headerContent = dom.createElement('div');
|
|
23
|
+
headerContent.className = 'social-pane__header-content';
|
|
24
|
+
if (headerControls.canEdit) {
|
|
25
|
+
header.appendChild((0, _editProfileDetails.createEditProfileDetailsButton)({
|
|
26
|
+
dom,
|
|
27
|
+
store: kb,
|
|
28
|
+
subject,
|
|
29
|
+
header,
|
|
30
|
+
onSaved: renderHeader
|
|
31
|
+
}));
|
|
32
|
+
} else if (headerControls.viewerMode === 'authenticated') {
|
|
33
|
+
const addToFriendsButton = (0, _profilePane.createAddMeToYourFriendsButton)(subject, context);
|
|
34
|
+
addToFriendsButton.classList.add('social-pane__friend-action', 'profile__action-button', 'profile__btn-friends', 'flex-center');
|
|
35
|
+
// header.appendChild(addToFriendsButton)
|
|
36
|
+
headerContent.appendChild(addToFriendsButton);
|
|
37
|
+
}
|
|
38
|
+
header.appendChild(headerContent);
|
|
39
|
+
const headerMedia = dom.createElement('div');
|
|
40
|
+
headerMedia.className = 'social-pane__header-media';
|
|
41
|
+
headerContent.appendChild(headerMedia);
|
|
42
|
+
if (profileData) {
|
|
43
|
+
headerMedia.appendChild(createImage(profileData.imageUrl, profileData.name));
|
|
44
|
+
}
|
|
45
|
+
const headerDetails = dom.createElement('div');
|
|
46
|
+
headerDetails.className = 'social-pane__header-details';
|
|
47
|
+
headerContent.appendChild(headerDetails);
|
|
48
|
+
const headerSummary = dom.createElement('div');
|
|
49
|
+
headerSummary.classList.add('social-pane__header-summary', 'flex-column');
|
|
50
|
+
headerDetails.appendChild(headerSummary);
|
|
51
|
+
const name = profileData?.name || '???';
|
|
52
|
+
const h1 = dom.createElement('h1');
|
|
53
|
+
h1.classList.add('social-pane__header-name');
|
|
54
|
+
h1.appendChild(dom.createTextNode(name));
|
|
55
|
+
headerSummary.appendChild(h1);
|
|
56
|
+
const jobAndOrganization = [profileData?.jobTitle, profileData?.organization].filter(Boolean).join(' | ');
|
|
57
|
+
if (jobAndOrganization) {
|
|
58
|
+
const jobLine = dom.createElement('div');
|
|
59
|
+
jobLine.className = 'social-pane__header-job-org';
|
|
60
|
+
jobLine.textContent = jobAndOrganization;
|
|
61
|
+
headerSummary.appendChild(jobLine);
|
|
62
|
+
}
|
|
63
|
+
if (profileData?.location) {
|
|
64
|
+
const locationLine = dom.createElement('div');
|
|
65
|
+
locationLine.className = 'social-pane__header-location';
|
|
66
|
+
const locationIconSpan = dom.createElement('span');
|
|
67
|
+
locationIconSpan.classList.add('social-pane__header-location-icon', 'inline-flex-row');
|
|
68
|
+
locationIconSpan.innerHTML = _icons.locationIcon;
|
|
69
|
+
locationLine.appendChild(locationIconSpan);
|
|
70
|
+
locationLine.appendChild(dom.createTextNode(profileData.location));
|
|
71
|
+
headerSummary.appendChild(locationLine);
|
|
72
|
+
}
|
|
73
|
+
const statsRow = dom.createElement('div');
|
|
74
|
+
statsRow.className = 'social-pane__header-stats';
|
|
75
|
+
const friendCount = dom.createElement('button');
|
|
76
|
+
friendCount.className = 'social-pane__header-stat';
|
|
77
|
+
friendCount.type = 'button';
|
|
78
|
+
const friendCountLabel = dom.createElement('span');
|
|
79
|
+
friendCountLabel.className = 'social-pane__header-stat-label';
|
|
80
|
+
friendCountLabel.textContent = `${stats.friendCount} friend${stats.friendCount === 1 ? '' : 's'}`;
|
|
81
|
+
friendCount.appendChild(friendCountLabel);
|
|
82
|
+
if (stats.onSelectFriends) {
|
|
83
|
+
friendCount.addEventListener('click', stats.onSelectFriends);
|
|
84
|
+
}
|
|
85
|
+
statsRow.appendChild(friendCount);
|
|
86
|
+
if (typeof stats.mutualFriendCount === 'number') {
|
|
87
|
+
const mutualCount = dom.createElement('button');
|
|
88
|
+
mutualCount.className = 'social-pane__header-stat';
|
|
89
|
+
mutualCount.type = 'button';
|
|
90
|
+
const mutualCountLabel = dom.createElement('span');
|
|
91
|
+
mutualCountLabel.className = 'social-pane__header-stat-label';
|
|
92
|
+
mutualCountLabel.textContent = `${stats.mutualFriendCount} mutual friend${stats.mutualFriendCount === 1 ? '' : 's'}`;
|
|
93
|
+
mutualCount.appendChild(mutualCountLabel);
|
|
94
|
+
if (stats.onSelectMutual) {
|
|
95
|
+
mutualCount.addEventListener('click', stats.onSelectMutual);
|
|
96
|
+
}
|
|
97
|
+
statsRow.appendChild(mutualCount);
|
|
98
|
+
}
|
|
99
|
+
headerSummary.appendChild(statsRow);
|
|
100
|
+
(0, _editProfileDetails.appendProfileLinks)(headerMedia, dom, kb, subject);
|
|
101
|
+
};
|
|
102
|
+
header.refreshSocialHeader = function (nextControls) {
|
|
103
|
+
headerControls = nextControls;
|
|
104
|
+
renderHeader();
|
|
105
|
+
};
|
|
106
|
+
renderHeader();
|
|
107
|
+
return header;
|
|
108
|
+
}
|
|
109
|
+
function createImage(src, alt = '') {
|
|
110
|
+
if (src) {
|
|
111
|
+
const img = document.createElement('img');
|
|
112
|
+
img.className = 'social-pane__header-hero';
|
|
113
|
+
img.src = src;
|
|
114
|
+
img.alt = alt;
|
|
115
|
+
img.width = 180;
|
|
116
|
+
img.height = 180;
|
|
117
|
+
img.loading = 'eager';
|
|
118
|
+
return img;
|
|
119
|
+
}
|
|
120
|
+
const fallback = document.createElement('div');
|
|
121
|
+
fallback.className = 'social-pane__header-hero-alt flex-center';
|
|
122
|
+
fallback.setAttribute('role', 'img');
|
|
123
|
+
fallback.setAttribute('aria-label', alt);
|
|
124
|
+
fallback.tabIndex = 0;
|
|
125
|
+
const icon = document.createElement('span');
|
|
126
|
+
icon.classList.add('social-pane__header-hero-icon', 'inline-flex-row');
|
|
127
|
+
icon.innerHTML = _icons.personInCircleIcon;
|
|
128
|
+
fallback.appendChild(icon);
|
|
129
|
+
return fallback;
|
|
130
|
+
}
|
|
131
|
+
function createMutualSection(options) {
|
|
132
|
+
const {
|
|
133
|
+
dom,
|
|
134
|
+
subject,
|
|
135
|
+
familiar,
|
|
136
|
+
meUri,
|
|
137
|
+
incoming,
|
|
138
|
+
outgoing,
|
|
139
|
+
mutualConnections,
|
|
140
|
+
link,
|
|
141
|
+
text,
|
|
142
|
+
renderSupportingInfo,
|
|
143
|
+
renderNameSuffix
|
|
144
|
+
} = options;
|
|
145
|
+
|
|
146
|
+
// Mutual confirm UI is intentionally hidden for now.
|
|
147
|
+
// The related options remain in the function contract so that block can be
|
|
148
|
+
// restored later without reshaping callers.
|
|
149
|
+
|
|
150
|
+
let refreshMutualFriends = function () {};
|
|
151
|
+
const mutualSection = dom.createElement('section');
|
|
152
|
+
mutualSection.className = 'social-pane__mutual-friends social-primary__panel';
|
|
153
|
+
mutualSection.id = 'social-panel-mutual';
|
|
154
|
+
mutualSection.setAttribute('role', 'tabpanel');
|
|
155
|
+
mutualSection.setAttribute('aria-labelledby', 'social-tab-mutual');
|
|
156
|
+
const mutualContent = mutualSection.appendChild(dom.createElement('div'));
|
|
157
|
+
mutualContent.classList.add('social-main', 'social-main--mutual', 'flex-column');
|
|
158
|
+
const relationshipSummary = dom.createElement('div');
|
|
159
|
+
relationshipSummary.classList.add('social-mutual-summary', 'flex-column');
|
|
160
|
+
mutualContent.appendChild(relationshipSummary);
|
|
161
|
+
const createRelationshipLine = function () {
|
|
162
|
+
const line = relationshipSummary.appendChild(dom.createElement('div'));
|
|
163
|
+
line.classList.add('social-mutual-summary-line');
|
|
164
|
+
return line;
|
|
165
|
+
};
|
|
166
|
+
const youAndThem = function () {
|
|
167
|
+
const line = createRelationshipLine();
|
|
168
|
+
line.appendChild(link(text('You'), meUri));
|
|
169
|
+
line.appendChild(text(' and '));
|
|
170
|
+
line.appendChild(link(text(familiar), subject.uri));
|
|
171
|
+
return line;
|
|
172
|
+
};
|
|
173
|
+
if (!incoming) {
|
|
174
|
+
if (!outgoing) {
|
|
175
|
+
const line = youAndThem();
|
|
176
|
+
line.appendChild(text(' have not said you know each other.'));
|
|
177
|
+
/* NOTE: hiding the outgoing-only unconfirmed message for now.
|
|
178
|
+
} else {
|
|
179
|
+
relationshipSummary.appendChild(link(text('You'), meUri))
|
|
180
|
+
relationshipSummary.appendChild(text(' know '))
|
|
181
|
+
relationshipSummary.appendChild(link(text(familiar), subject.uri))
|
|
182
|
+
relationshipSummary.appendChild(text(' (unconfirmed)'))
|
|
183
|
+
*/
|
|
184
|
+
}
|
|
185
|
+
/* NOTE: hiding the incoming-only unconfirmed message for now.
|
|
186
|
+
} else if (!outgoing) {
|
|
187
|
+
relationshipSummary.classList.add('social-mutual-summary--confirm')
|
|
188
|
+
const incomingLine = relationshipSummary.appendChild(dom.createElement('div'))
|
|
189
|
+
incomingLine.classList.add('social-mutual-summary-line')
|
|
190
|
+
incomingLine.appendChild(link(text(familiar), subject.uri))
|
|
191
|
+
incomingLine.appendChild(text(' knows '))
|
|
192
|
+
incomingLine.appendChild(link(text('you'), meUri))
|
|
193
|
+
incomingLine.appendChild(text(' (unconfirmed).'))
|
|
194
|
+
*/
|
|
195
|
+
} else {
|
|
196
|
+
const line = youAndThem();
|
|
197
|
+
line.appendChild(text(' say you know each other.'));
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/* NOTE: hiding the confirm-friend checkbox for now.
|
|
201
|
+
const shouldShowCheckboxPreview = editable || (Boolean(incoming) && !outgoing)
|
|
202
|
+
if (shouldShowCheckboxPreview) {
|
|
203
|
+
const confirmLabel = dom.createElement('span')
|
|
204
|
+
confirmLabel.appendChild(text('Confirm you know '))
|
|
205
|
+
confirmLabel.appendChild(link(text(familiar), subject.uri))
|
|
206
|
+
const relationshipForm = buildCheckboxForm(
|
|
207
|
+
confirmLabel,
|
|
208
|
+
new Statement(me, knows, subject, profile ?? undefined),
|
|
209
|
+
Boolean(outgoing),
|
|
210
|
+
{
|
|
211
|
+
disabled: !editable,
|
|
212
|
+
disabledTitle: !editable ? 'Your profile is not editable' : undefined
|
|
213
|
+
}
|
|
214
|
+
)
|
|
215
|
+
relationshipForm.classList.add('social-mutual-checkbox-form')
|
|
216
|
+
mutualContent.appendChild(relationshipForm)
|
|
217
|
+
}
|
|
218
|
+
*/
|
|
219
|
+
|
|
220
|
+
if (mutualConnections.length) {
|
|
221
|
+
const mutualFriendsTable = mutualContent.appendChild(dom.createElement('table'));
|
|
222
|
+
mutualFriendsTable.className = 'social-main social-friends-list social-friends-grid';
|
|
223
|
+
const createMutualRow = function (target) {
|
|
224
|
+
return _solidUi.widgets.personTR(dom, _solidUi.ns.foaf('knows'), target, {
|
|
225
|
+
renderSupportingInfo,
|
|
226
|
+
renderNameSuffix
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
refreshMutualFriends = function () {
|
|
230
|
+
const sortedMutualConnections = [...mutualConnections].sort((left, right) => {
|
|
231
|
+
const leftLabel = _solidUi.utils.label(left) || left.value;
|
|
232
|
+
const rightLabel = _solidUi.utils.label(right) || right.value;
|
|
233
|
+
return leftLabel.localeCompare(rightLabel);
|
|
234
|
+
});
|
|
235
|
+
_solidUi.utils.syncTableToArray(mutualFriendsTable, sortedMutualConnections, createMutualRow, function (row, thing) {
|
|
236
|
+
const replacement = createMutualRow(thing);
|
|
237
|
+
return replacement;
|
|
238
|
+
});
|
|
239
|
+
};
|
|
240
|
+
refreshMutualFriends();
|
|
241
|
+
}
|
|
242
|
+
return {
|
|
243
|
+
section: mutualSection,
|
|
244
|
+
content: mutualContent,
|
|
245
|
+
refreshMutualFriends
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
function createAllFriendsSection(options) {
|
|
249
|
+
const {
|
|
250
|
+
dom,
|
|
251
|
+
subject,
|
|
252
|
+
profile,
|
|
253
|
+
editable,
|
|
254
|
+
renderSupportingInfo,
|
|
255
|
+
renderNameSuffix
|
|
256
|
+
} = options;
|
|
257
|
+
const allFriends = dom.createElement('section');
|
|
258
|
+
allFriends.className = 'social-pane__all-friends social-primary__panel';
|
|
259
|
+
allFriends.id = 'social-panel-all-friends';
|
|
260
|
+
allFriends.setAttribute('role', 'tabpanel');
|
|
261
|
+
allFriends.setAttribute('aria-labelledby', 'social-tab-all-friends');
|
|
262
|
+
const mainTable = allFriends.appendChild(dom.createElement('table'));
|
|
263
|
+
mainTable.className = 'social-main';
|
|
264
|
+
const friendsList = _solidUi.widgets.attachmentList(dom, subject, mainTable, {
|
|
265
|
+
doc: profile,
|
|
266
|
+
modify: !!editable,
|
|
267
|
+
predicate: _solidUi.ns.foaf('knows'),
|
|
268
|
+
noun: 'friend',
|
|
269
|
+
renderSupportingInfo,
|
|
270
|
+
renderNameSuffix
|
|
271
|
+
});
|
|
272
|
+
friendsList.classList.add('social-friends-list');
|
|
273
|
+
friendsList.style.marginTop = '0';
|
|
274
|
+
const friendsListRow = friendsList.querySelector('tr');
|
|
275
|
+
const friendsListPromptCell = friendsListRow?.children?.[0];
|
|
276
|
+
const friendsListRightCell = friendsListRow?.children?.[1];
|
|
277
|
+
const friendsHeaderActions = dom.createElement('div');
|
|
278
|
+
friendsHeaderActions.classList.add('social-friends-header-actions');
|
|
279
|
+
if (friendsListPromptCell instanceof HTMLElement) {
|
|
280
|
+
while (friendsListPromptCell.firstChild) {
|
|
281
|
+
friendsHeaderActions.appendChild(friendsListPromptCell.firstChild);
|
|
282
|
+
}
|
|
283
|
+
friendsListPromptCell.remove();
|
|
284
|
+
}
|
|
285
|
+
if (friendsHeaderActions.childNodes.length > 0) {
|
|
286
|
+
const friendDropButtons = friendsHeaderActions.querySelectorAll('button');
|
|
287
|
+
friendDropButtons.forEach(button => {
|
|
288
|
+
button.setAttribute('title', 'Drop friend here');
|
|
289
|
+
button.setAttribute('aria-label', 'Drop friend here');
|
|
290
|
+
const buttonImages = button.querySelectorAll('img');
|
|
291
|
+
buttonImages.forEach(image => {
|
|
292
|
+
image.setAttribute('title', 'Drop friend here');
|
|
293
|
+
image.setAttribute('alt', 'Drop friend here');
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
const friendsActionsRow = dom.createElement('div');
|
|
297
|
+
friendsActionsRow.className = 'social-friends-header-actions social-friends-header-actions--standalone';
|
|
298
|
+
friendsActionsRow.appendChild(friendsHeaderActions);
|
|
299
|
+
const dropHint = dom.createElement('span');
|
|
300
|
+
dropHint.className = 'social-friends-header-hint';
|
|
301
|
+
dropHint.textContent = 'Drag a WebId on the target to add a friend.';
|
|
302
|
+
friendsActionsRow.appendChild(dropHint);
|
|
303
|
+
allFriends.prepend(friendsActionsRow);
|
|
304
|
+
}
|
|
305
|
+
if (friendsListRightCell instanceof HTMLTableCellElement) {
|
|
306
|
+
friendsListRightCell.colSpan = 2;
|
|
307
|
+
}
|
|
308
|
+
const friendsItemsTable = friendsList.querySelector('td table');
|
|
309
|
+
if (friendsItemsTable instanceof HTMLTableElement) {
|
|
310
|
+
friendsItemsTable.classList.add('social-friends-grid');
|
|
311
|
+
}
|
|
312
|
+
return {
|
|
313
|
+
section: allFriends,
|
|
314
|
+
mainTable,
|
|
315
|
+
friendsList
|
|
316
|
+
};
|
|
317
|
+
}
|