mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-03 03:55:26 +03:00
7b3712a15b
refs https://github.com/TryGhost/Team/issues/2393 - During boot and loading the active theme, we now cache the result of the gscan validation. Cache configuration can happen in `adapters.cache.gscan` - We now also return non-fatal errors when activating or adding a theme. - When the `themeErrorsNotification` feature flag is on, we fetch the active theme (which includes the validation information) when loading admin - If the currently active theme has errors, we show an error notification that can open the error modal - Added a new endpoint: `/ghost/api/admin/themes/active/` that returns the result of the last gscan validation of the active theme. If no cache is available, it will run a new gscan validation. - Added new permissions for the active action/endpoint (author, editor, administrator)
53 lines
1.7 KiB
JavaScript
53 lines
1.7 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.errors
|
|
});
|
|
}
|
|
|
|
get hasThemeErrors() {
|
|
return this.themeManagement.activeTheme && this.themeManagement.activeTheme.errors.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};
|
|
}
|
|
}
|