@openeventkit/event-site 2.0.111 → 2.0.112

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/gatsby-browser.js +1 -1
  2. package/{gatsby-config.js → gatsby-config.mjs} +56 -20
  3. package/gatsby-node.js +145 -92
  4. package/gatsby-ssr.js +2 -14
  5. package/package.json +29 -27
  6. package/src/cms/cms-utils.js +15 -8
  7. package/src/cms/cms.js +1 -1
  8. package/src/cms/config/collections/configurationsCollection/siteSettings/index.js +25 -5
  9. package/src/cms/config/collections/configurationsCollection/siteSettings/typeDefs.js +6 -0
  10. package/src/cms/config/collections/contentPagesCollection/typeDefs.js +8 -1
  11. package/src/cms/config/collections/defaultPagesCollection/marketingPage/index.js +5 -5
  12. package/src/cms/config/collections/defaultPagesCollection/marketingPage/typeDefs.js +4 -4
  13. package/src/cms/preview-templates/ContentPagePreview.js +41 -13
  14. package/src/cms/widgets/IdentityProviderParamControl.js +1 -1
  15. package/src/components/DisqusComponent.js +1 -1
  16. package/src/components/LiteScheduleComponent.js +9 -11
  17. package/src/components/ResponsiveImage.js +30 -0
  18. package/src/components/summit-my-orders-tickets/components/TicketPopup/TicketPopupEditDetailsForm/TicketPopupEditDetailsForm.js +4 -4
  19. package/src/content/site-settings/index.json +6 -1
  20. package/src/pages/index.js +6 -6
  21. package/src/pages/maintenance.js +18 -0
  22. package/src/styles/marketing.module.scss +6 -4
  23. package/src/styles/style.scss +0 -26
  24. package/src/templates/content-page/index.js +74 -0
  25. package/src/templates/content-page/shortcodes.js +17 -0
  26. package/src/templates/content-page/template.js +21 -0
  27. package/src/templates/marketing-page-template.js +66 -38
  28. package/src/utils/buildPolyfills.js +18 -0
  29. package/src/utils/filePath.js +18 -14
  30. package/src/utils/useSiteSettings.js +4 -0
  31. package/src/components/Content.js +0 -42
  32. package/src/content/maintenance.json +0 -5
  33. package/src/pages/maintenance.md +0 -3
  34. package/src/templates/content-page.js +0 -92
  35. package/src/templates/maintenance-page.js +0 -40
  36. package/static/admin/admin.css +0 -3
package/gatsby-browser.js CHANGED
@@ -73,4 +73,4 @@ export const onClientEntry = () => {
73
73
  });
74
74
  window.Sentry = Sentry;
75
75
  }
76
- };
76
+ };
@@ -1,12 +1,23 @@
1
- const path = require("path");
1
+ import path, { dirname } from "path";
2
+ import dotenv from "dotenv";
3
+ import { createRequire } from "module";
4
+ import { fileURLToPath } from "url";
5
+ import webpack from "webpack";
6
+ import remarkGfm from "remark-gfm";
7
+ import rehypeMdxImportMedia from "rehype-mdx-import-media";
2
8
 
3
- require("dotenv").config({
9
+ const require = createRequire(import.meta.url);
10
+ const __dirname = dirname(fileURLToPath(import.meta.url));
11
+
12
+ dotenv.config({
4
13
  path: `.env.${process.env.NODE_ENV}`
5
14
  });
6
15
 
7
16
  const {
8
17
  STATIC_CONTENT_DIR_PATH,
18
+ PAGES_DIR_PATH,
9
19
  CONTENT_PAGES_DIR_PATH,
20
+ CONTENT_PAGES_PATH_NAME,
10
21
  SITE_SETTINGS_FILE_PATH,
11
22
  SITE_SETTINGS_DIR_PATH,
12
23
  MARKETING_SETTINGS_FILE_PATH
@@ -117,28 +128,45 @@ const plugins = [
117
128
  name: "marketingSettings"
118
129
  }
119
130
  },
131
+ {
132
+ resolve: "gatsby-plugin-page-creator",
133
+ options: {
134
+ path: path.resolve(PAGES_DIR_PATH),
135
+ ignore: [`**/${CONTENT_PAGES_PATH_NAME}/**`],
136
+ }
137
+ },
120
138
  "gatsby-plugin-image",
121
139
  "gatsby-plugin-sharp",
122
140
  "gatsby-transformer-sharp",
123
141
  "gatsby-transformer-json",
124
142
  {
125
- resolve: "gatsby-transformer-remark",
143
+ resolve: "gatsby-plugin-mdx",
126
144
  options: {
127
- plugins: [
145
+ extensions: [".mdx", ".md"],
146
+ gatsbyRemarkPlugins: [
128
147
  {
129
148
  resolve: "gatsby-remark-images",
130
149
  options: {
131
- // It"s important to specify the maxWidth (in pixels) of
150
+ // It's important to specify the maxWidth (in pixels) of
132
151
  // the content container as this plugin uses this as the
133
152
  // base for generating different widths of each image.
134
153
  maxWidth: 2048
135
154
  }
136
155
  }
137
- ]
156
+ ],
157
+ mdxOptions: {
158
+ remarkPlugins: [
159
+ // Add GitHub Flavored Markdown (GFM) support
160
+ remarkGfm
161
+ ],
162
+ rehypePlugins: [
163
+ rehypeMdxImportMedia
164
+ ]
165
+ }
138
166
  }
139
167
  },
140
168
  {
141
- resolve: "gatsby-plugin-netlify-cms",
169
+ resolve: "gatsby-plugin-decap-cms",
142
170
  options: {
143
171
  modulePath: `${__dirname}/src/cms/cms.js`,
144
172
  manualInit: true,
@@ -170,20 +198,29 @@ const plugins = [
170
198
  jsRule
171
199
  ];
172
200
  /**
173
- * Fixes Module not found: Error: Can"t resolve "path" bug.
174
- * Webpack 5 doesn"t include browser polyfills for node APIs by default anymore,
175
- * so we need to provide them ourselves.
176
- * @see https://github.com/postcss/postcss/issues/1509#issuecomment-772097567
177
- * @see https://github.com/gatsbyjs/gatsby/issues/31475
178
- * @see https://github.com/gatsbyjs/gatsby/issues/31179#issuecomment-844588682
201
+ * Webpack removed automatic polyfills for these node APIs in v5,
202
+ * so we need to patch them in the browser.
203
+ * @see https://www.gatsbyjs.com/docs/reference/release-notes/migrating-from-v2-to-v3/#webpack-5-node-configuration-changed-nodefs-nodepath-
204
+ * @see https://viglucci.io/how-to-polyfill-buffer-with-webpack-5
179
205
  */
180
206
  config.resolve = {
181
207
  ...config.resolve,
182
208
  fallback: {
183
209
  ...config.resolve.fallback,
184
- path: require.resolve("path-browserify")
210
+ fs: false,
211
+ assert: require.resolve("assert"),
212
+ buffer: require.resolve("buffer/"),
213
+ path: require.resolve("path-browserify"),
214
+ "object.assign/polyfill": require.resolve("object.assign/polyfill")
185
215
  }
186
216
  };
217
+ config.plugins = [
218
+ ...config.plugins,
219
+ new webpack.ProvidePlugin({
220
+ process: "process",
221
+ Buffer: ["buffer", "Buffer"]
222
+ })
223
+ ];
187
224
  }
188
225
  }
189
226
  },
@@ -191,10 +228,9 @@ const plugins = [
191
228
  "gatsby-plugin-netlify", // make sure to keep it last in the array
192
229
  ];
193
230
 
194
- module.exports = {
195
- siteMetadata: {
196
- title,
197
- description
198
- },
199
- plugins
231
+ const siteMetadata = {
232
+ title,
233
+ description
200
234
  };
235
+
236
+ export { siteMetadata, plugins };
package/gatsby-node.js CHANGED
@@ -1,8 +1,10 @@
1
1
  const axios = require("axios");
2
2
  const path = require("path");
3
- const fs = require("fs");
3
+ const fs = require("fs-extra");
4
4
  const webpack = require("webpack");
5
- const { createFilePath } = require("gatsby-source-filesystem");
5
+ const {
6
+ createFilePath
7
+ } = require("gatsby-source-filesystem");
6
8
  const SentryWebpackPlugin = require("@sentry/webpack-plugin");
7
9
  const { ClientCredentials } = require("simple-oauth2");
8
10
 
@@ -22,7 +24,8 @@ const {
22
24
  SPEAKERS_IDX_FILE_PATH,
23
25
  VOTEABLE_PRESENTATIONS_FILE_PATH,
24
26
  MARKETING_SETTINGS_FILE_PATH,
25
- MAINTENANCE_FILE_PATH,
27
+ MAINTENANCE_PATH_NAME,
28
+ CONTENT_PAGES_PATH_NAME,
26
29
  SPONSORS_FILE_PATH,
27
30
  FONTS_SCSS_FILE_PATH
28
31
  } = require("./src/utils/filePath");
@@ -226,7 +229,7 @@ exports.onPreBootstrap = async () => {
226
229
  const summitApiBaseUrl = process.env.GATSBY_SUMMIT_API_BASE_URL;
227
230
  let marketingSettings = await SSR_getMarketingSettings(process.env.GATSBY_MARKETING_API_BASE_URL, summitId);
228
231
  const colorSettings = fs.existsSync(COLORS_FILE_PATH) ? JSON.parse(fs.readFileSync(COLORS_FILE_PATH)) : require(`./${DEFAULT_COLORS_FILE_PATH}`);
229
- const globalSettings = fs.existsSync(SITE_SETTINGS_FILE_PATH) ? JSON.parse(fs.readFileSync(SITE_SETTINGS_FILE_PATH)) : {};
232
+ const siteSettings = fs.existsSync(SITE_SETTINGS_FILE_PATH) ? JSON.parse(fs.readFileSync(SITE_SETTINGS_FILE_PATH)) : {};
230
233
 
231
234
  const config = {
232
235
  client: {
@@ -328,13 +331,13 @@ exports.onPreBootstrap = async () => {
328
331
  fs.writeFileSync(VOTEABLE_PRESENTATIONS_FILE_PATH, JSON.stringify(allVoteablePresentations), "utf8");
329
332
 
330
333
  // setting build times
331
- globalSettings.staticJsonFilesBuildTime = fileBuildTimes;
332
- globalSettings.lastBuild = Date.now();
334
+ siteSettings.staticJsonFilesBuildTime = fileBuildTimes;
335
+ siteSettings.lastBuild = Date.now();
333
336
 
334
- fs.writeFileSync(SITE_SETTINGS_FILE_PATH, JSON.stringify(globalSettings), "utf8");
337
+ fs.writeFileSync(SITE_SETTINGS_FILE_PATH, JSON.stringify(siteSettings), "utf8");
335
338
 
336
339
  // Read fonts from site settings
337
- const siteFonts = globalSettings.siteFont;
340
+ const siteFonts = siteSettings.siteFont;
338
341
 
339
342
  if(siteFonts && Object.keys(siteFonts).length > 0) {
340
343
  // Generate the SCSS file
@@ -351,8 +354,52 @@ exports.onPreBootstrap = async () => {
351
354
  }
352
355
  };
353
356
 
354
- exports.createSchemaCustomization = ({ actions }) => {
355
- const { createTypes } = actions;
357
+ exports.createSchemaCustomization = async ({ actions, reporter, getNodeAndSavePathDependency }) => {
358
+ const { createFieldExtension, createTypes } = actions;
359
+ createFieldExtension({
360
+ name: "resolveImages",
361
+ extend: () => ({
362
+ async resolve(source, args, context, info) {
363
+ const content = source[info.fieldName];
364
+ const imageRegex = /!\[([^\]]*)\]\(([^)]+)\)/g;
365
+ let match;
366
+ let transformedContent = content;
367
+ while ((match = imageRegex.exec(content)) !== null) {
368
+ const [, alt, url] = match;
369
+ if (url.startsWith("http://") || url.startsWith("https://")) {
370
+ continue;
371
+ }
372
+ const node = await context.nodeModel.findOne({
373
+ type: "File",
374
+ query: { filter: { base: { eq: url } } }
375
+ });
376
+ if (!node) {
377
+ reporter.warn(`File node not found for ${url}`);
378
+ continue;
379
+ }
380
+ const absolutePath = path.resolve(node.dir, url);
381
+ if (!fs.existsSync(absolutePath)) {
382
+ reporter.warn(`File not found at path ${absolutePath}`);
383
+ continue;
384
+ }
385
+ const details = getNodeAndSavePathDependency(node.id, context.path);
386
+ const fileName = `${node.internal.contentDigest}/${details.base}`;
387
+ const publicStaticDir = path.join(process.cwd(), "public", "static");
388
+ const publicPath = path.join(publicStaticDir, fileName);
389
+ if (!fs.existsSync(publicPath)) {
390
+ try {
391
+ await fs.copy(details.absolutePath, publicPath, { dereference: true });
392
+ } catch (err) {
393
+ reporter.panic(`Error copying file from ${details.absolutePath} to ${publicPath}: ${err.message}`);
394
+ continue;
395
+ }
396
+ }
397
+ transformedContent = transformedContent.replace(url, `/static/${fileName}`);
398
+ }
399
+ return transformedContent;
400
+ }
401
+ })
402
+ });
356
403
  // TODO: improve typeDefs to allow theme override
357
404
  const typeDefs = require("./src/cms/config/collections/typeDefs");
358
405
  createTypes(typeDefs);
@@ -360,91 +407,99 @@ exports.createSchemaCustomization = ({ actions }) => {
360
407
 
361
408
  exports.onCreateNode = ({ node, actions, getNode }) => {
362
409
  const { createNodeField } = actions;
363
- if (node.internal.type === "MarkdownRemark") {
410
+ if (node.internal.type === "Mdx") {
364
411
  const value = createFilePath({ node, getNode });
365
412
  createNodeField({
366
413
  name: "slug",
367
414
  node,
368
- value,
415
+ value
369
416
  })
370
417
  }
371
418
  };
372
419
 
373
- exports.createPages = ({ actions, graphql }) => {
420
+ exports.createPages = async ({ actions, graphql }) => {
374
421
  const { createPage, createRedirect } = actions;
375
422
 
376
- const maintenanceMode = fs.existsSync(MAINTENANCE_FILE_PATH) ?
377
- JSON.parse(fs.readFileSync(MAINTENANCE_FILE_PATH)) : { enabled: false };
423
+ const siteSettings = fs.existsSync(SITE_SETTINGS_FILE_PATH) ? JSON.parse(fs.readFileSync(SITE_SETTINGS_FILE_PATH)) : {};
424
+ const maintenanceMode = siteSettings.maintenanceMode ?? { enabled: false };
425
+ const maintenancePath = `/${MAINTENANCE_PATH_NAME}/`;
378
426
 
379
- // create a catch all redirect
380
427
  if (maintenanceMode.enabled) {
428
+ // create a catch all redirect
381
429
  createRedirect({
382
430
  fromPath: "/*",
383
- toPath: "/maintenance/"
431
+ toPath: maintenancePath,
432
+ isPermanent: false,
433
+ statusCode: 302
434
+ });
435
+ // end execution, dont create any page from md/mdx
436
+ return;
437
+ } else {
438
+ createRedirect({
439
+ fromPath: maintenancePath,
440
+ toPath: "/",
441
+ isPermanent: false,
442
+ statusCode: 302
384
443
  });
385
444
  }
386
445
 
387
- return graphql(`
446
+ const result = await graphql(`
388
447
  {
389
- allMarkdownRemark(limit: 1000) {
390
- edges {
391
- node {
392
- id
393
- fields {
394
- slug
395
- }
396
- frontmatter {
397
- templateKey
398
- }
448
+ allMdx {
449
+ nodes {
450
+ id
451
+ fields {
452
+ slug
453
+ }
454
+ frontmatter {
455
+ templateKey
456
+ }
457
+ internal {
458
+ contentFilePath
399
459
  }
400
460
  }
401
461
  }
402
462
  }
403
- `).then((result) => {
404
- const {
405
- errors,
406
- data: {
407
- allMarkdownRemark: {
408
- edges
409
- }
410
- }
411
- } = result;
463
+ `);
412
464
 
413
- if (errors) {
414
- errors.forEach((e) => console.error(e.toString()));
415
- return Promise.reject(errors);
416
- }
465
+ if (result.errors) {
466
+ result.errors.forEach((e) => console.error(e.toString()));
467
+ return Promise.reject(result.errors);
468
+ }
417
469
 
418
- edges.forEach((edge) => {
419
- const { id, fields, frontmatter: { templateKey } } = edge.node;
470
+ const nodes = result.data.allMdx.nodes;
471
+
472
+ nodes.forEach((node) => {
473
+ const { id, fields: { slug }, frontmatter: { templateKey }, internal: { contentFilePath } } = node;
474
+ const template = require.resolve(`./src/templates/${String(templateKey)}`);
475
+ // remove content pages namespace from path
476
+ const path = slug.replace(`${CONTENT_PAGES_PATH_NAME}`, "/");
477
+ const page = {
478
+ path: path,
479
+ component: `${template}?__contentFilePath=${contentFilePath}`,
480
+ context: { id }
481
+ };
482
+ createPage(page);
483
+ });
484
+ };
420
485
 
421
- var slug = fields.slug;
422
- if (slug.match(/content-pages/)) {
423
- slug = slug.replace("/content-pages/", "/");
424
- }
486
+ exports.onCreatePage = async ({ page, actions }) => {
487
+ const { deletePage } = actions;
425
488
 
426
- const page = {
427
- path: slug,
428
- component: require.resolve(
429
- `./src/templates/${String(templateKey)}.js`
430
- ),
431
- context: {
432
- id,
433
- },
434
- };
435
-
436
- // dont create pages if maintenance mode enabled
437
- // gatsby disregards redirect if pages created for path
438
- if (maintenanceMode.enabled && !page.path.match(/maintenance/)) return;
439
-
440
- createPage(page);
441
- });
442
- });
489
+ const siteSettings = fs.existsSync(SITE_SETTINGS_FILE_PATH) ? JSON.parse(fs.readFileSync(SITE_SETTINGS_FILE_PATH)) : {};
490
+ const maintenanceMode = siteSettings.maintenanceMode ?? { enabled: false };
491
+ const maintenancePath = `/${MAINTENANCE_PATH_NAME}/`;
492
+
493
+ const shouldDeletePage = (maintenanceMode.enabled && page.path !== maintenancePath) ||
494
+ (!maintenanceMode.enabled && page.path === maintenancePath);
495
+
496
+ if (shouldDeletePage) {
497
+ deletePage(page);
498
+ }
443
499
  };
444
500
 
445
501
  exports.onCreateWebpackConfig = ({
446
502
  actions,
447
- plugins,
448
503
  loaders,
449
504
  getConfig
450
505
  }) => {
@@ -482,35 +537,32 @@ exports.onCreateWebpackConfig = ({
482
537
  * @see https://viglucci.io/how-to-polyfill-buffer-with-webpack-5
483
538
  */
484
539
  fallback: {
540
+ fs: false,
541
+ assert: require.resolve("assert"),
542
+ buffer: require.resolve("buffer/"),
485
543
  path: require.resolve("path-browserify"),
486
544
  stream: require.resolve("stream-browserify"),
487
- buffer: require.resolve("buffer/")
545
+ "object.assign/polyfill": require.resolve("object.assign/polyfill")
488
546
  },
489
547
  // allows content and data imports to correctly resolve when theming
490
- modules: [path.resolve("src")]
548
+ modules: [
549
+ path.resolve("src")
550
+ ]
491
551
  },
492
552
  // devtool: "source-map",
493
553
  plugins: [
494
- plugins.define({
495
- "global.GENTLY": false,
496
- "global.BLOB": false
497
- }),
498
554
  new webpack.ProvidePlugin({
499
- Buffer: ["buffer", "Buffer"],
500
- }),
501
- // ignore unused jsdom dependency
502
- new webpack.IgnorePlugin({
503
- resourceRegExp: /canvas/,
504
- contextRegExp: /jsdom$/
555
+ process: "process",
556
+ Buffer: ["buffer", "Buffer"]
505
557
  }),
506
558
  // upload source maps only if we have an sentry auth token and we are at production
507
- ...("GATSBY_SENTRY_AUTH_TOKEN" in process.env && process.env.NODE_ENV === "production") ?[
508
- new SentryWebpackPlugin({
509
- org: process.env.GATSBY_SENTRY_ORG,
510
- project: process.env.GATSBY_SENTRY_PROJECT,
511
- ignore: ["app-*", "polyfill-*", "framework-*", "webpack-runtime-*", "~partytown"],
512
- // Specify the directory containing build artifacts
513
- include: [
559
+ ...("GATSBY_SENTRY_AUTH_TOKEN" in process.env && process.env.NODE_ENV === "production") ? [
560
+ new SentryWebpackPlugin({
561
+ org: process.env.GATSBY_SENTRY_ORG,
562
+ project: process.env.GATSBY_SENTRY_PROJECT,
563
+ ignore: ["app-*", "polyfill-*", "framework-*", "webpack-runtime-*", "~partytown"],
564
+ // Specify the directory containing build artifacts
565
+ include: [
514
566
  {
515
567
  paths: ["src","public",".cache"],
516
568
  urlPrefix: "~/",
@@ -550,14 +602,15 @@ exports.onCreateWebpackConfig = ({
550
602
  {
551
603
  paths: ["node_modules/speakers-widget/dist"],
552
604
  urlPrefix: "~/node_modules/speakers-widget/dist",
553
- },
554
- ],
555
- // Auth tokens can be obtained from https://sentry.io/settings/account/api/auth-tokens/
556
- // and needs the `project:releases` and `org:read` scopes
557
- authToken: process.env.GATSBY_SENTRY_AUTH_TOKEN,
558
- // Optionally uncomment the line below to override automatic release name detection
559
- release: process.env.GATSBY_SENTRY_RELEASE,
560
- })]:[],
605
+ }
606
+ ],
607
+ // Auth tokens can be obtained from https://sentry.io/settings/account/api/auth-tokens/
608
+ // and needs the `project:releases` and `org:read` scopes
609
+ authToken: process.env.GATSBY_SENTRY_AUTH_TOKEN,
610
+ // Optionally uncomment the line below to override automatic release name detection
611
+ release: process.env.GATSBY_SENTRY_RELEASE,
612
+ })
613
+ ] : []
561
614
  ]
562
615
  });
563
616
  };
package/gatsby-ssr.js CHANGED
@@ -5,8 +5,8 @@ import {
5
5
  PreBodyComponents
6
6
  } from "./src/components/HeadComponents";
7
7
 
8
- import { JSDOM } from "jsdom";
9
- import { XMLHttpRequest } from "xmlhttprequest";
8
+ // build enabler polyfills
9
+ import "./src/utils/buildPolyfills";
10
10
 
11
11
  export const wrapRootElement = ReduxWrapper;
12
12
 
@@ -19,15 +19,3 @@ export const onRenderBody = ({
19
19
  setHeadComponents(HeadComponents);
20
20
  setPreBodyComponents(PreBodyComponents);
21
21
  };
22
-
23
- // build enabler polyfills
24
- global.dom = new JSDOM("...");
25
- global.window = dom.window;
26
- global.document = dom.window.document;
27
- global.navigator = global.window.navigator;
28
- global.window.matchMedia = () => ({
29
- matches: false,
30
- addListener: () => {},
31
- removeListener: () => {}
32
- });
33
- global.XMLHttpRequest = XMLHttpRequest;
package/package.json CHANGED
@@ -1,10 +1,12 @@
1
1
  {
2
2
  "name": "@openeventkit/event-site",
3
3
  "description": "Event Site",
4
- "version": "2.0.111",
4
+ "version": "2.0.112",
5
5
  "author": "Tipit LLC",
6
6
  "dependencies": {
7
- "@mui/base": "^5.0.0-alpha.114",
7
+ "@mdx-js/react": "^3.0.1",
8
+ "@mdx-js/runtime": "^1.6.22",
9
+ "@mui/base": "^5.0.0-beta.40",
8
10
  "@mux/mux-player-react": "^1.14.1",
9
11
  "@ncwidgets/file-relation": "^0.8.0",
10
12
  "@ncwidgets/id": "^0.8.1",
@@ -25,17 +27,15 @@
25
27
  "attendee-to-attendee-widget": "3.0.6",
26
28
  "awesome-bootstrap-checkbox": "^1.0.1",
27
29
  "axios": "^0.19.2",
28
- "babel-preset-gatsby": "^3.9.0",
29
30
  "browser-tabs-lock": "^1.2.15",
30
- "buffer": "^6.0.3",
31
31
  "bulma": "^0.9.0",
32
32
  "chain-function": "^1.0.1",
33
33
  "classnames": "^2.3.1",
34
- "clean-html": "^1.5.0",
35
- "codemirror": "^5.55.0",
36
34
  "core-js": "^2.6.11",
37
35
  "cross-env": "^7.0.3",
38
36
  "crypto-js": "^4.1.1",
37
+ "decap-cms-app": "^3.1.10",
38
+ "decap-cms-lib-widgets": "^3.0.2",
39
39
  "disqus-react": "1.0.10",
40
40
  "dotenv": "^8.2.0",
41
41
  "dropzone": "^5.7.2",
@@ -44,40 +44,36 @@
44
44
  "font-awesome": "^4.7.0",
45
45
  "formik": "^2.2.9",
46
46
  "full-schedule-widget": "3.0.5",
47
- "gatsby": "^5.8.1",
47
+ "gatsby": "^5.13.5",
48
48
  "gatsby-alias-imports": "^1.0.6",
49
+ "gatsby-plugin-decap-cms": "^4.0.4",
49
50
  "gatsby-plugin-google-tagmanager": "^5.13.1",
50
- "gatsby-plugin-image": "^3.8.0",
51
- "gatsby-plugin-manifest": "^5.12.3",
52
- "gatsby-plugin-netlify": "^5.1.0",
53
- "gatsby-plugin-netlify-cms": "^7.8.0",
54
- "gatsby-plugin-sass": "^6.8.0",
55
- "gatsby-plugin-sharp": "^5.12.3",
56
- "gatsby-remark-images": "^7.8.0",
57
- "gatsby-source-filesystem": "^5.8.0",
58
- "gatsby-transformer-json": "^5.8.0",
59
- "gatsby-transformer-remark": "^6.8.0",
60
- "gatsby-transformer-sharp": "^5.12.3",
51
+ "gatsby-plugin-image": "^3.13.1",
52
+ "gatsby-plugin-manifest": "^5.13.1",
53
+ "gatsby-plugin-mdx": "^5.12.3",
54
+ "gatsby-plugin-netlify": "^5.1.1",
55
+ "gatsby-plugin-page-creator": "^5.13.1",
56
+ "gatsby-plugin-sass": "^6.13.1",
57
+ "gatsby-plugin-sharp": "^5.13.1",
58
+ "gatsby-remark-images": "^7.13.1",
59
+ "gatsby-source-filesystem": "^5.12.3",
60
+ "gatsby-transformer-json": "^5.12.3",
61
+ "gatsby-transformer-sharp": "^5.13.1",
61
62
  "history": "^4.10.1",
62
63
  "i18n-react": "^0.6.4",
63
64
  "i18next": "^21.8.3",
64
65
  "i18next-browser-languagedetector": "^6.1.4",
65
66
  "i18next-http-backend": "^1.4.0",
66
67
  "idtoken-verifier": "^2.2.2",
67
- "image-size": "^1.0.1",
68
68
  "immutability-helper": "2.9.1",
69
69
  "immutable": "^5.0.0-beta.5",
70
- "jsdom": "^16.2.2",
71
70
  "lite-schedule-widget": "3.0.3",
72
71
  "live-event-widget": "4.0.2",
73
72
  "lodash": "^4.17.19",
74
73
  "lz-string": "^1.4.4",
75
74
  "markdown-it": "^12.0.0",
76
- "markdown-to-jsx": "^7.3.2",
77
75
  "moment": "^2.27.0",
78
76
  "moment-timezone": "^0.5.31",
79
- "netlify-cms-app": "^2.15.72",
80
- "netlify-cms-lib-widgets": "^1.8.0",
81
77
  "openstack-uicore-foundation": "4.1.76",
82
78
  "path-browserify": "^1.0.1",
83
79
  "prop-types": "^15.6.0",
@@ -110,7 +106,8 @@
110
106
  "redux": "^4.1.2",
111
107
  "redux-persist": "^6.0.0",
112
108
  "redux-thunk": "^2.4.1",
113
- "sanitize-html": "^2.7.0",
109
+ "rehype-mdx-import-media": "^1.2.0",
110
+ "remark-gfm": "^4.0.0",
114
111
  "sass": "^1.49.9",
115
112
  "schedule-filter-widget": "3.0.1",
116
113
  "simple-chat-widget": "^1.0.31",
@@ -119,7 +116,6 @@
119
116
  "smoothscroll-polyfill": "^0.4.4",
120
117
  "socket.io-client": "^4.5.2",
121
118
  "speakers-widget": "4.0.1",
122
- "stream-browserify": "^3.0.0",
123
119
  "stream-chat": "^2.7.2",
124
120
  "stream-chat-react": "3.1.7",
125
121
  "summit-registration-lite": "5.0.35",
@@ -134,7 +130,6 @@
134
130
  "videojs-mux": "^3.1.0",
135
131
  "videojs-youtube": "^2.6.1",
136
132
  "what-input": "^5.2.10",
137
- "xmlhttprequest": "^1.8.0",
138
133
  "yup": "^0.32.11"
139
134
  },
140
135
  "keywords": [
@@ -157,7 +152,10 @@
157
152
  "@testing-library/jest-dom": "^6.4.2",
158
153
  "@testing-library/react": "^15.0.2",
159
154
  "@testing-library/user-event": "^14.5.2",
155
+ "assert": "^2.1.0",
160
156
  "babel-jest": "^29.7.0",
157
+ "babel-preset-gatsby": "^3.13.2",
158
+ "buffer": "^6.0.3",
161
159
  "devcert": "1.1.0",
162
160
  "gatsby-plugin-webpack-speed-measure": "^0.1.1",
163
161
  "identity-obj-proxy": "^3.0.0",
@@ -166,7 +164,11 @@
166
164
  "jest-transform-stub": "^2.0.0",
167
165
  "js-yaml": "^4.1.0",
168
166
  "js-yaml-loader": "^1.2.2",
169
- "prettier": "^2.0.5"
167
+ "jsdom": "^24.1.0",
168
+ "object.assign": "^4.1.5",
169
+ "prettier": "^2.0.5",
170
+ "stream-browserify": "^3.0.0",
171
+ "xmlhttprequest": "^1.8.0"
170
172
  },
171
173
  "jest": {
172
174
  "collectCoverageFrom": [
@@ -1,8 +1,15 @@
1
- if (typeof window !== "undefined") {
2
- // add admin.css
3
- const link = document.createElement("link");
4
- link.type = "text/css";
5
- link.rel = "stylesheet";
6
- link.href = "/admin/admin.css";
7
- document.head.appendChild(link);
8
- }
1
+ /*
2
+ Workaround for text editor
3
+ @see https://github.com/decaporg/decap-cms/issues/5092
4
+ */
5
+ const injectCustomStyle = () => {
6
+ const style = document.createElement("style");
7
+ style.innerHTML = `
8
+ div[data-slate-editor] {
9
+ -webkit-user-modify: read-write !important;
10
+ }
11
+ `;
12
+ document.head.appendChild(style);
13
+ };
14
+
15
+ injectCustomStyle();
package/src/cms/cms.js CHANGED
@@ -1,4 +1,4 @@
1
- import CMS from "netlify-cms-app";
1
+ import CMS from "decap-cms-app";
2
2
  import config from "./config";
3
3
 
4
4
  import "./cms-utils";