148 lines
3.9 KiB
JavaScript
148 lines
3.9 KiB
JavaScript
import { observes } from 'ember-addons/ember-computed-decorators';
|
|
import showModal from 'discourse/lib/show-modal';
|
|
|
|
export default Ember.Component.extend({
|
|
composerOpen: null,
|
|
info: null,
|
|
|
|
init() {
|
|
this._super();
|
|
this.set('info', Ember.Object.create());
|
|
},
|
|
|
|
_performCheckSize() {
|
|
if (!this.element || this.isDestroying || this.isDestroyed) { return; }
|
|
|
|
let info = this.get('info');
|
|
|
|
if (info.get('topicProgressExpanded')) {
|
|
|
|
info.setProperties({
|
|
renderTimeline: true,
|
|
renderAdminMenuButton: true
|
|
});
|
|
|
|
} else {
|
|
|
|
let renderTimeline = !this.site.mobileView;
|
|
|
|
if (renderTimeline) {
|
|
|
|
const width = $(window).width();
|
|
let height = $(window).height();
|
|
|
|
if (this.get('composerOpen')) {
|
|
height -= $('#reply-control').height();
|
|
}
|
|
|
|
renderTimeline = width > 960 && height > 520;
|
|
}
|
|
|
|
info.setProperties({
|
|
renderTimeline,
|
|
renderAdminMenuButton: !renderTimeline
|
|
});
|
|
}
|
|
},
|
|
|
|
_checkSize() {
|
|
Ember.run.scheduleOnce('afterRender', this, this._performCheckSize);
|
|
},
|
|
|
|
// we need to store this so topic progress has something to init with
|
|
_topicScrolled(event) {
|
|
this.set('info.prevEvent', event);
|
|
},
|
|
|
|
@observes('info.topicProgressExpanded')
|
|
_expanded() {
|
|
if (this.get('info.topicProgressExpanded')) {
|
|
$(window).on('click.hide-fullscreen', (e) => {
|
|
let $target = $(e.target);
|
|
let $parents = $target.parents();
|
|
if ( !$target.is('.widget-button') &&
|
|
!$parents.is('.widget-button') &&
|
|
!$parents.is('.dropdown-menu') &&
|
|
(
|
|
$target.is('.topic-timeline') ||
|
|
!$parents.is('#topic-progress-wrapper')
|
|
)
|
|
) {
|
|
this._collapseFullscreen();
|
|
}
|
|
});
|
|
} else {
|
|
$(window).off('click.hide-fullscreen');
|
|
}
|
|
this._checkSize();
|
|
},
|
|
|
|
composerOpened() {
|
|
this.set('composerOpen', true);
|
|
// we need to do the check after animation is done
|
|
Ember.run.later(() => this._checkSize(), 500);
|
|
},
|
|
|
|
composerClosed() {
|
|
this.set('composerOpen', false);
|
|
this._checkSize();
|
|
},
|
|
|
|
_collapseFullscreen() {
|
|
if (this.get('info.topicProgressExpanded')) {
|
|
$('.timeline-fullscreen').removeClass('show');
|
|
setTimeout(() => {
|
|
this.set('info.topicProgressExpanded', false);
|
|
this._checkSize();
|
|
},500);
|
|
}
|
|
},
|
|
|
|
keyboardTrigger(e) {
|
|
if (e.type === "jump") {
|
|
const controller = showModal('jump-to-post');
|
|
controller.setProperties({
|
|
topic: this.get('topic'),
|
|
postNumber: 1,
|
|
jumpToIndex: this.attrs.jumpToIndex
|
|
});
|
|
}
|
|
},
|
|
|
|
didInsertElement() {
|
|
this._super();
|
|
|
|
this.appEvents
|
|
.on('topic:current-post-scrolled', this, this._topicScrolled)
|
|
.on('topic:jump-to-post', this, this._collapseFullscreen)
|
|
.on('topic:keyboard-trigger', this, this.keyboardTrigger);
|
|
|
|
if (!this.site.mobileView) {
|
|
$(window).on('resize.discourse-topic-navigation', () => this._checkSize());
|
|
this.appEvents.on('composer:will-open', this, this.composerOpened);
|
|
this.appEvents.on('composer:will-close', this, this.composerClosed);
|
|
$('#reply-control').on('div-resized.discourse-topic-navigation', () => this._checkSize());
|
|
}
|
|
|
|
this._checkSize();
|
|
},
|
|
|
|
willDestroyElement() {
|
|
this._super();
|
|
|
|
this.appEvents
|
|
.off('topic:current-post-scrolled', this, this._topicScrolled)
|
|
.off('topic:jump-to-post', this, this._collapseFullscreen)
|
|
.off('topic:keyboard-trigger', this, this.keyboardTrigger);
|
|
|
|
$(window).off('click.hide-fullscreen');
|
|
|
|
if (!this.site.mobileView) {
|
|
$(window).off('resize.discourse-topic-navigation');
|
|
this.appEvents.off('composer:will-open', this, this.composerOpened);
|
|
this.appEvents.off('composer:will-close', this, this.composerClosed);
|
|
$('#reply-control').off('div-resized.discourse-topic-navigation');
|
|
}
|
|
}
|
|
});
|