mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DRY up header height calculation
This commit is contained in:
parent
a501947d67
commit
b3a930f2ed
@ -1,4 +1,5 @@
|
|||||||
import { default as computed, on, observes } from 'ember-addons/ember-computed-decorators';
|
import { default as computed, on, observes } from 'ember-addons/ember-computed-decorators';
|
||||||
|
import { headerHeight } from 'discourse/views/header';
|
||||||
|
|
||||||
const PANEL_BODY_MARGIN = 30;
|
const PANEL_BODY_MARGIN = 30;
|
||||||
const mutationSupport = !!window['MutationObserver'];
|
const mutationSupport = !!window['MutationObserver'];
|
||||||
@ -46,11 +47,7 @@ export default Ember.Component.extend({
|
|||||||
$('body').addClass('drop-down-visible');
|
$('body').addClass('drop-down-visible');
|
||||||
} else {
|
} else {
|
||||||
$panelBody.height('auto');
|
$panelBody.height('auto');
|
||||||
const $header = $('header.d-header');
|
this.$().css({ left: "auto", top: headerHeight() + "px" });
|
||||||
const headerOffset = $header.offset();
|
|
||||||
const headerOffsetTop = (headerOffset) ? headerOffset.top : 0;
|
|
||||||
const headerHeight = parseInt($header.height() + headerOffsetTop - $window.scrollTop() + 3);
|
|
||||||
this.$().css({ left: "auto", top: headerHeight + "px" });
|
|
||||||
$('body').removeClass('drop-down-visible');
|
$('body').removeClass('drop-down-visible');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import avatarTemplate from 'discourse/lib/avatar-template';
|
|||||||
import positioningWorkaround from 'discourse/lib/safari-hacks';
|
import positioningWorkaround from 'discourse/lib/safari-hacks';
|
||||||
import debounce from 'discourse/lib/debounce';
|
import debounce from 'discourse/lib/debounce';
|
||||||
import { linkSeenMentions, fetchUnseenMentions } from 'discourse/lib/link-mentions';
|
import { linkSeenMentions, fetchUnseenMentions } from 'discourse/lib/link-mentions';
|
||||||
|
import { headerHeight } from 'discourse/views/header';
|
||||||
|
|
||||||
const ComposerView = Ember.View.extend(Ember.Evented, {
|
const ComposerView = Ember.View.extend(Ember.Evented, {
|
||||||
_lastKeyTimeout: null,
|
_lastKeyTimeout: null,
|
||||||
@ -124,11 +125,7 @@ const ComposerView = Ember.View.extend(Ember.Evented, {
|
|||||||
|
|
||||||
$replyControl.DivResizer({
|
$replyControl.DivResizer({
|
||||||
maxHeight(winHeight) {
|
maxHeight(winHeight) {
|
||||||
const $header = $('header.d-header');
|
return winHeight - headerHeight();
|
||||||
const headerOffset = $header.offset();
|
|
||||||
const headerOffsetTop = (headerOffset) ? headerOffset.top : 0;
|
|
||||||
const headerHeight = parseInt($header.height() + headerOffsetTop - $(window).scrollTop() + 5);
|
|
||||||
return winHeight - headerHeight;
|
|
||||||
},
|
},
|
||||||
resize: runResize,
|
resize: runResize,
|
||||||
onDrag: (sizePx) => this.movePanels(sizePx)
|
onDrag: (sizePx) => this.movePanels(sizePx)
|
||||||
|
@ -1,52 +1,55 @@
|
|||||||
|
import { on } from 'ember-addons/ember-computed-decorators';
|
||||||
|
|
||||||
export default Ember.View.extend({
|
export default Ember.View.extend({
|
||||||
tagName: 'header',
|
tagName: 'header',
|
||||||
classNames: ['d-header', 'clearfix'],
|
classNames: ['d-header', 'clearfix'],
|
||||||
classNameBindings: ['editingTopic'],
|
classNameBindings: ['editingTopic'],
|
||||||
templateName: 'header',
|
templateName: 'header',
|
||||||
|
|
||||||
examineDockHeader: function() {
|
examineDockHeader() {
|
||||||
var headerView = this;
|
|
||||||
|
|
||||||
// Check the dock after the current run loop. While rendering,
|
// Check the dock after the current run loop. While rendering,
|
||||||
// it's much slower to calculate `outlet.offset()`
|
// it's much slower to calculate `outlet.offset()`
|
||||||
Em.run.next(function () {
|
Ember.run.next(() => {
|
||||||
if (!headerView.docAt) {
|
if (!this.docAt) {
|
||||||
var outlet = $('#main-outlet');
|
const outlet = $('#main-outlet');
|
||||||
if (!(outlet && outlet.length === 1)) return;
|
if (!(outlet && outlet.length === 1)) return;
|
||||||
headerView.docAt = outlet.offset().top;
|
this.docAt = outlet.offset().top;
|
||||||
}
|
}
|
||||||
|
|
||||||
var offset = window.pageYOffset || $('html').scrollTop();
|
const offset = window.pageYOffset || $('html').scrollTop();
|
||||||
if (offset >= headerView.docAt) {
|
if (offset >= this.docAt) {
|
||||||
if (!headerView.dockedHeader) {
|
if (!this.dockedHeader) {
|
||||||
$('body').addClass('docked');
|
$('body').addClass('docked');
|
||||||
headerView.dockedHeader = true;
|
this.dockedHeader = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (headerView.dockedHeader) {
|
if (this.dockedHeader) {
|
||||||
$('body').removeClass('docked');
|
$('body').removeClass('docked');
|
||||||
headerView.dockedHeader = false;
|
this.dockedHeader = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
_tearDown: function() {
|
@on('willDestroyElement')
|
||||||
|
_tearDown() {
|
||||||
$(window).unbind('scroll.discourse-dock');
|
$(window).unbind('scroll.discourse-dock');
|
||||||
$(document).unbind('touchmove.discourse-dock');
|
$(document).unbind('touchmove.discourse-dock');
|
||||||
this.$('a.unread-private-messages, a.unread-notifications, a[data-notifications]').off('click.notifications');
|
this.$('a.unread-private-messages, a.unread-notifications, a[data-notifications]').off('click.notifications');
|
||||||
$('body').off('keydown.header');
|
$('body').off('keydown.header');
|
||||||
}.on('willDestroyElement'),
|
},
|
||||||
|
|
||||||
_setup: function() {
|
@on('didInsertElement')
|
||||||
const self = this;
|
_setup() {
|
||||||
|
$(window).bind('scroll.discourse-dock', () => this.examineDockHeader());
|
||||||
|
$(document).bind('touchmove.discourse-dock', () => this.examineDockHeader());
|
||||||
|
this.examineDockHeader();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
$(window).bind('scroll.discourse-dock', function() {
|
export function headerHeight() {
|
||||||
self.examineDockHeader();
|
const $header = $('header.d-header');
|
||||||
});
|
const headerOffset = $header.offset();
|
||||||
$(document).bind('touchmove.discourse-dock', function() {
|
const headerOffsetTop = (headerOffset) ? headerOffset.top : 0;
|
||||||
self.examineDockHeader();
|
return parseInt($header.height() + headerOffsetTop - $(window).scrollTop() + 5);
|
||||||
});
|
}
|
||||||
self.examineDockHeader();
|
|
||||||
}.on('didInsertElement')
|
|
||||||
});
|
|
||||||
|
@ -73,6 +73,7 @@
|
|||||||
//= require ./discourse/components/notifications-button
|
//= require ./discourse/components/notifications-button
|
||||||
//= require ./discourse/components/topic-notifications-button
|
//= require ./discourse/components/topic-notifications-button
|
||||||
//= require ./discourse/lib/link-mentions
|
//= require ./discourse/lib/link-mentions
|
||||||
|
//= require ./discourse/views/header
|
||||||
//= require ./discourse/views/composer
|
//= require ./discourse/views/composer
|
||||||
//= require ./discourse/lib/show-modal
|
//= require ./discourse/lib/show-modal
|
||||||
//= require ./discourse/lib/screen-track
|
//= require ./discourse/lib/screen-track
|
||||||
|
Loading…
Reference in New Issue
Block a user