@@ -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 */
1315WCF . 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 */
214118WCF . 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/**
0 commit comments