Commit Graph

2725 Commits

Author SHA1 Message Date
Austin Burdine
13b78ae1f7 Merge pull request #91 from starcwl/master
fix meta-data problem, which will cause SEO of post fail.
2016-06-27 04:32:19 -06:00
starcwl
541c8e67ad fix meta-data problem, which will cause SEO of post fail.
no issue
- fixed focus-out action calls in post-settings-menu meta fields which miss arguments metaDescriptionScratch and metaTitleScratch.
2016-06-27 18:10:41 +08:00
Austin Burdine
22477ef71b deps: bower@1.7.9
refs TryGhost/Ghost#7039
- add bower dependency to client
2016-06-26 08:00:51 -06:00
Austin Burdine
3b294f18d8 Add greenkeeper branch ignores to travis
This prevents greenkeeper branches from being built as they will always by run in the PR.
2016-06-22 10:31:11 -06:00
greenkeeperio-bot
ec07d0bd0b chore(package): update loader.js to version 4.0.10
https://greenkeeper.io/
2016-06-22 03:11:01 +01:00
greenkeeperio-bot
709ac14ccf chore(package): update grunt-jscs to version 3.0.1
https://greenkeeper.io/
2016-06-21 22:22:13 +01:00
greenkeeperio-bot
24e8f61e76 chore(package): update glob to version 7.0.5
https://greenkeeper.io/
2016-06-21 02:15:55 +01:00
Kevin Ansfield
df58953778 Fix un-bound HTML attributes for gh-trim-focus-input
no issue
- updates `gh-trim-focus-input` to extend from `gh-input`/`one-way-input` to get the auto-binding attribute behaviour for passed-in HTML attributes
- renames `focus` property to `shouldFocus` so that we're not overriding default DOM functions
- fixes signin page issues with missing placeholders and no autofocus
2016-06-20 15:20:25 +01:00
greenkeeperio-bot
3466b48b9d chore(package): update ember-cli to version 2.6.2
https://greenkeeper.io/
2016-06-20 10:04:17 +01:00
greenkeeperio-bot
9a432ab591 chore(package): update ember-cli-dependency-checker to version 1.3.0
https://greenkeeper.io/
2016-06-18 20:08:27 +01:00
Kevin Ansfield
5e3fafa79a Add grunt init task
refs https://github.com/TryGhost/Ghost/pull/7005
- add `grunt init` task that installs `npm` and `bower` dependencies
- allows Ghost to call this task via subgrunt avoiding the need for a global bower install
2016-06-18 18:33:46 +01:00
Kevin Ansfield
7c2034df21 Merge pull request #46 from acburdine/one-way-inputs
Convert inputs to one way components
2016-06-18 16:26:17 +01:00
Austin Burdine
34ccd12111 Merge pull request #76 from kevinansfield/post-comparable
Use Ember.Comparable mixin to sort posts
2016-06-18 09:26:26 -04:00
Austin Burdine
6ee77a712a convert inputs to one-way inputs
no issue
- moves all inputs to use the data-down-actions-up component paradigm
2016-06-18 07:44:23 -04:00
greenkeeperio-bot
f0ddd0402e chore(package): update broccoli-asset-rev to version 2.4.3
https://greenkeeper.io/
2016-06-18 06:08:23 +01:00
greenkeeperio-bot
01cffa55a0 chore(package): update ember-cli-deprecation-workflow to version 0.2.3
https://greenkeeper.io/
2016-06-17 15:48:25 +01:00
Kevin Ansfield
a109c1c3db Use Ember.Comparable mixin to sort posts
closes https://github.com/TryGhost/Ghost/issues/7002
- move sorting logic out of the controller and into the Post model

This is a quick attempt at implementing the refactoring referenced in https://github.com/TryGhost/Ghost/issues/7002. The client-side sorting is working but we still have the problem of scheduled posts not appearing in the list until you scroll to the very first published post because the server is returning posts in the wrong order.
2016-06-17 11:33:11 +01:00
Aileen Nowak
d90ed28940 Renaming date properties to contain UTC
closes TryGhost/Ghost#6985

- renames all date properties to end with `UTC`:
	- `publishedAt` in `post` model
	- `createdAt` in `post`, `role`, `subscriber`, `tag` and `user` model
	- `updatedAt` in `post`, `role`, `subscriber`, `tag` and `user` model
	- `unsubscribedAt` in `subscriber` model
	- `lastLogin` in `user` model
- adds `attrs` transforms in matching serializers `post`, `tag` and `user`
- new serializers files for `subscribers` and `role` to add `attr` transforms
- adds unit tests for all serializers
- use two variables in `post-settings-menu` controller to handle blog-timezone adjusted date as well as UTC date
2016-06-17 11:09:21 +02:00
greenkeeperio-bot
71c78064fd chore(package): update ember-cli-jshint to version 1.0.4
https://greenkeeper.io/
2016-06-17 00:11:39 +01:00
greenkeeperio-bot
fcd2e22259 chore(package): update glob to version 7.0.4
https://greenkeeper.io/
2016-06-16 18:40:52 +01:00
greenkeeperio-bot
06fca08006 chore(package): update ember-suave to version 3.0.1
https://greenkeeper.io/
2016-06-16 17:05:11 +01:00
greenkeeperio-bot
8791385430 chore(package): update ember-cli-mocha to version 0.10.4
https://greenkeeper.io/
2016-06-15 21:28:33 +01:00
greenkeeperio-bot
d2f35ffb10 chore(package): update ember-data to version 2.6.1
https://greenkeeper.io/
2016-06-15 20:01:50 +01:00
Kevin Ansfield
2f7f7dd53b Version bump to 0.9.0-beta.2 2016-06-15 13:22:39 +01:00
greenkeeperio-bot
608e42b3e9 chore(package): update ember-power-select to version 0.10.11
https://greenkeeper.io/
2016-06-14 22:24:26 +01:00
greenkeeperio-bot
be0bd9e1b6 chore(package): update loader.js to version 4.0.9
https://greenkeeper.io/
2016-06-14 21:54:19 +01:00
greenkeeperio-bot
00becad6a9 chore(package): update ember-one-way-controls to version 0.8.3
https://greenkeeper.io/
2016-06-14 14:29:14 +01:00
Kevin Ansfield
ebb36a317e Merge pull request #25 from AileenCGN/scheduler-ui
Scheduler UI
2016-06-14 13:06:00 +01:00
Austin Burdine
8b07f934e3 internal-tags style followup
no issue
- improves internal-tags display on content page
- fix typo in settings/labs
2016-06-13 09:40:16 -06:00
Aileen Nowak
9a28e5d7d5 Scheduler UI
refs TryGhost/Ghost#6413 and TryGhost/Ghost#6870

needs TryGhost/Ghost#6861

- **Post Settings Menu (PSM)**:'Publish Date' input accepts a date from now, min. 2 minutes to allow scheduler processing on the server. Also, there will always be some delay between typing the date and clicking on the 'Schedule Post' button. If the user types a future date for an already published post, the date will be reseted and he sees the message, that the post needs to be unpublished first. Once, the date is accepted, the label will change to 'Scheduled Date'.

- adds a CP 'timeScheduled' to post model, which will return `true` if the publish time is currently in the future.

- **Changes to the button flow in editor**:
- if the the CP `timeScheduled` returns true, a different drop-down-menu will be shown: 'Schedule Post' replaces 'Publish Now' and 'Unschedule' replaces 'Unpublish'.

- Covering the _edge cases_, especially when a scheduled post is about to be published, while the user is in the editor.
	- First, a new CP `scheduleCountdown` will return the remaining time, when the estimated publish time is 15 minutes from now. A notification with this live-ticker is shown next to the save button. Once, we reach a 2 minutes limit, another CP `statusFreeze` will return true and causes the save button to only show `Unschedule` in a red state, until we reach the publish time
	- Once the publish time is reached, a CP `scheduledWillPublish` causes the buttons and the existing code to pretend we're already dealing with a publish post. At the moment, there's no way to make a background-fetch of the now serverside-scheduled post model from the server, so Ember doesn't know about the changed state at that time.
	- Changes in the editor, which are done during this 'status freeze'-process will be saved back correctly, once the user hits 'Update Post' after the buttons changed back. A click on 'Unpublish' will change the status back to a draft.
	- The user will get a regular 'toaster' notification that the post has been published.

- adds CP `isScheduled` for scheduled posts
- adds CP `offset` to component `gh-posts-list-item` and helper `gh-format-time-scheduled` to show schedule date in content overview.
- sets timeout in `gh-spin-button` to 10ms for `Ember.testing`
- changes error message in `gh-editor-base-controller` to be in one line, seperated with a `:`

TODOs:
- [x] new sort order for posts (1. scheduled, 2. draft, 3. published) (refs TryGhost/Ghost#6932)
- [ ] Move posts sorting from posts controller to model and refactor to use `Ember.comparable` mixin
- [x] Flows for draft -> scheduled -> published like described in TryGhost/Ghost#6870 incl. edge cases and button behaviour
- [x] Tests
- [x] new PSM behaviour for time/date in future
- [x] display publishedAt date with timezone offset on posts overview
2016-06-13 17:01:42 +02:00
Austin Burdine
5d008780fd internal tags feature
refs TryGhost/Ghost#6165
- change behavior to use 'visibility' property
- add tests
2016-06-13 08:21:41 -06:00
Hannah Wolfe
05243a2dbc Merge pull request #63 from kevinansfield/add-ghost-desktop-update-tests
Fix and add tests for Ghost Desktop manual update notification
2016-06-13 14:10:20 +01:00
Kevin Ansfield
b521e4dba4 Fix and add tests for Ghost Desktop manual update notification
closes #51
- move the check into the `afterModel` hook so that it's always performed on app load (previously it would only be displayed after going through the sign-in process)
- change the alert type to `warn` so that it matches our existing types (success, warn, error)
- don't rely on the `.htmlSafe()` prototype extension
- add basic tests for the upgrade alert display
2016-06-13 13:40:41 +01:00
Kevin Ansfield
39a09ca28a Fix auth header caching in ajax service
closes https://github.com/TryGhost/Ghost/issues/6884
- mark the `headers` method in the ajax service as "volatile" - it's dependent key was causing the auth headers to be cached on first use which would then cause 401 errors once the token had been refreshed externally

It would also be possible to add `session.authenticated.access_token` as a dependent key but the code-path and usage are minimal so I believe `.volatile()` is preferable as it means that it's not tied directly to the authorizer implementation.
2016-06-13 11:40:08 +01:00
Kevin Ansfield
e308256601 Merge pull request #61 from acburdine/jscs-update
Update grunt-jscs and ember-suave to 3.0.0
2016-06-13 08:49:11 +01:00
Kevin Ansfield
55eabdb350 Merge pull request #57 from AileenCGN/set-default-timezone-to-utc
Add UTC timezone as default in settings model
2016-06-13 08:44:17 +01:00
Austin Burdine
cf36851265 deps: grunt-jscs,ember-suave@3.0.0
replaces #41, #60
- update ember-suave and grunt-jscs to 3.0
- standardize Ember global de-structuring rules across app & tests
2016-06-11 13:39:31 -06:00
Aileen Nowak
6d22a6dcb6 Add UTC timezone as default in settings model
no issue

- Changes the default timezone from 'Europe/Dublin' to 'Etc/UTC' in setting model
- Updates acceptance test for settings general to expect more timezones in list and different default
- adds mirage fixtures values
2016-06-11 12:24:04 +02:00
greenkeeperio-bot
6d8501f507 chore(package): update ember-cli to version 2.6.1
https://greenkeeper.io/
2016-06-11 10:38:22 +01:00
greenkeeperio-bot
446d4bc4fe chore(package): update loader.js to version 4.0.8
https://greenkeeper.io/
2016-06-10 10:18:14 +01:00
greenkeeperio-bot
43aef761be chore(package): update ember-route-action-helper to version 0.3.2
https://greenkeeper.io/
2016-06-10 10:04:29 +01:00
Kevin Ansfield
dd6130e6d3 Merge pull request #56 from TryGhost/greenkeeper-ember-cli-2.6.0
Update ember-cli to version 2.6.0 🚀
2016-06-10 10:04:14 +01:00
greenkeeperio-bot
b2b5301b96 chore(package): update ember-cli to version 2.6.0
https://greenkeeper.io/
2016-06-10 09:41:13 +01:00
Hannah Wolfe
bba0918a2f Labs Subscribers option clearer & with docs link
no issue

- changes wording to not indicate that we already send emails
- adds link to documentation
2016-06-10 08:51:44 +01:00
Austin Burdine
089226330b Merge pull request #52 from kevinansfield/deps-ember
deps: ember@2.6.0
2016-06-09 10:39:05 -06:00
Kevin Ansfield
fda6a6939c Merge pull request #50 from TryGhost/greenkeeper-ember-data-2.6.0
Update ember-data to version 2.6.0 🚀
2016-06-09 17:12:28 +01:00
Kevin Ansfield
12cda07e94 deps: ember@2.6.0
no issue
- bugfix & cleanup release https://github.com/emberjs/ember.js/releases/tag/v2.6.0
- fix tests that were relying on not having the `rootURL` prefixed in `href`s
2016-06-09 16:58:09 +01:00
Austin Burdine
393925de68 Merge pull request #47 from kevinansfield/rename-tz-offset
Rename "offset" to "blogTimezone"
2016-06-09 09:35:49 -06:00
Felix Rieseberg
289742a7b5 Check for Ghost Desktop manual update
If the user is running a version of Ghost Desktop that requires a
manual update, we display a little warning message referring to a blog
post on dev.ghost.org.
2016-06-08 15:10:56 -07:00
greenkeeperio-bot
53ff416d37 chore(package): update ember-data to version 2.6.0
https://greenkeeper.io/
2016-06-08 22:23:54 +01:00
Austin Burdine
a0cd579067 add travis build status to readme 2016-06-08 14:35:38 -06:00
greenkeeperio-bot
59bb01bf8a chore(package): update ember-wormhole to version 0.4.0
https://greenkeeper.io/
2016-06-08 20:41:37 +01:00
Kevin Ansfield
7c2e923074 Rename "offset" to "blogTimezone"
refs https://github.com/TryGhost/Ghost/pull/6941#issuecomment-224553575
- `blogTimezone` and `timezone` better reflect their values (a string representing a timezone in the format `Europe/Dublin`) than `offset` which suggests a fixed value
2016-06-08 12:09:19 +01:00
Kevin Ansfield
0c79ff3365 deps: ember-ajax@2.4.1
no issue
- update ember-ajax
- update error handling to match recommended approach
- update error normalization for handling a returned array of strings
2016-06-06 11:54:15 +01:00
Kevin Ansfield
8d12b6bb91 Version bump to 0.9.0-beta1 2016-06-06 10:21:16 +01:00
greenkeeperio-bot
11aa59356a chore(package): update ember-one-way-controls to version 0.8.2
https://greenkeeper.io/
2016-06-04 13:57:12 +01:00
greenkeeperio-bot
580961f915 chore(package): update ember-one-way-controls to version 0.8.1
https://greenkeeper.io/
2016-06-04 10:05:55 +01:00
Kevin Ansfield
d53ef125e0 Update package.json details, rename module to ghost-admin
no issue
- updates `package.json` details to better reflect the separation from the `Ghost` package
- update ember config and all import statements to reflect the new `ghost-admin` module name in `package.json`
2016-06-03 16:12:54 +01:00
Aileen Nowak
24e71ffdaa Timezones: Always use the timezone of blog setting
closes TryGhost/Ghost#6406

follow-up PR of #2

- adds a `timeZone` Service to provide the offset (=timezone reg. moment-timezone) of the users blog settings
- `gh-datetime-input` will read the offset of the timezone now and adjust the `publishedAt` date with it. This is the date which will be shown in the PSM 'Publish Date' field. When the user writes a new date/time, the offset is considered and will be deducted again before saving it to the model. This way, we always work with a UTC publish date except for this input field.
- gets `availableTimezones` from `configuration/timezones` API endpoint
- adds a `moment-utc` transform on all date attr (`createdAt`, `updatedAt`, `publishedAt`, `unsubscribedAt` and `lastLogin`) to only work with UTC times on serverside
- when switching the timezone in the select box, the user will be shown the local time of the selected timezone
- `createdAt`-property in `gh-user-invited` returns now `moment(createdAt).fromNow()` as `createdAt` is a moment date already
- added clock service to show actual time ticking below select box
- default timezone is '(GMT) Greenwich Mean Time : Dublin, Edinburgh, London'
- if no timezone is saved in the settings yet, the default value will be used
- shows the local time in 'Publish Date'  in PSM by default, until user overwrites it
- adds dependency `moment-timezone 0.5.4` to `bower.json`

---------

**Tests:**

- sets except for clock service in test env
- adds fixtures to mirage
- adds `service.ajax` and `service:ghostPaths` to navigation-test.js
- adds unit test for `gh-format-timeago` helper
- updates acceptance test `general-setting`
- adds acceptance test for `editor`
- adds integration tests for `services/config` and `services/time-zone`

---------

**Todos:**

- [ ] Integration tests: ~~`services/config`~~, ~~`services/time-zone`~~, `components/gh-datetime-input`
- [x] Acceptance test: `editor`
- [ ] Unit tests: `utils/date-formatting`
- [ ] write issue for renaming date properties (e. g. `createdAt` to `createdAtUTC`) and translate those for server side with serializers
2016-06-03 16:23:39 +02:00
Kevin Ansfield
5e9cec8384 Minor version header fixes
refs #38
- use same version regex as `safeVersion` does on the server
- remove errant `console.log` from store service test
2016-06-03 14:47:47 +01:00
Kevin Ansfield
4cc4781b3e Add version header to API requests
no issue
- modifies the version info included in `env.APP.version` to only include the `major.minor` version numbers
- update base adapter to include `X-Ghost-Version` header
- update `ajax` service to include `X-Ghost-Version` header
2016-06-03 11:53:29 +01:00
Austin Burdine
a4d519d20c Merge pull request #33 from kevinansfield/bower-deps
Bower dependency updates
2016-06-02 21:34:56 -06:00
Kevin Ansfield
a2a041db2a Add Gruntfile.js, setup linting task and Travis build
refs #23
- add `grunt lint`
- add lint build to Travis matrix
2016-06-02 17:19:30 +01:00
greenkeeperio-bot
dd25a24c3a chore(package): update ember-wormhole to version 0.3.6
https://greenkeeper.io/
2016-06-02 16:36:38 +01:00
Kevin Ansfield
8c58424bfe deps: pretender@1.1.0 2016-06-01 12:26:56 +01:00
Kevin Ansfield
1fd0981f3b deps: moment@2.13.0 2016-06-01 12:21:57 +01:00
Kevin Ansfield
20989bcf57 deps: jquery-file-upload@9.12.3 2016-06-01 12:15:00 +01:00
Kevin Ansfield
e1d5dfa971 deps: google-caja@6005.0.0 2016-06-01 12:02:00 +01:00
Kevin Ansfield
c56f22122f deps: codemirror@5.15.2 2016-06-01 11:50:18 +01:00
greenkeeperio-bot
215fc70e86 chore(package): update ember-power-select to version 0.10.10
https://greenkeeper.io/
2016-05-31 15:28:59 +01:00
Hannah Wolfe
3e64cbe5f9 Merge pull request #27 from kevinansfield/improve-file-upload-tests
Improve uploader tests + test subscribers CSV import
2016-05-27 19:29:07 +01:00
Kevin Ansfield
66ed2a02df Improve uploader tests + test subscribers CSV import
no issue
- override `x-file-input` in `gh-file-input` to look for a custom property on the change event if we are in testing mode (this is necessary because Ember 2.5+ use native rather than jQuery events so `target.files` is readonly, see https://github.com/emberjs/ember.js/issues/13540)
- migrate unit tests for the uploader components to the integration tests
- add skipped acceptance tests for the subscribers CSV import now that it's possible to simulate file uploads
2016-05-27 13:34:31 +01:00
Kevin Ansfield
3e1087f80f Remove outline from search input
no issue
- remove the outline that is shown on the search input once the dropdown box has closed
- remove unused styles for the old selectize-based search input
2016-05-25 10:52:21 +01:00
greenkeeperio-bot
5c3ae0fec2 chore(package): update ember-power-select to version 0.10.9
https://greenkeeper.io/
2016-05-24 17:32:07 +01:00
greenkeeperio-bot
6c323c62c9 chore(package): update ember-cli-htmlbars-inline-precompile to version 0.3.2
https://greenkeeper.io/
2016-05-23 12:04:43 +01:00
Kevin Ansfield
f60d28470d Merge pull request #22 from TryGhost/greenkeeper-ember-cli-htmlbars-1.0.8
Update ember-cli-htmlbars to version 1.0.8 🚀
2016-05-23 12:04:29 +01:00
Kevin Ansfield
08fa7bd4a7 Rename PULL_REQUEST_TEMPLATE to PULL_REQUEST_TEMPLATE.md 2016-05-23 10:50:15 +01:00
Kevin Ansfield
97e16ed09f Create PULL_REQUEST_TEMPLATE 2016-05-23 10:49:08 +01:00
greenkeeperio-bot
1ee20be51e chore(package): update ember-cli-htmlbars to version 1.0.8
https://greenkeeper.io/
2016-05-22 23:18:02 +01:00
greenkeeperio-bot
b2277244d6 chore(package): update dependencies
https://greenkeeper.io/
2016-05-22 09:42:57 +01:00
greenkeeperio-bot
a921a14e2d chore(package): update ember-cli-jshint to version 1.0.3
https://greenkeeper.io/
2016-05-22 09:27:48 +01:00
greenkeeperio-bot
d47ef4393a chore(package): update loader.js to version 4.0.7
https://greenkeeper.io/
2016-05-21 02:31:44 +01:00
greenkeeperio-bot
f80404c495 chore(package): update ember-cli to version 2.5.1
https://greenkeeper.io/
2016-05-20 16:30:21 +01:00
greenkeeperio-bot
514008ad01 chore(package): update ember-cli-htmlbars to version 1.0.7
https://greenkeeper.io/
2016-05-20 06:11:11 +01:00
Kevin Ansfield
2e4655855e Add initial Travis config file
no issue
- basic testing of the admin client with both Chrome and Firefox
2016-05-19 13:33:14 +01:00
Kevin Ansfield
540b6a179d Match .gitignore and .editorconfig with Ghost repo
no issue
- as it's more likely that Ghost-Admin will be checked out separately it makes sense that it has its own `.gitignore` and `.editorconfig` that match the core repository
2016-05-19 11:39:15 +01:00
Kevin Ansfield
3ec0a0b248 Initial sub-project README.md
no issue
- point visitors to the core repo for instructions and bugs
2016-05-19 11:39:15 +01:00
Kevin Ansfield
131d08f1e6 Fix broken editor when content contains wrapped images
no issue
- don't assume that the upload element that is being replaced is top-level, target the element's parentNode rather than the overall fragment
2016-05-18 21:52:07 +01:00
Kevin Ansfield
92c5394449 Fix drag-n-drop files from Chrome's download bar
closes #6850
- HTML5 drag-n-drop has some weird inconsistencies around the `dragOver` event where it defaults the "drop" behaviour to nothing so you need to cancel the defaults and override
	- http://stackoverflow.com/questions/19526430/drag-and-drop-file-uploads-from-chrome-downloads-bar
2016-05-18 09:53:10 +01:00
Kevin Ansfield
64a85ced32 Fix unwanted clearing of social inputs on blur with no edits
no issue
- updates the logic to expect `null` scratch values as the scratch values won't be set until the input value has changed
- adds tests for initial value display and regression tests for the cleared input bug
2016-05-17 19:14:14 +01:00
Aileen Nowak
01e52013e7 Fixes error in validation
closes #6826

- refactors the validation of facebook and twitter input field in `general.js` and `user.js` controller
	- Example validations for facebook:
		- `facebook.com/username` will be corrected to the full URL
		- `user` will show error `Your Page name is not a valid Facebook Page name' for `general.js` and `Your Username is not a valid Facebook Username` for `user.js` as the username in facebook has to be at least 5 characters long
		- `twitter.com/username` will be autocorrected to the valid facebook URL incl. the `username`
	- Example validations for twitter:
		- `twitter.com/user_` will be corrected to the full URL
                - `user:99` will show error `Your Username is not a valid Twitter Username`
                - `facebook.com/username` will be autocorrected to the valid twitter URL incl. the `username`
- updates both acceptance tests
- adds further validation for facebook pages in general settings and user. Submitting a url which incl. `/page/` or `/pages/` will now accept any username followed incl. further `/`.
- adds a custom transform `facebook-url-user` which will extract the username (if it's a facebook page, incl. `pages/`) to store only this in the backend
- uses the `twitter-url-user` transform now also for user
2016-05-17 17:44:23 +01:00
Kevin Ansfield
7fda1082f3 Merge pull request #6838 from acburdine/esa-1.1
deps: ember-simple-auth@1.1.0
2016-05-16 11:51:23 +02:00
Kevin Ansfield
df118c07e3 Merge pull request #6830 from acburdine/no-show-nav-menu
Don't show the nav menu when on a 404 route and not signed in
2016-05-16 11:01:44 +02:00
Austin Burdine
4856276a06 update document title on blog title change
no issue
- force document.title to recompute when the blog title is changed in settings/general
2016-05-15 18:41:28 -06:00
Austin Burdine
ced797de76 deps: ember-simple-auth@1.1.0 2016-05-15 16:45:16 -06:00
Austin Burdine
562c50d54e don't show the nav menu when on a 404 route and not signed in
no issue
- fixes problem when the nav menu would be shown on an error404 route when the user is not logged in
- adds failing test that passes with this change
2016-05-13 19:02:55 -06:00
Kevin Ansfield
b0cd10b845 Fix initial loading of a route with an invalid session
no issue
- if the session is "authenticated" but is invalid, the initial load of the app would fail. It could be replicated by:
	1. Authenticating in a running ghost instance
	2. Stopping ghost
	3. Deleting the database
	4. Re-starting ghost
	5. Closing the browser
	6. Re-opening the browser and visiting http://localhost:2368/ghost
- this fix stores the `transition` object for the duration of the initial load so that `sessionInvalidated` method can trigger actions before the transition has finished
2016-05-13 13:47:39 +02:00
Kevin Ansfield
11d2f620e1 Fix loss of private settings when saving in certain circumstances
no issue
- always ensure we load a full settings object so that we don't risk saving a partial settings object back to the server
- should fix the issues reported in Slack of disappearing private settings over time
2016-05-13 12:24:17 +02:00
Kevin Ansfield
410d03d66d Allow table content to be selectable
no issue
- overrides the global `user-select: none` style for `th` and `td` elements
2016-05-12 17:42:52 +02:00
Brian Tedder
c2cf17478a Remove select-all on click for PSM slug input
issue #6655
-remove selectOnClick from input
2016-05-11 19:59:54 -06:00
Hannah Wolfe
3e5832ee48 Merge pull request #6811 from kevinansfield/fix-new-subscriber-validation
Fix display of server-provided validation error when adding subscriber
2016-05-11 22:24:28 +02:00
Kevin Ansfield
8826f0e66a Fix display of server-provided validation error when adding subscriber
no issue
- make the check for "email" in the server provided error case-insensitive
2016-05-11 19:56:58 +02:00
Hannah Wolfe
5d3b32a926 Pre-populate setup values from config
no issue
- Check for title, user_name and user_email in the top level of config.
- If they exist, return them as part of the setup check, so that the setup screen can be prepopulated
2016-05-11 19:30:56 +02:00
John O'Nolan
7cd6c786f9 Merge pull request #6764 from TryGhost/subscribe
Subscribers
2016-05-11 13:53:53 +02:00
Hannah Wolfe
1c35fefbb9 Merge pull request #6703 from kevinansfield/6640-tests
Improve `gh-profile-image` tests for #6640
2016-05-11 13:00:19 +02:00
Kevin Ansfield
5b1178c7c5 Fix cmd-s shortcut not saving changes in text fields with focusout
closes #4556
- when <kbd>CMD-S</kbd> is used, if the focused element is an input, trigger it's `focusout` handler then schedule the save action to happen after any actions resulting from the trigger
2016-05-11 11:59:36 +02:00
kirrg001
ec0eeceff0 Subscribers: Move read CSV into separate utility
- split out read CSV function into utility and add tests
- update API response to follow JSONAPI more closely
- update the UI to match the new API response
2016-05-11 11:22:35 +02:00
Kevin Ansfield
755e048f98 Subscribers: Admin UI updates & fixes
Update for synchronous feature service

Add client-side handling of server-side errors when adding subscribers
- display server-provided error message when we get a server error
- fix the ajax util's `getRequestErrorMessage` method so that it works correctly with Ember's `InvalidError` object instead of the previous request object that it was receiving (*TODO:* this really needs looking at properly so we aren't losing details and Ember Data can do it's stuff)

Styling updates
- proper icon for ascending/descending
- change hover colour to green for "Import CSV" button

Delete subscriber button with confirm modal
- display delete button when hovering over a subscriber row (WARN: really ugly button, styles definitely want looking at)
- show confirm modal when clicking the delete button
- delete subscriber, remove from table, and update total on confirm
2016-05-11 11:22:35 +02:00
Hannah Wolfe
2313dab449 Subscribers: router & form helpers
Form:
- add confirm, location & referrer hidden fields
- add script to populate location & referrer
- add helper for creating the email field
- pass through input class and placeholder for email from top level form helper
- rename subscribe_form template & helper as it sounds more natural
- handle success and error cases differently
- improve error message display
- ensure useful data is passed back so that we can show nice messages
- check for honeypot value being filled out
- refactor error handler to set an error and always still render
2016-05-11 10:28:11 +02:00
Kevin Ansfield
83c9270682 Subscribers: Admin User Interface v1
Initial Subscribers screen
- set up mocked api endpoints
- basic subscribers screen with data loading, infinite scroll

"Add Subscriber" screen
- uses modal to display a new subscriber form
- validates subscriber e-mail address
- moves pagination from route into controller to use filtered/sorted CPs on top of a live-query so that new subscribers are added to the list and the total can be properly managed

TODO:
- there is currently a pretty serious performance issue where the whole table is re-rendered when the live-query is updated. `ember-light-table` doesn't allow for live-binding and has no options to easily manipulate it's rows using an external interface - it's possible to move the page loading into the component so we only render new rows but that leaves it difficult to react to new subscribers being added through the UI. I believe the number of components used within the table is also adding to the performance problems.
  - most likely solution is to drop `ember-light-table` in favour of rendering the table directly - glimmer should do a good job of fast updates even though the underlying array will be completely swapped out

"Import subscribers" screen
- uses modal to display an import subscribers CSV file upload form
- displays upload progress
- displays import stats and reloads subscribers table once import has completed
- adds `gh-file-uploader` component (NB. pared down copy of `gh-image-uploader`, ripe for some refactoring)
- fixes subscribers acceptance test failing because fixtures did not have the labs flag enabled

Unfortunately this doesn't have 100% test coverage as we're limited in how we can simulate file uploads 😞

Fix performance issues with subscribers table
- moves the table definition from the component up to the controller
- switches back to manually manipulating table rows instead of using a live-query

This is a quick-fix in that it allows us to continue using the `ember-light-table` component but it does mean that we lose some flexibility that the live-query gave us. For now it's not much of an issue and it allows us to defer deeper performance/flexibility work until we have a concrete need and requirements.

Hook up Export CSV button
- use a hidden iFrame to trigger the browser to hit the CSV export endpoint and download the file

Re-order subscribers table by clicking column headers
- displays currently sorted column and sort direction
- clicking a column header re-fetches the data from the server with the appropriate query params

Fix scroll triggers for infinite pagination + icon change
- adds a debounce as well as the throttle so that we always get a final scroll trigger once scrolling has stopped
- changes the subscribers icon from the temporary team icon to the mail icon
2016-05-11 10:28:11 +02:00
Kevin Ansfield
b505ec18f4 deps: ember-light-table@0.1.9 2016-05-11 10:28:10 +02:00
Kevin Ansfield
e8c337f3f6 Improve gh-profile-image tests for #6640
refs #6640
- add `NotFoundError` to ajax service and test against that when catching errors in `gh-profile-image`
- don't use `passthrough` in Mirage for gravatar requests to avoid network calls during testing
- add additional tests for `gh-profile-image` and put the debounced gravatar test back in place
2016-05-09 22:14:12 +02:00
David Balderston
d8ede94ac6 Fix Transparent Background in Gravatar Showing Background Image
Closes #5882

* If a gravatar image is available, remove the default image behind it
* If gravatar image is not available, keep or replace the default image
2016-05-09 22:09:27 +02:00
Aileen Nowak
c8d0e25923 Structured Data 3.0
closes #6534
- new input fields in general settings incl. validation
- facebook and twitter as new models in settings.js
- adds values for facebook and twitter to default-settings.js
- adds blog helpers for facebook and twittter
- rather than saving the whole URL, the Twitter username incl. '@' will be extracted from URL and saved in the settings. The User will still input the full URL. After saving the blog setting, the stored Twitter username will be parsed again as the full URL and available in the input field. A custom transform is used for this.
- adding meta fields to be rendered in {{ghost_head}}:
	- '<meta property="article:publisher" content="https://www.facebook.com/page" />' and
	- '<meta name="twitter:site" content="@user"/>'
- adds facebook and twitter to unit test for structured data
- adds unit test for general settings
- adds acceptance test for new input fields in general settings
- adds a custom transform for twitter model to save only the username to the server
- adds unit test for transform
2016-05-08 17:43:59 +02:00
Hannah Wolfe
183e53371f Merge pull request #6788 from kevinansfield/synchronous-labs-flags
Synchronous feature service
2016-05-08 13:59:31 +02:00
Hannah Wolfe
cf99964750 Merge pull request #6802 from kevinansfield/editor-img-perf-makes-me-sad
Fix editor image perf and upload bug
2016-05-08 13:58:54 +02:00
Kevin Ansfield
02b57750cf Fix editor image perf and upload bug
no issue
- ~10x speedup in processing time taken on each keypress when there are many images/image upload components in the editor
  - edit DOM in memory before changing it in the page to avoid double-render
  - keep upload components around and re-assign them on re-render, adding or removing an image will still re-generate everything
- adds a throttle to the preview rendering so that renders don't get queued up
- fixes occasional bug where uploading an image didn't update the markdown correctly due to a timing issue
2016-05-08 12:55:56 +02:00
Aileen Nowak
753f307382 Slack integration
closes #6584
- Frontend Changes:
	- adds 'Apps' to Navigation Menu
	- adds 'Slack' as nested page to Apps
	- adds `apps.css`
	- adds `slack-integration` model and uses `slack-settings` custom transform to parse JSON file
	- adds validation for `slack` model
	- adds fixtures and `slack/test` API endpoint to Mirage
	- adds acceptance tests for `apps-test` and `slack-test`
	- adds unit tests for `slack-settings` and `slack-integration`
- Backend Changes:
	- adds API endpoint `slack/test` to send Test Notification
	- adds default-values for slack model
	- sends payload to slack:
		- text: the url of the blogpost / test message
		- icon_url: url to ghost logo
		- username: Ghost
	- adds `slack/index.js` to send webhook to slack if
		- a new post is published (if slack webhook url is saved in settings)
		- user clicks on 'Send Test Notification' in UI
	- adds `slack.init()` to `server.index.js` to add event listener
	- adds unit test for `slack/index`
2016-05-08 12:49:15 +02:00
Kevin Ansfield
2da6673197 Synchronous feature service
supersedes #6773
- update `feature` service and `gh-feature-flag` component to work synchronously rather than async
- use the application route's `afterModel` hook so that settings are loaded before first load
- override `session` service's `authenticate` method to load the settings after successful authentication before any other routes are processed
2016-05-07 15:00:06 +02:00
Kevin Ansfield
e32106505a deps: ember-simple-auth@1.1.0-beta.5
no issue
- fixes last remaining 1.1.0 issue, will quite likely be last beta before final release
2016-05-05 12:55:42 +02:00
Austin Burdine
5cc75b1c6c remove unused feature controller 2016-04-28 12:22:54 -05:00
Austin Burdine
ab945b0827 convert more action calls to the ember-invoke-action syntax 2016-04-28 10:34:36 -05:00
Austin Burdine
7332186309 deps: ember-simple-auth@1.1.0-beta.4
- remove related deprecation line in deprecation-workflow.js
2016-04-28 08:34:26 -05:00
Kevin Ansfield
85afbaf38c Merge pull request #6767 from acburdine/ember-2.5.1
deps: ember@2.5.1
2016-04-28 14:18:29 +01:00
Austin Burdine
0017a5ace9 deps: ember@2.5.1
- removes Ember.merge deprecation
2016-04-28 07:15:15 -05:00
Kevin Ansfield
98f92c1444 Don't add trailing slash to end of url with parameters
no issue
- updates the `TrailingHistory` locationType so that trailing slashes aren't added to the end of URLs with parameters but instead matches how the server-side redirects to trailing-slash URLs
- before: `/subscribers?order=created_at/`
- after: `/subscribers/?order=created_at`
2016-04-28 12:42:03 +01:00
Kevin Ansfield
50d1737a25 Merge pull request #6748 from acburdine/closure-actions-readability
Use ember-invoke-action for closure action handling
2016-04-28 10:12:24 +01:00
Austin Burdine
6e29b546f7 deps: ember-invoke-action@1.3.0
no issue
- replace instances of `this.get('action')()` with ember-invoke-action syntax
2016-04-26 16:32:17 -05:00
Kevin Ansfield
0e2f4ea33e Use a custom transform to simplify navigation settings
no issue
- moves the `NavItem` object from the navigation controller to an explicit `NavigationItem` model file
- adds a custom transform `navigation-settings` that transforms the navigation settings JSON string to/from an array of `NavigationItem` objects
- simplifies the `settings/navigation` controller as it no longer has to export it's own internal model and handle serialization and deserialization

This pattern should also help simplify the apps/slack integration code if implemented there.
2016-04-26 12:32:29 +01:00
Kevin Ansfield
983c708ece Don't share errors and hasValidated references between validator instances
no issue
- ensure that each validator instance gets it's own `errors` and `hasValidated` objects
- updates some uses of `ValidationEngine` that were relying on side-effects of the unintended reference sharing
- fixes issue with add subscriber modal displaying an error state after opening if it previously had errors when closing
2016-04-25 10:56:11 +01:00
Austin Burdine
4a5c7d953e lock jquery-deparam version 2016-04-20 06:18:47 -05:00
Austin Burdine
692d3afc39 deps: password-generator@2.0.2 2016-04-20 06:17:44 -05:00
Austin Burdine
2cbe3546be allow ember to specify jQuery version
- fix slight acceptance test bug
2016-04-19 14:08:36 -05:00
Austin Burdine
eb2e369326 replace gh-selectize with power-select in gh-search-input
refs #6458
2016-04-19 10:55:10 -05:00
Austin Burdine
4b7c00d19e deps: ember-power-select@0.9.2 2016-04-19 10:25:58 -05:00
Austin Burdine
eae02d410a Merge pull request #6735 from kevinansfield/improve-pagination-mixin
Improve `PaginationRoute` mixin
2016-04-19 10:20:08 -05:00
Kevin Ansfield
5f7bd12eec Improve PaginationRoute mixin
no issue
- returns the promise/result from `loadNextPage` so that it's return value can be utilised in closure actions
- sets the `isLoading` property in `loadFirstPage` to match `loadNextPage` behaviour
- reset the `isLoading` property even if the request fails
- adds a `didReceivePaginationMeta` hook so that consumers of the mixin can use the metadata values without having to rely on observers
  - eg. pulling the `total` into a separate property that can be manipulated when items are added/removed but still reset to the sever's total value the next time a page is loaded
- renames the `pagination-route` mixin to simply `pagination` as it's not tied to routes and works equally well in other objects that need to paginate an API resource
2016-04-19 10:53:45 +01:00
Kevin Ansfield
cc04ad2a58 deps: ember-one-way-controls@0.6.2
no issue
- https://github.com/DockYard/ember-one-way-controls/compare/v0.5.4...v0.6.2
- bugfixes
- dynamic attribute binding (attributes no longer need to be explicitly defined in the components in order to be recognised)
- adds `one-way-radio` component
2016-04-19 10:22:29 +01:00
Austin Burdine
cce23ca6e9 deps: ember-cli@2.5.0 2016-04-17 20:05:42 -05:00
Austin Burdine
c118a7d71b deps: ember-data@2.5.2 2016-04-15 00:32:57 -05:00
Austin Burdine
e07a3f4145 deps: ember@2.5.0 2016-04-15 00:24:57 -05:00
Hannah Wolfe
159d729855 Merge pull request #6714 from kevinansfield/allow-mocked-endpoints-in-dev
Enable ability to mock endpoints in development mode
2016-04-14 19:12:43 +01:00
Hannah Wolfe
a2a825bfe9 Merge pull request #6651 from kevinansfield/uploader-js-must-die
Replace jQuery-based uploader.js with ember components
2016-04-14 16:57:57 +01:00
Kevin Ansfield
2e66f53a4b Enable ability to mock endpoints in development mode
no issue
- moves existing mirage config into the `testConfig()` function to retain full mocks during testing
- configure mirage to passthrough all requests when in development mode
2016-04-14 15:26:39 +01:00
Kevin Ansfield
490f2bae16 Fix redirect to posts list when saving a new post as an author
no issue
- replace deprecated `normalizeHash` with `normalize` in post serializer
- ensure we check for both `post` and `posts` properties as it will vary depending on the expected response type
2016-04-13 12:28:11 -05:00
Austin Burdine
0f39b4c53c fix leave editor modal
no issue
- following up from 6680, fixes a missing set of parentheses
2016-04-12 14:04:59 -05:00
Jeff Jewiss
600276bd56 Saves post title on focus blur if status is draft
Closes #6656
- adds an action to update the title
- checks if the post title has changed and is a draft and sends a silent + background save action
- includes the action on the focus-out event on the post title
2016-04-10 21:47:28 -04:00
Austin Burdine
89a86249f5 Merge pull request #6694 from jaswilli/bind
Remove Function.bind polyfill
2016-04-10 00:53:19 -05:00
Jason Williams
63ba8a1031 Remove Function.bind polyfill
- Not used anymore, and phantomjs 2 has a native .bind
2016-04-09 13:06:54 -05:00
Kevin Ansfield
0c136a5a23 Avoid use of this.attrs for closure actions
no issue
- `this.attrs` is a glimmer-component thing (which doesn't exist in Ghost yet), to avoid confusion we should avoid using it
- https://locks.svbtle.com/to-attrs-or-not-to-attrs
- https://github.com/cibernox/ember-power-select/issues/233#issuecomment-170352572
2016-04-09 10:46:19 +01:00