65 Zeilen
1,5 KiB
Text
65 Zeilen
1,5 KiB
Text
|
import Mixin from "@ember/object/mixin";
|
||
|
import { bind, scheduleOnce } from "@ember/runloop";
|
||
|
import { cookAsync } from "discourse/lib/text";
|
||
|
import { createPopper } from "@popperjs/core";
|
||
|
|
||
|
export default Mixin.create({
|
||
|
showCookedMessage: false,
|
||
|
|
||
|
didReceiveAttrs(){
|
||
|
const message = this.notice.message;
|
||
|
cookAsync(message).then((cooked) => {
|
||
|
this.set("cookedMessage", cooked);
|
||
|
});
|
||
|
},
|
||
|
|
||
|
createMessageModal() {
|
||
|
let container = this.element.querySelector('.notice-message');
|
||
|
let modal = this.element.querySelector('.cooked-notice-message');
|
||
|
|
||
|
this._popper = createPopper(
|
||
|
container,
|
||
|
modal, {
|
||
|
strategy: "absolute",
|
||
|
placement: "bottom-start",
|
||
|
modifiers: [
|
||
|
{
|
||
|
name: "preventOverflow",
|
||
|
},
|
||
|
{
|
||
|
name: "offset",
|
||
|
options: {
|
||
|
offset: [0, 5],
|
||
|
},
|
||
|
},
|
||
|
],
|
||
|
}
|
||
|
);
|
||
|
},
|
||
|
|
||
|
didInsertElement() {
|
||
|
$(document).on("click", bind(this, this.documentClick));
|
||
|
},
|
||
|
|
||
|
willDestroyElement() {
|
||
|
$(document).off("click", bind(this, this.documentClick));
|
||
|
},
|
||
|
|
||
|
documentClick(event) {
|
||
|
if (this._state === "destroying") { return; }
|
||
|
|
||
|
if (!event.target.closest(`[data-notice-id="${this.notice.id}"] .notice-message`)) {
|
||
|
this.set('showCookedMessage', false);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
actions: {
|
||
|
toggleCookedMessage() {
|
||
|
this.toggleProperty("showCookedMessage");
|
||
|
|
||
|
if (this.showCookedMessage) {
|
||
|
scheduleOnce("afterRender", this, this.createMessageModal);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|