2018-08-16 22:30:59 +00:00
|
|
|
/*
|
2024-01-13 19:35:22 +00:00
|
|
|
* Copyright (c) 2010-2024 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.
|
|
|
|
*
|
2024-01-13 19:35:22 +00:00
|
|
|
* Change Date: 2028-01-13
|
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/Language',
|
|
|
|
'../Helper',
|
|
|
|
'../MessageType',
|
2024-01-13 19:35:22 +00:00
|
|
|
], function (Language, Helper, MessageType) {
|
2018-08-16 22:30:59 +00:00
|
|
|
'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
|
|
|
|
2024-01-13 19:35:22 +00:00
|
|
|
const button = document.createElement('button')
|
|
|
|
button.classList.add('button', 'small', 'jsTooltip', 'hideIcon')
|
|
|
|
button.setAttribute('title', Language.get('wcf.global.button.hide'))
|
|
|
|
|
|
|
|
button.addEventListener('click', () => {
|
|
|
|
button.closest('.chatMessageBoundary').hidden = true
|
|
|
|
})
|
|
|
|
|
2023-11-04 16:18:57 +00:00
|
|
|
const icon = document.createElement('fa-icon')
|
|
|
|
icon.setIcon('xmark')
|
2024-01-13 19:35:22 +00:00
|
|
|
|
|
|
|
button.append(icon)
|
2018-08-16 22:30:59 +00:00
|
|
|
|
|
|
|
const elem = fragment.querySelector(
|
|
|
|
'.chatMessage .containerList > li:first-child .containerHeadline'
|
|
|
|
)
|
2024-01-13 19:35:22 +00:00
|
|
|
elem.insertBefore(button, elem.firstChild)
|
2018-08-16 22:30:59 +00:00
|
|
|
|
|
|
|
return fragment
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return Info
|
|
|
|
})
|