59 lines
1.6 KiB
JavaScript
59 lines
1.6 KiB
JavaScript
import { on } from "ember-addons/ember-computed-decorators";
|
|
|
|
export default Ember.Component.extend({
|
|
classNameBindings: [':modal', ':d-modal', 'modalClass', 'modalStyle'],
|
|
attributeBindings: ['data-keyboard'],
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
|
|
// If we need to render a second modal for any reason, we can't
|
|
// use `elementId`
|
|
if (this.get('modalStyle') !== 'inline-modal') {
|
|
this.set('elementId', 'discourse-modal');
|
|
this.set('modalStyle', 'fixed-modal');
|
|
}
|
|
},
|
|
|
|
// We handle ESC ourselves
|
|
'data-keyboard': 'false',
|
|
|
|
@on("didInsertElement")
|
|
setUp() {
|
|
$('html').on('keydown.discourse-modal', e => {
|
|
if (e.which === 27) {
|
|
Em.run.next(() => $('.modal-header a.close').click());
|
|
}
|
|
});
|
|
|
|
this.appEvents.on('modal:body-shown', data => {
|
|
if (this.isDestroying || this.isDestroyed) { return; }
|
|
if (data.fixed) {
|
|
this.$().removeClass('hidden');
|
|
}
|
|
|
|
if (data.title) {
|
|
this.set('title', I18n.t(data.title));
|
|
} else if (data.rawTitle) {
|
|
this.set('title', data.rawTitle);
|
|
}
|
|
});
|
|
},
|
|
|
|
@on("willDestroyElement")
|
|
cleanUp() {
|
|
$('html').off('keydown.discourse-modal');
|
|
},
|
|
|
|
click(e) {
|
|
const $target = $(e.target);
|
|
if ($target.hasClass("modal-middle-container") ||
|
|
$target.hasClass("modal-outer-container")) {
|
|
// Delegate click to modal close if clicked outside.
|
|
// We do this because some CSS of ours seems to cover
|
|
// the backdrop and makes it unclickable.
|
|
$('.modal-header a.close').click();
|
|
}
|
|
}
|
|
});
|