no issue
- Social account(twitter/facebook) values in general settings were only updated to settings upstream on focus out
- Uses `notifyPropertyChange` to avoid multiple `.set()` workarounds
Co-authored-by: Kevin Ansfield <kevin@lookingsideways.co.uk>
closes https://github.com/TryGhost/Ghost/issues/12014
- `startDateLabel` was never populated after refactoring the members chart to use the members stats service
- use the first date that's returned as part of the members stats days array so that we can account for any potential time period being selected
Co-authored-by: Kevin Ansfield <kevin@lookingsideways.co.uk>
no issue
On newer iOS devices with no home button, we have this bar at the bottom of the screen instead. When installed as a PWA, the mobile nav sits under that bar. I'm unsure how much Ghost is used this way, but this is a small QOL improvement for those who do.
This PR uses the native `env` CSS custom properties Safari has to add a propriety amount of `padding-bottom` to the mobile nav bar, and also the global container to prevent anything in the iframe from being hidden by the taller nav bar. If the device does not support these `env` vars, is has no adverse affect. In order for this to work, the `<meta name="viewport" />` tag needs `viewport-fit=cover` added to it.
MDN docs for reference: https://developer.mozilla.org/en-US/docs/Web/CSS/env
closes https://github.com/TryGhost/Ghost/issues/11786
`GhTokenInput` uses `PowerSelect` component of `ember-power-select` internally in `app/components/gh-token-input/select-multiple`.
When you open that component, [you can find](d36f38f39e/addon/components/power-select.ts (L262-L278)) that it calls `stopImmediatePropagation` when ctrl/cmd or meta key is down.
```js
handleTriggerKeydown(e: KeyboardEvent) {
if (this.args.onKeydown && this.args.onKeydown(this.storedAPI, e) === false) {
e.stopImmediatePropagation();
return;
}
if (e.ctrlKey || e.metaKey) {
e.stopImmediatePropagation();
return;
}
if ((e.keyCode >= 48 && e.keyCode <= 90) || isNumpadKeyEvent(e)) { // Keys 0-9, a-z or numpad keys
(this.triggerTypingTask as unknown as Performable).perform(e);
} else if (e.keyCode === 32) { // Space
this._handleKeySpace(this.storedAPI, e);
} else {
return this._routeKeydown(this.storedAPI, e);
}
}
```
Because of that, I had to dispatch event directly to the root of the Ghost admin app.
refs https://github.com/TryGhost/Ghost-Admin/pull/1701
- swap `ember-cli-uglify` for `ember-cli-terser` to match ember-cli 3.21.1's generated package.json
- swap `broccoli-uglify-sourcemap` for `broccoli-terser-sourcemap` used manually in our production builds to keep dependencies the same across custom and built-in build artefacts
no issue
depends on https://github.com/TryGhost/Ghost/pull/12211
- Other than dev flag, the Portal is now also enabled behind a dedicated `portal` flag
- Shows/hides Portal settings based on dev or Portal flag
refs https://github.com/TryGhost/Ghost-Admin/pull/1701
- swap `ember-cli-uglify` for `ember-cli-terser` to match ember-cli 3.21.1's generated package.json
- swap `broccoli-uglify-sourcemap` for `broccoli-terser-sourcemap` used manually in our production builds to keep dependencies the same across custom and built-in build artefacts
- we recently had an issue where a dependency update broke the
release process because it was building in production mode, but our CI
never ran in this mode and we missed it
- this commit adds a test to run in prod mode so hopefully we catch it
next time