From 7186deecd2580e655cc9e19a2ffaaefde4b441ad Mon Sep 17 00:00:00 2001
From: Martin Leblanc <m26lebla@uwaterloo.ca>
Date: Mon, 20 Jun 2022 13:47:26 -0400
Subject: [PATCH] ISTWCMS-5635: local site footer - introduction of menu
 component, social icon list and test of typography in site footer

---
 .../01-core/mixins/_accessiblity.scss         |  5 ++
 .../03-layouts/site-footer/_site-footer.scss  |  6 ++
 .../03-layouts/site-footer/site-footer.twig   |  4 +-
 src/patterns/04-components/_index.scss        |  3 +
 src/patterns/04-components/menu/_menu.scss    | 16 ++++
 .../menu/menu--social/_menu--social.scss      | 50 +++++++++++++
 .../menu/menu--social/menu--social.twig       | 13 ++++
 .../menu/menu--social/menu--social.yml        | 13 ++++
 src/patterns/04-components/menu/menu.twig     | 74 +++++++++++++++++++
 src/patterns/04-components/menu/menu.yml      | 17 +++++
 .../_social-media--icon.scss                  | 47 ++++++++++++
 .../social-media--icon.twig                   |  4 +
 .../social-media--icon/social-media--icon.yml |  3 +
 13 files changed, 254 insertions(+), 1 deletion(-)
 create mode 100644 src/patterns/04-components/menu/_menu.scss
 create mode 100644 src/patterns/04-components/menu/menu--social/_menu--social.scss
 create mode 100644 src/patterns/04-components/menu/menu--social/menu--social.twig
 create mode 100644 src/patterns/04-components/menu/menu--social/menu--social.yml
 create mode 100644 src/patterns/04-components/menu/menu.twig
 create mode 100644 src/patterns/04-components/menu/menu.yml
 create mode 100644 src/patterns/04-components/social-media/social-media--icon/_social-media--icon.scss
 create mode 100644 src/patterns/04-components/social-media/social-media--icon/social-media--icon.twig
 create mode 100644 src/patterns/04-components/social-media/social-media--icon/social-media--icon.yml

diff --git a/src/patterns/01-core/mixins/_accessiblity.scss b/src/patterns/01-core/mixins/_accessiblity.scss
index 133cedac..b1b87ae1 100644
--- a/src/patterns/01-core/mixins/_accessiblity.scss
+++ b/src/patterns/01-core/mixins/_accessiblity.scss
@@ -50,3 +50,8 @@
     display: none;
   }
 }
+
+// Set the Uw use of off-screen class.
+.off-screen {
+  @include visually-hidden();
+}
diff --git a/src/patterns/03-layouts/site-footer/_site-footer.scss b/src/patterns/03-layouts/site-footer/_site-footer.scss
index 26a38422..8042ec93 100644
--- a/src/patterns/03-layouts/site-footer/_site-footer.scss
+++ b/src/patterns/03-layouts/site-footer/_site-footer.scss
@@ -93,6 +93,12 @@
       color: var(--uw-white-1);
     }
     table {
+      th{
+        color: var(--uw-black);
+      }
+      td{
+        color: var(--uw-black);
+      }
       caption{
         color: var(--uw-white-1);
       }
diff --git a/src/patterns/03-layouts/site-footer/site-footer.twig b/src/patterns/03-layouts/site-footer/site-footer.twig
index 933881a7..4bd6fccd 100644
--- a/src/patterns/03-layouts/site-footer/site-footer.twig
+++ b/src/patterns/03-layouts/site-footer/site-footer.twig
@@ -16,7 +16,9 @@
     </div>
     {%  endif %}
     <div class="uw-site-footer__social-media">
-     social icons
+      {% include "@components/menu/menu--social/menu--social.twig" with {
+        social_media_placement: 'local-site-footer',
+      } %}
     </div>
     <div class="uw-site-footer__content">
       {{ body }}
diff --git a/src/patterns/04-components/_index.scss b/src/patterns/04-components/_index.scss
index 2a4bacb7..8f5bdd42 100644
--- a/src/patterns/04-components/_index.scss
+++ b/src/patterns/04-components/_index.scss
@@ -2,6 +2,9 @@
 @forward 'button/button';
 @forward 'card/card';
 @forward 'image/image';
+@forward 'menu/menu';
+@forward 'menu/menu--social/menu--social';
+@forward 'social-media/social-media--icon/social-media--icon';
 @forward 'svg/svg';
 @forward 'tag-list/tag-list';
 @forward 'tag/tag';
diff --git a/src/patterns/04-components/menu/_menu.scss b/src/patterns/04-components/menu/_menu.scss
new file mode 100644
index 00000000..0485fef6
--- /dev/null
+++ b/src/patterns/04-components/menu/_menu.scss
@@ -0,0 +1,16 @@
+// @file
+// Styles for Menu.
+
+@use '../../01-core' as *;
+
+.menu {
+  @include list-unstyled;
+
+  @media print {
+    display: none;
+  }
+}
+
+.menu__item {
+  margin-bottom: 0;
+}
diff --git a/src/patterns/04-components/menu/menu--social/_menu--social.scss b/src/patterns/04-components/menu/menu--social/_menu--social.scss
new file mode 100644
index 00000000..7615068f
--- /dev/null
+++ b/src/patterns/04-components/menu/menu--social/_menu--social.scss
@@ -0,0 +1,50 @@
+@use '../../../01-core' as *;
+
+.social-media-list {
+  align-items: center;
+  display: inline-flex;
+  gap: var(--size-1);
+  justify-content: center;
+  list-style-type: none;
+  margin: 0 auto;
+  padding:0;
+  text-align:center;
+  width:100%;
+  @media(min-width: $screen-xs) {
+    margin: 0;
+    max-width: inherit;
+  }
+  @media(min-width: $screen-md) {
+    justify-content: flex-end;
+  }
+  li {
+    margin: 0;
+    padding:0;
+  }
+}
+.social-media-i {
+  &::before{
+    display:block;
+    height:100%;
+    width:100%;
+  }
+}
+.social-media-link {
+  background-color: var(--uw-white);
+  border-radius: 3px;
+  display:block;
+  height: 2.125rem;
+  padding: 0.225rem;
+  position: relative;
+  width: 2.125rem;
+  @media(min-width: $screen-lg) {
+    height: var(--size-5);
+    padding: 0.24rem;
+    width: var(--size-5);
+  }
+  &:hover,
+  &:focus{
+    background-color:transparent;
+    text-decoration: none;
+  }
+}
diff --git a/src/patterns/04-components/menu/menu--social/menu--social.twig b/src/patterns/04-components/menu/menu--social/menu--social.twig
new file mode 100644
index 00000000..3cfc73d9
--- /dev/null
+++ b/src/patterns/04-components/menu/menu--social/menu--social.twig
@@ -0,0 +1,13 @@
+<div class="uw-social-media">
+  <ul class="social-media-list {{ social_media_menu_class }}">
+    {% for item in social_media.menu_tree %}
+      <li class="social-media-list-item">
+        {% include "@components/social-media/social-media--icon/social-media--icon.twig" with {
+          "text": item.text,
+          "url": item.url,
+          "social_media_placement": social_media_placement
+        }%}
+      </li>
+    {% endfor %}
+  </ul>
+</div>
diff --git a/src/patterns/04-components/menu/menu--social/menu--social.yml b/src/patterns/04-components/menu/menu--social/menu--social.yml
new file mode 100644
index 00000000..2358ec17
--- /dev/null
+++ b/src/patterns/04-components/menu/menu--social/menu--social.yml
@@ -0,0 +1,13 @@
+social_media:
+  menu_tree:
+    - text: "Facebook"
+      url: "https://www.facebook.com/university.waterloo"
+    - text: "Twitter"
+      url: "https://twitter.com/uWaterloo"
+    - text: "YouTube"
+      url: "https://www.youtube.com/user/uwaterloo"
+    - text: "Instagram"
+      url: "https://www.instagram.com/uofwaterloo/"
+    - text: "LinkedIn"
+      url: "https://www.linkedin.com/edu/school?id=10875"
+social_media_placement: ""
diff --git a/src/patterns/04-components/menu/menu.twig b/src/patterns/04-components/menu/menu.twig
new file mode 100644
index 00000000..cb901090
--- /dev/null
+++ b/src/patterns/04-components/menu/menu.twig
@@ -0,0 +1,74 @@
+{% import _self as menus %}
+
+{{ menus.menu_links(items, attributes, 0, menu_name) }}
+
+{% macro menu_links(items, attributes, menu_level, menu_name) %}
+  {% import _self as menus %}
+  {% if items %}
+    {% if menu_level == 0 %}
+
+      {% set menu_classes = [
+        'menu',
+        'menu--' ~ menu_name|clean_class,
+        attributes ? attributes.class
+      ]|join(' ')|trim %}
+
+      <ul class="{{ menu_classes }}" {{ attributes ? attributes|without('class') }}>
+    {% else %}
+      <ul class="menu menu__subnav">
+    {% endif %}
+
+    {% for item in items %}
+
+      {% set item_classes = [
+        'menu__item',
+        item.attributes ? item.attributes.class
+      ] %}
+
+      {% set link_classes = [
+        'menu__link',
+      ] %}
+
+      {% if item.below %}
+        {% set item_classes = item_classes|merge(['has-subnav']) %}
+        {% set link_classes = link_classes|merge(['has-subnav']) %}
+      {% endif %}
+
+      {% if item.in_active_trail %}
+        {% set item_classes = item_classes|merge(['is-active-trail']) %}
+        {% set link_classes = link_classes|merge(['is-active-trail']) %}
+      {% endif %}
+
+      {% if item.is_collapsed %}
+        {% set item_classes = item_classes|merge(['is-collapsed']) %}
+        {% set link_classes = link_classes|merge(['is-collapsed']) %}
+      {% endif %}
+
+      {% if item.is_expanded %}
+        {% set item_classes = item_classes|merge(['is-expanded']) %}
+        {% set link_classes = link_classes|merge(['is-expanded']) %}
+      {% endif %}
+
+      {% if item['original_link'].options.attributes.class %}
+        {% set original_link_class = item['original_link'].options.attributes.class %}
+        {% if original_link_class is not iterable %}
+          {% set original_link_class = [original_link_class] %}
+        {% endif %}
+        {% set link_classes = link_classes|merge(original_link_class) %}
+      {% endif %}
+
+      {% set item_classes = item_classes|join(' ')|trim %}
+      {% set link_classes = link_classes|join(' ')|trim %}
+
+      <li class="{{ item_classes }}" {{ item.attributes ? item.attributes|without('class') }}>
+        <a class="{{ link_classes }}" href="{{ item.url }}">{{ item.title }}</a>
+
+        {% if item.below %}
+          {{ menus.menu_links(item.below, attributes, menu_level + 1) }}
+        {% endif %}
+      </li>
+
+    {% endfor %}
+    </ul>
+  {% endif %}
+{% endmacro %}
diff --git a/src/patterns/04-components/menu/menu.yml b/src/patterns/04-components/menu/menu.yml
new file mode 100644
index 00000000..b81194b1
--- /dev/null
+++ b/src/patterns/04-components/menu/menu.yml
@@ -0,0 +1,17 @@
+---
+menu_name: ''
+items:
+  - title: 'Link 1'
+    url: '#'
+    original_link:
+      options:
+        attributes:
+          class: ''
+    in_active_trail: false
+  - title: 'Link 2'
+    url: '#'
+    original_link:
+      options:
+        attributes:
+          class: ''
+    in_active_trail: false
diff --git a/src/patterns/04-components/social-media/social-media--icon/_social-media--icon.scss b/src/patterns/04-components/social-media/social-media--icon/_social-media--icon.scss
new file mode 100644
index 00000000..0819d71a
--- /dev/null
+++ b/src/patterns/04-components/social-media/social-media--icon/_social-media--icon.scss
@@ -0,0 +1,47 @@
+@use '../../../01-core' as *;
+
+$social-accounts: 'facebook', 'twitter', 'youtube', 'instagram', 'linkedin', 'snapchat';
+
+.uw-footer{
+  .ifdsu{
+    height: 100%;
+    width: 100%;
+    &::before{
+       content:'';
+    }
+  }
+}
+.uw-footer__wrapper {
+  a{
+    @each $social in $social-accounts {
+      .fdsu-#{$social}::before {
+        @include svg-background-color(var(--uw-black),$social);
+      }
+    }
+    &:hover,
+    &:focus{
+      @each $social in $social-accounts {
+        .fdsu-#{$social}::before {
+          @include svg-background-color(var(--uw-gold),$social);
+        }
+      }
+    }
+  }
+}
+.uw-site-footer {
+  a {
+    @each $social in $social-accounts {
+      .fdsu-#{$social}::before {
+        @include svg-background-color(var(--uw-black-3),$social);
+      }
+    }
+    &:hover,
+    &:focus{
+      @each $social in $social-accounts {
+        .fdsu-#{$social}::before {
+          @include svg-background-color(var(--uw-white),$social);
+        }
+      }
+    }
+  }
+}
diff --git a/src/patterns/04-components/social-media/social-media--icon/social-media--icon.twig b/src/patterns/04-components/social-media/social-media--icon/social-media--icon.twig
new file mode 100644
index 00000000..d9a27940
--- /dev/null
+++ b/src/patterns/04-components/social-media/social-media--icon/social-media--icon.twig
@@ -0,0 +1,4 @@
+<a href="{{ url }}" class="social-media-link {{ social_media_placement }}" title="{{ text|lower }}">
+  <i class="ifdsu fdsu-{{ text|lower }} social-media-i {{ social_media_placement }}"></i>
+  <span class="off-screen">{{ text }}</span>
+</a>
diff --git a/src/patterns/04-components/social-media/social-media--icon/social-media--icon.yml b/src/patterns/04-components/social-media/social-media--icon/social-media--icon.yml
new file mode 100644
index 00000000..7bc50593
--- /dev/null
+++ b/src/patterns/04-components/social-media/social-media--icon/social-media--icon.yml
@@ -0,0 +1,3 @@
+text: "facebook"
+url: "https://www.facebook.com/university.waterloo"
+social_media_placement: "global-site-footer"
-- 
GitLab