2014-02-09 16:29:23 +01:00
|
|
|
{
|
2015-05-06 01:54:23 +02:00
|
|
|
"name": "ghost",
|
2016-09-26 19:22:11 +02:00
|
|
|
"version": "1.0.0-alpha.2",
|
2015-05-06 01:54:23 +02:00
|
|
|
"description": "Just a blogging platform.",
|
|
|
|
"author": "Ghost Foundation",
|
|
|
|
"homepage": "http://ghost.org",
|
|
|
|
"keywords": [
|
|
|
|
"ghost",
|
|
|
|
"blog",
|
|
|
|
"cms"
|
|
|
|
],
|
|
|
|
"repository": {
|
|
|
|
"type": "git",
|
|
|
|
"url": "git://github.com/TryGhost/Ghost.git"
|
|
|
|
},
|
|
|
|
"bugs": "https://github.com/TryGhost/Ghost/issues",
|
|
|
|
"contributors": "https://github.com/TryGhost/Ghost/graphs/contributors",
|
2015-05-26 06:00:32 +02:00
|
|
|
"license": "MIT",
|
2015-05-06 01:54:23 +02:00
|
|
|
"main": "./core/index",
|
|
|
|
"scripts": {
|
|
|
|
"start": "node index",
|
|
|
|
"test": "grunt validate --verbose"
|
|
|
|
},
|
|
|
|
"engines": {
|
2016-09-15 14:10:40 +02:00
|
|
|
"node": "~0.12.0 || ^4.2.0 || ^6.5.0"
|
2015-05-06 01:54:23 +02:00
|
|
|
},
|
|
|
|
"dependencies": {
|
2016-09-14 13:30:37 +02:00
|
|
|
"amperize": "0.3.1",
|
2016-09-19 13:31:47 +02:00
|
|
|
"archiver": "1.1.0",
|
2015-10-12 22:32:39 +02:00
|
|
|
"bcryptjs": "2.3.0",
|
2016-09-19 13:38:57 +02:00
|
|
|
"bluebird": "3.4.6",
|
2016-06-29 23:23:03 +02:00
|
|
|
"body-parser": "1.15.2",
|
2016-09-19 18:18:52 +02:00
|
|
|
"bookshelf": "0.10.1",
|
2016-04-21 11:19:55 +02:00
|
|
|
"chalk": "1.1.3",
|
2016-09-19 13:32:40 +02:00
|
|
|
"cheerio": "0.22.0",
|
2016-05-20 12:34:19 +02:00
|
|
|
"compression": "1.6.2",
|
2015-06-03 13:15:11 +02:00
|
|
|
"connect-slashes": "1.3.1",
|
2015-10-13 22:33:07 +02:00
|
|
|
"cookie-session": "1.2.0",
|
2016-09-14 14:16:18 +02:00
|
|
|
"cors": "2.8.1",
|
2016-09-19 12:25:37 +02:00
|
|
|
"csv-parser": "1.11.0",
|
2015-05-06 01:54:23 +02:00
|
|
|
"downsize": "0.0.8",
|
2016-07-19 18:04:34 +02:00
|
|
|
"express": "4.14.0",
|
2016-09-14 16:50:35 +02:00
|
|
|
"express-hbs": "1.0.3",
|
2016-09-14 19:13:36 +02:00
|
|
|
"extract-zip-fork": "1.5.1",
|
2016-04-29 23:30:41 +02:00
|
|
|
"fs-extra": "0.30.0",
|
2016-07-14 16:07:10 +02:00
|
|
|
"ghost-gql": "0.0.5",
|
2015-10-14 11:29:08 +02:00
|
|
|
"glob": "5.0.15",
|
2016-09-14 23:47:28 +02:00
|
|
|
"gscan": "0.0.15",
|
2016-06-30 19:46:21 +02:00
|
|
|
"html-to-text": "2.1.3",
|
✨ [FEATURE] AMP⚡ (#7229)
closes #6588, #7095
* `ImageObject` with image dimensions (#7152, #7151, #7153)
- Returns meta data as promise
- returns a new Promise from meta data
- uses `Promise.props()` to resolve `getClient()` and `getMetaData()`
- Adds 'image-size' util
The util returns an object like this
```
{
height: 50,
url: 'http://myblog.com/images/cat.jpg',
width: 50
};
```
if the dimensions can be fetched and rejects with error, if not.
In case we get a locally stored image or a not complete url (like `//www.gravatar.com/andsoon`), we add the protocol to the incomplete one and use `urlFor()` to get the absolute URL. If the request fails or `image-size` is not able to read the file, we reject with error.
- adds 'image-size' module to dependencies
- adds `getImageSizeFromUrl` function that returns image dimensions
- In preparation of AMP support and to improve our schema.org JSON-LD and structured data, I made the following changes:
- Changes the following properties to be `Objects`, which have a `url` property by default and a `dimensions` property, if `width` and `height` are available:
- `metaData.coverImage`
- `metaData.authorImage`
- `metaData.blog.logo`
- Checks cache by calling `getCachedImageSizeFromUrl`. If image dimensions were fetched already, returns them from cache instead of fetching them again.
- If we have image dimensions on hand, the output in our JSON-LD changes from normal urls to be full `ImageObjects`. Applies to all images and logos.
- Special case for `publisher.logo` as it has size restrictions: if the image doesn't fulfil the restrictions (<=600 width and <=60 height), we simply output the url instead, so like before.
- Adds new property for schema.org JSON-LD: `mainEntityOfPage` as an Object.
- Adds additional Open Graph data (if we have the image size): `og:image:width` and `og:image:height`
- Adds/updates tests
* AMP router and controller (#7171, #7157)
Implements AMP in `/apps/`:
- renders `amp.hbs` if route is `/:slug/amp/`
- updates `setResponseContext` to set context to `['amp', 'post']` for a amp post and `['amp', 'page']` for a page, but will not render amp template for a page
- updates `context_spec`
- registers 'amp' as new internal app
- adds the `amp.hbs` template to `core/server/apps/amp` which will be the default template for AMP posts.
- adds `isAmpURL` to `post-lookup`
* 🎨 Use `context` in meta as array (#7205)
Instead of reading the first value of the context array, we're checking if it includes certain context values.
This is a preparation change for AMP, where the context will be delivered as `['amp', 'post']`.
* ✨ AMP helpers (#7174, #7216, #7215, #7223)
- Adds AMP helpers `{{amp_content}}`, `{{amp_component}}` and `{{amp_ghost_head}}` to support AMP:
- `{{amp_content}}`:
- Adds `Amperize` as dependency
- AMP app uses new helper `{{amp_content}}` to render AMP HTML
- `Amperize` transforms regular HTML into AMP HTML
- Adds test for `{{amp_content}}` helper
- Adds 'Sanitize-HTML` as dependendy
- After the HTML get 'amperized' we still might have some HTML tags, which are prohibited in AMP HTML, so we use `sanitize-html` to remove those. With every update, `Amperize` gets and it is able to transform more HTML tags, they valid AMP HTML tags (e. g. `video` and `amp-video`) and will therefore not be removed.
- `{{amp_ghost_head}}`:
- registers `{{amp_ghost_head}}` helper, but uses `{{ghost_head}}` code
- uses `{{amp_ghost_head}}` in `amp.hbs` instead of `{{ghost_head}}`
- `{{ghost_head}}`:
- Render `amphtml` link in metadata for post, which links to the amp post (`getAmpUrl`)
- Updates all test in metadata to support `amp` context
- Changes context conditionals to work with full array instead of first array value
- Adds conditionals, so no additional javascript gets rendered in `{{ghost_head}}`
- Removes trailing `/amp/` in URLs, so only `amphtml` link on regular post renders it
- Adds a conditional, so no code injection will be included, for an `amp` context.
- `{{amp_components}}`:
- AMP app uses new helper `{{amp_components}}` to render necessary script tags for AMP extended components as `amp-iframe`, `amp-anime` and `amp-form`
- Adds test for `{{amp_components}}`
2016-08-22 18:49:27 +02:00
|
|
|
"image-size": "0.5.0",
|
2016-09-26 11:13:38 +02:00
|
|
|
"intl": "1.2.5",
|
2016-04-29 23:30:41 +02:00
|
|
|
"intl-messageformat": "1.3.0",
|
2016-09-19 15:42:03 +02:00
|
|
|
"jsonpath": "0.2.7",
|
2016-09-30 11:58:34 +02:00
|
|
|
"knex": "0.12.2",
|
2016-09-19 18:18:52 +02:00
|
|
|
"lodash": "4.16.0",
|
2016-09-23 13:04:48 +02:00
|
|
|
"moment": "2.15.1",
|
2016-09-26 15:23:49 +02:00
|
|
|
"mobiledoc-html-renderer": "0.3.0",
|
2016-07-27 18:59:07 +02:00
|
|
|
"moment-timezone": "0.5.5",
|
2016-04-21 11:43:59 +02:00
|
|
|
"morgan": "1.7.0",
|
2016-08-06 10:30:30 +02:00
|
|
|
"multer": "1.2.0",
|
2016-09-14 16:59:54 +02:00
|
|
|
"netjet": "1.1.3",
|
2016-09-13 16:09:10 +02:00
|
|
|
"nconf": "0.8.4",
|
2016-01-19 11:19:58 +01:00
|
|
|
"node-uuid": "1.4.7",
|
2015-05-06 01:54:23 +02:00
|
|
|
"nodemailer": "0.7.1",
|
2016-08-19 08:34:18 +02:00
|
|
|
"oauth2orize": "1.5.0",
|
2016-01-19 11:24:02 +01:00
|
|
|
"passport": "0.3.2",
|
2015-05-06 01:54:23 +02:00
|
|
|
"passport-http-bearer": "1.0.1",
|
|
|
|
"passport-oauth2-client-password": "0.1.2",
|
2016-04-21 11:44:58 +02:00
|
|
|
"path-match": "1.2.4",
|
2016-01-19 11:52:25 +01:00
|
|
|
"rss": "1.2.1",
|
✨ [FEATURE] AMP⚡ (#7229)
closes #6588, #7095
* `ImageObject` with image dimensions (#7152, #7151, #7153)
- Returns meta data as promise
- returns a new Promise from meta data
- uses `Promise.props()` to resolve `getClient()` and `getMetaData()`
- Adds 'image-size' util
The util returns an object like this
```
{
height: 50,
url: 'http://myblog.com/images/cat.jpg',
width: 50
};
```
if the dimensions can be fetched and rejects with error, if not.
In case we get a locally stored image or a not complete url (like `//www.gravatar.com/andsoon`), we add the protocol to the incomplete one and use `urlFor()` to get the absolute URL. If the request fails or `image-size` is not able to read the file, we reject with error.
- adds 'image-size' module to dependencies
- adds `getImageSizeFromUrl` function that returns image dimensions
- In preparation of AMP support and to improve our schema.org JSON-LD and structured data, I made the following changes:
- Changes the following properties to be `Objects`, which have a `url` property by default and a `dimensions` property, if `width` and `height` are available:
- `metaData.coverImage`
- `metaData.authorImage`
- `metaData.blog.logo`
- Checks cache by calling `getCachedImageSizeFromUrl`. If image dimensions were fetched already, returns them from cache instead of fetching them again.
- If we have image dimensions on hand, the output in our JSON-LD changes from normal urls to be full `ImageObjects`. Applies to all images and logos.
- Special case for `publisher.logo` as it has size restrictions: if the image doesn't fulfil the restrictions (<=600 width and <=60 height), we simply output the url instead, so like before.
- Adds new property for schema.org JSON-LD: `mainEntityOfPage` as an Object.
- Adds additional Open Graph data (if we have the image size): `og:image:width` and `og:image:height`
- Adds/updates tests
* AMP router and controller (#7171, #7157)
Implements AMP in `/apps/`:
- renders `amp.hbs` if route is `/:slug/amp/`
- updates `setResponseContext` to set context to `['amp', 'post']` for a amp post and `['amp', 'page']` for a page, but will not render amp template for a page
- updates `context_spec`
- registers 'amp' as new internal app
- adds the `amp.hbs` template to `core/server/apps/amp` which will be the default template for AMP posts.
- adds `isAmpURL` to `post-lookup`
* 🎨 Use `context` in meta as array (#7205)
Instead of reading the first value of the context array, we're checking if it includes certain context values.
This is a preparation change for AMP, where the context will be delivered as `['amp', 'post']`.
* ✨ AMP helpers (#7174, #7216, #7215, #7223)
- Adds AMP helpers `{{amp_content}}`, `{{amp_component}}` and `{{amp_ghost_head}}` to support AMP:
- `{{amp_content}}`:
- Adds `Amperize` as dependency
- AMP app uses new helper `{{amp_content}}` to render AMP HTML
- `Amperize` transforms regular HTML into AMP HTML
- Adds test for `{{amp_content}}` helper
- Adds 'Sanitize-HTML` as dependendy
- After the HTML get 'amperized' we still might have some HTML tags, which are prohibited in AMP HTML, so we use `sanitize-html` to remove those. With every update, `Amperize` gets and it is able to transform more HTML tags, they valid AMP HTML tags (e. g. `video` and `amp-video`) and will therefore not be removed.
- `{{amp_ghost_head}}`:
- registers `{{amp_ghost_head}}` helper, but uses `{{ghost_head}}` code
- uses `{{amp_ghost_head}}` in `amp.hbs` instead of `{{ghost_head}}`
- `{{ghost_head}}`:
- Render `amphtml` link in metadata for post, which links to the amp post (`getAmpUrl`)
- Updates all test in metadata to support `amp` context
- Changes context conditionals to work with full array instead of first array value
- Adds conditionals, so no additional javascript gets rendered in `{{ghost_head}}`
- Removes trailing `/amp/` in URLs, so only `amphtml` link on regular post renders it
- Adds a conditional, so no code injection will be included, for an `amp` context.
- `{{amp_components}}`:
- AMP app uses new helper `{{amp_components}}` to render necessary script tags for AMP extended components as `amp-iframe`, `amp-anime` and `amp-form`
- Adds test for `{{amp_components}}`
2016-08-22 18:49:27 +02:00
|
|
|
"sanitize-html": "1.13.0",
|
2016-07-15 13:07:07 +02:00
|
|
|
"semver": "5.3.0",
|
2015-05-06 01:54:23 +02:00
|
|
|
"showdown-ghost": "0.3.6",
|
2016-05-20 22:09:49 +02:00
|
|
|
"sqlite3": "3.1.4",
|
2016-09-23 13:58:11 +02:00
|
|
|
"superagent": "2.3.0",
|
2015-12-08 12:01:49 +01:00
|
|
|
"unidecode": "0.1.8",
|
2016-09-19 14:51:36 +02:00
|
|
|
"validator": "5.7.0",
|
2016-02-08 22:30:57 +01:00
|
|
|
"xml": "1.0.1"
|
2015-05-06 01:54:23 +02:00
|
|
|
},
|
|
|
|
"optionalDependencies": {
|
2016-09-20 16:52:43 +02:00
|
|
|
"mysql": "2.11.1"
|
2015-05-06 01:54:23 +02:00
|
|
|
},
|
|
|
|
"devDependencies": {
|
2016-04-06 22:07:55 +02:00
|
|
|
"grunt": "1.0.1",
|
|
|
|
"grunt-bg-shell": "2.3.3",
|
|
|
|
"grunt-cli": "1.2.0",
|
|
|
|
"grunt-contrib-clean": "1.0.0",
|
2016-05-24 19:53:54 +02:00
|
|
|
"grunt-contrib-compress": "1.3.0",
|
2016-04-06 22:07:55 +02:00
|
|
|
"grunt-contrib-copy": "1.0.0",
|
|
|
|
"grunt-contrib-jshint": "1.0.0",
|
2016-07-19 18:04:20 +02:00
|
|
|
"grunt-contrib-uglify": "2.0.0",
|
2016-04-06 22:07:55 +02:00
|
|
|
"grunt-contrib-watch": "1.0.0",
|
|
|
|
"grunt-docker": "0.0.11",
|
|
|
|
"grunt-express-server": "0.5.3",
|
2016-06-21 23:22:16 +02:00
|
|
|
"grunt-jscs": "3.0.1",
|
2016-04-06 22:07:55 +02:00
|
|
|
"grunt-mocha-cli": "2.1.0",
|
2016-08-10 20:09:59 +02:00
|
|
|
"grunt-mocha-istanbul": "5.0.2",
|
2016-08-13 14:39:42 +02:00
|
|
|
"grunt-shell": "1.3.1",
|
2016-05-31 15:38:11 +02:00
|
|
|
"grunt-subgrunt": "1.2.0",
|
2015-05-28 17:16:09 +02:00
|
|
|
"grunt-update-submodules": "0.4.1",
|
2016-09-20 12:52:16 +02:00
|
|
|
"gulp": "3.9.1",
|
2016-09-26 18:17:40 +02:00
|
|
|
"gulp-git-submodule": "1.0.1",
|
2016-09-20 12:52:16 +02:00
|
|
|
"gulp-livereload": "3.8.1",
|
|
|
|
"gulp-nodemon": "2.1.0",
|
🛠 Improve existing gulp tasks (#7444)
refs #7427
- Deleting the `built` or `dist` directory doesn't result in an error, when running `gulp dev`
- Adds default task as `gulp dev`
- Adds abbreviations for the repositories in `gulp setup` task (`--ghost` -> `-g`, `--admin` -> `-a` and `--casper` -> `-c`) to type less 😊
- Installs dependencies on `gulp dev`, if called with `--deps` or `-d`
- Sets `verbose` option nodemon to default (=`false`) to have less unneccessary logging.
- Will do a delete of all dependencies and install them again ('FFS'), if `gulp deps` is called with a force flag.
- Will update submodules not matter what, if `gulp submodules` is called with a force flag. Calling `gulp submodules` without the force flag will only update/initiate the submodules, if the folders don't exist.
- Better logging messages and sequential task handling.
- Removes `gulp-shell` as dependency, as this is on gulp's blacklist
- Refactors code, that used `gulp-shell` to use `child_process.exec` or `spawn` instead.
- Exits properly if node crashes
-----------------------
Tasks available after this PR:
- `gulp server`: Starts a nodemon server with livereload of the ghost core only. No client build here.
- `gulp dev`: [ --deps | -d ] Starts development mode for Ghost, incl. client build and livereload for both. Will also update the submodules if the directories are missing. If called with with `--deps` flag, it will install client and core dependencies.
- `gulp submodules`: [ --force | -f ] Will update the submodules, if directories are missing. Will update no matter what, if called with force flag.
- `gulp deps`: [ --force | -f ] Will update client and core dependencies. Does a fresh install of both (delete, cache clear and install) if called with force flag.
- `gulp setup`: </br>[ --ghost | -g 'branch' or 'pr/1234' ]
[ --admin | -a 'branch' or 'pr/1234' ]
[ --casper | -c 'branch' or 'pr/1234' ]
[ --force | -f ]
Takes various - optional - parameters. If called without parameters, this task will update submodules first (if directory doesn't exist) and then install client and core dependendies.
If called with branch 'master', submodules will be updated.
Calling with the force flag will do a clean install of the dependencies.
There's no autocomplete for branchnames at the moment 😔
To check out a PR (e. g. `--ghost pr/7444`), it is necessary, that you add an additional fetch line in the `.git/config` file for each repository: `fetch = +refs/pull/*/head:refs/remotes/upstream/pr/*`. See https://dev.ghost.org/easy-git-pr-test/ for further information.
2016-09-29 19:32:17 +02:00
|
|
|
"gulp-util": "3.0.7",
|
2016-09-19 14:51:25 +02:00
|
|
|
"istanbul": "0.4.5",
|
2016-04-29 23:30:41 +02:00
|
|
|
"matchdep": "1.0.1",
|
2016-09-26 18:17:40 +02:00
|
|
|
"minimist": "1.2.0",
|
2016-08-11 09:51:19 +02:00
|
|
|
"mocha": "3.0.2",
|
2016-04-29 23:30:41 +02:00
|
|
|
"nock": "8.0.0",
|
2016-07-05 18:25:23 +02:00
|
|
|
"rewire": "2.5.2",
|
2016-09-26 18:17:40 +02:00
|
|
|
"run-sequence": "1.2.2",
|
2016-08-15 09:24:46 +02:00
|
|
|
"should": "11.1.0",
|
2016-02-07 22:27:01 +01:00
|
|
|
"should-http": "0.0.4",
|
2016-09-19 15:42:22 +02:00
|
|
|
"sinon": "1.17.6",
|
2016-08-22 19:53:45 +02:00
|
|
|
"supertest": "1.2.0",
|
2016-09-19 15:42:13 +02:00
|
|
|
"tmp": "0.0.29"
|
2016-02-07 14:16:18 +01:00
|
|
|
},
|
|
|
|
"greenkeeper": {
|
2016-03-29 05:24:32 +02:00
|
|
|
"ignore": [
|
|
|
|
"glob",
|
|
|
|
"mysql",
|
|
|
|
"nodemailer",
|
2016-05-08 13:17:17 +02:00
|
|
|
"showdown-ghost"
|
2016-03-29 05:24:32 +02:00
|
|
|
]
|
2015-05-06 01:54:23 +02:00
|
|
|
}
|
2014-02-09 16:29:23 +01:00
|
|
|
}
|