2018-08-16 22:30:59 +00:00
|
|
|
/*
|
2021-02-04 22:04:35 +00:00
|
|
|
* Copyright (c) 2010-2021 Tim Düsterhus.
|
2018-08-16 22:30:59 +00:00
|
|
|
*
|
|
|
|
* Use of this software is governed by the Business Source License
|
|
|
|
* included in the LICENSE file.
|
|
|
|
*
|
2023-02-22 16:45:50 +00:00
|
|
|
* Change Date: 2027-02-22
|
2018-08-16 22:30:59 +00:00
|
|
|
*
|
|
|
|
* On the date above, in accordance with the Business Source
|
|
|
|
* License, use of this software will be governed by version 2
|
|
|
|
* or later of the General Public License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
define([
|
|
|
|
'WoltLabSuite/Core/Dom/Traverse',
|
|
|
|
'WoltLabSuite/Core/Language',
|
|
|
|
'../Helper',
|
|
|
|
'../MessageType',
|
|
|
|
], function (DomTraverse, Language, Helper, MessageType) {
|
|
|
|
'use strict'
|
|
|
|
|
|
|
|
const decorators = Symbol('decorators')
|
|
|
|
|
|
|
|
class Info extends MessageType {
|
|
|
|
constructor(...superArgs) {
|
|
|
|
super(...superArgs)
|
|
|
|
|
|
|
|
this[decorators] = new Set()
|
|
|
|
}
|
|
|
|
|
|
|
|
addDecorator(decorator) {
|
|
|
|
if (typeof decorator !== 'function') {
|
|
|
|
throw new TypeError('Supplied argument must be a function')
|
|
|
|
}
|
|
|
|
|
|
|
|
this[decorators].add(decorator)
|
|
|
|
}
|
|
|
|
|
|
|
|
getReferencedUsers(message) {
|
|
|
|
return super
|
|
|
|
.getReferencedUsers(message)
|
|
|
|
.concat([message.payload.user.userID])
|
|
|
|
}
|
|
|
|
|
|
|
|
render(message) {
|
|
|
|
const rooms = message.payload.rooms.map(function (item) {
|
|
|
|
const aug = {
|
|
|
|
lastPull: null,
|
|
|
|
lastPullHTML: null,
|
|
|
|
lastPush: null,
|
|
|
|
lastPushHTML: null,
|
|
|
|
}
|
|
|
|
|
|
|
|
if (item.lastPull) {
|
|
|
|
aug.lastPull = new Date(item.lastPull * 1000)
|
|
|
|
aug.lastPullHTML = Helper.getTimeElementHTML(aug.lastPull)
|
|
|
|
}
|
|
|
|
|
|
|
|
if (item.lastPush) {
|
|
|
|
aug.lastPush = new Date(item.lastPush * 1000)
|
|
|
|
aug.lastPushHTML = Helper.getTimeElementHTML(aug.lastPush)
|
|
|
|
}
|
|
|
|
|
|
|
|
return Object.assign({}, item, aug)
|
|
|
|
})
|
|
|
|
|
|
|
|
const payload = Helper.deepFreeze(
|
|
|
|
Array.from(this[decorators]).reduce(
|
|
|
|
(payload, decorator) => decorator(payload),
|
|
|
|
Object.assign({}, message.payload, { rooms })
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
const fragment = super.render(
|
|
|
|
new Proxy(message, {
|
|
|
|
get: function (target, property) {
|
|
|
|
if (property === 'payload') return payload
|
|
|
|
return target[property]
|
|
|
|
},
|
|
|
|
})
|
2020-11-01 16:41:19 +00:00
|
|
|
)
|
2018-08-16 22:30:59 +00:00
|
|
|
|
|
|
|
const icon = elCreate('span')
|
|
|
|
icon.classList.add('icon', 'icon16', 'fa-times', 'jsTooltip', 'hideIcon')
|
|
|
|
icon.setAttribute('title', Language.get('wcf.global.button.hide'))
|
|
|
|
icon.addEventListener('click', () =>
|
|
|
|
elHide(DomTraverse.parentBySel(icon, '.chatMessageBoundary'))
|
2020-11-01 16:41:19 +00:00
|
|
|
)
|
2018-08-16 22:30:59 +00:00
|
|
|
|
|
|
|
const elem = fragment.querySelector(
|
|
|
|
'.chatMessage .containerList > li:first-child .containerHeadline'
|
|
|
|
)
|
|
|
|
elem.insertBefore(icon, elem.firstChild)
|
|
|
|
|
|
|
|
return fragment
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return Info
|
|
|
|
})
|