0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-11 02:12:21 -05:00

Removed 80 char wordwrap in excerpts

refs: https://github.com/TryGhost/Team/issues/1609

- remove the 80 char wordwrap
- this makes the function the same as used in the post serializer
- updated references everywhere to use the same function
This commit is contained in:
Hannah Wolfe 2022-05-13 08:56:13 +01:00
parent 6b3a657f88
commit f436d23f87
5 changed files with 104 additions and 218 deletions

View file

@ -1,7 +1,7 @@
const logging = require('@tryghost/logging');
const {createIrreversibleMigration} = require('../../utils');
const mobiledocLib = require('../../../../lib/mobiledoc');
const htmlToText = require('html-to-text');
const htmlToPlaintext = require('../../../../../shared/html-to-plaintext');
module.exports = createIrreversibleMigration(async (knex) => {
logging.info('Starting re-generation of posts html.');
@ -45,17 +45,8 @@ module.exports = createIrreversibleMigration(async (knex) => {
html: html
};
// NOTE: block comes straight from the Post model
// https://github.com/TryGhost/Ghost/blob/4.0.0-alpha.2/core/server/models/post.js#L484
if (html !== post.html || !post.plaintext) {
const plaintext = htmlToText.fromString(html, {
wordwrap: 80,
ignoreImage: true,
hideLinkHrefIfSameAsText: true,
preserveNewlines: true,
returnDomByDefault: true,
uppercaseHeadings: false
});
const plaintext = htmlToPlaintext(html);
if (plaintext !== post.plaintext) {
updatedAttrs.plaintext = plaintext;

View file

@ -7,7 +7,7 @@ const api = require('../../api').endpoints;
const apiShared = require('../../api').shared;
const {URL} = require('url');
const mobiledocLib = require('../../lib/mobiledoc');
const htmlToText = require('html-to-text');
const htmlToPlaintext = require('../../../shared/html-to-plaintext');
const {isUnsplashImage, isLocalContentImage} = require('@tryghost/kg-default-cards/lib/utils');
const {textColorForBackgroundColor, darkenToContrastThreshold} = require('@tryghost/color-utils');
const logging = require('@tryghost/logging');
@ -49,20 +49,6 @@ const getSite = () => {
});
};
const htmlToPlaintext = (html) => {
// same options as used in Post model for generating plaintext but without `wordwrap: 80`
// to avoid replacement strings being split across lines and for mail clients to handle
// word wrapping based on user preferences
return htmlToText.fromString(html, {
wordwrap: false,
ignoreImage: true,
hideLinkHrefIfSameAsText: true,
preserveNewlines: true,
returnDomByDefault: true,
uppercaseHeadings: false
});
};
/**
* createUnsubscribeUrl
*

View file

@ -2,7 +2,7 @@ module.exports = function htmlToPlaintext(html) {
const htmlToText = require('html-to-text');
return htmlToText.fromString(html, {
wordwrap: 80,
wordwrap: false,
ignoreImage: true,
hideLinkHrefIfSameAsText: true,
preserveNewlines: true,

View file

@ -77,16 +77,11 @@ Object {
"created_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000\\\\\\+\\\\d\\{2\\}:\\\\d\\{2\\}/,
"custom_excerpt": null,
"custom_template": null,
"excerpt": "Unlike posts, pages in Ghost don't appear in the main feed. They're separate,
individual pages which only show up when you link to them. Great for content
which is important, but separate from your usual posts.
"excerpt": "Unlike posts, pages in Ghost don't appear in the main feed. They're separate, individual pages which only show up when you link to them. Great for content which is important, but separate from your usual posts.
An about page is a great example of one you might want to set up early on so
people can find out more about you, and what you do. Why should people subscribe
to your site and become a member? Details help!
An about page is a great example of one you might want to set up early on so people can find out more about you, and what you do. Why should people subscribe to your site and become a member? Details help!
> Tip: If you're reading any post or page on your site and you notice something
y",
> Tip: If you're reading any post or page on your site and you notice something y",
"feature_image": null,
"feature_image_alt": null,
"feature_image_caption": null,
@ -121,17 +116,14 @@ y",
"created_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000\\\\\\+\\\\d\\{2\\}:\\\\d\\{2\\}/,
"custom_excerpt": null,
"custom_template": null,
"excerpt": "If you want to set up a contact page for people to be able to reach out to you,
the simplest way is to set up a simple page like this and list the different
ways people can reach out to you.
"excerpt": "If you want to set up a contact page for people to be able to reach out to you, the simplest way is to set up a simple page like this and list the different ways people can reach out to you.
For example, here's how to reach us!
* @Ghost [https://twitter.com/ghost] on Twitter
* @Ghost [https://www.facebook.com/ghost] on Facebook
* @Ghost [https://instagram.com/ghost] on Instagram
If you prefer to use a contact form, almost all of the great embedded form
services work great with Ghost and are",
If you prefer to use a contact form, almost all of the great embedded form services work great with Ghost and are",
"feature_image": null,
"feature_image_alt": null,
"feature_image_caption": null,
@ -166,13 +158,9 @@ services work great with Ghost and are",
"created_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000\\\\\\+\\\\d\\{2\\}:\\\\d\\{2\\}/,
"custom_excerpt": null,
"custom_template": null,
"excerpt": "Oh hey, you clicked every link of our starter content and even clicked this
small link in the footer! If you like Ghost and you're enjoying the product so
far, we'd hugely appreciate your support in any way you care to show it.
"excerpt": "Oh hey, you clicked every link of our starter content and even clicked this small link in the footer! If you like Ghost and you're enjoying the product so far, we'd hugely appreciate your support in any way you care to show it.
Ghost is a non-profit organization, and we give away all our intellectual
property as open source software. If you believe in what we do, there are a
number of ways you can give us a hand, and we hugely appreciate all of them:
Ghost is a non-profit organization, and we give away all our intellectual property as open source software. If you believe in what we do, there are a number of ways you can give us a hand, and we hugely appreciate all of them:
* Contribute code via GitHub [https://gith",
"feature_image": null,
@ -209,12 +197,9 @@ number of ways you can give us a hand, and we hugely appreciate all of them:
"created_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000\\\\\\+\\\\d\\{2\\}:\\\\d\\{2\\}/,
"custom_excerpt": null,
"custom_template": null,
"excerpt": "Wondering how Ghost fares when it comes to privacy and GDPR rules? Good news:
Ghost does not use any tracking cookies of any kind.
"excerpt": "Wondering how Ghost fares when it comes to privacy and GDPR rules? Good news: Ghost does not use any tracking cookies of any kind.
You can integrate any products, services, ads or integrations with Ghost
yourself if you want to, but it's always a good idea to disclose how subscriber
data will be used by putting together a privacy page.",
You can integrate any products, services, ads or integrations with Ghost yourself if you want to, but it's always a good idea to disclose how subscriber data will be used by putting together a privacy page.",
"feature_image": null,
"feature_image_alt": null,
"feature_image_caption": null,
@ -284,7 +269,7 @@ exports[`Pages Content API Can request pages 2: [headers] 1`] = `
Object {
"access-control-allow-origin": "*",
"cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0",
"content-length": "9207",
"content-length": "9192",
"content-type": "application/json; charset=utf-8",
"etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/,
"vary": "Accept-Encoding",

View file

@ -266,14 +266,11 @@ Object {
* Praesent
* Pellentesque
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.
1234abcdefghijkl
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor
sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies
mi vitae est. Mauris placerat eleifend leo.
1234abcdefghijklDefinition listConsectetur ad",
Definition listConsectetur ad",
"feature_image": null,
"feature_image_alt": null,
"feature_image_caption": null,
@ -620,13 +617,9 @@ mi vitae est. Mauris placerat eleifend leo.
"custom_excerpt": null,
"custom_template": null,
"email_subject": null,
"excerpt": "For creators and aspiring entrepreneurs looking to generate a sustainable
recurring revenue stream from their creative work, Ghost has built-in payments
allowing you to create a subscription commerce business.
"excerpt": "For creators and aspiring entrepreneurs looking to generate a sustainable recurring revenue stream from their creative work, Ghost has built-in payments allowing you to create a subscription commerce business.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to
quickly and easily create monthly and yearly premium plans for members to
subscribe to, as well as complimentary plans for friends and family.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to quickly and easily create monthly and yearly premium plans for members to subscribe to, as well as complimentary plans for friends and family.
Ghost takes 0% payment fees, so everything you make is yours to ",
"feature_image": "https://static.ghost.org/v4.0.0/images/organizing-your-content.png",
@ -641,29 +634,19 @@ Ghost takes 0% payment fees, so everything you make is yours to ",
"og_description": null,
"og_image": null,
"og_title": null,
"plaintext": "For creators and aspiring entrepreneurs looking to generate a sustainable
recurring revenue stream from their creative work, Ghost has built-in payments
allowing you to create a subscription commerce business.
"plaintext": "For creators and aspiring entrepreneurs looking to generate a sustainable recurring revenue stream from their creative work, Ghost has built-in payments allowing you to create a subscription commerce business.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to
quickly and easily create monthly and yearly premium plans for members to
subscribe to, as well as complimentary plans for friends and family.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to quickly and easily create monthly and yearly premium plans for members to subscribe to, as well as complimentary plans for friends and family.
Ghost takes 0% payment fees, so everything you make is yours to keep!
Using subscriptions, you can build an independent media business like
Stratechery [https://stratechery.com], The Information
[https://www.theinformation.com], or The Browser [https://thebrowser.com].
Using subscriptions, you can build an independent media business like Stratechery [https://stratechery.com], The Information [https://www.theinformation.com], or The Browser [https://thebrowser.com].
The creator economy is just getting started, and Ghost allows you to build
something based on technology that you own and control.
The creator economy is just getting started, and Ghost allows you to build something based on technology that you own and control.
[https://thebrowser.com]The Browser has over 10,000 paying subscribersMost
successful subscription businesses publish a mix of free and paid posts to
attract a new audience, and upsell the most loyal members to a premium offering.
You can also mix different access levels within the same post, showing a free
preview to logged out members and then, right when you're ready for a
cliffhanger, that's a good time to...",
https://thebrowser.comThe Browser has over 10,000 paying subscribers
Most successful subscription businesses publish a mix of free and paid posts to attract a new audience, and upsell the most loyal members to a premium offering. You can also mix different access levels within the same post, showing a free preview to logged out members and then, right when you're ready for a cliffhanger, that's a good time to...",
"primary_author": Object {
"bio": "You can delete this user to remove all the welcome posts",
"cover_image": null,
@ -854,11 +837,15 @@ cliffhanger, that's a good time to...",
"custom_template": null,
"email_subject": null,
"excerpt": "testing
mctesters
* test
* line
* items",
* items
",
"feature_image": "http://placekitten.com/500/200",
"feature_image_alt": null,
"feature_image_caption": null,
@ -933,13 +920,8 @@ mctesters
"custom_template": null,
"email_subject": null,
"excerpt": "HTML Ipsum Presents
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor
sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies
mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien
ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae,
ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros
ipsum rutrum or",
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum o",
"feature_image": "http://127.0.0.1:2369/content/images/2018/hey.jpg",
"feature_image_alt": null,
"feature_image_caption": null,
@ -1054,7 +1036,7 @@ exports[`Posts Content API Can filter posts by authors 2: [headers] 1`] = `
Object {
"access-control-allow-origin": "*",
"cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0",
"content-length": "54909",
"content-length": "54894",
"content-type": "application/json; charset=utf-8",
"etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/,
"vary": "Accept-Encoding",
@ -1092,14 +1074,11 @@ Object {
* Praesent
* Pellentesque
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.
1234abcdefghijkl
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor
sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies
mi vitae est. Mauris placerat eleifend leo.
1234abcdefghijklDefinition listConsectetur ad",
Definition listConsectetur ad",
"feature_image": null,
"feature_image_alt": null,
"feature_image_caption": null,
@ -1137,11 +1116,15 @@ mi vitae est. Mauris placerat eleifend leo.
"custom_template": null,
"email_subject": null,
"excerpt": "testing
mctesters
* test
* line
* items",
* items
",
"feature_image": "http://placekitten.com/500/200",
"feature_image_alt": null,
"feature_image_caption": null,
@ -1228,13 +1211,8 @@ mctesters
"custom_template": null,
"email_subject": null,
"excerpt": "HTML Ipsum Presents
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor
sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies
mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien
ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae,
ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros
ipsum rutrum or",
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum o",
"feature_image": "http://127.0.0.1:2369/content/images/2018/hey.jpg",
"feature_image_alt": null,
"feature_image_caption": null,
@ -1768,13 +1746,9 @@ Object {
"custom_excerpt": null,
"custom_template": null,
"email_subject": null,
"excerpt": "For creators and aspiring entrepreneurs looking to generate a sustainable
recurring revenue stream from their creative work, Ghost has built-in payments
allowing you to create a subscription commerce business.
"excerpt": "For creators and aspiring entrepreneurs looking to generate a sustainable recurring revenue stream from their creative work, Ghost has built-in payments allowing you to create a subscription commerce business.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to
quickly and easily create monthly and yearly premium plans for members to
subscribe to, as well as complimentary plans for friends and family.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to quickly and easily create monthly and yearly premium plans for members to subscribe to, as well as complimentary plans for friends and family.
Ghost takes 0% payment fees, so everything you make is yours to ",
"feature_image": "https://static.ghost.org/v4.0.0/images/organizing-your-content.png",
@ -1789,29 +1763,19 @@ Ghost takes 0% payment fees, so everything you make is yours to ",
"og_description": null,
"og_image": null,
"og_title": null,
"plaintext": "For creators and aspiring entrepreneurs looking to generate a sustainable
recurring revenue stream from their creative work, Ghost has built-in payments
allowing you to create a subscription commerce business.
"plaintext": "For creators and aspiring entrepreneurs looking to generate a sustainable recurring revenue stream from their creative work, Ghost has built-in payments allowing you to create a subscription commerce business.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to
quickly and easily create monthly and yearly premium plans for members to
subscribe to, as well as complimentary plans for friends and family.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to quickly and easily create monthly and yearly premium plans for members to subscribe to, as well as complimentary plans for friends and family.
Ghost takes 0% payment fees, so everything you make is yours to keep!
Using subscriptions, you can build an independent media business like
Stratechery [https://stratechery.com], The Information
[https://www.theinformation.com], or The Browser [https://thebrowser.com].
Using subscriptions, you can build an independent media business like Stratechery [https://stratechery.com], The Information [https://www.theinformation.com], or The Browser [https://thebrowser.com].
The creator economy is just getting started, and Ghost allows you to build
something based on technology that you own and control.
The creator economy is just getting started, and Ghost allows you to build something based on technology that you own and control.
[https://thebrowser.com]The Browser has over 10,000 paying subscribersMost
successful subscription businesses publish a mix of free and paid posts to
attract a new audience, and upsell the most loyal members to a premium offering.
You can also mix different access levels within the same post, showing a free
preview to logged out members and then, right when you're ready for a
cliffhanger, that's a good time to...",
https://thebrowser.comThe Browser has over 10,000 paying subscribers
Most successful subscription businesses publish a mix of free and paid posts to attract a new audience, and upsell the most loyal members to a premium offering. You can also mix different access levels within the same post, showing a free preview to logged out members and then, right when you're ready for a cliffhanger, that's a good time to...",
"primary_author": Object {
"bio": "You can delete this user to remove all the welcome posts",
"cover_image": null,
@ -2026,14 +1990,11 @@ cliffhanger, that's a good time to...",
* Praesent
* Pellentesque
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.
1234abcdefghijkl
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor
sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies
mi vitae est. Mauris placerat eleifend leo.
1234abcdefghijklDefinition listConsectetur ad",
Definition listConsectetur ad",
"feature_image": null,
"feature_image_alt": null,
"feature_image_caption": null,
@ -2087,11 +2048,15 @@ mi vitae est. Mauris placerat eleifend leo.
"custom_template": null,
"email_subject": null,
"excerpt": "testing
mctesters
* test
* line
* items",
* items
",
"feature_image": "http://placekitten.com/500/200",
"feature_image_alt": null,
"feature_image_caption": null,
@ -2172,13 +2137,8 @@ mctesters
"custom_template": null,
"email_subject": null,
"excerpt": "HTML Ipsum Presents
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor
sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies
mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien
ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae,
ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros
ipsum rutrum or",
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum o",
"feature_image": "http://127.0.0.1:2369/content/images/2018/hey.jpg",
"feature_image_alt": null,
"feature_image_caption": null,
@ -2321,7 +2281,7 @@ exports[`Posts Content API Can include relations 2: [headers] 1`] = `
Object {
"access-control-allow-origin": "*",
"cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0",
"content-length": "65238",
"content-length": "65223",
"content-type": "application/json; charset=utf-8",
"etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/,
"vary": "Accept-Encoding",
@ -2620,13 +2580,9 @@ Object {
"custom_excerpt": null,
"custom_template": null,
"email_subject": null,
"excerpt": "For creators and aspiring entrepreneurs looking to generate a sustainable
recurring revenue stream from their creative work, Ghost has built-in payments
allowing you to create a subscription commerce business.
"excerpt": "For creators and aspiring entrepreneurs looking to generate a sustainable recurring revenue stream from their creative work, Ghost has built-in payments allowing you to create a subscription commerce business.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to
quickly and easily create monthly and yearly premium plans for members to
subscribe to, as well as complimentary plans for friends and family.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to quickly and easily create monthly and yearly premium plans for members to subscribe to, as well as complimentary plans for friends and family.
Ghost takes 0% payment fees, so everything you make is yours to ",
"feature_image": "https://static.ghost.org/v4.0.0/images/organizing-your-content.png",
@ -2641,29 +2597,19 @@ Ghost takes 0% payment fees, so everything you make is yours to ",
"og_description": null,
"og_image": null,
"og_title": null,
"plaintext": "For creators and aspiring entrepreneurs looking to generate a sustainable
recurring revenue stream from their creative work, Ghost has built-in payments
allowing you to create a subscription commerce business.
"plaintext": "For creators and aspiring entrepreneurs looking to generate a sustainable recurring revenue stream from their creative work, Ghost has built-in payments allowing you to create a subscription commerce business.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to
quickly and easily create monthly and yearly premium plans for members to
subscribe to, as well as complimentary plans for friends and family.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to quickly and easily create monthly and yearly premium plans for members to subscribe to, as well as complimentary plans for friends and family.
Ghost takes 0% payment fees, so everything you make is yours to keep!
Using subscriptions, you can build an independent media business like
Stratechery [https://stratechery.com], The Information
[https://www.theinformation.com], or The Browser [https://thebrowser.com].
Using subscriptions, you can build an independent media business like Stratechery [https://stratechery.com], The Information [https://www.theinformation.com], or The Browser [https://thebrowser.com].
The creator economy is just getting started, and Ghost allows you to build
something based on technology that you own and control.
The creator economy is just getting started, and Ghost allows you to build something based on technology that you own and control.
[https://thebrowser.com]The Browser has over 10,000 paying subscribersMost
successful subscription businesses publish a mix of free and paid posts to
attract a new audience, and upsell the most loyal members to a premium offering.
You can also mix different access levels within the same post, showing a free
preview to logged out members and then, right when you're ready for a
cliffhanger, that's a good time to...",
https://thebrowser.comThe Browser has over 10,000 paying subscribers
Most successful subscription businesses publish a mix of free and paid posts to attract a new audience, and upsell the most loyal members to a premium offering. You can also mix different access levels within the same post, showing a free preview to logged out members and then, right when you're ready for a cliffhanger, that's a good time to...",
"published_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000\\\\\\+\\\\d\\{2\\}:\\\\d\\{2\\}/,
"reading_time": 1,
"slug": "sell",
@ -2764,14 +2710,11 @@ cliffhanger, that's a good time to...",
* Praesent
* Pellentesque
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.
1234abcdefghijkl
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor
sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies
mi vitae est. Mauris placerat eleifend leo.
1234abcdefghijklDefinition listConsectetur ad",
Definition listConsectetur ad",
"feature_image": null,
"feature_image_alt": null,
"feature_image_caption": null,
@ -2807,11 +2750,15 @@ mi vitae est. Mauris placerat eleifend leo.
"custom_template": null,
"email_subject": null,
"excerpt": "testing
mctesters
* test
* line
* items",
* items
",
"feature_image": "http://placekitten.com/500/200",
"feature_image_alt": null,
"feature_image_caption": null,
@ -2854,13 +2801,8 @@ mctesters
"custom_template": null,
"email_subject": null,
"excerpt": "HTML Ipsum Presents
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor
sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies
mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien
ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae,
ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros
ipsum rutrum or",
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum o",
"feature_image": "http://127.0.0.1:2369/content/images/2018/hey.jpg",
"feature_image_alt": null,
"feature_image_caption": null,
@ -2928,7 +2870,7 @@ exports[`Posts Content API Can request posts 2: [headers] 1`] = `
Object {
"access-control-allow-origin": "*",
"cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0",
"content-length": "46357",
"content-length": "46342",
"content-type": "application/json; charset=utf-8",
"etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/,
"vary": "Accept-Encoding",
@ -3111,13 +3053,9 @@ Object {
"custom_excerpt": null,
"custom_template": null,
"email_subject": null,
"excerpt": "For creators and aspiring entrepreneurs looking to generate a sustainable
recurring revenue stream from their creative work, Ghost has built-in payments
allowing you to create a subscription commerce business.
"excerpt": "For creators and aspiring entrepreneurs looking to generate a sustainable recurring revenue stream from their creative work, Ghost has built-in payments allowing you to create a subscription commerce business.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to
quickly and easily create monthly and yearly premium plans for members to
subscribe to, as well as complimentary plans for friends and family.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to quickly and easily create monthly and yearly premium plans for members to subscribe to, as well as complimentary plans for friends and family.
Ghost takes 0% payment fees, so everything you make is yours to ",
"feature_image": "https://static.ghost.org/v4.0.0/images/organizing-your-content.png",
@ -3132,29 +3070,19 @@ Ghost takes 0% payment fees, so everything you make is yours to ",
"og_description": null,
"og_image": null,
"og_title": null,
"plaintext": "For creators and aspiring entrepreneurs looking to generate a sustainable
recurring revenue stream from their creative work, Ghost has built-in payments
allowing you to create a subscription commerce business.
"plaintext": "For creators and aspiring entrepreneurs looking to generate a sustainable recurring revenue stream from their creative work, Ghost has built-in payments allowing you to create a subscription commerce business.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to
quickly and easily create monthly and yearly premium plans for members to
subscribe to, as well as complimentary plans for friends and family.
Connect your Stripe [https://stripe.com] account to Ghost, and you'll be able to quickly and easily create monthly and yearly premium plans for members to subscribe to, as well as complimentary plans for friends and family.
Ghost takes 0% payment fees, so everything you make is yours to keep!
Using subscriptions, you can build an independent media business like
Stratechery [https://stratechery.com], The Information
[https://www.theinformation.com], or The Browser [https://thebrowser.com].
Using subscriptions, you can build an independent media business like Stratechery [https://stratechery.com], The Information [https://www.theinformation.com], or The Browser [https://thebrowser.com].
The creator economy is just getting started, and Ghost allows you to build
something based on technology that you own and control.
The creator economy is just getting started, and Ghost allows you to build something based on technology that you own and control.
[https://thebrowser.com]The Browser has over 10,000 paying subscribersMost
successful subscription businesses publish a mix of free and paid posts to
attract a new audience, and upsell the most loyal members to a premium offering.
You can also mix different access levels within the same post, showing a free
preview to logged out members and then, right when you're ready for a
cliffhanger, that's a good time to...",
https://thebrowser.comThe Browser has over 10,000 paying subscribers
Most successful subscription businesses publish a mix of free and paid posts to attract a new audience, and upsell the most loyal members to a premium offering. You can also mix different access levels within the same post, showing a free preview to logged out members and then, right when you're ready for a cliffhanger, that's a good time to...",
"published_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000\\\\\\+\\\\d\\{2\\}:\\\\d\\{2\\}/,
"reading_time": 1,
"slug": "sell",
@ -3255,14 +3183,11 @@ cliffhanger, that's a good time to...",
* Praesent
* Pellentesque
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.
1234abcdefghijkl
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor
sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies
mi vitae est. Mauris placerat eleifend leo.
1234abcdefghijklDefinition listConsectetur ad",
Definition listConsectetur ad",
"feature_image": null,
"feature_image_alt": null,
"feature_image_caption": null,
@ -3298,11 +3223,15 @@ mi vitae est. Mauris placerat eleifend leo.
"custom_template": null,
"email_subject": null,
"excerpt": "testing
mctesters
* test
* line
* items",
* items
",
"feature_image": "http://placekitten.com/500/200",
"feature_image_alt": null,
"feature_image_caption": null,
@ -3345,13 +3274,8 @@ mctesters
"custom_template": null,
"email_subject": null,
"excerpt": "HTML Ipsum Presents
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac
turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor
sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies
mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien
ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae,
ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros
ipsum rutrum or",
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum o",
"feature_image": "http://127.0.0.1:2369/content/images/2018/hey.jpg",
"feature_image_alt": null,
"feature_image_caption": null,
@ -3419,7 +3343,7 @@ exports[`Posts Content API Can request posts from different origin 2: [headers]
Object {
"access-control-allow-origin": "*",
"cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0",
"content-length": "46357",
"content-length": "46342",
"content-type": "application/json; charset=utf-8",
"etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/,
"vary": "Accept-Encoding",