From c740652a48d363063b0bf0ee1a2b59c739e93e03 Mon Sep 17 00:00:00 2001
From: Dominic Masters <dominic@domsplace.com>
Date: Tue, 30 Oct 2018 21:24:39 +1100
Subject: [PATCH] Updated README, improving some of the section code.

---
 README.md                                     |  7 ++--
 public/components/section/Section.jsx         |  2 ++
 .../blog/article/FeaturedArticleSection.jsx   | 14 ++++----
 .../image/banner/BannerImageSection.jsx       | 36 +++++++++++++++++++
 .../image/banner/BannerImageSection.scss      | 18 ++++++++++
 public/pages/home/HomePage.scss               |  8 -----
 public/pages/home/sections/BannerSection.jsx  | 11 +++---
 7 files changed, 72 insertions(+), 24 deletions(-)
 create mode 100644 public/components/section/image/banner/BannerImageSection.jsx
 create mode 100644 public/components/section/image/banner/BannerImageSection.scss

diff --git a/README.md b/README.md
index 0f0782d..12b98dd 100644
--- a/README.md
+++ b/README.md
@@ -14,9 +14,12 @@ Plans to add are:
  - More Social integration and show off my social pages
  - Faster loading (SVG Backgrounds are quite large)
  - ~~Responsive Image Loading~~
- - Async Image/Video loading for content (no point just yet)
+ - ~~Async Image/Video loading for content (no point just yet)~~
  - ~~Async page offsetting,~~ as well as proper loading templates
  - Improved SEO
  - Reduce Divitis
  - Restore previously removed page transitions
- - Convert some of the SVGs into responsive PNGs
+ - ~~Convert some of the SVGs into responsive PNGs~~ Unsure if I'll stick with this permanently
+ - Work on Async Sections
+ - Proper Server
+ - Adjust the order import order so to help CSS Overrides.
diff --git a/public/components/section/Section.jsx b/public/components/section/Section.jsx
index 7e128d3..8c13534 100644
--- a/public/components/section/Section.jsx
+++ b/public/components/section/Section.jsx
@@ -41,6 +41,7 @@ export default props => {
 import BodySection from './body/BodySection';
 import ClearSection from './layout/ClearSection';
 import ImageSection from './image/ImageSection';
+import BannerImageSection from './image/banner/BannerImageSection';
 import SplitSection, { Split }  from './layout/SplitSection';
 import VideoSection from './video/VideoSection';
 
@@ -48,6 +49,7 @@ export {
   BodySection,
   ClearSection,
   ImageSection,
+  BannerImageSection,
   SplitSection,
   Split,
   VideoSection
diff --git a/public/components/section/blog/article/FeaturedArticleSection.jsx b/public/components/section/blog/article/FeaturedArticleSection.jsx
index 3e25c9e..debd8e3 100644
--- a/public/components/section/blog/article/FeaturedArticleSection.jsx
+++ b/public/components/section/blog/article/FeaturedArticleSection.jsx
@@ -24,7 +24,7 @@
 import React from 'react';
 
 
-import Section from '@components/section/Section';
+import BannerImageSection from '@sections/image/banner/BannerImageSection';
 
 import Image from '@objects/image/Image';
 import ContentBox from '@objects/content/box/ContentBox';
@@ -36,11 +36,11 @@ export default props => {
   let { article } = props;
 
   return (
-    <Section className="c-featured-article">
-      <Image
-        src={ require('@assets/images/photo.jpg') }
-        className="c-featured-article__image"
-      />
+    <BannerImageSection
+      className="c-featured-article"
+      src={ require('@assets/images/photo.jpg') } alt={ article.title }
+      loadable
+    >
       <Title className="c-featured-article__title">
         { article.title }
       </Title>
@@ -48,6 +48,6 @@ export default props => {
       <Paragraph className="c-featured-article__description">
         { article.shortDescription }
       </Paragraph>
-    </Section>
+    </BannerImageSection>
   );
 };
diff --git a/public/components/section/image/banner/BannerImageSection.jsx b/public/components/section/image/banner/BannerImageSection.jsx
new file mode 100644
index 0000000..f46ed48
--- /dev/null
+++ b/public/components/section/image/banner/BannerImageSection.jsx
@@ -0,0 +1,36 @@
+// Copyright (c) 2018 Dominic Masters
+//
+// MIT License
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+import React from 'react';
+
+import ImageSection from './../ImageSection';
+import Styles from './BannerImageSection.scss';
+
+export default props => {
+  let { className, imageClassName } = props;
+
+  return <ImageSection
+    {...props} className={`c-banner-section ${className||""}`}
+    imageClassName={`c-banner-section__image ${imageClassName||""}`}
+  />;
+};
diff --git a/public/components/section/image/banner/BannerImageSection.scss b/public/components/section/image/banner/BannerImageSection.scss
new file mode 100644
index 0000000..fb3080c
--- /dev/null
+++ b/public/components/section/image/banner/BannerImageSection.scss
@@ -0,0 +1,18 @@
+/*
+ *  Banner Image Section
+ *    Section that adjusts the image to better suit a banner, rather than using
+ *    the annoying image size.
+ *
+ *  Version:
+ *    1.0.0 - 2018/10/30
+ */
+@import '~@styles/global';
+
+.c-banner-section {
+  &__image {
+    display: block;
+    width: 100%;
+    height: 80vh;
+    object-fit: cover;
+  }
+}
diff --git a/public/pages/home/HomePage.scss b/public/pages/home/HomePage.scss
index 35aa945..4928966 100644
--- a/public/pages/home/HomePage.scss
+++ b/public/pages/home/HomePage.scss
@@ -12,14 +12,6 @@
 @import '~@styles/global';
 
 .p-home-page {
-  &__banner {
-    &-image {
-      object-fit: cover;
-
-      height: 80vh;
-    }
-  }
-
   &__banner,
   &__promo {
     position: relative;
diff --git a/public/pages/home/sections/BannerSection.jsx b/public/pages/home/sections/BannerSection.jsx
index 543992f..31d90bc 100644
--- a/public/pages/home/sections/BannerSection.jsx
+++ b/public/pages/home/sections/BannerSection.jsx
@@ -24,7 +24,7 @@
 import React from 'react';
 import { withLanguage } from '@public/language/Language';
 import { PageBoundary } from '@components/page/Page';
-import { ImageSection } from '@components/section/Section';
+import { BannerImageSection } from '@sections/Section';
 import FloatingContentBox from '@objects/content/box/FloatingContentBox';
 import { Title, Subtitle } from '@objects/typography/Typography';
 
@@ -33,14 +33,11 @@ export default withLanguage(props => {
   let { lang } = props;
 
   return (
-    <ImageSection
+    <BannerImageSection
       className="p-home-page__banner"
-      imageClassName="p-home-page__banner-image"
       src={ require('@assets/images/banners/about/glasses.svg') }
       alt="domsPlace"
-      width="2400"
-      height="1200"
-      loadable
+      width="2400" height="1200" loadable
     >
       <PageBoundary full>
         <FloatingContentBox position="middle center" size="large" className="u-text-center">
@@ -48,6 +45,6 @@ export default withLanguage(props => {
           <Subtitle>{ lang.pages.home.banner.subtitle }</Subtitle>
         </FloatingContentBox>
       </PageBoundary>
-    </ImageSection>
+    </BannerImageSection>
   );
 });