Merge branch 'main' into new-publish-flow-DES-594
This commit is contained in:
commit
320e4f9996
3
.gitignore
vendored
3
.gitignore
vendored
@ -66,9 +66,6 @@ typings/
|
||||
# dotenv environment variables file
|
||||
.env
|
||||
|
||||
# direnv
|
||||
.direnv
|
||||
|
||||
# IDE
|
||||
.idea/*
|
||||
*.iml
|
||||
|
@ -33,7 +33,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "1.38.1",
|
||||
"@testing-library/react": "14.1.0",
|
||||
"@testing-library/react": "14.3.1",
|
||||
"@tryghost/admin-x-design-system": "0.0.0",
|
||||
"@tryghost/admin-x-framework": "0.0.0",
|
||||
"@types/jest": "29.5.12",
|
||||
|
@ -32,7 +32,7 @@
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@testing-library/react": "14.1.0",
|
||||
"@testing-library/react": "14.3.1",
|
||||
"@tryghost/admin-x-design-system": "0.0.0",
|
||||
"@tryghost/admin-x-framework": "0.0.0",
|
||||
"@types/react": "18.3.3",
|
||||
|
@ -36,7 +36,7 @@
|
||||
"@storybook/react": "7.6.20",
|
||||
"@storybook/react-vite": "7.6.4",
|
||||
"@storybook/testing-library": "0.2.2",
|
||||
"@testing-library/react": "14.1.0",
|
||||
"@testing-library/react": "14.3.1",
|
||||
"@testing-library/react-hooks" : "8.0.1",
|
||||
"@vitejs/plugin-react": "4.2.1",
|
||||
"c8": "8.0.1",
|
||||
|
@ -68,7 +68,7 @@
|
||||
"types"
|
||||
],
|
||||
"devDependencies": {
|
||||
"@testing-library/react": "14.1.0",
|
||||
"@testing-library/react": "14.3.1",
|
||||
"@types/mocha": "10.0.1",
|
||||
"c8": "8.0.1",
|
||||
"eslint-plugin-react-hooks": "4.6.0",
|
||||
|
@ -39,7 +39,7 @@
|
||||
"dependencies": {
|
||||
"@codemirror/lang-html": "6.4.9",
|
||||
"@tryghost/color-utils": "0.2.2",
|
||||
"@tryghost/kg-unsplash-selector": "0.2.1",
|
||||
"@tryghost/kg-unsplash-selector": "0.2.3",
|
||||
"@tryghost/limit-service": "1.2.14",
|
||||
"@tryghost/nql": "0.12.3",
|
||||
"@tryghost/timezone-data": "0.4.3",
|
||||
@ -49,7 +49,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "1.38.1",
|
||||
"@testing-library/react": "14.1.0",
|
||||
"@testing-library/react": "14.3.1",
|
||||
"@tryghost/admin-x-design-system": "0.0.0",
|
||||
"@tryghost/admin-x-framework": "0.0.0",
|
||||
"@types/react": "18.3.3",
|
||||
|
@ -44,16 +44,16 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@headlessui/react": "1.7.19",
|
||||
"@tiptap/core": "2.5.8",
|
||||
"@tiptap/extension-blockquote": "2.5.8",
|
||||
"@tiptap/extension-document": "2.5.8",
|
||||
"@tiptap/extension-hard-break": "2.5.8",
|
||||
"@tiptap/extension-link": "2.5.8",
|
||||
"@tiptap/extension-paragraph": "2.5.8",
|
||||
"@tiptap/extension-placeholder": "2.5.8",
|
||||
"@tiptap/extension-text": "2.5.8",
|
||||
"@tiptap/pm": "2.5.8",
|
||||
"@tiptap/react": "2.5.8",
|
||||
"@tiptap/core": "2.5.9",
|
||||
"@tiptap/extension-blockquote": "2.5.9",
|
||||
"@tiptap/extension-document": "2.5.9",
|
||||
"@tiptap/extension-hard-break": "2.5.9",
|
||||
"@tiptap/extension-link": "2.5.9",
|
||||
"@tiptap/extension-paragraph": "2.5.9",
|
||||
"@tiptap/extension-placeholder": "2.5.9",
|
||||
"@tiptap/extension-text": "2.5.9",
|
||||
"@tiptap/pm": "2.5.9",
|
||||
"@tiptap/react": "2.5.9",
|
||||
"react": "17.0.2",
|
||||
"react-dom": "17.0.2",
|
||||
"react-string-replace": "1.1.1"
|
||||
@ -62,7 +62,7 @@
|
||||
"@playwright/test": "1.38.1",
|
||||
"@testing-library/jest-dom": "5.17.0",
|
||||
"@testing-library/react": "12.1.5",
|
||||
"@testing-library/user-event": "14.4.3",
|
||||
"@testing-library/user-event": "14.5.2",
|
||||
"@tryghost/i18n": "0.0.0",
|
||||
"@vitejs/plugin-react": "4.2.1",
|
||||
"@vitest/coverage-v8": "0.34.3",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@tryghost/portal",
|
||||
"version": "2.37.10",
|
||||
"version": "2.38.0",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
@ -48,4 +48,11 @@ describe('Account Home Page', () => {
|
||||
fireEvent.click(manageBtn);
|
||||
expect(mockOnActionFn).toHaveBeenCalledWith('switchPage', {lastPage: 'accountHome', page: 'accountEmail'});
|
||||
});
|
||||
|
||||
test('hides Newsletter toggle if newsletters are disabled', () => {
|
||||
const siteData = getSiteData({editorDefaultEmailRecipients: 'disabled'});
|
||||
const {logoutBtn, utils} = setup({site: siteData});
|
||||
expect(logoutBtn).toBeInTheDocument();
|
||||
expect(utils.queryByText('Email newsletter')).not.toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
@ -1,6 +1,6 @@
|
||||
import AppContext from '../../../../AppContext';
|
||||
import {useContext} from 'react';
|
||||
import {hasCommentsEnabled, hasMultipleNewsletters, isEmailSuppressed} from '../../../../utils/helpers';
|
||||
import {hasCommentsEnabled, hasMultipleNewsletters, isEmailSuppressed, hasNewsletterSendingEnabled} from '../../../../utils/helpers';
|
||||
|
||||
import PaidAccountActions from './PaidAccountActions';
|
||||
import EmailNewsletterAction from './EmailNewsletterAction';
|
||||
@ -19,6 +19,8 @@ const AccountActions = () => {
|
||||
|
||||
const showEmailPreferences = hasMultipleNewsletters({site}) || hasCommentsEnabled({site}) || isEmailSuppressed({member});
|
||||
|
||||
const showEmailUnsubscribe = hasNewsletterSendingEnabled({site});
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className='gh-portal-list'>
|
||||
@ -40,7 +42,13 @@ const AccountActions = () => {
|
||||
{
|
||||
showEmailPreferences
|
||||
? <EmailPreferencesAction />
|
||||
: <EmailNewsletterAction />
|
||||
: <></>
|
||||
}
|
||||
|
||||
{
|
||||
showEmailUnsubscribe && !showEmailPreferences
|
||||
? <EmailNewsletterAction />
|
||||
: <></>
|
||||
}
|
||||
|
||||
</div>
|
||||
|
@ -39,6 +39,7 @@ export function getSiteData({
|
||||
portalButtonSignupText: portal_button_signup_text = 'Subscribe now',
|
||||
portalButtonStyle: portal_button_style = 'icon-and-text',
|
||||
membersSupportAddress: members_support_address = 'support@example.com',
|
||||
editorDefaultEmailRecipients: editor_default_email_recipients = 'visibility',
|
||||
newsletters = [],
|
||||
commentsEnabled,
|
||||
recommendations = [],
|
||||
@ -69,7 +70,8 @@ export function getSiteData({
|
||||
comments_enabled: commentsEnabled !== 'off',
|
||||
newsletters,
|
||||
recommendations,
|
||||
recommendations_enabled: !!recommendationsEnabled
|
||||
recommendations_enabled: !!recommendationsEnabled,
|
||||
editor_default_email_recipients
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,10 @@ export function getNewsletterFromUuid({site, uuid}) {
|
||||
});
|
||||
}
|
||||
|
||||
export function hasNewsletterSendingEnabled({site}) {
|
||||
return site?.editor_default_email_recipients === 'visibility';
|
||||
}
|
||||
|
||||
export function allowCompMemberUpgrade({member}) {
|
||||
return member?.subscriptions?.[0]?.tier?.expiry_at !== undefined;
|
||||
}
|
||||
|
@ -82,7 +82,7 @@
|
||||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"@testing-library/jest-dom": "5.16.5",
|
||||
"@testing-library/jest-dom": "5.17.0",
|
||||
"@testing-library/react": "12.1.5",
|
||||
"@vitejs/plugin-react": "4.2.1",
|
||||
"jsdom": "24.1.1",
|
||||
|
43
flake.lock
43
flake.lock
@ -1,43 +0,0 @@
|
||||
{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1708501555,
|
||||
"narHash": "sha256-zJaF0RkdIPbh8LTmnpW/E7tZYpqIE+MePzlWwUNob4c=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b50a77c03d640716296021ad58950b1bb0345799",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs",
|
||||
"systems": "systems"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
49
flake.nix
49
flake.nix
@ -1,49 +0,0 @@
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
systems.url = "github:nix-systems/default";
|
||||
};
|
||||
|
||||
outputs = {
|
||||
systems,
|
||||
nixpkgs,
|
||||
...
|
||||
} @ inputs: let
|
||||
yarn_overlay = final: prev: {
|
||||
yarn = prev.yarn.overrideAttrs(finalAttrs: prevAttrs: {
|
||||
# This is to make sure that yarn runs the correct node version
|
||||
# https://github.com/NixOS/nixpkgs/issues/145634#issuecomment-1627476963
|
||||
installPhase = prevAttrs.installPhase + ''
|
||||
ln -fs $out/libexec/yarn/bin/yarn $out/bin/yarn
|
||||
ln -fs $out/libexec/yarn/bin/yarn.js $out/bin/yarn.js
|
||||
ln -fs $out/libexec/yarn/bin/yarn $out/bin/yarnpkg
|
||||
'';
|
||||
});
|
||||
};
|
||||
|
||||
# This gives us a central place to set the node version
|
||||
node_overlay = final: prev: {
|
||||
nodejs = prev.nodejs-18_x;
|
||||
};
|
||||
|
||||
eachSystem = f:
|
||||
nixpkgs.lib.genAttrs (import systems) (
|
||||
system:
|
||||
f ((nixpkgs.legacyPackages.${system}.extend yarn_overlay).extend node_overlay)
|
||||
);
|
||||
in {
|
||||
|
||||
devShells = eachSystem (pkgs: {
|
||||
default = pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
nodejs
|
||||
yarn
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
echo "node `${pkgs.nodejs}/bin/node --version`"
|
||||
'';
|
||||
};
|
||||
});
|
||||
};
|
||||
}
|
@ -452,8 +452,6 @@ export default class KoenigLexicalEditor extends Component {
|
||||
feature: {
|
||||
collectionsCard: this.feature.collectionsCard,
|
||||
collections: this.feature.collections,
|
||||
internalLinking: this.feature.internalLinking,
|
||||
internalLinkingAtLinks: this.feature.internalLinking,
|
||||
contentVisibility: this.feature.contentVisibility
|
||||
},
|
||||
deprecated: { // todo fix typo
|
||||
@ -705,7 +703,7 @@ export default class KoenigLexicalEditor extends Component {
|
||||
<ErrorHandler config={this.config}>
|
||||
<Suspense fallback={<p className="koenig-react-editor-loading">Loading editor...</p>}>
|
||||
<KGEditorComponent />
|
||||
<KGEditorComponent isInitInstance={true} />
|
||||
<KGEditorComponent isInitInstance={true} />
|
||||
</Suspense>
|
||||
</ErrorHandler>
|
||||
</div>
|
||||
|
@ -186,7 +186,7 @@ export default Route.extend(ShortcutsRoute, {
|
||||
beforeSend,
|
||||
ignoreErrors: [
|
||||
// Browser autoplay policies (this regex covers a few)
|
||||
/^The play\(\) request was interrupted.*/,
|
||||
/The play\(\) request was interrupted.*/,
|
||||
/The request is not allowed by the user agent or the platform in the current context/,
|
||||
|
||||
// Network errors that we don't control
|
||||
|
@ -76,7 +76,6 @@ export default class FeatureService extends Service {
|
||||
@feature('lexicalIndicators') lexicalIndicators;
|
||||
@feature('adminXDemo') adminXDemo;
|
||||
@feature('ActivityPub') ActivityPub;
|
||||
@feature('internalLinking') internalLinking;
|
||||
@feature('editorExcerpt') editorExcerpt;
|
||||
@feature('contentVisibility') contentVisibility;
|
||||
@feature('publishFlowEndScreen') publishFlowEndScreen;
|
||||
|
@ -36,7 +36,7 @@ export const SEARCHABLES = [
|
||||
}
|
||||
];
|
||||
|
||||
export default class SearchProviderService extends Service {
|
||||
export default class SearchProviderBasicService extends Service {
|
||||
@service ajax;
|
||||
@service notifications;
|
||||
@service store;
|
@ -45,7 +45,7 @@ export const SEARCHABLES = [
|
||||
}
|
||||
];
|
||||
|
||||
export default class SearchProviderService extends Service {
|
||||
export default class SearchProviderFlexService extends Service {
|
||||
@service ajax;
|
||||
@service notifications;
|
||||
@service store;
|
@ -8,16 +8,16 @@ export default class SearchService extends Service {
|
||||
@service ajax;
|
||||
@service feature;
|
||||
@service notifications;
|
||||
@service searchProvider;
|
||||
@service searchProviderBeta;
|
||||
@service searchProviderBasic;
|
||||
@service searchProviderFlex;
|
||||
@service settings;
|
||||
@service store;
|
||||
|
||||
isContentStale = true;
|
||||
|
||||
get provider() {
|
||||
return this.feature.internalLinking
|
||||
? this.searchProviderBeta
|
||||
: this.searchProvider;
|
||||
const isEnglish = this.settings.locale?.toLowerCase().startsWith('en') ?? true;
|
||||
return isEnglish ? this.searchProviderFlex : this.searchProviderBasic;
|
||||
}
|
||||
|
||||
@action
|
||||
|
@ -68,6 +68,7 @@
|
||||
@media (max-width: 1450px) {
|
||||
.members-list-container-stretch {
|
||||
min-height: calc(100vh - 176px);
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -225,7 +225,7 @@ select {
|
||||
.gh-select.error,
|
||||
.error .gh-input-append,
|
||||
select.error {
|
||||
border-color: var(--red);
|
||||
border-color: var(--red)!important;
|
||||
}
|
||||
|
||||
.gh-input:focus,
|
||||
|
@ -62,12 +62,11 @@ export default BaseValidator.create({
|
||||
|
||||
customExcerpt(model) {
|
||||
if (!validator.isLength(model.customExcerpt || '', 0, 300)) {
|
||||
if (model.feature.editorExcerpt) {
|
||||
model.errors.add('customExcerpt', 'Excerpt cannot be longer than 300 characters.');
|
||||
} else {
|
||||
model.errors.add('customExcerpt', 'Excerpt cannot be longer than 300 characters.');
|
||||
}
|
||||
const errorMessage = 'Excerpt cannot be longer than 300 characters.';
|
||||
model.errors.add('customExcerpt', errorMessage);
|
||||
this.invalidate();
|
||||
} else {
|
||||
model.errors.remove('customExcerpt');
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ghost-admin",
|
||||
"version": "5.89.0",
|
||||
"version": "5.89.1",
|
||||
"description": "Ember.js admin client for Ghost",
|
||||
"author": "Ghost Foundation",
|
||||
"homepage": "http://ghost.org",
|
||||
@ -47,9 +47,9 @@
|
||||
"@tryghost/color-utils": "0.2.2",
|
||||
"@tryghost/ember-promise-modals": "2.0.1",
|
||||
"@tryghost/helpers": "1.1.90",
|
||||
"@tryghost/kg-clean-basic-html": "4.1.1",
|
||||
"@tryghost/kg-converters": "1.0.5",
|
||||
"@tryghost/koenig-lexical": "1.3.13",
|
||||
"@tryghost/kg-clean-basic-html": "4.1.3",
|
||||
"@tryghost/kg-converters": "1.0.6",
|
||||
"@tryghost/koenig-lexical": "1.3.15",
|
||||
"@tryghost/limit-service": "1.2.14",
|
||||
"@tryghost/members-csv": "0.0.0",
|
||||
"@tryghost/nql": "0.12.3",
|
||||
|
@ -2,22 +2,34 @@ import ctrlOrCmd from 'ghost-admin/utils/ctrl-or-cmd';
|
||||
import {authenticateSession} from 'ember-simple-auth/test-support';
|
||||
import {click, currentURL, find, findAll, triggerKeyEvent, visit} from '@ember/test-helpers';
|
||||
import {describe, it} from 'mocha';
|
||||
import {enableLabsFlag} from '../helpers/labs-flag';
|
||||
import {expect} from 'chai';
|
||||
import {getPosts} from '../../mirage/config/posts';
|
||||
import {setupApplicationTest} from 'ember-mocha';
|
||||
import {setupMirage} from 'ember-cli-mirage/test-support';
|
||||
import {typeInSearch} from 'ember-power-select/test-support/helpers';
|
||||
|
||||
// we have two search providers
|
||||
// - "flex" which uses the flexsearch engine but is limited to english only
|
||||
// - "basic" which uses exact string matches in a less performant way but is language agnostic
|
||||
const suites = [{
|
||||
name: 'Acceptance: Search',
|
||||
name: 'Acceptance: Search (flex)',
|
||||
beforeEach() {
|
||||
// noop
|
||||
// noop - default locale is 'en'
|
||||
},
|
||||
confirmProvider() {
|
||||
const searchService = this.owner.lookup('service:search');
|
||||
expect(searchService.provider.constructor.name, 'provider name').to.equal('SearchProviderFlexService');
|
||||
}
|
||||
}, {
|
||||
name: 'Acceptance: Search (beta)',
|
||||
name: 'Acceptance: Search (basic)',
|
||||
beforeEach() {
|
||||
enableLabsFlag(this.server, 'internalLinking');
|
||||
this.server.db.settings.update({key: 'locale'}, {value: 'de'});
|
||||
},
|
||||
confirmProvider() {
|
||||
const settingsService = this.owner.lookup('service:settings');
|
||||
expect(settingsService.locale, 'settings.locale').to.equal('de');
|
||||
const searchService = this.owner.lookup('service:search');
|
||||
expect(searchService.provider.constructor.name, 'provider name').to.equal('SearchProviderBasicService');
|
||||
}
|
||||
}];
|
||||
|
||||
@ -48,6 +60,11 @@ suites.forEach((suite) => {
|
||||
return await authenticateSession();
|
||||
});
|
||||
|
||||
it('is using correct provider', async function () {
|
||||
await visit('/dashboard');
|
||||
suite.confirmProvider.bind(this)();
|
||||
});
|
||||
|
||||
it('opens search modal when clicking icon', async function () {
|
||||
await visit('/dashboard');
|
||||
expect(currentURL(), 'currentURL').to.equal('/dashboard');
|
||||
|
@ -1,18 +1,31 @@
|
||||
import {authenticateSession} from 'ember-simple-auth/test-support';
|
||||
import {describe, it} from 'mocha';
|
||||
import {enableLabsFlag} from '../../helpers/labs-flag';
|
||||
import {expect} from 'chai';
|
||||
import {setupMirage} from 'ember-cli-mirage/test-support';
|
||||
import {setupTest} from 'ember-mocha';
|
||||
|
||||
// we have two search providers
|
||||
// - "flex" which uses the flexsearch engine but is limited to english only
|
||||
// - "basic" which uses exact string matches in a less performant way but is language agnostic
|
||||
const suites = [{
|
||||
name: 'Integration: Service: Search',
|
||||
name: 'Integration: Service: Search (flex)',
|
||||
beforeEach() {
|
||||
// noop
|
||||
// noop - default locale is 'en'
|
||||
},
|
||||
confirmProvider() {
|
||||
const searchService = this.owner.lookup('service:search');
|
||||
expect(searchService.provider.constructor.name, 'provider name').to.equal('SearchProviderFlexService');
|
||||
}
|
||||
}, {
|
||||
name: 'Integration: Service: Search (beta)',
|
||||
name: 'Integration: Service: Search (basic)',
|
||||
beforeEach() {
|
||||
enableLabsFlag(this.server, 'internalLinking');
|
||||
this.server.db.settings.update({key: 'locale'}, {value: 'de'});
|
||||
},
|
||||
confirmProvider() {
|
||||
const settingsService = this.owner.lookup('service:settings');
|
||||
expect(settingsService.locale, 'settings.locale').to.equal('de');
|
||||
const searchService = this.owner.lookup('service:search');
|
||||
expect(searchService.provider.constructor.name, 'provider name').to.equal('SearchProviderBasicService');
|
||||
}
|
||||
}];
|
||||
|
||||
@ -25,9 +38,15 @@ suites.forEach((suite) => {
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
let firstUser, firstPost, secondPost, firstPage, firstTag;
|
||||
|
||||
beforeEach(function () {
|
||||
beforeEach(async function () {
|
||||
this.server.loadFixtures();
|
||||
await authenticateSession();
|
||||
|
||||
suite.beforeEach.bind(this)();
|
||||
|
||||
const settings = this.owner.lookup('service:settings');
|
||||
await settings.fetch();
|
||||
|
||||
search = this.owner.lookup('service:search');
|
||||
|
||||
// populate store with data we'll be searching
|
||||
@ -37,6 +56,10 @@ suites.forEach((suite) => {
|
||||
firstTag = this.server.create('tag', {name: 'First tag', slug: 'first-tag'});
|
||||
});
|
||||
|
||||
it('is using correct provider', async function () {
|
||||
suite.confirmProvider.bind(this)();
|
||||
});
|
||||
|
||||
it('returns urls for search results', async function () {
|
||||
const results = await search.searchTask.perform('first');
|
||||
|
||||
|
@ -11,7 +11,7 @@ function getBlogLogo() {
|
||||
// CASE: no publication logo is updated. We can try to use either an uploaded publication icon
|
||||
// or use the default one to make
|
||||
// Google happy with it. See https://github.com/TryGhost/Ghost/issues/7558
|
||||
logo.url = blogIcon.getIconUrl(true);
|
||||
logo.url = blogIcon.getIconUrl({absolute: true});
|
||||
}
|
||||
|
||||
return logo;
|
||||
|
@ -9,7 +9,7 @@ module.exports.render = function render(res, baseUrl, data) {
|
||||
return rssCache
|
||||
.getXML(baseUrl, rssData)
|
||||
.then(function then(feedXml) {
|
||||
res.set('Content-Type', 'text/xml; charset=UTF-8');
|
||||
res.set('Content-Type', 'application/rss+xml; charset=UTF-8');
|
||||
res.send(feedXml);
|
||||
});
|
||||
};
|
||||
|
@ -98,13 +98,17 @@ class BlogIcon {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return URL for Blog icon: [subdirectory or not]favicon.[ico, jpeg, or png]
|
||||
* Always returns {string} getIconUrl
|
||||
* @returns {string} [subdirectory or not]favicon.[ico, jpeg, or png]
|
||||
* Return URL for blog icon, if available: [subdirectory or not]favicon.[ico, jpeg, or png]
|
||||
* Otherwise, fallbacks to the default Ghost favicon.ico file, if requested
|
||||
* Otherwise, returns null
|
||||
* @param {Object} [options]
|
||||
* @param {boolean} [options.absolute] - if true, return absolute URL. Default: false
|
||||
* @param {boolean} [options.fallbackToDefault] - if true, fallbacks to Ghost's default favicon.ico when no blog icon is found. Default: true
|
||||
* @returns {string|null} [subdirectory or not]favicon.[ico, jpeg, or png] or null
|
||||
* @description Checks if we have a custom uploaded icon and the extension of it. If no custom uploaded icon
|
||||
* exists, we're returning the default `favicon.ico`
|
||||
*/
|
||||
getIconUrl(absolute) {
|
||||
getIconUrl({absolute = false, fallbackToDefault = true} = {}) {
|
||||
const blogIcon = this.settingsCache.get('icon');
|
||||
|
||||
if (blogIcon) {
|
||||
@ -124,9 +128,13 @@ class BlogIcon {
|
||||
|
||||
const sizedIcon = blogIcon.replace(/\/content\/images\//, '/content/images/size/w256h256/');
|
||||
return this.urlUtils.urlFor({relativeUrl: sizedIcon}, absolute ? true : undefined);
|
||||
} else {
|
||||
}
|
||||
|
||||
if (fallbackToDefault) {
|
||||
return this.urlUtils.urlFor({relativeUrl: '/favicon.ico'}, absolute ? true : undefined);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -110,7 +110,7 @@ function ping(post) {
|
||||
// if it is a post or a test message to check webhook working.
|
||||
text: `Notification from *${blogTitle}* :ghost:`,
|
||||
unfurl_links: true,
|
||||
icon_url: blogIcon.getIconUrl(true),
|
||||
icon_url: blogIcon.getIconUrl({absolute: true}),
|
||||
username: slackSettings.username,
|
||||
// We don't want to send attachment if it is a test notification.
|
||||
attachments: [
|
||||
@ -141,7 +141,7 @@ function ping(post) {
|
||||
}
|
||||
],
|
||||
footer: blogTitle,
|
||||
footer_icon: blogIcon.getIconUrl(true),
|
||||
footer_icon: blogIcon.getIconUrl({absolute: true}),
|
||||
ts: moment().unix()
|
||||
}
|
||||
]
|
||||
@ -150,7 +150,7 @@ function ping(post) {
|
||||
slackData = {
|
||||
text: message,
|
||||
unfurl_links: true,
|
||||
icon_url: blogIcon.getIconUrl(true),
|
||||
icon_url: blogIcon.getIconUrl({absolute: true}),
|
||||
username: slackSettings.username
|
||||
};
|
||||
}
|
||||
|
@ -182,7 +182,7 @@
|
||||
},
|
||||
"portal": {
|
||||
"url": "https://cdn.jsdelivr.net/ghost/portal@~{version}/umd/portal.min.js",
|
||||
"version": "2.37"
|
||||
"version": "2.38"
|
||||
},
|
||||
"sodoSearch": {
|
||||
"url": "https://cdn.jsdelivr.net/ghost/sodo-search@~{version}/umd/sodo-search.min.js",
|
||||
|
@ -19,8 +19,7 @@ const GA_FEATURES = [
|
||||
'themeErrorsNotification',
|
||||
'outboundLinkTagging',
|
||||
'announcementBar',
|
||||
'newEmailAddresses',
|
||||
'internalLinking'
|
||||
'newEmailAddresses'
|
||||
];
|
||||
|
||||
// NOTE: this allowlist is meant to be used to filter out any unexpected
|
||||
|
@ -45,5 +45,6 @@ module.exports = {
|
||||
recommendations_enabled: 'recommendations_enabled',
|
||||
outbound_link_tagging: 'outbound_link_tagging',
|
||||
default_email_address: 'default_email_address',
|
||||
support_email_address: 'support_email_address'
|
||||
support_email_address: 'support_email_address',
|
||||
editor_default_email_recipients: 'editor_default_email_recipients'
|
||||
};
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ghost",
|
||||
"version": "5.89.0",
|
||||
"version": "5.89.1",
|
||||
"description": "The professional publishing platform",
|
||||
"author": "Ghost Foundation",
|
||||
"homepage": "https://ghost.org",
|
||||
@ -107,14 +107,14 @@
|
||||
"@tryghost/importer-handler-content-files": "0.0.0",
|
||||
"@tryghost/importer-revue": "0.0.0",
|
||||
"@tryghost/job-manager": "0.0.0",
|
||||
"@tryghost/kg-card-factory": "5.0.4",
|
||||
"@tryghost/kg-converters": "1.0.5",
|
||||
"@tryghost/kg-card-factory": "5.0.5",
|
||||
"@tryghost/kg-converters": "1.0.6",
|
||||
"@tryghost/kg-default-atoms": "5.0.3",
|
||||
"@tryghost/kg-default-cards": "10.0.6",
|
||||
"@tryghost/kg-default-nodes": "1.1.9",
|
||||
"@tryghost/kg-html-to-lexical": "1.1.10",
|
||||
"@tryghost/kg-lexical-html-renderer": "1.1.12",
|
||||
"@tryghost/kg-mobiledoc-html-renderer": "7.0.4",
|
||||
"@tryghost/kg-default-cards": "10.0.8",
|
||||
"@tryghost/kg-default-nodes": "1.1.11",
|
||||
"@tryghost/kg-html-to-lexical": "1.1.12",
|
||||
"@tryghost/kg-lexical-html-renderer": "1.1.14",
|
||||
"@tryghost/kg-mobiledoc-html-renderer": "7.0.6",
|
||||
"@tryghost/limit-service": "1.2.14",
|
||||
"@tryghost/link-redirects": "0.0.0",
|
||||
"@tryghost/link-replacer": "0.0.0",
|
||||
|
@ -1155,7 +1155,7 @@ exports[`Settings API Edit Can edit a setting 2: [headers] 1`] = `
|
||||
Object {
|
||||
"access-control-allow-origin": "http://127.0.0.1:2369",
|
||||
"cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0",
|
||||
"content-length": "4454",
|
||||
"content-length": "4429",
|
||||
"content-type": "application/json; charset=utf-8",
|
||||
"content-version": StringMatching /v\\\\d\\+\\\\\\.\\\\d\\+/,
|
||||
"etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/,
|
||||
|
@ -12,6 +12,7 @@ Object {
|
||||
"cover_image": "https://static.ghost.org/v5.0.0/images/publication-cover.jpg",
|
||||
"default_email_address": "noreply@127.0.0.1",
|
||||
"description": "Thoughts, stories and ideas",
|
||||
"editor_default_email_recipients": "visibility",
|
||||
"facebook": "ghost",
|
||||
"firstpromoter_account": null,
|
||||
"icon": null,
|
||||
|
@ -1364,6 +1364,7 @@ Object {
|
||||
"cover_image": "https://static.ghost.org/v5.0.0/images/publication-cover.jpg",
|
||||
"default_email_address": "noreply@127.0.0.1",
|
||||
"description": "Thoughts, stories and ideas",
|
||||
"editor_default_email_recipients": "visibility",
|
||||
"facebook": "ghost",
|
||||
"firstpromoter_account": null,
|
||||
"icon": null,
|
||||
@ -1466,6 +1467,7 @@ Object {
|
||||
"cover_image": "https://static.ghost.org/v5.0.0/images/publication-cover.jpg",
|
||||
"default_email_address": "noreply@127.0.0.1",
|
||||
"description": "Thoughts, stories and ideas",
|
||||
"editor_default_email_recipients": "visibility",
|
||||
"facebook": "ghost",
|
||||
"firstpromoter_account": null,
|
||||
"icon": null,
|
||||
|
@ -271,7 +271,7 @@ describe('Default Frontend routing', function () {
|
||||
await request.get('/rss/')
|
||||
.expect(200)
|
||||
.expect('Cache-Control', testUtils.cacheRules.public)
|
||||
.expect('Content-Type', 'text/xml; charset=utf-8')
|
||||
.expect('Content-Type', 'application/rss+xml; charset=utf-8')
|
||||
.expect(assertCorrectFrontendHeaders)
|
||||
.expect((res) => {
|
||||
res.text.should.match(/<!\[CDATA\[Start here for a quick overview of everything you need to know\]\]>/);
|
||||
@ -283,7 +283,7 @@ describe('Default Frontend routing', function () {
|
||||
await request.get('/author/ghost/rss/')
|
||||
.expect(200)
|
||||
.expect('Cache-Control', testUtils.cacheRules.public)
|
||||
.expect('Content-Type', 'text/xml; charset=utf-8')
|
||||
.expect('Content-Type', 'application/rss+xml; charset=utf-8')
|
||||
.expect(assertCorrectFrontendHeaders)
|
||||
.expect((res) => {
|
||||
res.text.should.match(/<!\[CDATA\[Start here for a quick overview of everything you need to know\]\]>/);
|
||||
@ -295,7 +295,7 @@ describe('Default Frontend routing', function () {
|
||||
await request.get('/tag/getting-started/rss/')
|
||||
.expect(200)
|
||||
.expect('Cache-Control', testUtils.cacheRules.public)
|
||||
.expect('Content-Type', 'text/xml; charset=utf-8')
|
||||
.expect('Content-Type', 'application/rss+xml; charset=utf-8')
|
||||
.expect(assertCorrectFrontendHeaders)
|
||||
.expect((res) => {
|
||||
res.text.should.match(/<!\[CDATA\[Start here for a quick overview of everything you need to know\]\]>/);
|
||||
@ -461,7 +461,7 @@ describe('Default Frontend routing', function () {
|
||||
await request.get(`/${settingsCache.get('public_hash')}/rss/`)
|
||||
.expect(200)
|
||||
.expect('Cache-Control', testUtils.cacheRules.private)
|
||||
.expect('Content-Type', 'text/xml; charset=utf-8')
|
||||
.expect('Content-Type', 'application/rss+xml; charset=utf-8')
|
||||
.expect(assertCorrectFrontendHeaders)
|
||||
.expect((res) => {
|
||||
res.text.should.match(/<!\[CDATA\[Start here for a quick overview of everything you need to know\]\]>/);
|
||||
@ -472,7 +472,7 @@ describe('Default Frontend routing', function () {
|
||||
await request.get(`/tag/getting-started/${settingsCache.get('public_hash')}/rss/`)
|
||||
.expect(200)
|
||||
.expect('Cache-Control', testUtils.cacheRules.private)
|
||||
.expect('Content-Type', 'text/xml; charset=utf-8')
|
||||
.expect('Content-Type', 'application/rss+xml; charset=utf-8')
|
||||
.expect(assertCorrectFrontendHeaders)
|
||||
.expect((res) => {
|
||||
res.text.should.match(/<!\[CDATA\[Start here for a quick overview of everything you need to know\]\]>/);
|
||||
|
@ -1294,7 +1294,7 @@ describe('Frontend behavior tests', function () {
|
||||
return localUtils.mockExpress.invoke(app, req)
|
||||
.then(function (response) {
|
||||
response.statusCode.should.eql(200);
|
||||
response.headers['content-type'].should.eql('text/xml; charset=UTF-8');
|
||||
response.headers['content-type'].should.eql('application/rss+xml; charset=UTF-8');
|
||||
});
|
||||
});
|
||||
|
||||
@ -1448,7 +1448,7 @@ describe('Frontend behavior tests', function () {
|
||||
routes: {
|
||||
'/podcast/rss/': {
|
||||
templates: ['podcast/rss'],
|
||||
content_type: 'text/xml'
|
||||
content_type: 'application/rss+xml'
|
||||
},
|
||||
'/cooking/': {
|
||||
controller: 'channel',
|
||||
@ -1560,7 +1560,7 @@ describe('Frontend behavior tests', function () {
|
||||
.then(function (response) {
|
||||
response.statusCode.should.eql(200);
|
||||
response.template.should.eql('podcast/rss');
|
||||
response.headers['content-type'].should.eql('text/xml; charset=utf-8');
|
||||
response.headers['content-type'].should.eql('application/rss+xml');
|
||||
response.body.match(/<link>/g).length.should.eql(2);
|
||||
});
|
||||
});
|
||||
|
@ -32,7 +32,7 @@ describe('RSS: Renderer', function () {
|
||||
rssCacheStub.firstCall.args.should.eql(['/rss/', {}]);
|
||||
|
||||
res.set.calledOnce.should.be.true();
|
||||
res.set.calledWith('Content-Type', 'text/xml; charset=UTF-8').should.be.true();
|
||||
res.set.calledWith('Content-Type', 'application/rss+xml; charset=UTF-8').should.be.true();
|
||||
|
||||
res.send.calledOnce.should.be.true();
|
||||
res.send.calledWith('dummyxml').should.be.true();
|
||||
@ -51,7 +51,7 @@ describe('RSS: Renderer', function () {
|
||||
rssCacheStub.firstCall.args.should.eql(['/rss/', {foo: 'bar'}]);
|
||||
|
||||
res.set.calledOnce.should.be.true();
|
||||
res.set.calledWith('Content-Type', 'text/xml; charset=UTF-8').should.be.true();
|
||||
res.set.calledWith('Content-Type', 'application/rss+xml; charset=UTF-8').should.be.true();
|
||||
|
||||
res.send.calledOnce.should.be.true();
|
||||
res.send.calledWith('dummyxml').should.be.true();
|
||||
@ -71,7 +71,7 @@ describe('RSS: Renderer', function () {
|
||||
rssCacheStub.firstCall.args.should.eql(['/rss/', {foo: 'baz', fizz: 'buzz'}]);
|
||||
|
||||
res.set.calledOnce.should.be.true();
|
||||
res.set.calledWith('Content-Type', 'text/xml; charset=UTF-8').should.be.true();
|
||||
res.set.calledWith('Content-Type', 'application/rss+xml; charset=UTF-8').should.be.true();
|
||||
|
||||
res.send.calledOnce.should.be.true();
|
||||
res.send.calledWith('dummyxml').should.be.true();
|
||||
|
@ -51,7 +51,7 @@ describe('lib/image: blog icon', function () {
|
||||
}
|
||||
}
|
||||
}});
|
||||
blogIcon.getIconUrl(true).should.deepEqual([{relativeUrl: '/content/images/2017/04/my-icon.ico'}, true]);
|
||||
blogIcon.getIconUrl({absolute: true}).should.deepEqual([{relativeUrl: '/content/images/2017/04/my-icon.ico'}, true]);
|
||||
});
|
||||
|
||||
it('custom uploaded png blog icon', function () {
|
||||
@ -64,7 +64,7 @@ describe('lib/image: blog icon', function () {
|
||||
}
|
||||
}
|
||||
}});
|
||||
blogIcon.getIconUrl(true).should.deepEqual([{relativeUrl: '/content/images/size/w256h256/2017/04/my-icon.png'}, true]);
|
||||
blogIcon.getIconUrl({absolute: true}).should.deepEqual([{relativeUrl: '/content/images/size/w256h256/2017/04/my-icon.png'}, true]);
|
||||
});
|
||||
|
||||
it('default ico blog icon', function () {
|
||||
@ -73,7 +73,17 @@ describe('lib/image: blog icon', function () {
|
||||
}, settingsCache: {
|
||||
get: () => {}
|
||||
}});
|
||||
blogIcon.getIconUrl(true).should.deepEqual([{relativeUrl: '/favicon.ico'}, true]);
|
||||
blogIcon.getIconUrl({absolute: true}).should.deepEqual([{relativeUrl: '/favicon.ico'}, true]);
|
||||
});
|
||||
|
||||
it('returns null if no fallback is requested', function () {
|
||||
const blogIcon = new BlogIcon({config: {}, storageUtils: {}, urlUtils: {
|
||||
urlFor: (key, boolean) => [key, boolean]
|
||||
}, settingsCache: {
|
||||
get: () => {}
|
||||
}});
|
||||
|
||||
should.equal(blogIcon.getIconUrl({absolute: true, fallbackToDefault: false}), null);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -29,7 +29,7 @@
|
||||
"@tryghost/email-events": "0.0.0",
|
||||
"@tryghost/errors": "1.3.5",
|
||||
"@tryghost/html-to-plaintext": "0.0.0",
|
||||
"@tryghost/kg-default-cards": "10.0.6",
|
||||
"@tryghost/kg-default-cards": "10.0.8",
|
||||
"@tryghost/logging": "2.4.18",
|
||||
"@tryghost/tpl": "0.1.32",
|
||||
"@tryghost/validator": "0.2.14",
|
||||
|
@ -10,10 +10,10 @@
|
||||
"{{memberEmail}} will no longer receive emails when someone replies to your comments.": "{{memberEmail}} повече няма да получава имейли, когато някой отговаря на ваш коментар.",
|
||||
"{{memberEmail}} will no longer receive this newsletter.": "{{memberEmail}} повече няма да получава този бюлетин.",
|
||||
"{{trialDays}} days free": "{{trialDays}} дни безплатен достъп",
|
||||
"A login link has been sent to your inbox. If it doesn't arrive in 3 minutes, be sure to check your spam folder.": "Връзка за влизане беше изпратена към пощенската Ви кутия. Ако писмото не пристигне до 3 минути, провете дали не е категоризирана като нежелано писмо.",
|
||||
"A login link has been sent to your inbox. If it doesn't arrive in 3 minutes, be sure to check your spam folder.": "Изпратен Ви е имейл с препратка за влизане. Ако не пристигне до 3 минути, проверете дали не е категоризиран като нежелано писмо.",
|
||||
"Account": "Профил",
|
||||
"Account settings": "Настройки на профила Ви",
|
||||
"After a free trial ends, you will be charged the regular price for the tier you've chosen. You can always cancel before then.": "След прикючване на безплатния достъп ще бъдете таксувани според обявените цени. Можете да се откажете преди изтичането на безплатния достъп.",
|
||||
"After a free trial ends, you will be charged the regular price for the tier you've chosen. You can always cancel before then.": "След приключване на безплатния достъп ще бъдете таксувани според обявените цени. Можете да се откажете преди изтичането на безплатния достъп.",
|
||||
"Already a member?": "Вече сте абонат на сайта?",
|
||||
"An unexpected error occured. Please try again or <a>contact support</a> if the error persists.": "Възникна неочаквана грешка. Моля, опитайте отново или <a>потърсете поддръжката</a> ако това се повтаря.",
|
||||
"Back": "Обратно",
|
||||
@ -83,7 +83,7 @@
|
||||
"Need more help? Contact support": "Още имате нужда от помощ? Потърсете поддръжката",
|
||||
"Newsletters can be disabled on your account for two reasons: A previous email was marked as spam, or attempting to send an email resulted in a permanent failure (bounce).": "Информационните бюлетини могат да бъдат деактивирани в профила ви по две причини: Предишен имейл е бил маркиран като спам или опитът за изпращане на имейл е довел до траен неуспех (отказ).",
|
||||
"Not receiving emails?": "Не получавате поща?",
|
||||
"Now check your email!": "Провете си пощенската кутия!",
|
||||
"Now check your email!": "Проверете си пощенската кутия!",
|
||||
"Once resubscribed, if you still don't see emails in your inbox, check your spam folder. Some inbox providers keep a record of previous spam complaints and will continue to flag emails. If this happens, mark the latest newsletter as 'Not spam' to move it back to your primary inbox.": "След като се абонирате отново, ако все още не виждате имейли във входящата си поща, проверете папката за спам. Някои доставчици пазят история с предишни оплаквания за спам и ще продължат да маркират имейлите. Ако вашият случай е такъв, маркирайте последния бюлетин като 'Не е спам', за да го преместите обратно в основната си пощенска кутия.",
|
||||
"Permanent failure (bounce)": "Постоянен проблем (отскок)",
|
||||
"Plan": "План",
|
||||
@ -125,7 +125,7 @@
|
||||
"The email address we have for you is {{memberEmail}} — if that's not correct, you can update it in your <button>account settings area</button>.": "Имейлът, който имаме за вас, е {{memberEmail}} - ако не е верен, можете да го актуализирате в областта за <button>настройки на профила си</button>.",
|
||||
"There was a problem submitting your feedback. Please try again a little later.": "Имаше проблем при изпращането на обратната връзка. Моля, опитайте отново малко по-късно.",
|
||||
"This site is invite-only, contact the owner for access.": "Сайтът е само с покани. Свържете се със собственика за да получите достъп.",
|
||||
"To complete signup, click the confirmation link in your inbox. If it doesn't arrive within 3 minutes, check your spam folder!": "За да прикючите вашата регистрация беше изпратена връзка за влизане към пощенската Ви кутия. Ако писмото не пристигне до 3 минути, провете дали не е категоризирана като нежелано писмо.",
|
||||
"To complete signup, click the confirmation link in your inbox. If it doesn't arrive within 3 minutes, check your spam folder!": "За да приключите регистрацията, последвайте препратката в съобщението, изпратено Ви по имейл. Ако не пристигне до 3 минути, проверете дали не е категоризирано като нежелано писмо.",
|
||||
"Try free for {{amount}} days, then {{originalPrice}}.": "Тествайте безплатно за {{amount}} дни, след това {{originalPrice}}.",
|
||||
"Unlock access to all newsletters by becoming a paid subscriber.": "Отключете достъпа до всички бюлетини, като станете платен абонат.",
|
||||
"Unsubscribe from all emails": "Прекрати изпращането на всякакви писма",
|
||||
|
@ -30,6 +30,6 @@
|
||||
"mocha": "10.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"i18next": "23.12.2"
|
||||
"i18next": "23.12.3"
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@tryghost/debug": "0.1.32",
|
||||
"@tryghost/kg-default-cards": "10.0.6",
|
||||
"@tryghost/kg-default-cards": "10.0.8",
|
||||
"@tryghost/string": "0.2.12",
|
||||
"lodash": "4.17.21",
|
||||
"papaparse": "5.3.2",
|
||||
|
@ -28,7 +28,7 @@
|
||||
"@tryghost/errors": "1.3.5",
|
||||
"@tryghost/tpl": "0.1.32",
|
||||
"csso": "5.0.5",
|
||||
"terser": "5.31.3",
|
||||
"terser": "5.31.5",
|
||||
"tiny-glob": "0.2.9"
|
||||
}
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ class StaffServiceEmails {
|
||||
attributionUrl: attribution?.url || '',
|
||||
referrerSource: attribution?.referrerSource,
|
||||
siteTitle: this.settingsCache.get('title'),
|
||||
siteIconUrl: this.blogIcon.getIconUrl(true),
|
||||
siteIconUrl: this.blogIcon.getIconUrl({absolute: true, fallbackToDefault: false}),
|
||||
siteUrl: this.urlUtils.getSiteUrl(),
|
||||
siteDomain: this.siteDomain,
|
||||
accentColor: this.settingsCache.get('accent_color'),
|
||||
@ -105,7 +105,7 @@ class StaffServiceEmails {
|
||||
offerData,
|
||||
subscriptionData,
|
||||
siteTitle: this.settingsCache.get('title'),
|
||||
siteIconUrl: this.blogIcon.getIconUrl(true),
|
||||
siteIconUrl: this.blogIcon.getIconUrl({absolute: true, fallbackToDefault: false}),
|
||||
siteUrl: this.urlUtils.getSiteUrl(),
|
||||
siteDomain: this.siteDomain,
|
||||
accentColor: this.settingsCache.get('accent_color'),
|
||||
@ -156,7 +156,7 @@ class StaffServiceEmails {
|
||||
tierData,
|
||||
subscriptionData,
|
||||
siteTitle: this.settingsCache.get('title'),
|
||||
siteIconUrl: this.blogIcon.getIconUrl(true),
|
||||
siteIconUrl: this.blogIcon.getIconUrl({absolute: true, fallbackToDefault: false}),
|
||||
siteUrl: this.urlUtils.getSiteUrl(),
|
||||
siteDomain: this.siteDomain,
|
||||
accentColor: this.settingsCache.get('accent_color'),
|
||||
@ -186,7 +186,7 @@ class StaffServiceEmails {
|
||||
|
||||
return {
|
||||
siteTitle: this.settingsCache.get('title'),
|
||||
siteIconUrl: this.blogIcon.getIconUrl(true),
|
||||
siteIconUrl: this.blogIcon.getIconUrl({absolute: true, fallbackToDefault: false}),
|
||||
siteUrl: this.urlUtils.getSiteUrl(),
|
||||
siteDomain: this.siteDomain,
|
||||
accentColor: this.settingsCache.get('accent_color'),
|
||||
@ -287,7 +287,7 @@ class StaffServiceEmails {
|
||||
const templateData = {
|
||||
siteTitle: this.settingsCache.get('title'),
|
||||
siteUrl: this.urlUtils.getSiteUrl(),
|
||||
siteIconUrl: this.blogIcon.getIconUrl(true),
|
||||
siteIconUrl: this.blogIcon.getIconUrl({absolute: true, fallbackToDefault: false}),
|
||||
siteDomain: this.siteDomain,
|
||||
fromEmail: this.fromEmailAddress,
|
||||
toEmail: to,
|
||||
|
@ -34,9 +34,9 @@
|
||||
<tr>
|
||||
<td align="center" style="padding: 24px; text-align: center;">
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; line-height: 26px; padding: 0; text-align: left; margin: 0; color: #15171A; font-weight: 400;">From:</p>
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 17px; line-height: 26px; padding: 0; text-align: left; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 700;">{{donation.name}} (<span style="color:{{accentColor}}; text-decoration: none;">{{donation.email}}</span>)</p>
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 26px; padding: 0; text-align: left; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 700;">{{donation.name}} (<span style="color:{{accentColor}}; text-decoration: none;">{{donation.email}}</span>)</p>
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; line-height: 26px; padding: 0; text-align: left; margin: 0; color: #15171A; font-weight: 400;">Amount received:</p>
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 17px; line-height: 26px; padding: 0; text-align: left; margin: 0; color: #15171A; font-weight: 700;">{{donation.amount}}</p>
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; line-height: 26px; padding: 0; text-align: left; margin: 0; color: #15171A; font-weight: 700;">{{donation.amount}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -61,7 +61,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 12px; vertical-align: top;">
|
||||
<p class="small" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 18px; font-size: 12px; color: #7C8B9A; font-weight: normal; margin: 0;">Don’t want to receive these emails? Manage your preferences <a class="small" href="{{staffUrl}}" style="text-decoration: underline; color: #7C8B9A; font-size: 12px;">here</a>.</p>
|
||||
<p class="small" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 18px; font-size: 12px; color: #7C8B9A; font-weight: normal; margin: 0;">Don’t want to receive these emails? Manage your preferences <a class="small" href="{{staffUrl}}" style="text-decoration: underline; color: #7C8B9A; font-size: 12px;">here</a>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
@ -33,7 +33,7 @@
|
||||
{{/if}}
|
||||
<tr>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; vertical-align: top;">
|
||||
<h1 style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 26px; color: #15212A; font-weight: bold; line-height: 28px; margin: 0; padding-bottom: 24px;">New free subscriber to {{siteTitle}}</h1>
|
||||
<h1 style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 26px; color: #15212A; font-weight: bold; line-height: 28px; margin: 0; padding-bottom: 24px;">You have a new free member</h1>
|
||||
<table width="100" border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; table-layout: fixed; width: 100%; min-width: 100%; box-sizing: border-box; background: #F4F5F6; border-radius: 8px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
@ -42,13 +42,13 @@
|
||||
<tr>
|
||||
<td style="padding-right: 8px; background-color: #F4F5F6; text-align: left; vertical-align: middle;" valign="middle">
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; margin: 0; padding-bottom: 4px; color: #15171A; font-weight: 400;">Name:</p>
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 17px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;">{{memberData.name}}{{#if memberData.showEmail}} ({{memberData.email}}){{/if}}</p>
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;">{{memberData.name}}{{#if memberData.showEmail}} ({{memberData.email}}){{/if}}</p>
|
||||
{{#if referrerSource}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; margin: 0; padding-bottom: 4px; color: #15171A; font-weight: 400;">Source:</p>
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 17px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;">{{referrerSource}}</p>
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;">{{referrerSource}}</p>
|
||||
{{#if attributionTitle}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; margin: 0; padding-bottom: 4px; color: #15171A; font-weight: 400;">Page:</p>
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 17px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;"><a href="{{attributionUrl}}">{{attributionTitle}}</a></p>
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;"><a href="{{attributionUrl}}">{{attributionTitle}}</a></p>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</td>
|
||||
@ -95,7 +95,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 12px; vertical-align: top;">
|
||||
<p class="small" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 18px; font-size: 12px; color: #7C8B9A; font-weight: normal; margin: 0;">Don’t want to receive these emails? Manage your preferences <a class="small" href="{{staffUrl}}" style="text-decoration: underline; color: #7C8B9A; font-size: 12px;">here</a>.</p>
|
||||
<p class="small" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 18px; font-size: 12px; color: #7C8B9A; font-weight: normal; margin: 0;">Don’t want to receive these emails? Manage your preferences <a class="small" href="{{staffUrl}}" style="text-decoration: underline; color: #7C8B9A; font-size: 12px;">here</a>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
@ -30,71 +30,49 @@
|
||||
<tr>
|
||||
<td class="wrapper" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; vertical-align: top; box-sizing: border-box;">
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
||||
{{#if siteIconUrl}}
|
||||
<tr>
|
||||
<td align="center" style="padding-bottom: 56px; text-align: center;"><a href="{{siteUrl}}"><img src="{{siteIconUrl}}" alt="{{siteTitle}}" border="0" width="48" height="48"></a></td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
<tr>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; vertical-align: top;">
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 20px; color: #15212A; font-weight: bold; line-height: 25px; margin: 0; margin-bottom: 15px;">Hey there,</p>
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; color: #3A464C; font-weight: normal; margin: 0; line-height: 25px; margin-bottom: 32px;">A paid member's subscription has just been <span style="font-weight: bold; color: #15212A;">canceled</span>.</p>
|
||||
|
||||
<table width="100" border="0" cellpadding="0" cellspacing="0" class="btn btn-primary" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; table-layout: fixed; width: 100%; min-width: 100%; box-sizing: border-box; background: #F9F9FA; border-radius: 7px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="left" style="padding: 16px;">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td style="padding-right: 14px;">
|
||||
<div style="width: 48px; height: 48px; background-color: #15171A; border-radius: 999px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 19px; color: #FFFFFF; text-align: center; vertical-align: center; font-weight: 500; line-height: 47px;">
|
||||
{{memberData.initials}}
|
||||
</div>
|
||||
</td>
|
||||
<td style="padding-right: 8px;">
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; padding-right: 8px; padding: 0; margin: 0; color: #15171A; font-weight: 600;">{{memberData.name}}</p>
|
||||
{{#if memberData.showEmail}}
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 13px; padding-right: 8px; padding: 0; margin: 0; color: #394047; font-weight: 400;">{{memberData.email}}</p>
|
||||
{{/if}}
|
||||
{{#unless subscriptionData.cancelNow}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 13px; padding-right: 8px; padding: 0; margin: 0; color: #95A1AD;">Canceled on {{subscriptionData.canceledAt}} </p>
|
||||
{{/unless}}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align: top; padding-top: 0; padding-right: 16px; padding-bottom: 16px; padding-left: 16px;">
|
||||
<hr style="border-bottom: 2px solid #F4F4F5; margin-top: 0; margin-bottom: 16px;" />
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 13px; padding-right: 8px; padding: 0; margin: 0; color: #95A1AD;">Tier</p>
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; padding-right: 8px; padding: 0; margin: 0; color: #15171A; font-weight: 600;">{{tierData.name}}<span style="font-weight: normal; color:#3A464C;"> - {{tierData.details}}</span></p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="vertical-align: top; padding-top: 0; padding-right: 16px; padding-bottom: 16px; padding-left: 16px;">
|
||||
{{#if subscriptionData.cancelNow}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 13px; padding-right: 8px; padding: 0; margin: 0; color: #95A1AD;">Subscription expired on</p>
|
||||
{{else}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 13px; padding-right: 8px; padding: 0; margin: 0; color: #95A1AD;">Subscription will expire on</p>
|
||||
{{/if}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; padding-right: 8px; padding: 0; margin: 0; color: #15171A; font-weight: 600;">{{subscriptionData.expiryAt}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
{{#if subscriptionData.cancellationReason}}
|
||||
<tr>
|
||||
<td style="vertical-align: top; padding-top: 0; padding-right: 16px; padding-bottom: 16px; padding-left: 16px;">
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 13px; padding-right: 8px; padding: 0; margin: 0; color: #95A1AD;">Cancellation reason</p>
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; padding-right: 8px; padding: 0; margin: 0; color: #15171A; font-weight: 400;">{{subscriptionData.cancellationReason}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0" class="btn btn-primary" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; box-sizing: border-box;">
|
||||
<h1 style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 26px; color: #15212A; font-weight: bold; line-height: 28px; margin: 0; padding-bottom: 24px;">A paid member's subscription has just been canceled</h1>
|
||||
<table width="100" border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; table-layout: fixed; width: 100%; min-width: 100%; box-sizing: border-box; background: #F4F5F6; border-radius: 8px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="left" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; vertical-align: top; padding-top: 32px; padding-bottom: 12px;">
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;">
|
||||
<td align="left" style="padding: 24px;">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td style="padding-right: 8px; background-color: #F4F5F6; text-align: left; vertical-align: middle;" valign="middle">
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; margin: 0; padding-bottom: 4px; color: #15171A; font-weight: 400;">Name:</p>
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;">{{memberData.name}}{{#if memberData.showEmail}} ({{memberData.email}}){{/if}}</p>
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; margin: 0; padding-bottom: 4px; color: #15171A; font-weight: 400;">Tier:</p>
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;">{{tierData.name}}{{#if tierData.details}} • {{tierData.details}}{{/if}}</p>
|
||||
{{#if subscriptionData.cancelNow}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; margin: 0; padding-bottom: 4px; color: #15171A; font-weight: 400;">Expired on:</p>
|
||||
{{else}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; margin: 0; padding-bottom: 4px; color: #15171A; font-weight: 400;">Expires on:</p>
|
||||
{{/if}}
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;">{{subscriptionData.expiryAt}}</p>
|
||||
{{#if subscriptionData.cancellationReason}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 400;">"{{subscriptionData.cancellationReason}}"</p>
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table border="0" cellpadding="0" cellspacing="0" class="btn btn-primary" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; box-sizing: border-box;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; vertical-align: top; background-color: {{accentColor}}; border-radius: 5px; text-align: center;"> <a href="{{memberData.adminUrl}}" target="_blank" style="display: inline-block; color: #ffffff; background-color: {{accentColor}}; border: solid 1px {{accentColor}}; border-radius: 5px; box-sizing: border-box; cursor: pointer; text-decoration: none; font-size: 16px; font-weight: normal; margin: 0; padding: 9px 22px 10px; border-color: {{accentColor}};">View member</a> </td>
|
||||
<td align="left" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; vertical-align: top;">
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; vertical-align: top; background-color: {{accentColor}}; border-radius: 8px; text-align: center;"> <a href="{{memberData.adminUrl}}" target="_blank" style="display: inline-block; color: #ffffff; background-color: {{accentColor}}; border: solid 1px {{accentColor}}; border-radius: 8px; box-sizing: border-box; cursor: pointer; text-decoration: none; font-size: 15px; font-weight: normal; margin: 0; padding: 10px 20px; border-color: {{accentColor}};">View member</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -102,21 +80,29 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr/>
|
||||
<p style="word-break: break-all; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; color: #3A464C; font-weight: normal; margin: 0; line-height: 25px; margin-bottom: 5px;">You can also copy & paste this URL into your browser:</p>
|
||||
<p class="text-link" style="word-break: break-all; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; line-height: 25px; margin-top:0; color: #3A464C;">{{memberData.adminUrl}}</p>
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="left" style="padding-top: 24px;">
|
||||
<p style="word-break: break-all; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; color: #7c8b9a; font-weight: normal; margin: 0; line-height: 25px;">Or copy and paste this URL into your browser:</p>
|
||||
<p class="text-link" style="word-break: break-all; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; line-height: 25px; margin:0; color: #7c8b9a; font-weight: normal;">{{memberData.adminUrl}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- START FOOTER -->
|
||||
<tr>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; vertical-align: top; padding-top: 80px;">
|
||||
<p class="small" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 18px; font-size: 11px; color: #738A94; font-weight: normal; margin: 0; margin-bottom: 2px;">This message was sent from <a class="small" href="{{siteUrl}}" style="text-decoration: underline; color: #738A94; font-size: 11px;">{{siteDomain}}</a> to <a class="small" href="mailto:{{toEmail}}" style="text-decoration: underline; color: #738A94; font-size: 11px;">{{toEmail}}</a></p>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 12px; vertical-align: top; padding-top: 56px;">
|
||||
<p class="small" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 18px; font-size: 12px; color: #7C8B9A; font-weight: normal; margin: 0;">This message was sent from <a class="small" href="{{siteUrl}}" style="text-decoration: underline; color: #7C8B9A; font-size: 12px;">{{siteDomain}}</a> to <a class="small" href="mailto:{{toEmail}}" style="text-decoration: underline; color: #7C8B9A; font-size: 12px;">{{toEmail}}</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; vertical-align: top; padding-top: 2px">
|
||||
<p class="small" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 18px; font-size: 11px; color: #738A94; font-weight: normal; margin: 0; margin-bottom: 2px;">Don’t want to receive these emails? Manage your preferences <a class="small" href="{{staffUrl}}" style="text-decoration: underline; color: #738A94; font-size: 11px;">here</a>.</p>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 12px; vertical-align: top;">
|
||||
<p class="small" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 18px; font-size: 12px; color: #7C8B9A; font-weight: normal; margin: 0;">Don’t want to receive these emails? Manage your preferences <a class="small" href="{{staffUrl}}" style="text-decoration: underline; color: #7C8B9A; font-size: 12px;">here</a>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
@ -26,77 +26,52 @@
|
||||
<tr>
|
||||
<td class="wrapper" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; vertical-align: top; box-sizing: border-box;">
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
||||
{{#if siteIconUrl}}
|
||||
<tr>
|
||||
<td align="center" style="padding-bottom: 56px; text-align: center;"><a href="{{siteUrl}}"><img src="{{siteIconUrl}}" alt="{{siteTitle}}" border="0" width="48" height="48"></a></td>
|
||||
</tr>
|
||||
{{/if}}
|
||||
<tr>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; vertical-align: top;">
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 20px; color: #15212A; font-weight: bold; line-height: 25px; margin: 0; margin-bottom: 15px;">Congratulations!</p>
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; color: #3A464C; font-weight: normal; margin: 0; line-height: 25px; margin-bottom: 32px;">You have a <span style="font-weight: bold; color: #15212A;">new paid member</span>.</p>
|
||||
|
||||
<table width="100" border="0" cellpadding="0" cellspacing="0" class="btn btn-primary" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; table-layout: fixed; width: 100%; min-width: 100%; box-sizing: border-box; background: #F9F9FA; border-radius: 7px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="left" style="padding: 16px;">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td style="padding-right: 14px; vertical-align: middle;" valign="middle">
|
||||
<div style="width: 48px; height: 48px; background-color: #15171A; border-radius: 999px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 19px; color: #FFFFFF; text-align: center; vertical-align: center; font-weight: 500; line-height: 47px;">
|
||||
{{memberData.initials}}
|
||||
</div>
|
||||
</td>
|
||||
<td style="padding-right: 8px; vertical-align: middle;" valign="middle">
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; padding-right: 8px; padding: 0; margin: 0; color: #15171A; font-weight: 600;">{{memberData.name}}</p>
|
||||
{{#if memberData.showEmail}}
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 13px; padding-right: 8px; padding: 0; margin: 0; color: #394047; font-weight: 400;">{{memberData.email}}</p>
|
||||
{{/if}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 13px; padding-right: 8px; padding: 0; margin: 0; color: #95A1AD;">Subscription started on {{subscriptionData.startedOn}} </p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0" class="btn btn-primary" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; box-sizing: border-box;">
|
||||
<tr>
|
||||
<td align="left" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; vertical-align: top; padding-top: 32px; padding-bottom: 12px;">
|
||||
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 13px; padding-right: 8px; padding: 0; margin: 0; color: #95A1AD;">Tier</p>
|
||||
<hr style="border-bottom: 1px solid #F4F4F5; margin-top: 4px; margin-bottom: 8px;" />
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; padding-right: 8px; padding: 0; margin: 0; color: #15171A; font-weight: 600; padding-bottom: 32px;">{{tierData.name}}
|
||||
{{#if tierData.details}} <span style="font-weight: normal; color:#3A464C;"> - {{tierData.details}}</span>{{/if}}
|
||||
</p>
|
||||
|
||||
{{#if offerData}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 13px; padding-right: 8px; padding: 0; margin: 0; color: #95A1AD;">Offer</p>
|
||||
<hr style="border-bottom: 1px solid #F4F4F5; margin-top: 4px; margin-bottom: 8px;" />
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; padding-right: 8px; padding: 0; margin: 0; color: #15171A; font-weight: 600; padding-bottom: 32px;">{{offerData.name}} <span style="font-weight: normal; color:#3A464C;"> - {{offerData.details}}</span></p>
|
||||
{{/if}}
|
||||
|
||||
{{#if referrerSource}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 13px; padding-right: 8px; padding: 0; margin: 0; color: #95A1AD;">Signup info</p>
|
||||
<hr style="border-bottom: 1px solid #F4F4F5; margin-top: 4px; margin-bottom: 8px;" />
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; padding-right: 8px; padding: 0; margin: 0; color: #15171A; font-weight: 600; padding-bottom: 4px;">Source
|
||||
<span style="font-weight: normal; color:#3A464C;"> - {{referrerSource}}</span>
|
||||
</p>
|
||||
{{#if attributionTitle}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; padding-right: 8px; padding: 0; margin: 0; color: #15171A; font-weight: 600;">Page
|
||||
<span style="font-weight: normal; color:#3A464C;"> - <a href="{{attributionUrl}}" style="font-weight: normal; color:#3A464C;text-decoration:none">{{attributionTitle}}</a></span>
|
||||
</p>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0" class="btn btn-primary" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; box-sizing: border-box;">
|
||||
<h1 style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 26px; color: #15212A; font-weight: bold; line-height: 28px; margin: 0; padding-bottom: 24px;">You have a new paid subscriber</h1>
|
||||
<table width="100" border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; table-layout: fixed; width: 100%; min-width: 100%; box-sizing: border-box; background: #F4F5F6; border-radius: 8px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="left" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; vertical-align: top; padding-top: 32px; padding-bottom: 12px;">
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;">
|
||||
<td align="left" style="padding: 24px;">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td style="padding-right: 8px; background-color: #F4F5F6; text-align: left; vertical-align: middle;" valign="middle">
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; margin: 0; padding-bottom: 4px; color: #15171A; font-weight: 400;">Name:</p>
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;">{{memberData.name}}{{#if memberData.showEmail}} ({{memberData.email}}){{/if}}</p>
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; margin: 0; padding-bottom: 4px; color: #15171A; font-weight: 400;">Tier:</p>
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;">{{tierData.name}}{{#if tierData.details}} • {{tierData.details}}{{/if}}</p>
|
||||
{{#if offerData}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; margin: 0; padding-bottom: 4px; color: #15171A; font-weight: 400;">Offer:</p>
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;">{{offerData.name}} • <span style="color: {{accentColor}};">{{offerData.details}}</span></p>
|
||||
{{/if}}
|
||||
{{#if referrerSource}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; margin: 0; padding-bottom: 4px; color: #15171A; font-weight: 400;">Source:</p>
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;">{{referrerSource}}</p>
|
||||
{{#if attributionTitle}}
|
||||
<p style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; margin: 0; padding-bottom: 4px; color: #15171A; font-weight: 400;">Page:</p>
|
||||
<p class="text-link" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 18px; margin: 0; padding-bottom: 24px; color: #15171A; font-weight: 600;"><a href="{{attributionUrl}}">{{attributionTitle}}</a></p>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table border="0" cellpadding="0" cellspacing="0" class="btn btn-primary" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; box-sizing: border-box;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; vertical-align: top; background-color: {{accentColor}}; border-radius: 5px; text-align: center;"> <a href="{{memberData.adminUrl}}" target="_blank" style="display: inline-block; color: #ffffff; background-color: {{accentColor}}; border: solid 1px {{accentColor}}; border-radius: 5px; box-sizing: border-box; cursor: pointer; text-decoration: none; font-size: 16px; font-weight: normal; margin: 0; padding: 9px 22px 10px; border-color: {{accentColor}};">View member</a> </td>
|
||||
<td align="left" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; vertical-align: top;">
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; vertical-align: top; background-color: {{accentColor}}; border-radius: 8px; text-align: center;"> <a href="{{memberData.adminUrl}}" target="_blank" style="display: inline-block; color: #ffffff; background-color: {{accentColor}}; border: solid 1px {{accentColor}}; border-radius: 8px; box-sizing: border-box; cursor: pointer; text-decoration: none; font-size: 15px; font-weight: normal; margin: 0; padding: 10px 20px; border-color: {{accentColor}};">View member</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -104,21 +79,29 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr/>
|
||||
<p style="word-break: break-all; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; color: #3A464C; font-weight: normal; margin: 0; line-height: 25px; margin-bottom: 5px;">You can also copy & paste this URL into your browser:</p>
|
||||
<p class="text-link" style="word-break: break-all; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; line-height: 25px; margin-top:0; color: #3A464C;">{{memberData.adminUrl}}</p>
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="left" style="padding-top: 24px;">
|
||||
<p style="word-break: break-all; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; color: #7c8b9a; font-weight: normal; margin: 0; line-height: 25px;">Or copy and paste this URL into your browser:</p>
|
||||
<p class="text-link" style="word-break: break-all; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; line-height: 25px; margin:0; color: #7c8b9a; font-weight: normal;">{{memberData.adminUrl}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- START FOOTER -->
|
||||
<tr>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; vertical-align: top; padding-top: 80px;">
|
||||
<p class="small" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 18px; font-size: 11px; color: #738A94; font-weight: normal; margin: 0; margin-bottom: 2px;">This message was sent from <a class="small" href="{{siteUrl}}" style="text-decoration: underline; color: #738A94; font-size: 11px;">{{siteDomain}}</a> to <a class="small" href="mailto:{{toEmail}}" style="text-decoration: underline; color: #738A94; font-size: 11px;">{{toEmail}}</a></p>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 12px; vertical-align: top; padding-top: 56px;">
|
||||
<p class="small" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 18px; font-size: 12px; color: #7C8B9A; font-weight: normal; margin: 0;">This message was sent from <a class="small" href="{{siteUrl}}" style="text-decoration: underline; color: #7C8B9A; font-size: 12px;">{{siteDomain}}</a> to <a class="small" href="mailto:{{toEmail}}" style="text-decoration: underline; color: #7C8B9A; font-size: 12px;">{{toEmail}}</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; vertical-align: top; padding-top: 2px">
|
||||
<p class="small" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 18px; font-size: 11px; color: #738A94; font-weight: normal; margin: 0; margin-bottom: 2px;">Don’t want to receive these emails? Manage your preferences <a class="small" href="{{staffUrl}}" style="text-decoration: underline; color: #738A94; font-size: 11px;">here</a>.</p>
|
||||
<td style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 12px; vertical-align: top;">
|
||||
<p class="small" style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; line-height: 18px; font-size: 12px; color: #7C8B9A; font-weight: normal; margin: 0;">Don’t want to receive these emails? Manage your preferences <a class="small" href="{{staffUrl}}" style="text-decoration: underline; color: #7C8B9A; font-size: 12px;">here</a>.</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
@ -78,10 +78,6 @@ function testCommonPaidSubMailData({member, mailStub, getEmailAlertUsersStub}) {
|
||||
mailStub.calledWith(
|
||||
sinon.match.has('html', sinon.match('$50.00/month'))
|
||||
).should.be.true();
|
||||
|
||||
mailStub.calledWith(
|
||||
sinon.match.has('html', sinon.match('Subscription started on 1 Aug 2022'))
|
||||
).should.be.true();
|
||||
}
|
||||
|
||||
function testCommonPaidSubCancelMailData({mailStub, getEmailAlertUsersStub}) {
|
||||
@ -518,9 +514,7 @@ describe('StaffService', function () {
|
||||
member = {
|
||||
name: 'Ghost',
|
||||
email: 'member@example.com',
|
||||
id: 'abc',
|
||||
geolocation: '{"country": "France"}',
|
||||
created_at: '2022-08-01T07:30:39.882Z'
|
||||
id: 'abc'
|
||||
};
|
||||
offer = {
|
||||
name: 'Half price',
|
||||
@ -586,9 +580,7 @@ describe('StaffService', function () {
|
||||
it('sends paid subscription start alert without member name', async function () {
|
||||
let memberData = {
|
||||
email: 'member@example.com',
|
||||
id: 'abc',
|
||||
geolocation: '{"country": "France"}',
|
||||
created_at: '2022-08-01T07:30:39.882Z'
|
||||
id: 'abc'
|
||||
};
|
||||
await service.emails.notifyPaidSubscriptionStarted({member: memberData, offer: null, tier, subscription}, options);
|
||||
|
||||
@ -740,13 +732,9 @@ describe('StaffService', function () {
|
||||
mailStub.calledOnce.should.be.true();
|
||||
testCommonPaidSubCancelMailData(stubs);
|
||||
|
||||
mailStub.calledWith(
|
||||
sinon.match.has('html', sinon.match('Canceled on 5 Aug 2022'))
|
||||
).should.be.true();
|
||||
|
||||
// Expiration sentence is in the future tense
|
||||
mailStub.calledWith(
|
||||
sinon.match.has('html', sinon.match('Subscription will expire on'))
|
||||
sinon.match.has('html', sinon.match('Expires on'))
|
||||
).should.be.true();
|
||||
|
||||
mailStub.calledWith(
|
||||
@ -760,24 +748,17 @@ describe('StaffService', function () {
|
||||
mailStub.calledWith(
|
||||
sinon.match.has('html', sinon.match('Reason: Changed my mind!'))
|
||||
).should.be.true();
|
||||
mailStub.calledWith(
|
||||
sinon.match.has('html', sinon.match('Cancellation reason'))
|
||||
).should.be.true();
|
||||
});
|
||||
|
||||
it('sends paid subscription cancel alert when sub is canceled without reason', async function () {
|
||||
await service.emails.notifyPaidSubscriptionCanceled({member, tier, subscription, expiryAt, canceledAt, cancelNow}, options);
|
||||
await service.emails.notifyPaidSubscriptionCanceled({member, tier, subscription, expiryAt, cancelNow}, options);
|
||||
|
||||
mailStub.calledOnce.should.be.true();
|
||||
testCommonPaidSubCancelMailData(stubs);
|
||||
|
||||
mailStub.calledWith(
|
||||
sinon.match.has('html', sinon.match('Canceled on 5 Aug 2022'))
|
||||
).should.be.true();
|
||||
|
||||
// Expiration sentence is in the future tense
|
||||
mailStub.calledWith(
|
||||
sinon.match.has('html', sinon.match('Subscription will expire on'))
|
||||
sinon.match.has('html', sinon.match('Expires on'))
|
||||
).should.be.true();
|
||||
|
||||
mailStub.calledWith(
|
||||
@ -788,9 +769,6 @@ describe('StaffService', function () {
|
||||
mailStub.calledWith(
|
||||
sinon.match.has('html', sinon.match('Reason: '))
|
||||
).should.be.false();
|
||||
mailStub.calledWith(
|
||||
sinon.match.has('html', sinon.match('Cancellation reason'))
|
||||
).should.be.false();
|
||||
});
|
||||
|
||||
it('sends paid subscription cancel alert when subscription is canceled immediately', async function () {
|
||||
@ -810,7 +788,7 @@ describe('StaffService', function () {
|
||||
|
||||
// Expiration sentence is in the past tense
|
||||
mailStub.calledWith(
|
||||
sinon.match.has('html', sinon.match('Subscription expired on'))
|
||||
sinon.match.has('html', sinon.match('Expired on'))
|
||||
).should.be.true();
|
||||
|
||||
mailStub.calledWith(
|
||||
@ -821,10 +799,6 @@ describe('StaffService', function () {
|
||||
sinon.match.has('html', 'Offer')
|
||||
).should.be.false();
|
||||
|
||||
mailStub.calledWith(
|
||||
sinon.match.has('html', sinon.match('Cancellation reason'))
|
||||
).should.be.true();
|
||||
|
||||
mailStub.calledWith(
|
||||
sinon.match.has('html', sinon.match('Reason: Payment failed'))
|
||||
).should.be.true();
|
||||
|
293
yarn.lock
293
yarn.lock
@ -7408,21 +7408,6 @@
|
||||
lz-string "^1.5.0"
|
||||
pretty-format "^27.0.2"
|
||||
|
||||
"@testing-library/jest-dom@5.16.5":
|
||||
version "5.16.5"
|
||||
resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e"
|
||||
integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==
|
||||
dependencies:
|
||||
"@adobe/css-tools" "^4.0.1"
|
||||
"@babel/runtime" "^7.9.2"
|
||||
"@types/testing-library__jest-dom" "^5.9.1"
|
||||
aria-query "^5.0.0"
|
||||
chalk "^3.0.0"
|
||||
css.escape "^1.5.1"
|
||||
dom-accessibility-api "^0.5.6"
|
||||
lodash "^4.17.15"
|
||||
redent "^3.0.0"
|
||||
|
||||
"@testing-library/jest-dom@5.17.0":
|
||||
version "5.17.0"
|
||||
resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz#5e97c8f9a15ccf4656da00fecab505728de81e0c"
|
||||
@ -7455,85 +7440,80 @@
|
||||
"@testing-library/dom" "^8.0.0"
|
||||
"@types/react-dom" "<18.0.0"
|
||||
|
||||
"@testing-library/react@14.1.0":
|
||||
version "14.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.1.0.tgz#01d64915111db99b50f8361d51d7217606805989"
|
||||
integrity sha512-hcvfZEEyO0xQoZeHmUbuMs7APJCGELpilL7bY+BaJaMP57aWc6q1etFwScnoZDheYjk4ESdlzPdQ33IbsKAK/A==
|
||||
"@testing-library/react@14.3.1":
|
||||
version "14.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.3.1.tgz#29513fc3770d6fb75245c4e1245c470e4ffdd830"
|
||||
integrity sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.12.5"
|
||||
"@testing-library/dom" "^9.0.0"
|
||||
"@types/react-dom" "^18.0.0"
|
||||
|
||||
"@testing-library/user-event@14.4.3":
|
||||
version "14.4.3"
|
||||
resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.3.tgz#af975e367743fa91989cd666666aec31a8f50591"
|
||||
integrity sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==
|
||||
"@testing-library/user-event@14.5.2", "@testing-library/user-event@^14.4.0":
|
||||
version "14.5.2"
|
||||
resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd"
|
||||
integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==
|
||||
|
||||
"@testing-library/user-event@^14.4.0":
|
||||
version "14.5.1"
|
||||
resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.1.tgz#27337d72046d5236b32fd977edee3f74c71d332f"
|
||||
integrity sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg==
|
||||
"@tiptap/core@2.5.9":
|
||||
version "2.5.9"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.5.9.tgz#1deb0b7c748e24ec32613263e0af8d55a3b3c2ca"
|
||||
integrity sha512-PPUR+0tbr+wX2G8RG4FEps4qhbnAPEeXK1FUtirLXSRh8vm+TDgafu3sms7wBc4fAyw9zTO/KNNZ90GBe04guA==
|
||||
|
||||
"@tiptap/core@2.5.8":
|
||||
version "2.5.8"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.5.8.tgz#58de366b0d2acb0a6e67a4780de64d619ebd90fa"
|
||||
integrity sha512-lkWCKyoAoMTxM137MoEsorG7tZ5MZU6O3wMRuZ0P9fcTRY5vd1NWncWuPzuGSJIpL20gwBQOsS6PaQSfR3xjlA==
|
||||
"@tiptap/extension-blockquote@2.5.9":
|
||||
version "2.5.9"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.5.9.tgz#d873a8496fcf572c69aaac2a7a341e035fdbae22"
|
||||
integrity sha512-LhGyigmd/v1OjYPeoVK8UvFHbH6ffh175ZuNvseZY4PsBd7kZhrSUiuMG8xYdNX8FxamsxAzr2YpsYnOzu3W7A==
|
||||
|
||||
"@tiptap/extension-blockquote@2.5.8":
|
||||
version "2.5.8"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.5.8.tgz#95880f0b687790dbff85a1c9e83f2afd0011be67"
|
||||
integrity sha512-P8vDiagtRrUfIewfCKrJe0ddDSjPgOTKzqoM1UXKS+MenT8C/wT4bjiwopAoWP6zMoV0TfHWXah9emllmCfXFA==
|
||||
|
||||
"@tiptap/extension-bubble-menu@^2.5.8":
|
||||
version "2.5.8"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.5.8.tgz#e39b176c574b9fd2f59c6457724f3f22a22fb1b8"
|
||||
integrity sha512-COmd1Azudu7i281emZFIESECe7FnvWiRoBoQBVjjWSyq5PVzwJaA3PAlnU7GyNZKtVXMZ4xbrckdyNQfDeVQDA==
|
||||
"@tiptap/extension-bubble-menu@^2.5.9":
|
||||
version "2.5.9"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.5.9.tgz#d600bbcaa1d98a99f32b3b8b8c3d35752161200c"
|
||||
integrity sha512-NddZ8Qn5dgPPa1W4yk0jdhF4tDBh0FwzBpbnDu2Xz/0TUHrA36ugB2CvR5xS1we4zUKckgpVqOqgdelrmqqFVg==
|
||||
dependencies:
|
||||
tippy.js "^6.3.7"
|
||||
|
||||
"@tiptap/extension-document@2.5.8":
|
||||
version "2.5.8"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.5.8.tgz#644f042f1d4a8d3f74af057477cc627da7b54dc7"
|
||||
integrity sha512-r3rP4ihCJAdp3VRIeqd80etHx7jttzZaKNFX8hkQShHK6eTHwrR92VL0jDE4K+NOE3bxjMsOlYizJYWV042BtA==
|
||||
"@tiptap/extension-document@2.5.9":
|
||||
version "2.5.9"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.5.9.tgz#13a22b2d3bdc1463844872b1f1c926633df431a8"
|
||||
integrity sha512-VdNZYDyCzC3W430UdeRXR9IZzPeODSbi5Xz/JEdV93THVp8AC9CrZR7/qjqdBTgbTB54VP8Yr6bKfCoIAF0BeQ==
|
||||
|
||||
"@tiptap/extension-floating-menu@^2.5.8":
|
||||
version "2.5.8"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.5.8.tgz#6af3fa169bf293ab79a671a7b60b5199992a9154"
|
||||
integrity sha512-qsM6tCyRlXnI/gADrkO/2p0Tldu5aY96CnsXpZMaflMgsO577qhcXD0ReGg17uLXBzJa5xmV8qOik0Ptq3WEWg==
|
||||
"@tiptap/extension-floating-menu@^2.5.9":
|
||||
version "2.5.9"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.5.9.tgz#b970905f3c1af49a916dcbd477a4302086187974"
|
||||
integrity sha512-MWJIQQT6e5MgqHny8neeH2Dx926nVPF7sv4p84nX4E0dnkRbEYUP8mCsWYhSUvxxIif6e+yY+4654f2Q9qTx1w==
|
||||
dependencies:
|
||||
tippy.js "^6.3.7"
|
||||
|
||||
"@tiptap/extension-hard-break@2.5.8":
|
||||
version "2.5.8"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.5.8.tgz#95288faad3408b91284d925c3e4dbab66029dd98"
|
||||
integrity sha512-samZEL0EXzHSmMQ7KyLnfSxdDv3qSjia0JzelfCnFZS6LLcbwjrIjV8ZPxEhJ7UlZqroQdFxPegllkLHZj/MdQ==
|
||||
"@tiptap/extension-hard-break@2.5.9":
|
||||
version "2.5.9"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.5.9.tgz#4f38f06dbeb5fb3e58ff7fc0c48b9db9c4ee4ecd"
|
||||
integrity sha512-8hQ63SgZRG4BqHOeSfeaowG2eMr2beced018pOGbpHbE3XSYoISkMVuFz4Z8UEVR3W9dTbKo4wxNufSTducocQ==
|
||||
|
||||
"@tiptap/extension-link@2.5.8":
|
||||
version "2.5.8"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.5.8.tgz#f9264afed09bd25c37668303151ab80ba82ef044"
|
||||
integrity sha512-qfeWR7sG2V7bn8z0f3HMyoR68pFlxYJmLs9cbW30diE9/zKClYEd3zTMPCgJ9yMSagCj4PWkqksIuktAhyRqOQ==
|
||||
"@tiptap/extension-link@2.5.9":
|
||||
version "2.5.9"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.5.9.tgz#6cb323d36b82700963ad2b9d189a7d07c81c7d6e"
|
||||
integrity sha512-7v9yRsX7NuiY8DPslIsPIlFqcD8aGBMLqfEGXltJDvuG6kykdr+khEZeWcJ8ihHIL4yWR3/MAgeT2W72Z/nxiQ==
|
||||
dependencies:
|
||||
linkifyjs "^4.1.0"
|
||||
|
||||
"@tiptap/extension-paragraph@2.5.8":
|
||||
version "2.5.8"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.5.8.tgz#5be7e7c4e5c19bd4f512c72d3dfc4e1e6d6dd876"
|
||||
integrity sha512-AMfD3lfGSiomfkSE2tUourUjVahLtIfWUQew13NTPuWoxAXaSyoCGO0ULkiou/lO3JVUUUmF9+KJrAHWGIARdA==
|
||||
"@tiptap/extension-paragraph@2.5.9":
|
||||
version "2.5.9"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.5.9.tgz#05210b6e7a9940b1acc09fdd4ec769fc6406da2b"
|
||||
integrity sha512-HDXGiHTJ/V85dbDMjcFj4XfqyTQZqry6V21ucMzgBZYX60X3gIn7VpQTQnnRjvULSgtfOASSJP6BELc5TyiK0w==
|
||||
|
||||
"@tiptap/extension-placeholder@2.5.8":
|
||||
version "2.5.8"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.5.8.tgz#80fdf02133d94f41363f6fe28f5fc3ef09ac73c6"
|
||||
integrity sha512-mvRl73OM5jBXVtDRLSTvp8/4+0mS2J2+ZcuiAHjABwEsZRCfJsiqty5NisOxSuy/AQtm8TK2kyt6ZCXQ2VRGig==
|
||||
"@tiptap/extension-placeholder@2.5.9":
|
||||
version "2.5.9"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-placeholder/-/extension-placeholder-2.5.9.tgz#c9bebc7e2bba2b0321e360d8a7a358152ffc9137"
|
||||
integrity sha512-ytKmlSiebtCBXoMPE2cup48DR0rQiekXhLKLkNyt7m8tSXkaRO4eDaFqCqPEXLeQXWdhwWEoPM6Cejaaa3ztkA==
|
||||
|
||||
"@tiptap/extension-text@2.5.8":
|
||||
version "2.5.8"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.5.8.tgz#a9c4de33eec749c8c01d8bd81fb589f581c30dfc"
|
||||
integrity sha512-CNkD51jRMdcYCqFVOkrnebqBQ6pCD3ZD5z9kO5bOC5UPZKZBkLsWdlrHGAVwosxcGxdJACbqJ0Nj+fMgIw4tNA==
|
||||
"@tiptap/extension-text@2.5.9":
|
||||
version "2.5.9"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.5.9.tgz#a5bef0b9c5324511dbc2804a3a5ac8b9b5d5dc4c"
|
||||
integrity sha512-W0pfiQUPsMkwaV5Y/wKW4cFsyXAIkyOFt7uN5u6LrZ/iW9KZ/IsDODPJDikWp0aeQnXzT9NNQULTpCjbHzzS6g==
|
||||
|
||||
"@tiptap/pm@2.5.8":
|
||||
version "2.5.8"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.5.8.tgz#b18afa77fdf69527b13614a05cfefc8b63e82224"
|
||||
integrity sha512-CVhHaTG4QNHSkvuh6HHsUR4hE+nbUnk7z+VMUedaqPU8tNqkTwWGCMbiyTc+PCsz0T9Mni7vvBR+EXgEQ3+w4g==
|
||||
"@tiptap/pm@2.5.9":
|
||||
version "2.5.9"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.5.9.tgz#f97889210374993a1ce78e9ecb23461d0e4644bf"
|
||||
integrity sha512-YSUaEQVtvZnGzGjif2Tl2o9utE+6tR2Djhz0EqFUcAUEVhOMk7UYUO+r/aPfcCRraIoKKuDQzyCpjKmJicjCUA==
|
||||
dependencies:
|
||||
prosemirror-changeset "^2.2.1"
|
||||
prosemirror-collab "^1.3.1"
|
||||
@ -7554,13 +7534,13 @@
|
||||
prosemirror-transform "^1.9.0"
|
||||
prosemirror-view "^1.33.9"
|
||||
|
||||
"@tiptap/react@2.5.8":
|
||||
version "2.5.8"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.5.8.tgz#d6bc68710f084fe0f02855376cf869f8ca2cf6fd"
|
||||
integrity sha512-twUMm8HV7scUgR/E1hYS9N6JDtKPl7cgDiPjxTynNHc5S5f5Ecv4ns/BZRq3TMZ/JDrp4rghLvgq+ImQsLvPOA==
|
||||
"@tiptap/react@2.5.9":
|
||||
version "2.5.9"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/react/-/react-2.5.9.tgz#43f94a2bf1d4c55e82d97ef9d1c97ba20206f7f0"
|
||||
integrity sha512-NZYAslIb79oxIOFHx9T9ey5oX0aJ1uRbtT2vvrvvyRaO6fKWgAwMYN92bOu5/f2oUVGUp6l7wkYZGdjz/XP5bA==
|
||||
dependencies:
|
||||
"@tiptap/extension-bubble-menu" "^2.5.8"
|
||||
"@tiptap/extension-floating-menu" "^2.5.8"
|
||||
"@tiptap/extension-bubble-menu" "^2.5.9"
|
||||
"@tiptap/extension-floating-menu" "^2.5.9"
|
||||
"@types/use-sync-external-store" "^0.0.6"
|
||||
use-sync-external-store "^1.2.2"
|
||||
|
||||
@ -7827,20 +7807,25 @@
|
||||
"@tryghost/errors" "^1.3.5"
|
||||
jest-snapshot "^29.0.0"
|
||||
|
||||
"@tryghost/kg-card-factory@5.0.4":
|
||||
version "5.0.4"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-card-factory/-/kg-card-factory-5.0.4.tgz#b2de98eaf01edbd5629fb1f4b06eca3a5f95d0ad"
|
||||
integrity sha512-KcNM4QJONSSOJeQlv9no5wFx+uV2mESX3bYBL2y3c0DqB26NlMaUx0QIAFSbCSinUlCvRFOwEEBQyaACtCOvzQ==
|
||||
"@tryghost/kg-card-factory@5.0.5":
|
||||
version "5.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-card-factory/-/kg-card-factory-5.0.5.tgz#2a7552b5f7ac3bbae99af9dca3da11b95fb4ae1b"
|
||||
integrity sha512-fZumHdEkR6pzc2BLukMNOnSC/tru9SJ+UP5rEaECN9lpLnLGya6B0fU51y8+Jjn+xl1CDCzeWtvII50CSBNLOQ==
|
||||
|
||||
"@tryghost/kg-clean-basic-html@4.1.1":
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-clean-basic-html/-/kg-clean-basic-html-4.1.1.tgz#132a019abc6b6b6a0948c7e2d3e3ce37d18983b7"
|
||||
integrity sha512-R654qIHRf//FP/1hHLkehTYxZz/Zp5NXomfEuQSezw4uDmOwGn1ME4yZD5TDi5+8ism71tfMeGVVI5XmLOeDLg==
|
||||
|
||||
"@tryghost/kg-converters@1.0.5":
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-converters/-/kg-converters-1.0.5.tgz#8deb6591b91d0c5e89c529bc39b1f9d0870bec37"
|
||||
integrity sha512-TpKH0oAlA+yFrQk7d8N0DYlxxQ8bcmoc7Waf3F1tDuioBhi7sFOz88TVxKt5VkPu1/PKGR52c+xhEeDA7BU85A==
|
||||
"@tryghost/kg-clean-basic-html@4.1.3":
|
||||
version "4.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-clean-basic-html/-/kg-clean-basic-html-4.1.3.tgz#be0724ac222a76af1f6a6e2c7e1ea1d41f69c2d1"
|
||||
integrity sha512-z2TLpPTMDR8onNGV177/B1BUdGIumwJ9Pd8i2GXfBbX8LtTnqswK465iR1CUVrKlwZFXFsqvj1ZFPnt51KWQKQ==
|
||||
|
||||
"@tryghost/kg-converters@1.0.6":
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-converters/-/kg-converters-1.0.6.tgz#55353fa9241c4406671fbb82c3f06829d8b750fa"
|
||||
integrity sha512-QI4o7hTvcs/6qyxY7wD2epLExYlRUCpqi3AEUfgvn35UsNYg4TuMJ6Kxr9Jwdex4DHFwJMEQ0ozrzjxnZEMoLA==
|
||||
dependencies:
|
||||
lodash "^4.17.21"
|
||||
|
||||
@ -7849,51 +7834,51 @@
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-default-atoms/-/kg-default-atoms-5.0.3.tgz#7d0e5af2191f2e0c61ae11d1666905bf924f67ac"
|
||||
integrity sha512-uPE69rKxaiiMEa1vFsEbfX+LCBG2H5D/nqTkuIPAslEGIHYjQUruaXpBfnwtyVHn+dMLuWcO+wDJl5qET8gKEQ==
|
||||
|
||||
"@tryghost/kg-default-cards@10.0.6":
|
||||
version "10.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-default-cards/-/kg-default-cards-10.0.6.tgz#17f10a711814196719c8fa2c6506a7d2ea9f3d7f"
|
||||
integrity sha512-wOjaqFj8G9hFr6bI85CUAO55aD9B2NoLIVaeqZgzzU6Ix09ZhP4M4abrwQup7hp89PSrGz7noqmac9NTb/Lvxg==
|
||||
"@tryghost/kg-default-cards@10.0.8":
|
||||
version "10.0.8"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-default-cards/-/kg-default-cards-10.0.8.tgz#ed67a90c1b5fe045c3e2822be8e14f43ccc2ee3a"
|
||||
integrity sha512-yLao7TDpDDDHjiTqbl+6wmISpx//iuXY00gS7JqNrZ8X7hZ6IvxUdXu1Hq9AZuyzZ6+nqvyqRYgvZ1VycSVtTQ==
|
||||
dependencies:
|
||||
"@tryghost/kg-markdown-html-renderer" "7.0.5"
|
||||
"@tryghost/kg-markdown-html-renderer" "7.0.7"
|
||||
"@tryghost/string" "0.2.12"
|
||||
"@tryghost/url-utils" "4.4.8"
|
||||
handlebars "^4.7.6"
|
||||
juice "^10.0.0"
|
||||
lodash "^4.17.21"
|
||||
luxon "^3.0.0"
|
||||
luxon "^3.5.0"
|
||||
|
||||
"@tryghost/kg-default-nodes@1.1.9":
|
||||
version "1.1.9"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-default-nodes/-/kg-default-nodes-1.1.9.tgz#2f8e0851735ad9daf8ba103fe3d42d9119a366eb"
|
||||
integrity sha512-xTIkOfusnTHub/pU/Pdw8S5rQ8GLf5ONfS1y8x5v2cqXln1e08lV8wa5gv44WSxuyDzKjVHKKceGkT3rbdVBXg==
|
||||
"@tryghost/kg-default-nodes@1.1.11":
|
||||
version "1.1.11"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-default-nodes/-/kg-default-nodes-1.1.11.tgz#8f4238868ba2a8c880a2a78b6416c1700c90b015"
|
||||
integrity sha512-Xh462ufG3wKEVtk/5QLRFanG87/EbTUjeS6glBiMJ63s5aHgrpwUPrKv2H52fWuJt9meg0hmOl6HRrKnYQs88g==
|
||||
dependencies:
|
||||
"@lexical/clipboard" "0.13.1"
|
||||
"@lexical/rich-text" "0.13.1"
|
||||
"@lexical/selection" "0.13.1"
|
||||
"@lexical/utils" "0.13.1"
|
||||
"@tryghost/kg-clean-basic-html" "4.1.1"
|
||||
"@tryghost/kg-markdown-html-renderer" "7.0.5"
|
||||
"@tryghost/kg-clean-basic-html" "4.1.3"
|
||||
"@tryghost/kg-markdown-html-renderer" "7.0.7"
|
||||
html-minifier "^4.0.0"
|
||||
jsdom "^24.0.0"
|
||||
jsdom "^24.1.0"
|
||||
lexical "0.13.1"
|
||||
lodash "^4.17.21"
|
||||
luxon "^3.3.0"
|
||||
luxon "^3.5.0"
|
||||
|
||||
"@tryghost/kg-default-transforms@1.1.10":
|
||||
version "1.1.10"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-default-transforms/-/kg-default-transforms-1.1.10.tgz#7f4f648e2a8eec8d4af43028111e766feb3975ea"
|
||||
integrity sha512-T9OZau2npHwtxKw77hXqRWNEErxdM/WKldWtmLKGJiKT7Czx8v9eEpsNmGgJYnXenkyzehJmU1okJlAUqMbcsA==
|
||||
"@tryghost/kg-default-transforms@1.1.12":
|
||||
version "1.1.12"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-default-transforms/-/kg-default-transforms-1.1.12.tgz#49b84fb6c4df866f1bfc7aadf19015b14136f4de"
|
||||
integrity sha512-vr12KCgo6amxoVYt65ra88v6c9lcK2Umyv01eGdoURWr1ipUhlbxOj8zEVaMHJd3Wsnp4TiCyvIag3Bb+WwqKQ==
|
||||
dependencies:
|
||||
"@lexical/list" "0.13.1"
|
||||
"@lexical/rich-text" "0.13.1"
|
||||
"@lexical/utils" "0.13.1"
|
||||
"@tryghost/kg-default-nodes" "1.1.9"
|
||||
"@tryghost/kg-default-nodes" "1.1.11"
|
||||
lexical "0.13.1"
|
||||
|
||||
"@tryghost/kg-html-to-lexical@1.1.10":
|
||||
version "1.1.10"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-html-to-lexical/-/kg-html-to-lexical-1.1.10.tgz#89dcd98e3933485bb0f33ab725dac4080f5a01fe"
|
||||
integrity sha512-ja0DRLEzQhhOzK4n7HQqUttr0dbDsMaueyXb6+bxovHyog3HFo3A5NYz0DX9UU3qdUhAKBLwrgY5SwrtJ/ysVw==
|
||||
"@tryghost/kg-html-to-lexical@1.1.12":
|
||||
version "1.1.12"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-html-to-lexical/-/kg-html-to-lexical-1.1.12.tgz#a62459127a20b852afbf72aef7a7a8c8bfe63ddb"
|
||||
integrity sha512-TtHwzvkA9oMNLBI44C3YiD95oNtNItfH0t6UXkQeq7gkcqoMAv5/fqLaQtSYPs1dycgz0EnZD82nEP8rivP43g==
|
||||
dependencies:
|
||||
"@lexical/clipboard" "0.13.1"
|
||||
"@lexical/headless" "0.13.1"
|
||||
@ -7901,15 +7886,15 @@
|
||||
"@lexical/link" "0.13.1"
|
||||
"@lexical/list" "0.13.1"
|
||||
"@lexical/rich-text" "0.13.1"
|
||||
"@tryghost/kg-default-nodes" "1.1.9"
|
||||
"@tryghost/kg-default-transforms" "1.1.10"
|
||||
jsdom "^24.0.0"
|
||||
"@tryghost/kg-default-nodes" "1.1.11"
|
||||
"@tryghost/kg-default-transforms" "1.1.12"
|
||||
jsdom "^24.1.0"
|
||||
lexical "0.13.1"
|
||||
|
||||
"@tryghost/kg-lexical-html-renderer@1.1.12":
|
||||
version "1.1.12"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-lexical-html-renderer/-/kg-lexical-html-renderer-1.1.12.tgz#3234331f18b0dfe65e52e8b5821ef2bbc4a7909a"
|
||||
integrity sha512-AEV+A1ZxSSVjTse7YonMz8AF9pqppEpfAHnwKH6BarSTJAVL8Gbvv/zcISO03UVrUqfqCZnnmmXS2h8iOBrbSA==
|
||||
"@tryghost/kg-lexical-html-renderer@1.1.14":
|
||||
version "1.1.14"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-lexical-html-renderer/-/kg-lexical-html-renderer-1.1.14.tgz#84d7c8c2e0369206780233a58e41a94455077489"
|
||||
integrity sha512-ud1/Gt13jF8wO7K0MYNCeJk8QCtPxtLBlBS2bmwkRWrcRBkPEHZre5UJ0esk7Ryiq/+rHxj6IS6xClEyq5mP9g==
|
||||
dependencies:
|
||||
"@lexical/clipboard" "0.13.1"
|
||||
"@lexical/code" "0.13.1"
|
||||
@ -7917,17 +7902,17 @@
|
||||
"@lexical/link" "0.13.1"
|
||||
"@lexical/list" "0.13.1"
|
||||
"@lexical/rich-text" "0.13.1"
|
||||
"@tryghost/kg-default-nodes" "1.1.9"
|
||||
"@tryghost/kg-default-transforms" "1.1.10"
|
||||
jsdom "^24.0.0"
|
||||
"@tryghost/kg-default-nodes" "1.1.11"
|
||||
"@tryghost/kg-default-transforms" "1.1.12"
|
||||
jsdom "^24.1.0"
|
||||
lexical "0.13.1"
|
||||
|
||||
"@tryghost/kg-markdown-html-renderer@7.0.5":
|
||||
version "7.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-markdown-html-renderer/-/kg-markdown-html-renderer-7.0.5.tgz#96fb7440291ab9188b1e32c7cc71f6aa5fdec48e"
|
||||
integrity sha512-Y1f2tKenyfrYIOfOVTI+9/hIVAed2MN/96B5pRBXpn/Bv2/+Sq8RCAFqlLmNwX4o7XeNp51BHZK96Mu+sU/Ltg==
|
||||
"@tryghost/kg-markdown-html-renderer@7.0.7":
|
||||
version "7.0.7"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-markdown-html-renderer/-/kg-markdown-html-renderer-7.0.7.tgz#c0640f0165a853a8f371edb4a731a04c48ee938e"
|
||||
integrity sha512-hTTEyMeYLhDCq7vXeCiM6SqcozWZEHjK3fZelW3m6E6FxwpZHGURMoZ30UZVpgIpEp/66fMWAT6fD69+tS3TNQ==
|
||||
dependencies:
|
||||
"@tryghost/kg-utils" "1.0.26"
|
||||
"@tryghost/kg-utils" "1.0.28"
|
||||
markdown-it "^14.0.0"
|
||||
markdown-it-footnote "^4.0.0"
|
||||
markdown-it-image-lazy-loading "^2.0.0"
|
||||
@ -7935,14 +7920,14 @@
|
||||
markdown-it-mark "^4.0.0"
|
||||
markdown-it-sub "^2.0.0"
|
||||
markdown-it-sup "^2.0.0"
|
||||
semver "^7.3.5"
|
||||
semver "^7.6.2"
|
||||
|
||||
"@tryghost/kg-mobiledoc-html-renderer@7.0.4":
|
||||
version "7.0.4"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-mobiledoc-html-renderer/-/kg-mobiledoc-html-renderer-7.0.4.tgz#d5a433d9ebed76a1e74ff5792cab2d7f4b844e55"
|
||||
integrity sha512-C0ncnXc5vsLPQmsEw4xfUmdJnJTL9WsoACpI6970R4/jvAWE3h99TVpSFWVnHwrc/asWxaXZlpcKKH4PJs3VzA==
|
||||
"@tryghost/kg-mobiledoc-html-renderer@7.0.6":
|
||||
version "7.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-mobiledoc-html-renderer/-/kg-mobiledoc-html-renderer-7.0.6.tgz#471bcc83546acb4b45dd6d6940709416f2fb28a8"
|
||||
integrity sha512-jpHKpq7nda6fSO7/kEOb2dbY6Y1NOQ+w7l4snhtRV3rcW1epIZ07OhXwW36GV0hGTVFs3yxc6HMWlKlvIZS0uA==
|
||||
dependencies:
|
||||
"@tryghost/kg-utils" "1.0.26"
|
||||
"@tryghost/kg-utils" "1.0.28"
|
||||
mobiledoc-dom-renderer "^0.7.0"
|
||||
simple-dom "^1.4.0"
|
||||
|
||||
@ -7953,22 +7938,22 @@
|
||||
dependencies:
|
||||
"@tryghost/kg-clean-basic-html" "4.1.1"
|
||||
|
||||
"@tryghost/kg-unsplash-selector@0.2.1":
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-unsplash-selector/-/kg-unsplash-selector-0.2.1.tgz#c9e1658ed8d9469a26ca78c1aec1848fd7d6007c"
|
||||
integrity sha512-LzgKE7UJ24bvID0c94teXSCrfbAX2/jo8sKaxEKR9P4E4P8COlCme/aygdOUCTblCBgE4KxyO9a+bD3uYW2Qyg==
|
||||
"@tryghost/kg-unsplash-selector@0.2.3":
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-unsplash-selector/-/kg-unsplash-selector-0.2.3.tgz#3b969e62e8410eb0fade25ee2f4944d4935e125b"
|
||||
integrity sha512-FS4SWZ9hbPA+DvaIbXjLC/EPBqcrdZLWbj9kB96izNYaqyE3awyQNCDmBPcaOnnfqZ8BjVUlxQspxk8vLRH14A==
|
||||
|
||||
"@tryghost/kg-utils@1.0.26":
|
||||
version "1.0.26"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-utils/-/kg-utils-1.0.26.tgz#48e18b05d8bcf2c0d3c94f3d500e9b267d6723e6"
|
||||
integrity sha512-DXx/qJwMYB6mjyhBk1mOg2hA5sXGNVcP2R0FyhkmHKtdNEwP0WIpV7UZt7DIYDT4c4uWFddya+u6yVpqU9Nhxg==
|
||||
"@tryghost/kg-utils@1.0.28":
|
||||
version "1.0.28"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/kg-utils/-/kg-utils-1.0.28.tgz#cfdaac6f5cbe6f4375f8771e5b4a014bfb53a689"
|
||||
integrity sha512-OIl+V3j7u9/bWdnkZvnx/cDbRpmCIMI4f9uJbp0sC9dfAgGq83TFg1ZuHXK9QAB6nVCnY36eR2JVawlSYx04PA==
|
||||
dependencies:
|
||||
semver "^7.3.5"
|
||||
semver "^7.6.2"
|
||||
|
||||
"@tryghost/koenig-lexical@1.3.13":
|
||||
version "1.3.13"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/koenig-lexical/-/koenig-lexical-1.3.13.tgz#7ffa158d1f28f4f75d0fce763c0a884f98a23f13"
|
||||
integrity sha512-tjLouQMCPPAXdvBYWVtHp4SeDylT3tF5nh0cy3JPOmG0eJRYGdGwxiEabk6jmzOEjjhkD0kwT+6m3G+vv70dcw==
|
||||
"@tryghost/koenig-lexical@1.3.15":
|
||||
version "1.3.15"
|
||||
resolved "https://registry.yarnpkg.com/@tryghost/koenig-lexical/-/koenig-lexical-1.3.15.tgz#4d6b2296b810a8fc6cbc5c58db04fd23ff88a48b"
|
||||
integrity sha512-ANXkZg/Zh+R4roH74veaprwWZJmMMiuxZgRCxzHgEj0PU/US6+aLXTeEMK8VgWiAaKpVjRNJDJsdI0RuRbwiHA==
|
||||
|
||||
"@tryghost/limit-service@1.2.14":
|
||||
version "1.2.14"
|
||||
@ -19697,10 +19682,10 @@ i18next-parser@8.13.0:
|
||||
vinyl-fs "^4.0.0"
|
||||
vue-template-compiler "^2.6.11"
|
||||
|
||||
i18next@23.12.2, i18next@^23.5.1:
|
||||
version "23.12.2"
|
||||
resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.12.2.tgz#c5b44bb95e4d4a5908a51577fa06c63dc2f650a4"
|
||||
integrity sha512-XIeh5V+bi8SJSWGL3jqbTEBW5oD6rbP5L+E7dVQh1MNTxxYef0x15rhJVcRb7oiuq4jLtgy2SD8eFlf6P2cmqg==
|
||||
i18next@23.12.3, i18next@^23.5.1:
|
||||
version "23.12.3"
|
||||
resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.12.3.tgz#e0b811ef218f6d3fdb0b91f1a1eed099a1f7c48b"
|
||||
integrity sha512-DyigQmrR10V9U2N6pjhbfahW13GY7n8BQD9swN09JuRRropgsksWVi4vRLeex0Qf7zCPnBfIqQfhcBzdZBQBYw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.23.2"
|
||||
|
||||
@ -21430,7 +21415,7 @@ jscodeshift@^0.15.1:
|
||||
temp "^0.8.4"
|
||||
write-file-atomic "^2.3.0"
|
||||
|
||||
jsdom@24.1.1, jsdom@^24.0.0, jsdom@~24.1.0:
|
||||
jsdom@24.1.1, jsdom@^24.0.0, jsdom@^24.1.0, jsdom@~24.1.0:
|
||||
version "24.1.1"
|
||||
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-24.1.1.tgz#f41df8f4f3b2fbfa7e1bdc5df62c9804fd14a9d0"
|
||||
integrity sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==
|
||||
@ -22772,7 +22757,7 @@ ltgt@^2.1.2:
|
||||
resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5"
|
||||
integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==
|
||||
|
||||
luxon@3.5.0, luxon@^3.0.0, luxon@^3.3.0:
|
||||
luxon@3.5.0, luxon@^3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.5.0.tgz#6b6f65c5cd1d61d1fd19dbf07ee87a50bf4b8e20"
|
||||
integrity sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==
|
||||
@ -28464,7 +28449,7 @@ semver@7.5.3:
|
||||
dependencies:
|
||||
lru-cache "^6.0.0"
|
||||
|
||||
semver@7.6.3, semver@^7.0.0, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4:
|
||||
semver@7.6.3, semver@^7.0.0, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.2:
|
||||
version "7.6.3"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
|
||||
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==
|
||||
@ -30135,10 +30120,10 @@ terser-webpack-plugin@^5.3.10:
|
||||
serialize-javascript "^6.0.1"
|
||||
terser "^5.26.0"
|
||||
|
||||
terser@5.31.3, terser@^5.26.0, terser@^5.7.0:
|
||||
version "5.31.3"
|
||||
resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.3.tgz#b24b7beb46062f4653f049eea4f0cd165d0f0c38"
|
||||
integrity sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==
|
||||
terser@5.31.5, terser@^5.26.0, terser@^5.7.0:
|
||||
version "5.31.5"
|
||||
resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.5.tgz#e48b7c65f32d2808e7dad803e4586a0bc3829b87"
|
||||
integrity sha512-YPmas0L0rE1UyLL/llTWA0SiDOqIcAQYLeUj7cJYzXHlRTAnMSg9pPe4VJ5PlKvTrPQsdVFuiRiwyeNlYgwh2Q==
|
||||
dependencies:
|
||||
"@jridgewell/source-map" "^0.3.3"
|
||||
acorn "^8.8.2"
|
||||
|
Loading…
Reference in New Issue
Block a user