mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-22 18:31:57 +03:00
26d05aecd8
no issue - the Ember Data `Model` class has an `errors` property by default that is set to a `DS.Errors` instance but the Theme model was overriding that with an `errors` attr - it hasn't been an issue so far but causes problems in Ember/Ember Data 3.28.x because that tries to use the `DS.Errors` interface on the overridden attr property which then throws errors because the `errors` attr doesn't have the right methods
53 lines
1.8 KiB
JavaScript
53 lines
1.8 KiB
JavaScript
import Component from '@ember/component';
|
|
import ThemeErrorsModal from '../modals/design/theme-errors';
|
|
import calculatePosition from 'ember-basic-dropdown/utils/calculate-position';
|
|
import classic from 'ember-classic-decorator';
|
|
import {action} from '@ember/object';
|
|
import {and, match} from '@ember/object/computed';
|
|
import {inject} from 'ghost-admin/decorators/inject';
|
|
import {inject as service} from '@ember/service';
|
|
|
|
@classic
|
|
export default class Footer extends Component {
|
|
@service session;
|
|
@service router;
|
|
@service whatsNew;
|
|
@service feature;
|
|
@service modals;
|
|
@service themeManagement;
|
|
|
|
@inject config;
|
|
|
|
@and('config.clientExtensions.dropdown', 'session.user.isOwnerOnly')
|
|
showDropdownExtension;
|
|
|
|
@match('router.currentRouteName', /^settings/)
|
|
isSettingsRoute;
|
|
|
|
@action
|
|
openThemeErrors() {
|
|
this.advancedModal = this.modals.open(ThemeErrorsModal, {
|
|
title: 'Theme errors',
|
|
canActivate: false,
|
|
// Warnings will only be set for developers, otherwise it will always be empty
|
|
warnings: this.themeManagement.activeTheme.warnings,
|
|
errors: this.themeManagement.activeTheme.gscanErrors
|
|
});
|
|
}
|
|
|
|
get hasThemeErrors() {
|
|
return this.themeManagement.activeTheme && this.themeManagement.activeTheme.gscanErrors.length;
|
|
}
|
|
|
|
// equivalent to "left: auto; right: -20px"
|
|
userDropdownPosition(trigger, dropdown) {
|
|
let {horizontalPosition, verticalPosition, style} = calculatePosition(...arguments);
|
|
let {width: dropdownWidth} = dropdown.firstElementChild.getBoundingClientRect();
|
|
|
|
style.right += (dropdownWidth - 20);
|
|
style['z-index'] = '1100';
|
|
|
|
return {horizontalPosition, verticalPosition, style};
|
|
}
|
|
}
|