Commit Graph

4973 Commits

Author SHA1 Message Date
kirrg001
507677f071 fix: url for post path when post is not published
closes #6999
2016-06-20 14:48:01 +02:00
Austin Burdine
14c3d0e9ef Merge pull request #7006 from kevinansfield/subgrunt-init
Use subgrunt to install client dependencies
2016-06-18 15:11:35 -04:00
Kevin Ansfield
fe44040dea Updating Ghost-Admin: grunt init bower fix
- includes `grunt init` task used in #7006
2016-06-18 19:30:42 +01:00
kirrg001
250d571fe6 improvement: jshint/jscs
no issue
- add mocha option to jshintrc, no need to define globals in files anymore
- call client grunt commands in case of jshint/jscs
2016-06-17 22:59:47 +02:00
Kevin Ansfield
8e21e31436 Upgrading Ghost-Admin to 0.9.0-beta.2 2016-06-15 13:25:39 +01:00
Hannah Wolfe
ac63621fe7 Update tags & foreach to respect visibility
refs #6165

- adds lodash.pickby@4.4.0
- new helper util for understanding a visibility attribute
- generalises visibility handling for `{{tags}}` helper
- adds visibility handling to `{{foreach}}` helper
- adds tests which check behaviour + labs flag
2016-06-15 12:37:09 +01:00
kirrg001
9de153ff82 post-scheduling: fix delete bug in default scheduler 2016-06-15 12:21:33 +02:00
kirrg001
a3cd43909b post-scheduling: HTTP 503 retry logic for default adapter 2016-06-15 08:40:18 +02:00
Hannah Wolfe
fe5e0eed48 Merge pull request #6988 from kirrg001/improvement/forward-utc-timestamp-for-scheduler
post-scheduling: forward UTC timestamp to scheduler adapters
2016-06-14 17:05:22 +01:00
Hannah Wolfe
bf79185d1c Merge pull request #6987 from kirrg001/fix/scheduler-config
post-scheduling: flat config for scheduling
2016-06-14 17:03:34 +01:00
kirrg001
80c797c6c2 post-scheduling: forward UTC timestamp to scheduler adapters 2016-06-14 16:34:56 +02:00
kirrg001
b5ebd0200b post-scheduling: flat config for scheduling 2016-06-14 15:13:00 +02:00
Kevin Ansfield
24e4a38ecc Updating Ghost-Admin: Scheduled Posts
- pulls in the new UI features for the scheduled posts feature
2016-06-14 13:25:59 +01:00
“kirrg001”
1421c92ba5 post-scheduling
refs #6413
- PUT endpoint to publish a post/page for the scheduler
- fn endpoint to get all scheduled posts (with from/to query params) for the scheduler
- hardcoded permission handling for scheduler client
- fix event bug: unscheduled
- basic structure for scheduling
- post scheduling basics
- offer easy option to change adapter
- integrate the default scheduler adapter
- update scheduled posts when blog TZ changes
- safety check before scheduler can publish a post (not allowed to publish in the future or past)
- add force flag to allow publishing in the past
- invalidate cache header for /schedules/posts/:id
2016-06-14 10:52:13 +02:00
Hannah Wolfe
1b98d80a73 Merge pull request #6983 from kirrg001/fix/6975
fix: 6975 permalink test
2016-06-13 21:03:37 +01:00
kirrg001
2e25e4c73d fix: permalink test
issue #6975
2016-06-13 20:50:07 +02:00
Hannah Wolfe
c1736d0aa4 Updating Ghost-Admin: Internal tags
- pulls in the new UI features for the internal tags feature
- includes a labs flag
2016-06-13 13:59:24 -04:00
kirrg001
7d5baf4e9a fix: put default timezone into config
no issue
- config.theme.timezone can be undefined, when settings are not loaded from the database
- this PR will define the default blog TZ in config
- use `Etc/UTC` as default instead of `Europe/Dublin`
2016-06-13 15:02:52 +02:00
Hannah Wolfe
584e9911c4 Merge pull request #6973 from acburdine/lodash-4
deps: lodash@4.13.1
2016-06-11 21:39:30 +01:00
Hannah Wolfe
6bcc08e874 Cleanup indentation now JSCS can see it
- this is needed to make #6925 mergable
2016-06-11 20:25:15 +01:00
Austin Burdine
44537bd15f deps: lodash@4.13.1
closes #6911
- update lodash to v4
- remove lodash.tostring override
- remove lodash from greenkeeper ignore
2016-06-11 13:13:55 -06:00
Austin Burdine
aed8c0800e internal tags feature
refs #6165
- change behavior to use 'visibility' property
- finish out client & server-side behavior
- add tests
2016-06-11 09:12:04 -06:00
Hannah Wolfe
369fd2c6bd Initial work on internal tags feature
refs #6165
2016-06-10 13:32:56 -06:00
Hannah Wolfe
eeb41a8976 Merge pull request #6945 from sakulstra/bugfix-url-on-external-page
Allow domain name to be referenced on an external page in the navigation
2016-06-10 18:20:15 +01:00
Hannah Wolfe
471edf0ea9 Merge pull request #6962 from kirrg001/feature/when-timezone-changes-reschedule-posts
feature: when timezone changes, reschedule all posts
2016-06-10 15:53:40 +01:00
Aileen Nowak
1487df9b30 Adds UTC as select option to timezones select list
no issue

- adds '(GMT) UTC' as select option to available Timezones
- changes default value for active Timezone to 'Etc/UTC'
2016-06-10 15:19:16 +02:00
kirrg001
16fc0d29bf feature: when timezone changes, reschedule all posts
closes #6406
- created listeners.js connector
- merged listeners.js with events.js (in models/base)
- set a post to draft when published_at would be in the past
- reschedule a post when published_at would be in the future
2016-06-10 14:58:19 +02:00
Hannah Wolfe
38de6d7f84 Merge pull request #6963 from kirrg001/improvement/config-spec-js
improvement: explict database assertions for config_spec.js tests
2016-06-10 11:45:11 +01:00
Sebastian Gierlinger
88dc7b3e99 Merge pull request #6929 from ErisDS/event-test-fix
Add removal for event listeners, fixes test error
2016-06-10 11:53:34 +02:00
Hannah Wolfe
d341263934 Merge pull request #6961 from kirrg001/improvement/add-not-existing-module-mock-fns
improvement: add mocks helper module for test env
2016-06-10 10:18:44 +01:00
Hannah Wolfe
74d4dcfba3 Merge pull request #6955 from kirrg001/fix/models-events-test
fix: model_events.js will cause errors for other tests
2016-06-10 10:17:58 +01:00
Hannah Wolfe
015802b6eb Merge pull request #6959 from kirrg001/improvement/db-connection
improvement: improve db/connection.js readability
2016-06-10 10:17:38 +01:00
kirrg001
81ddb47d8a improvement: explict test assertions for config_spec.js tests 2016-06-10 10:59:38 +02:00
kirrg001
27d8eb5e70 improvement: add mocks helper module for test env
no issue
- add methods to mock/unmock not existent files
2016-06-10 09:23:00 +02:00
kirrg001
b057c2fc16 improvement: rename and extend test utils fixture functions
no issue
- rename insertPosts to insertPostsAndTags
- add insertPosts
- extend insertOne to choose index
2016-06-10 07:14:21 +02:00
kirrg001
901c9d75a0 improvement: improve db/connection.js readability 2016-06-10 07:08:02 +02:00
Hannah Wolfe
20f4166cc5 Version matching middleware
refs #6949

- Adds a new VersionMismatchError with status 400 (bad request)
- Adds middleware that checks the X-Ghost-Version header if it is provided
- If it is not provided, the middleware does nothing
- If it is provided, and the versions match, the middleware does nothing
- If it is provided, and the versions don't match, the middleware returns a VersionMismatchError
- Includes both unit and a functional test to prove the middleware works alone and as part of the whole system
2016-06-09 17:08:44 +01:00
Hannah Wolfe
f489d7df72 xmlrpc + slack init() -> listen() & fixup tests
no issue

- changes xmlrcp & slack `init` function to be `listen`
- update the code to use `listen` instead of `init`
- changes the tests to make sure that event listeners are not wired up
- adds 100% test coverage

Since we added slack event listeners, the xmlrpc event tests have been throwing an error:
 > Unhandled rejection Error
See: http://puu.sh/phvjZ.png

This is because both xmlrpc & slack are listening to `post.published` events.
xmlrpc didn't require any extra stubbing, but the slack listener did
By turning the listeners off after the tests, we reset the environment to not impact the next event test

We probably need to do more work like this to improve the systems around event handling and
make them more robust
2016-06-09 15:38:19 +01:00
kirrg001
37317db031 fix: model_events_spec.js just throws a general event for "everyone" 2016-06-09 15:43:08 +02:00
Lukas Strassel
696a06fa00 Allow domain name to be referenced on an external page in the navigation.
closes #6939
- added a test for the specific issue
- modified the url generation to allow the url in an external pages slug
2016-06-09 15:28:58 +02:00
Hannah Wolfe
9ddcecccab Merge pull request #6936 from SuchSoftware/6935
Fixes #6935 - Let Bluebird know Promise is not runaway
2016-06-09 11:46:35 +01:00
Hannah Wolfe
ff2f127a32 Merge pull request #6924 from cobbspur/addTokenEvent
Add token added event, update last_login
2016-06-09 11:46:04 +01:00
Hannah Wolfe
bac4a3d880 Merge pull request #6941 from AileenCGN/timezones-select-list
Timezone select list without DST
2016-06-09 11:34:02 +01:00
Aileen Nowak
66bf66de4e Timezone select list without DST
refs #6933

Some hard timezones of the hard coded list where shown (`label`-property) with a `GMT`-offset incl. DST. All offsets are now without DST.
Removes `offset` property as it is not used and `Greenwich Mean Time` from label.
2016-06-09 10:35:22 +02:00
cobbspur
9430f5fa51 Add token added event, update last_login
closes #6845

- emit token.added event when new access token is created
- update last_login for user token.added event is triggered
2016-06-09 09:17:06 +01:00
Sebastian Gierlinger
924c9963b4 Merge pull request #6938 from ErisDS/issue-6937
Guard for currentUrl being undefined in navigation
2016-06-09 10:01:01 +02:00
Sebastian Gierlinger
cab4018cab Merge pull request #6928 from ErisDS/middleware-cleanup
Move all middleware/app config to middleware
2016-06-09 09:59:50 +02:00
Ethan Garofolo
b3c88b8c14 Fixes #6935 - Let Bluebird know Promise is not runaway 2016-06-08 07:47:45 -06:00
Hannah Wolfe
c2890820a2 Guard for currentUrl being undefined in navigation
fixes #6937

- in certain cases, relativeUrl will not be set, e.g. for assets
- in this case, navigation will fail on the error.hbs template
2016-06-07 20:10:20 +01:00
Hannah Wolfe
2f4d1e4027 Move all middleware/app config to middleware
no issue

- move some middleware setup that was in the server index into the middleware index
2016-06-07 17:24:08 +01:00
cobbspur
0f0ca5a304 Add CSV parser for csv read utility
closes #6865

- switch csv-read to use a csv-parser for greater reliability and management of strings when importing a csv
2016-06-07 10:47:56 +01:00
Kevin Ansfield
d5323cdc16 Upgrading Ghost-Admin to 0.9.0-beta1 2016-06-06 10:26:26 +01:00
Hannah Wolfe
ad870091f7 Updating Ghost-Admin to the latest version
no-issue

- pulls in timezones, some dependency updates and some tooling updates
2016-06-04 18:00:16 +01:00
Hannah Wolfe
80a79172c4 Revert "Revert "Force UTC at process level"" 2016-06-03 09:06:18 +01:00
Hannah Wolfe
b2051dacf7 Fix post model deletes tags when editing post only
fixes #6919, refs #6917

- resolves the problem by guarding for `tags` being undefined or null
   - If it is undefined, we don't do any tag processing
   - If it is null, we don't do any tag processing
   - To delete all tags, you would provide `tags: []`
- adds tests at both the model (using withRelated) and API (using includes) layers
- moves the tests for the post updateTags functionality from the tag model spec to the post model spec & cleans up a bit
2016-06-02 22:52:34 +01:00
Hannah Wolfe
78e693f469 Revert "Force UTC at process level" 2016-06-02 14:38:02 +01:00
kirrg001
ec176c243a Force UTC at process level
issues #6406 #6399
- all dates are stored as UTC with this commit
- use moment.tz.setDefault('UTC')
- add migration file to recalculate local datetimes to UTC
- store all dates in same format into our three supported databases
- add option to remeber migrations inside settings (core)
- support DST offset for migration
- ensure we force UTC in test env
- run whole migration as transaction
- extend: Settings.findOne function
2016-06-02 13:23:09 +02:00
Hannah Wolfe
45226bcaaa Merge pull request #6889 from kirrg001/improvement/general
improvement: general fixes
2016-06-01 07:58:00 +01:00
kirrg001
c9fbf01521 improvement: general fixes
- add NODE_LEVEL to print errors while running tests
- try/catch while parsing translations file
- run setup/teardown as promise or callback
- some general error improvements
2016-06-01 07:07:20 +02:00
Hannah Wolfe
4c44257115 Merge pull request #6860 from kirrg001/timezones-support-permalinks
Timezones + support permalinks
2016-05-28 17:19:14 +01:00
Hannah Wolfe
38e3654bbe Merge pull request #6875 from king6cong/role-id-fix
roles_users.id is not necessarily the same as roles_users.user_id
2016-05-23 09:07:20 +01:00
oregami
834d25b66b fix query user 2016-05-23 11:40:27 +08:00
Kevin Ansfield
e941344b52 Update Ghost-Admin
no issue

Changelog:
- dependency updates
2016-05-22 10:02:50 +01:00
kirrg001
ff132fd934 timezones: support permalinks based on current timezone
issue #6406
- redirect date permalink if timezone changed
- create permalinks based on blog TZ
- post-lookup fn is now more generic
2016-05-20 18:14:19 +02:00
Aileen Nowak
38a261daac timezones: Always use the timezone of blog setting
closes #6406
- adding timeZone Service to get the offset (=timezone reg. moment-timezone) overall available
- new publishedAtOffset date as CP using timeZone service and moment-timezone to calculate offset incl. DST
- removing timezone-obj transform as it became obsolete with moment-timezone
- reading timezones from configuration/timezones api endpoint
- adding a moment-utc transform to only work with utc times in backend
- when switching the timezone in the select box, the user will be shown the local time of the selected timezone
- 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
- showing local time in 'Publish Date' when it's a draft and no actual publishedAt value exists
- Removed the format 'DD MMM YY @ HH:mm (UTC Z)' which resolves to '01 Jan 16 @ 14:00 (UTC +02:00)'
- Changing the date.js helper in core/server for moment-timezone
- Fix timezone select: updates `selectedTimezone` to return the matching object from `availableTimezones`
- Including timezones in test for date-helper
- update to moment-timezone 0.5.1
- moving form-group of 'selectTimezone' further up so
- Tests:
	- Set except for clock service in test env
	- adding fixtures to mirage
	- adding 'service.ajax' to navigation-test.js
	- adding 'service:ghostPaths' to navigation-test.js
- Code improvements
- Changing clockservice to ES6
2016-05-20 13:59:45 +02:00
Kevin Ansfield
76826a385d Add Admin-Client as submodule at core/client
no issue
- import the now separated [Ghost-Admin](https://github.com/TryGhost/Ghost-Admin) project as a submodule in it's original location of `core/client`
2016-05-19 14:20:18 +01:00
Kevin Ansfield
1b85d67e0e Remove split Ghost-Admin code 2016-05-19 14:14:32 +01:00
Kevin Ansfield
d19dd52cf6 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
Hannah Wolfe
6737427ce9 Don't clobber blog.logo in metadata
- Ghost logo suddenly appearing was raised as an issue in slack
- This copies the blog object, so that the logo doesn't get overridden
2016-05-18 19:21:45 +01:00
Kevin Ansfield
4666b1b8c1 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
Sebastian Gierlinger
d92897c109 Merge pull request #6849 from ErisDS/schema-https
Switch to using https for schema.org
2016-05-18 09:32:50 +02:00
Hannah Wolfe
5948277a95 Merge pull request #6848 from ErisDS/twitter-facebook
Improvements to twitter & facebook handling
2016-05-17 20:59:15 +01:00
Hannah Wolfe
f3de80ebe9 Switch to using https for schema.org
closes #6846

- Using http causes mixed content warnings, using https does not
- Both http & https validate according to Google's validator
2016-05-17 19:32:03 +01:00
Kevin Ansfield
2640f774df 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
6dbf610c8f 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
Hannah Wolfe
29c9e8b147 Update structured data for fb & twitter usernames
refs #6534

- twitter & facebook fields are changing to store usernames only
- use the new social url util to generate urls where necessary
- update tests
2016-05-17 16:40:09 +01:00
Hannah Wolfe
e96b60b850 Add helpers for facebook & twitter urls
refs #6534

- this PR assumes that we are now saving usernames only in the database for twitter & facebook
- adds a new social links utility which can generate twitter & facebook urls from the username
- adds a {{twitter_url}} and {{facebook_url}} helper which uses these
- adds a full suite of tests for the helpers & utils
2016-05-17 16:39:58 +01:00
kirrg001
9c9283e0c9 fix: ensure import works when user id is 0 2016-05-16 20:47:44 +02:00
Kevin Ansfield
06a2920333 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
23d73e2725 Merge pull request #6834 from ErisDS/woff
Removing very old fix for woff files
2016-05-16 11:05:07 +02:00
Kevin Ansfield
882b309e41 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
2a9c916a58 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
111a714b96 deps: ember-simple-auth@1.1.0 2016-05-15 16:45:16 -06:00
Hannah Wolfe
9fd8d47658 Removing very old fix for woff files
no issue

- This was fix a looong, loooonng, looooooooooonnnnnnng time ago: https://github.com/broofa/node-mime/pull/60
2016-05-14 19:06:33 +02:00
Austin Burdine
9be3b7c849 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
Hannah Wolfe
c4d3bd7cd2 Fix errors in JSON-LD output
refs #6534

- don't output publisher for the 'People' type on the author page
- change publisher to a full 'Organisation' for the 'Article' type on posts

Note:
Google's structured data validator also wants image & publisher.logo inside of Article to be full 'ImageObject's.
Currently, it output's an error for them: 'The attribute itemtype has an invalid value.'
However, the spec on Schema.org says a url is valid: https://schema.org/Article,
which is slightly different to Google's spec here: https://developers.google.com/structured-data/rich-snippets/articles#article_markup_properties

Ideally, we would output a full 'ImageObject', however we don't currently have the width & height info required.
Therefore, I think what we have is valid strictly speaking, but we should aim to fix this when we have better image tools.
2016-05-13 15:13:11 +02:00
Kevin Ansfield
59e5e10e85 Merge pull request #6823 from AileenCGN/structured-data-fix
Prevents sameAs property to be filled with `null`
2016-05-13 14:27:26 +02:00
Aileen Nowak
a018b1bbd2 Prevents sameAs property to be filled with null
no issue

- minor optical fix for schema.org metadata
- sameAs property was showing `null` value in array, if no data was provided
- instead of showing `null`, it will be empty, if no data (author website, facebook or twitter) it will be an empty array
2016-05-13 13:56:30 +02:00
Kevin Ansfield
01cdff5c92 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
5e80039587 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
Sebastian Gierlinger
10a707001d Merge pull request #6817 from kevinansfield/fix-table-select
Allow table content to be selectable
2016-05-12 18:04:43 +02:00
Kevin Ansfield
a29e47d727 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
Hannah Wolfe
4571a40f2a Subscribers: Error message improvements 2016-05-12 17:37:45 +02:00
Sebastian Gierlinger
f93405288a Merge pull request #6814 from ErisDS/subscribe-context
Subscribers: Adding subscribe context
2016-05-12 16:46:49 +02:00
Hannah Wolfe
d245f875bf Subscribers: Adding subscribe context
- ensure that the `/subscribe/` route gets a context set correctly
- update context tests§
2016-05-12 11:02:51 +02:00
Brian Tedder
b5702ac330 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
585f582991 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
Hannah Wolfe
9d806cf3b1 Merge pull request #6809 from kirrg001/forsubscribe/fix-empty-collection-bug
subscribers: fix adding subscriber from admin if collection is empty
2016-05-11 22:22:42 +02:00
Kevin Ansfield
88847d3b4a 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
bd3234d207 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
kirrg001
88fed6f95a subscribers: fix adding subscriber from admin if collection is empty 2016-05-11 19:23:44 +02:00
John O'Nolan
e6fe1c672c Merge pull request #6764 from TryGhost/subscribe
Subscribers
2016-05-11 13:53:53 +02:00
Hannah Wolfe
f21e564591 Merge pull request #6703 from kevinansfield/6640-tests
Improve `gh-profile-image` tests for #6640
2016-05-11 13:00:19 +02:00
Hannah Wolfe
822bc5a834 Merge pull request #6808 from kevinansfield/fix-psm-input-save
Fix cmd-s shortcut not saving changes in text fields with focusout
2016-05-11 12:59:56 +02:00
kirrg001
90d872e592 Subscribers: Error Handling for adding subscribers
no issue
- do not expose information about adding subscribers
2016-05-11 12:55:29 +02:00
Kevin Ansfield
72fe327c3b 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
77fc9ea265 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
4f1fae5e7d 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
kirrg001
804fcffa6c Subscribers: store post id using the postlookup fn 2016-05-11 10:28:12 +02:00
kirrg001
ef605c5191 Subscribers: finish permission handling
no issue
- add some more tests, optimise tests and finish tests
- subscriber model checks external context permissions in permissible fn
- add missing permissions for subscriber csv
2016-05-11 10:28:12 +02:00
kirrg001
a836081f54 Subscribers: keep original referrer & location if set 2016-05-11 10:28:11 +02:00
Hannah Wolfe
6ef79534e4 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
74b83766bc 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
b5cd640bd9 deps: ember-light-table@0.1.9 2016-05-11 10:28:10 +02:00
Sebastian Gierlinger
01ae7ae49f Subscribers: Model, API & CSV import/export
- subscriber model
- subscriber app updates
- subscriber end points
- import/export CSV
- added headers to export file
- added dynamic email field detection for import
- returns stats object after CSV import
- mask error message from DB
2016-05-11 10:28:10 +02:00
Hannah Wolfe
4ca0c67f9c Subscribers: Adding subscribe app + tpl + helper
- added new internal app "subscribers"
- app has a template "subscribe.hbs"
- adds a new helper called "form_subscribe"
2016-05-11 10:28:10 +02:00
Hannah Wolfe
c41c09ef97 Subscribers: Migrations for new table + perms
refs #6301

- add new subscribers table with tests
- add permissions for subscribers endpoint
- minor improvments to test code
2016-05-11 10:28:10 +02:00
Sebastian Gierlinger
85c1e1407f Merge pull request #6804 from kirrg001/adds/permission-improvements
add small permission improvements
2016-05-11 10:27:32 +02:00
Kevin Ansfield
4f2f610811 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
11b2396e18 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
b7bd6d9968 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
Katharina Irrgang
f644d99460 add small permission improvements
no issue
- do not check client type in auth middleware
- offer filtering for findAll function in base
- add isInternalContext to base model
2016-05-08 14:22:55 +02:00
Hannah Wolfe
5eb5c2b3ef Merge pull request #6788 from kevinansfield/synchronous-labs-flags
Synchronous feature service
2016-05-08 13:59:31 +02:00
Hannah Wolfe
79b18f9566 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
49414d0843 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
35ecaee6d3 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
kirrg001
7d4107fec4 delete null values from incoming objects
no issue
- add more power to validation phase (checkObject) to get rid of null values
2016-05-08 09:18:44 +02:00
Hannah Wolfe
dac44b4d4b Merge pull request #6797 from kirrg001/fix/005-update-ghost-client-secrets-brace
fix brace mistake in 005/01-update-ghost-client-secrets.js
2016-05-07 17:31:36 +02:00
Sebastian Gierlinger
f7310f77b6 Merge pull request #6739 from ErisDS/cors-update
Add config URLS to CORS whitelist
2016-05-07 17:14:04 +02:00
kirrg001
6238dbc784 fix brace mistake in 005/01-update-ghost-client-secrets.js 2016-05-07 16:19:38 +02:00
Kevin Ansfield
3f6a67bc1f 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
Sebastian Gierlinger
ddb18e68f2 Merge pull request #6789 from ErisDS/postlookup
Split post lookup out of frontend controller
2016-05-05 17:46:56 +02:00
Hannah Wolfe
ae2f34c910 Split post lookup out of frontend controller
no issue

- move the post lookup functionality into its own file
- handle the pre and post lookup checks to verify that we found the correct post
- checking that the URL matches handles checking that a post looked up with pagePermalink is a page
- all cases where there is no match throws a 404 directly, this could just call next() ?
2016-05-05 15:53:17 +02:00
Kevin Ansfield
090c18da21 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
1a6568d8e2 remove unused feature controller 2016-04-28 12:22:54 -05:00
Austin Burdine
d5a2bc0b63 convert more action calls to the ember-invoke-action syntax 2016-04-28 10:34:36 -05:00
Austin Burdine
0f3c5e5900 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
9271343c9f 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
2cb22326d9 deps: ember@2.5.1
- removes Ember.merge deprecation
2016-04-28 07:15:15 -05:00
Kevin Ansfield
9aa43ec751 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
3fe030187e 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
Hannah Wolfe
8808674bbd Merge pull request #6461 from terinjokes/resource-hints
Add Preload link headers for browsers and CDNs
2016-04-28 09:51:14 +01:00
Austin Burdine
f8c0163eb1 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
Terin Stock
7bbfc37df6 automatically insert Link rel="preload" headers 2016-04-26 14:07:36 -07:00
Kevin Ansfield
9c5eaab37f 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
7a455a3e1d 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
Hannah Wolfe
f14c9f488f Merge pull request #6645 from joerx/issue6462
deps: validator@5.1.0
2016-04-20 18:55:43 +01:00
Austin Burdine
e8e249691c lock jquery-deparam version 2016-04-20 06:18:47 -05:00
Austin Burdine
c6ef618e10 deps: password-generator@2.0.2 2016-04-20 06:17:44 -05:00
Austin Burdine
95030734e9 allow ember to specify jQuery version
- fix slight acceptance test bug
2016-04-19 14:08:36 -05:00