From 2544d5ef544a4784da4284d52095525723abcd87 Mon Sep 17 00:00:00 2001 From: Mathias Biilmann Christensen Date: Tue, 21 Feb 2017 15:31:05 -0800 Subject: Add preview template for product page --- site/layouts/partials/table.html | 2 +- site/static/admin/config.yml | 29 ++++---- src/js/cms-preview-templates/products.js | 112 +++++++++++++++++++++++++++++++ src/js/cms.js | 2 + 4 files changed, 130 insertions(+), 15 deletions(-) create mode 100644 src/js/cms-preview-templates/products.js diff --git a/site/layouts/partials/table.html b/site/layouts/partials/table.html index 2b521a9..28fe765 100644 --- a/site/layouts/partials/table.html +++ b/site/layouts/partials/table.html @@ -2,7 +2,7 @@
-

{{.heading}}

+

{{.heading}}

{{.description}}

diff --git a/site/static/admin/config.yml b/site/static/admin/config.yml index 374bf44..463bd5c 100644 --- a/site/static/admin/config.yml +++ b/site/static/admin/config.yml @@ -18,17 +18,18 @@ collections: # A list of collections the CMS should be able to edit - name: "pages" label: "Pages" files: - file: "site/content/products.md" - fields: - - {label: Title, name: title, widget: string} - - {label: Type, name: type, widget: string} - - {label: Image, name: image, widget: image} - - {label: Page, name: page, widget: string} - - {label: Heading, name: heading, widget: string} - - {label: Description, name: description, widget: string} - - {label: Intro, name: intro, widget: object, fields: [{label: Heading, name: heading, widget: string}, {label: Description, name: description, widget: text}, {label: Blurbs, name: blurbs, widget: list, fields: [{label: Image, name: image, widget: image}, {label: Text, name: text, widget: text}]}]} - - {label: Main, name: main, widget: object, fields: [{label: Heading, name: heading, widget: string}, {label: Description, name: description, widget: text}, {label: Image1, name: image1, widget: object, fields: [{label: Image, name: image, widget: image}, {label: Alt, name: alt, widget: string}]}, {label: Image2, name: image2, widget: object, fields: [{label: Image, name: image, widget: image}, {label: Alt, name: alt, widget: string}]}, {label: Image3, name: image3, widget: object, fields: [{label: Image, name: image, widget: image}, {label: Alt, name: alt, widget: string}]}]} - - {label: Testimonials, name: testimonials, widget: list, fields: [{label: Quote, name: quote, widget: string}, {label: Author, name: author, widget: string}]} - - {label: Full_image, name: full_image, widget: image} - - {label: Pricing, name: pricing, widget: object, fields: [{label: Heading, name: heading, widget: string}, {label: Description, name: description, widget: string}, {label: Plans, name: plans, widget: list, fields: [{label: Plan, name: plan, widget: string}, {label: Price, name: price, widget: string}, {label: Description, name: description, widget: string}, {label: Items, name: items, widget: list}]}]} - - {label: Body, name: body, widget: markdown} + - file: "site/content/products.md" + label: "Products Page" + name: "products" + fields: + - {label: Title, name: title, widget: string} + - {label: Type, name: type, widget: hidden, default: products} + - {label: Page, name: page, widget: hidden, default: "/products.html"} + - {label: Image, name: image, widget: image} + - {label: Heading, name: heading, widget: string} + - {label: Description, name: description, widget: string} + - {label: Intro, name: intro, widget: object, fields: [{label: Heading, name: heading, widget: string}, {label: Description, name: description, widget: text}, {label: Blurbs, name: blurbs, widget: list, fields: [{label: Image, name: image, widget: image}, {label: Text, name: text, widget: text}]}]} + - {label: Main, name: main, widget: object, fields: [{label: Heading, name: heading, widget: string}, {label: Description, name: description, widget: text}, {label: Image1, name: image1, widget: object, fields: [{label: Image, name: image, widget: image}, {label: Alt, name: alt, widget: string}]}, {label: Image2, name: image2, widget: object, fields: [{label: Image, name: image, widget: image}, {label: Alt, name: alt, widget: string}]}, {label: Image3, name: image3, widget: object, fields: [{label: Image, name: image, widget: image}, {label: Alt, name: alt, widget: string}]}]} + - {label: Testimonials, name: testimonials, widget: list, fields: [{label: Quote, name: quote, widget: string}, {label: Author, name: author, widget: string}]} + - {label: Full_image, name: full_image, widget: image} + - {label: Pricing, name: pricing, widget: object, fields: [{label: Heading, name: heading, widget: string}, {label: Description, name: description, widget: string}, {label: Plans, name: plans, widget: list, fields: [{label: Plan, name: plan, widget: string}, {label: Price, name: price, widget: string}, {label: Description, name: description, widget: string}, {label: Items, name: items, widget: list}]}]} diff --git a/src/js/cms-preview-templates/products.js b/src/js/cms-preview-templates/products.js new file mode 100644 index 0000000..0934c1b --- /dev/null +++ b/src/js/cms-preview-templates/products.js @@ -0,0 +1,112 @@ +import React from "react"; +import format from "date-fns/format"; + +export default class PostPreview extends React.Component { + render() { + const {entry, getAsset, widgetFor} = this.props; + let image = getAsset(entry.getIn(["data", "image"])); + + // Bit of a nasty hack to make relative paths work as expected as a background image here + if (image && !image.fileObj) { + image = window.parent.location.protocol + "//" + window.parent.location.host + image; + } + + return
+
+
+
+
+

+ { entry.getIn(["data", "title"]) } +

+
+
+
+
+
+
+ +
+
+

{entry.getIn(["data", "intro", "heading"])}

+

{entry.getIn(["data", "intro", "description"])}

+ +
+ {(entry.getIn(["data","intro", "blurbs"]) || []).map((blurb, index) =>
+ +

{blurb.get("text")}

+
)} +
+
+
+ +
+
+

{entry.getIn(["data", "main", "heading"])}

+

{entry.getIn(["data", "main", "description"])}

+
+
+ +
+ +
+
+ +
+ +
+ +
+ +
+ +
+
+
+ +
+ {(entry.getIn(['data', 'testimonials']) || []).map((testimonial, index) =>
+
+

“{testimonial.get('quote')}”

+ {testimonial.get('author')} +
+
)} +
+ + + +
+
+ +

{entry.getIn(['data', 'pricing', 'heading'])}

+

{entry.getIn(['data', 'pricing', 'description'])}

+ +
+ {(entry.getIn(['data', 'pricing', 'plans']) || []).map((plan, index) =>
+
+ +

{plan.get('plan')}

+ +

+ ${plan.get('price')} +

+ +

{plan.get('description')}}

+ +
    + {(plan.get('items') || []).map((item, index) =>
  • +

    {item}

    +
  • )} +
+ +
+ +
)} +
+
+
+
; + } +} diff --git a/src/js/cms.js b/src/js/cms.js index d0781af..289b26a 100644 --- a/src/js/cms.js +++ b/src/js/cms.js @@ -1,5 +1,7 @@ import CMS from "netlify-cms"; import PostPreview from "./cms-preview-templates/post"; +import ProductsPreview from "./cms-preview-templates/products"; CMS.registerPreviewStyle("/css/main.css"); CMS.registerPreviewTemplate("post", PostPreview); +CMS.registerPreviewTemplate("products", ProductsPreview); -- cgit v1.3