1
0
Fork 0
discourse-custom-wizard-unl.../assets/javascripts/discourse/mixins/notice-message.js.es6

65 Zeilen
1,5 KiB
Text

2021-11-01 14:52:29 +01:00
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);
}
}
}
});