Skip to content

Commit ec79d7f

Browse files
committed
Migrate WCF.Conversation.EditorHandler to typescript
1 parent 6911143 commit ec79d7f

File tree

10 files changed

+373
-262
lines changed

10 files changed

+373
-262
lines changed

files/js/WCF.Conversation.js

Lines changed: 60 additions & 229 deletions
Original file line numberDiff line numberDiff line change
@@ -9,290 +9,121 @@ WCF.Conversation = { };
99

1010
/**
1111
* Core editor handler for conversations.
12+
*
13+
* @deprecated 6.2 use `WoltLabSuite/Core/Conversation/EditorHandler` instead
1214
*/
1315
WCF.Conversation.EditorHandler = Class.extend({
14-
/**
15-
* list of attributes per conversation
16-
* @var object
17-
*/
18-
_attributes: { },
19-
20-
/**
21-
* list of conversations
22-
* @var object
23-
*/
24-
_conversations: { },
25-
26-
/**
27-
* list of permissions per conversation
28-
* @var object
29-
*/
30-
_permissions: { },
31-
3216
/**
3317
* Initializes the core editor handler for conversations.
3418
*/
35-
init: function(availableLabels) {
36-
this._conversations = { };
37-
38-
var self = this;
39-
$('.conversation').each(function(index, conversation) {
40-
var $conversation = $(conversation);
41-
var $conversationID = $conversation.data('conversationID');
42-
43-
if (!self._conversations[$conversationID]) {
44-
self._conversations[$conversationID] = $conversation;
45-
var $labelIDs = eval($conversation.data('labelIDs'));
46-
47-
// set attributes
48-
self._attributes[$conversationID] = {
49-
isClosed: ($conversation.data('isClosed') ? true : false),
50-
labelIDs: $labelIDs
51-
};
52-
53-
// set permissions
54-
self._permissions[$conversationID] = {
55-
canAddParticipants: ($conversation.data('canAddParticipants') ? true : false),
56-
canCloseConversation: ($conversation.data('canCloseConversation') ? true : false)
57-
};
58-
}
19+
init: function (availableLabels) {
20+
require(["WoltLabSuite/Core/Conversation/Component/EditorHandler"], ({ setup }) => {
21+
setup(availableLabels);
5922
});
6023
},
61-
24+
6225
/**
6326
* Returns a permission's value for given conversation id.
64-
*
27+
*
6528
* @param integer conversationID
6629
* @param string permission
6730
* @return boolean
6831
*/
69-
getPermission: function(conversationID, permission) {
70-
if (this._permissions[conversationID][permission] === undefined) {
71-
return false;
32+
getPermission: function (conversationID, permission) {
33+
switch (permission) {
34+
case "canAddParticipants":
35+
return require("WoltLabSuite/Core/Conversation/Component/EditorHandler").getConversationEditor(
36+
conversationID,
37+
).canAddParticipants;
38+
case "canCloseConversation":
39+
return require("WoltLabSuite/Core/Conversation/Component/EditorHandler").getConversationEditor(
40+
conversationID,
41+
).canCloseConversation;
42+
default:
43+
return false;
7244
}
73-
74-
return (this._permissions[conversationID][permission]) ? true : false;
7545
},
76-
46+
7747
/**
7848
* Returns an attribute's value for given conversation id.
79-
*
49+
*
8050
* @param integer conversationID
8151
* @param string key
8252
* @return mixed
8353
*/
84-
getValue: function(conversationID, key) {
54+
getValue: function (conversationID, key) {
8555
switch (key) {
86-
case 'labelIDs':
87-
if (this._attributes[conversationID].labelIDs === undefined) {
88-
this._attributes[conversationID].labelIDs = [ ];
89-
}
90-
91-
return this._attributes[conversationID].labelIDs;
92-
break;
93-
94-
case 'isClosed':
95-
return (this._attributes[conversationID].isClosed) ? true : false;
96-
break;
56+
case "labelIDs":
57+
return require("WoltLabSuite/Core/Conversation/Component/EditorHandler").getConversationEditor(
58+
conversationID,
59+
).labelIDs;
60+
break;
61+
62+
case "isClosed":
63+
return require("WoltLabSuite/Core/Conversation/Component/EditorHandler").getConversationEditor(
64+
conversationID,
65+
).isClosed;
9766
}
9867
},
99-
68+
10069
/**
10170
* Counts available labels.
102-
*
71+
*
10372
* @return integer
10473
*/
105-
countAvailableLabels: function() {
106-
return (this.getAvailableLabels()).length;
74+
countAvailableLabels: function () {
75+
return require("WoltLabSuite/Core/Conversation/Component/EditorHandler").getAvailableLabels().length;
10776
},
108-
77+
10978
/**
11079
* Returns a list with the data of the available labels.
111-
*
80+
*
11281
* @return array<object>
11382
*/
114-
getAvailableLabels: function() {
115-
var $labels = [ ];
116-
117-
WCF.Dropdown.getDropdownMenu('conversationLabelFilter').children('.scrollableDropdownMenu').children('li').each(function(index, listItem) {
118-
var $listItem = $(listItem);
119-
if ($listItem.hasClass('dropdownDivider')) {
120-
return false;
121-
}
122-
123-
var $span = $listItem.find('span');
124-
$labels.push({
125-
cssClassName: $span.data('cssClassName'),
126-
labelID: $span.data('labelID'),
127-
label: $span.text()
128-
});
129-
});
130-
131-
return $labels;
83+
getAvailableLabels: function () {
84+
return require("WoltLabSuite/Core/Conversation/Component/EditorHandler").getAvailableLabels();
13285
},
133-
86+
13487
/**
13588
* Updates conversation data.
136-
*
89+
*
13790
* @param integer conversationID
13891
* @param object data
13992
*/
140-
update: function(conversationID, key, data) {
141-
if (!this._conversations[conversationID]) {
142-
console.debug("[WCF.Conversation.EditorHandler] Unknown conversation id '" + conversationID + "'");
143-
return;
144-
}
145-
var $conversation = this._conversations[conversationID];
146-
147-
switch (key) {
148-
case 'close':
149-
$(`<li>
150-
<span class="jsTooltip jsIconLock" title="${WCF.Language.get('wcf.global.state.closed')}">
151-
<fa-icon size="16" name="lock"></fa-icon>
152-
</span>
153-
</li>`).prependTo($conversation.find('.statusIcons'));
154-
155-
this._attributes[conversationID].isClosed = 1;
156-
break;
157-
158-
case 'labelIDs':
159-
var $labels = { };
160-
WCF.Dropdown.getDropdownMenu('conversationLabelFilter').find('li > a > span').each(function(index, span) {
161-
var $span = $(span);
162-
163-
$labels[$span.data('labelID')] = {
164-
cssClassName: $span.data('cssClassName'),
165-
label: $span.text(),
166-
url: $span.parent().attr('href')
167-
};
168-
});
169-
170-
var $labelList = $conversation.find('.columnSubject > .labelList');
171-
if (!data.length) {
172-
if ($labelList.length) $labelList.remove();
173-
}
174-
else {
175-
// create label list if missing
176-
if (!$labelList.length) {
177-
$labelList = $('<ul class="labelList" />').prependTo($conversation.find('.columnSubject'));
178-
}
179-
180-
// remove all existing labels
181-
$labelList.empty();
182-
183-
// insert labels
184-
for (var $i = 0, $length = data.length; $i < $length; $i++) {
185-
var $label = $labels[data[$i]];
186-
$('<li><a href="' + $label.url + '" class="badge label' + ($label.cssClassName ? " " + $label.cssClassName : "") + '">' + WCF.String.escapeHTML($label.label) + '</a></li>').appendTo($labelList);
187-
}
188-
}
189-
break;
190-
191-
case 'open':
192-
$conversation.find('.statusIcons li').each(function(index, listItem) {
193-
var $listItem = $(listItem);
194-
if ($listItem.children('span.jsIconLock').length) {
195-
$listItem.remove();
196-
return false;
197-
}
198-
});
199-
200-
this._attributes[conversationID].isClosed = 0;
201-
break;
202-
}
203-
204-
WCF.Clipboard.reload();
205-
}
93+
update: function (conversationID, key, data) {
94+
require(["WoltLabSuite/Core/Conversation/Component/EditorHandler"], ({ getConversationEditor }) => {
95+
switch (key) {
96+
case "close":
97+
getConversationEditor(conversationID).isClosed = true;
98+
break;
99+
case "labelIDs":
100+
getConversationEditor(conversationID).labelIDs = data;
101+
break;
102+
case "open":
103+
getConversationEditor(conversationID).isClosed = false;
104+
break;
105+
}
106+
});
107+
},
206108
});
207109

208110
/**
209111
* Conversation editor handler for conversation page.
210112
*
211113
* @see WCF.Conversation.EditorHandler
212114
* @param array<object> availableLabels
115+
*
116+
* @deprecated 6.2 use `WoltLabSuite/Core/Conversation/EditorHandler` instead
213117
*/
214118
WCF.Conversation.EditorHandlerConversation = WCF.Conversation.EditorHandler.extend({
215-
/**
216-
* list of available labels
217-
* @var array<object>
218-
*/
219-
_availableLabels: null,
220-
221119
/**
222120
* @see WCF.Conversation.EditorHandler.init()
223121
*
224122
* @param array<object> availableLabels
225123
*/
226124
init: function(availableLabels) {
227-
this._availableLabels = availableLabels || [ ];
228-
229-
this._super();
230-
},
231-
232-
/**
233-
* @see WCF.Conversation.EditorHandler.getAvailableLabels()
234-
*/
235-
getAvailableLabels: function() {
236-
return this._availableLabels;
125+
this._super(availableLabels);
237126
},
238-
239-
/**
240-
* @see WCF.Conversation.EditorHandler.update()
241-
*/
242-
update: function(conversationID, key, data) {
243-
if (!this._conversations[conversationID]) {
244-
console.debug("[WCF.Conversation.EditorHandler] Unknown conversation id '" + conversationID + "'");
245-
return;
246-
}
247-
248-
var container = $('.contentHeaderTitle > .contentHeaderMetaData');
249-
250-
switch (key) {
251-
case 'close':
252-
$(`<li>
253-
<fa-icon size="16" name="lock"></fa-icon>
254-
${WCF.Language.get('wcf.global.state.closed')}
255-
</li>`).appendTo(container);
256-
257-
this._attributes[conversationID].isClosed = 1;
258-
break;
259-
260-
case 'labelIDs':
261-
var labelList = container.find('.labelList');
262-
if (!data.length) {
263-
labelList.parent().remove();
264-
}
265-
else {
266-
var availableLabels = this.getAvailableLabels();
267-
268-
if (!labelList.length) {
269-
labelList = $(`<li>
270-
<fa-icon size="16" name="tags"></fa-icon>
271-
<ul class="labelList"></ul>
272-
</li>`).prependTo(container);
273-
labelList = labelList.children('ul');
274-
}
275-
276-
var html = '';
277-
data.forEach(function(labelId) {
278-
availableLabels.forEach(function(label) {
279-
if (label.labelID == labelId) {
280-
html += '<li><span class="label badge' + (label.cssClassName ? ' ' + label.cssClassName : '') + '">' + label.label + '</span></li>';
281-
}
282-
});
283-
});
284-
285-
labelList[0].innerHTML = html;
286-
}
287-
break;
288-
289-
case 'open':
290-
container.find('.jsIconLock').parent().remove();
291-
292-
this._attributes[conversationID].isClosed = 0;
293-
break;
294-
}
295-
}
296127
});
297128

298129
/**

files/js/WoltLabSuite/Core/Conversation/Clipboard.js

Lines changed: 8 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)