no issue
We weren't correctly clearing state for the "display modal" booleans when leaving screens. This meant that it was possible to end up in a state where where every time you access a screen you get the unsaved changes modal
no issue
We were in a part-way state where some touched files had been (sometimes partially) migrated to explicit `this`. The codemod that was available has now fixed the formatting issues it had so it was a good time to run it.
https://github.com/ember-codemods/ember-no-implicit-this-codemod
- part of the migration path for https://github.com/emberjs/rfcs/pull/308
- starts to make template resolution rules more explicit
- `<MyComponent />` - always a component
- `{{my-component}}` - component or helper (components _must_ have a `-`. This style of component will go away once fully migrated to angle bracket components)
- `{{value}}` - a helper or local template variable
- `{{this.value}}` - reference to a property on the backing context (either a controller or a component JS file)
no issue
- the member count is automatically calculated via the length of the live members array so there's no need to manually decrement it - if we do manually decrement then the count is off by one because the auto calculation runs to get the new value before the manual decrement
no issue
- keep a scratch model on the tag/member controllers rather than inside of the form components
- allows the controller's `save` task to transfer scratch values to real values before saving
- means that pressing Cmd+S whilst a field is still focused will save the expected value rather than the old value avoiding unsaved changes modals when trying to leave the screen when you think you've already saved
- fixed route and url not changing after saving a new member
- fixed error when clicking delete tag button
- cleaned up unused `showDeleteTagModal` actions
no issue
- removed unused `isViewingSubview` property
- replaced `hasMultipleSubscriptions` CP with the `gt` CP macro
- fixed indentation in the template
no issue
The tag and member screens share the same underlying UI/UX patterns but were using different code patterns. This brings both in line so that we have consistent code patterns that can be re-used for other screens.
- fixed cleanup of new tags by adding the `deactivate` hook to the `tag` route
- updated `member` and `member.new` route/controller setup to match tag route/controller setup
- added `save` action to member controller so that Ctrl/Cmd+S works on member screen
- updated tag route/controller to utilise the same instant display w/background refresh when accessing the tag details screen
- completed transition of non-component tag/members templates over to angle bracket component syntax
refs https://github.com/TryGhost/Members/pull/107
- Added 'cancel at period end' logic to members subscription details
- Added stripe subscription link in subscriptions details
no issue
- don't show "Delete tag" button when we're displaying a new/unsaved tag
- refactor the `_deleteTag()` method to be more explicit and remove handling that is no longer required since the tag screen is not nested in the tags screen
- revised the condition in `showUnsavedChangesModal()` method so that it's body doesn't fire twice when leaving the `tag` or `tag.new` route
- revised the `showUnsavedChangesModal()` method body to look at the number of changed properties on the tag rather than relying on `tag.hasChangedAttributes` which is always `true` for new models
no issue
- removed unused `<GhTagsManagementContainer>` component and related `isMobile` CPs
- un-nested `tag` and `tag.new` routes
- nested routes in Ember are used for nested UI but these are both separate screens
- removes usage of `selectedTag` property in favour of using Ember's built-in model handling
- removed unnecessary `tags/new` controller
- sets up `tag.new` route which extends the `tag` route to avoid duplicate code
refs: https://github.com/TryGhost/Ghost/pull/11409
- Added a new UI for a second set of navigation links
- This should support most concepts of nav, e.g. left and right, or header and footer
- This PR mostly updates the design and nav components to cope with a second set of nav
no issue
- When an email has a valid gravatar handle it displays an image instead of initials for the member
- Introduces new {{gravatar}} helper which accepts an email as parameter and size/d as named parameters. The output is a URL to gravatar image
- Refactored usage of "splattribute" to explicit property. There was a need to duplicate class property usage in the component and doing that through splatttibute feature is unsafe as pointed ou here - https://github.com/TryGhost/Ghost-Admin/pull/1417#discussion_r351837584
no refs.
Issue was that the ratio of email mobile preview UI was completely off on higher screen resolutions.
- set the email mobile preview UI to fixed size
no issue
- There was a need to make the experience of adding a first member(s) as frictionless as possible, which lead to adding some actionable controls to the "no-members" screen.
- Adds the ability to make yourself a member
- Adds the ability to import CSV member
- Link to add a member manually
no issue
- The test is failing only when run purely from the console if run from the browser window it alway succeeds
- Commented out intended condition and left the tricky one out for future review
no issue
- We have a need to create a member manually, this changeset solves this problem.
- Added new member button to the member's screen
- Needed to be able to perform add member action
- Fixed inconsistent `createAt` naming. All models use consistent `createdAtUTC`, fixed it up so that members model follows the same pattern. If we want to change this pattern should probably happen for all models at once
- Fixed member avatar when creating a new member. If the values are completely empty the screen ends up being filled with empty space. Added some dummy initials which are recalculated once the member enters the name or an email
- Refactored DS naming for consistency. Nowhere else in the codebase 'DS' name is ever used, made this consistent
- Added missing validations in members form
- Simplified if conditions in the member list template. When using the if/esle statements unnecessary new-line symbols were inserted which made it hard to test. Also by using computed property view is much cleaner
- Updated member's model default value for `subscribed` to "true". It is turned on by default in the model layer on the backend (ref: https://github.com/TryGhost/Ghost/blob/3.1.0/core/server/data/schema/schema.js#L330), this behavior is intended and should be the same on the frontend
no issue
- the members count used to disable the email toggle and shown in the confirm modal was incorrect as it didn't take into account subscribed vs non-subscribed members
- adjusts the filter in the count query to only fetch subscribed members
no issue
- adds a `.retry()` method to the email model+adapter
- adds a retry email task to the publishmenu that follows the same retry-then-poll behaviour as the regular email confirmation
- show a retry button in the confirm email modal if the original send failed
- increases max "immediate failure" poll timeout to 15sec (an 8sec retry-to-failure time has been seen locally)
no issue
- the toast notification occurs before polling for a successful email occurs so it was confusing to have different states represented in the UI simultaneously
no issue
- when confirming email send, after initial save in, poll every second for a maximum of 10 seconds and check the status of the email
- if it's `'success'` close the modal immediately
- if it's `'failure'` switch the confirm modal to an error state
- if the save fails for some other reason (validation, server error) close the modal immediately and let the normal editor error handling do it's thing
- fixed confirm modal not appearing when retrying a save after a post validation failed
- show email status in post status area
- `"and sending to x members"` when email is pending or submitting
- `"and sent to x members"` once email is fully submitted
no issue
- Mailgun makes it really difficult to find your baseUrl from their UI if you've previously sent emails on a domain
- use a dropdown with flag and region name instead to better match what you can see in their UI
refs 5fd2b7fed1
- sends `?send_email_when_published=true` query param when scheduling/publishing a post with the toggle turned on
- adds support to the posts adapter for handling the `adapterOptions` option
- updates the editor `save` task to pass through the required adapter option when a post is being published or scheduled with the toggle checked
- moves state for the email toggle into the publish menu so that we don't try to toggle the model attribute which should only be fetched from the API
- prevent `post.send_email_when_published` being sent to the API via the serializer as it's now a read-only attribute
no issue
- refactored `renderEmailPreview` into separate fetch and render functions
- grab email info from an existing email resource if it exists on the post rather than fetching a preview
- added "View email" button the the email-sent state of the newsletter settings PSM section
no issue
- changed `disabled=deliveredAction` to `disabled=mailgunError` so that it's switching on the correct property
- removed all references to the unused `deliveredAction` property
no issue
- removed unnecessary scratch value handling for a non-model property
- use [`oneWay`](https://api.emberjs.com/ember/release/functions/@ember%2Fobject%2Fcomputed/oneWay) to bind the logged in user's email address to the `testEmailAddress` property on the component - this allows for the default value to always be the logged in users email but changing the property value only changes the value on the component, not upstream on the user model
- use default two-way binding of the `<Input>` helper to avoid unnecessary boilerplate
- removed unnecessary usage of the `truncate` helper for the placeholder
no issue.
- updated basic typographic style of Koenig to match better with Casper 3.0
- fixed vertical spacings of paragraphs and lists
- changed color of code text to make it more theme agnostic
- refined Koenig mobile typography
no issue
- convert relative links to absolute based on the configured blog url when displaying URLs in the link toolbar and when manually setting a relative link
- converting to absolute in the editor prevents the in-memory mobiledoc getting out of sync with the server response when it converts relative urls to absolute
closes https://github.com/TryGhost/Ghost/issues/11298
The members admin API by default paginates the result and only returns upto 15 members. This change passes `limit` param to the API with `limit=all` to fetch all members in result.
no issue
- `{{gh-task-button}}` was used inside a form but didn't have a `type="button"` property which meant the browser was treating it as a submit button and triggering the save action and related animation before the field's focus-out was called resulting in a save request before the scratch value is transferred to the model
- removed the submit action from the `<form>` element to prevent any other accidental triggers before scratch values have been transferred into real model values
no issue
- `{{gh-task-button}}` was used inside a form but didn't have a `type="button"` property which meant the browser was treating it as a submit button and triggering the save action and related animation before the field's focus-out was called resulting in a save request before the scratch value is transferred to the model
- removed the submit action from the `<form>` element to prevent any other accidental triggers before scratch values have been transferred into real model values
no issue
- a route-level `save` action was set up on the `member` route which calls `controller.send('save')` but the corresponding `save` action was never set up on the controller which meant the action bubbled back up to the route creating an infinite loop
* Fixed Firefox bug for input groups
* Moved from `rem` based responsive styles to `px` based
* Fixed invisible clickable menus for member/user list
* Added responsive CSS for meembers list header
* Updated member list responsive styles
* Fix list header responsive style
no issue
Members calculation was breaking when viewed on admin without refresh after adding/deleting new members, updated to more robust calculation logic.
- seems v12.10.0 is the latest available version for bionic via nodesource ppa
- want to support a version that can be installed on our recommended stack
no issue
Previously we were just hiding the toggle for member section in case of user not being owner. This updates to hide full section in case of non-owner user which is expected behavior
no issue
- if you created a post by setting a title but did not enter anything into the editor body before trying to leave the editor you'd see an "unsaved changes" modal because the "scratch" value for the post mobiledoc is `null` but the post's real mobiledoc value is now a blank document as returned from the API
- adds a conditional reset of the `post.scratch` value after a successful save if the scratch value is blank
no issue
- Changed members description to less verbose
- Added content visibility radio options to members configuration screen
- Moved setting of default visibility to server-side
- Default visibility setting when PSM is opened before making the first request to the server
refs 80f7e0b19e
- Added visibility input in PSM to control content access level for members
- Added default post visibility in editor. To be changed (moved to server-side) once `defaultContentVisibility` is available in settings service
- Added `visibility` property to post model & mirage
no issue
The built-in slack notifications are not working as expected in terms of amount of notifications received, we switch to old manual notification script for the time being till this is sorted.
no-issue
This is causing issues since we removed the name property from member
objects. This change stops admin crashing out, but a more correct
handling of the missing name property should happen at a later point.
no-issue
This is causing issues since we removed the name property from member
objects. This change stops admin crashing out, but a more correct
handling of the missing name property should happen at a later point.
no issue
- adds `credentials: 'include'` option to `fetch()` which instructs browsers to save cookies in the POST response in cross-origin requests (default is `'same-origin'`)
no refs.
- fixes a visual bug that the checkmark icon's stroke color during the registration flow was #000. The bug was a sideeffect to the latest ember-svg-jar module update.
closes https://github.com/TryGhost/Ghost/issues/11057
- removed static "replace" configuration of posts/pages query params
- used the router service to register a `willTransition` event handler which handles conditional replaceState transition behaviour only when filters are changed whilst already on the posts/pages route
no issue
- the default "regular" url Unsplash provides is 1080px wide that does not work well for full-width image cards
- updated to grab 2000px wide images
no issue
- enables `prefixIds` svgo option to guarantee all `id` attributes are unique across svgs
- disabled `cleanupIds` option so that it doesn't interfere with id uniqueness
- fixes instagram icon background not showing
no refs.
- Applied line-height for textareas with gh-input class. Having it applied all the textarea styles to textarea.gh-input caused bug in calculating the height of post titles in Koenig.
requires https://github.com/TryGhost/Ghost/pull/11024
With the bookmark card you can present links in a much richer format, similar to Twitter cards. If the URL points to a page with right meta information it can show the page title, excerpt, author, publisher and even a preview image.
Bookmark cards can be created in two ways:
1. pasting a link as the first thing in blank paragraph - we'll check to see if we can create an embed, if we can't then we'll create a bookmark card instead
2. manually selecting the bookmark card from the (+) menu or by typing "/bookmark<kbd>Enter</kbd>" or "/bookmark {url}<kbd>Enter</kbd>" for short (you might want to do this if you want the bookmark version instead of a full embed)
Pressing <kbd>Ctrl/Cmd+Z</kbd> after pasting will convert the bookmark card back to a link if that's preferred, alternatively a URL can be pasted with <kbd>Ctrl/Cmd+Shift+V</kbd> to avoid any automatic transformation to an embed/bookmark.
---
- adds "bookmark" card that functions similarly to the embed card
- if the oembed API request returns `type: "bookmark"` then the metadata is used to create a bookmark card
no issue
- https://deprecations.emberjs.com/ember-data/v3.x/#toc_evented-api-usage
- we were using the now deprecated `didCreate` and `didUpdate` events on the post model to perform controller-specific logic each time `post.save()` was called
- moved the functionality that was attached to the hook events into a `_savePost()` function and used that anywhere we were calling `post.save()`
no issue
- according to https://github.com/renovatebot/config-help/issues/220#issuecomment-487118205 it's the _last_ matching group that takes effect when determining which `packageRules` group a dependency is put in
- adjusted the order so that explicit excludes are not required and the ember-basic-dropdown addons are correctly grouped
no issue
- grouped `ember-basic-dropdown` and related `ember-power-*` addons together
- they share a common base and are going through a major breaking change so it's easier to upgrade them together
no issue
- adds `whats-new` service that fetches the changelog from ghost.org and exposes the latest changelog entries
- trigger a background fetch of the changelog from ghost.org when first loading the admin when logged in, or after signing in
- adds a "What's new" menu item next to the user popup menu
- adds an indicator to the user menu button and what's new menu item if there are unseen changelog entries
- closing the changelog modal will update the "last seen date", clearing both indicators