From 93ddc20c2cd3100e39682d07d7401691bacfd767 Mon Sep 17 00:00:00 2001
From: Chris Lawton <chris.lawton@torchbox.com>
Date: Tue, 16 Jan 2018 14:55:34 +0000
Subject: [PATCH] refactor mobile search button when the mobile menu is open,
 to close the mobile menu and then open the search form

---
 .../src/javascript/components/mobile-menu.js  |  5 ---
 .../javascript/components/mobile-search.js    | 34 +++++++++++++++++++
 .../src/javascript/components/search.js       |  6 ----
 opentech/static_src/src/javascript/main.js    |  5 +++
 .../static_src/src/sass/layout/_header.scss   | 10 ------
 opentech/templates/base.html                  |  4 +--
 6 files changed, 41 insertions(+), 23 deletions(-)
 create mode 100644 opentech/static_src/src/javascript/components/mobile-search.js

diff --git a/opentech/static_src/src/javascript/components/mobile-menu.js b/opentech/static_src/src/javascript/components/mobile-menu.js
index 3c01a858d..56de75c65 100644
--- a/opentech/static_src/src/javascript/components/mobile-menu.js
+++ b/opentech/static_src/src/javascript/components/mobile-menu.js
@@ -21,9 +21,6 @@ class MobileMenu {
         // toggle mobile menu
         this.mobileMenu[0].classList.toggle('is-visible');
 
-        // toggle modifier to change position of the search div when the mobile menu is open
-        this.search[0].classList.toggle('header__search--mobile-menu-open');
-
         // reset the search whenever the mobile menu is toggled
         if(this.search[0].classList.contains('is-visible')){
             this.search[0].classList.toggle('is-visible');
@@ -32,8 +29,6 @@ class MobileMenu {
 
         // reset the search show/hide icons
         if(this.mobileMenu[0].classList.contains('is-visible')){
-            document.querySelector('.header__icon--open-search-menu-open').classList.remove('is-hidden');
-            document.querySelector('.header__icon--close-search-menu-open').classList.remove('is-unhidden');
             document.querySelector('.header__icon--open-search-menu-closed').classList.remove('is-hidden');
             document.querySelector('.header__icon--close-search-menu-closed').classList.remove('is-unhidden');
         }
diff --git a/opentech/static_src/src/javascript/components/mobile-search.js b/opentech/static_src/src/javascript/components/mobile-search.js
new file mode 100644
index 000000000..b72e2d83a
--- /dev/null
+++ b/opentech/static_src/src/javascript/components/mobile-search.js
@@ -0,0 +1,34 @@
+class MobileSearch {
+    static selector() {
+        return '.js-mobile-search-toggle';
+    }
+
+    constructor(node, mobileMenu, searchForm, searchToggleButton) {
+        this.node = node;
+        this.mobileMenu = mobileMenu[0];
+        this.searchForm = searchForm[0];
+        this.searchToggleButton = searchToggleButton[0];
+        this.bindEventListeners();
+    }
+
+    bindEventListeners() {
+        this.node.click(this.toggle.bind(this));
+    }
+
+    toggle() {
+        // hide the mobile menu
+        this.mobileMenu.classList.remove('is-visible');
+
+        // wait for the mobile menu to close
+        setTimeout(() => {
+            // open the search
+            this.searchForm.classList.add('is-visible');
+
+            // swap the icons
+            this.searchToggleButton.querySelector('.header__icon--open-search').classList.add('is-hidden');
+            this.searchToggleButton.querySelector('.header__icon--close-search').classList.add('is-unhidden');
+        }, 250);
+    }
+}
+
+export default MobileSearch;
diff --git a/opentech/static_src/src/javascript/components/search.js b/opentech/static_src/src/javascript/components/search.js
index b36fff10f..124b78661 100644
--- a/opentech/static_src/src/javascript/components/search.js
+++ b/opentech/static_src/src/javascript/components/search.js
@@ -20,12 +20,6 @@ class Search {
         // swap the icons
         this.node[0].querySelector('.header__icon--open-search').classList.toggle('is-hidden');
         this.node[0].querySelector('.header__icon--close-search').classList.toggle('is-unhidden');
-
-        // add modifier to header__inner when the menu is open to style search element
-        document.querySelector('.header__inner--menu-open').classList.toggle('header__inner--search-open');
-
-        // add modifier to header to be able to change header icon colours
-        document.querySelector('.header').classList.toggle('search-open');
     }
 }
 
diff --git a/opentech/static_src/src/javascript/main.js b/opentech/static_src/src/javascript/main.js
index 743ab06f1..a3d4f3a4a 100755
--- a/opentech/static_src/src/javascript/main.js
+++ b/opentech/static_src/src/javascript/main.js
@@ -1,6 +1,7 @@
 import $ from './globals';
 import MobileMenu from './components/mobile-menu';
 import Search from './components/search';
+import MobileSearch from './components/mobile-search';
 
 $(function () {
     $(MobileMenu.selector()).each((index, el) => {
@@ -10,4 +11,8 @@ $(function () {
     $(Search.selector()).each((index, el) => {
         new Search($(el), $('.header__search'));
     });
+
+    $(MobileSearch.selector()).each((index, el) => {
+        new MobileSearch($(el), $('.header__menus--mobile'), $('.header__search'), $('.js-search-toggle'));
+    });
 });
diff --git a/opentech/static_src/src/sass/layout/_header.scss b/opentech/static_src/src/sass/layout/_header.scss
index bd29594e3..08c08c0f9 100644
--- a/opentech/static_src/src/sass/layout/_header.scss
+++ b/opentech/static_src/src/sass/layout/_header.scss
@@ -48,10 +48,6 @@
             background: transparent;
             transition: background $transition;
         }
-
-        &--search-open {
-            background: $color--dark-blue;
-        }
     }
 
     &__menus {
@@ -164,12 +160,6 @@
         height: 180px;
         padding-bottom: 50px;
         background: $color--dark-blue;
-
-        &--mobile-menu-open {
-            top: 80px;
-            z-index: 12;
-            height: 120px;
-        }
     }
 
     &__button-container {
diff --git a/opentech/templates/base.html b/opentech/templates/base.html
index 97cbd38e5..e2699382f 100644
--- a/opentech/templates/base.html
+++ b/opentech/templates/base.html
@@ -107,9 +107,8 @@
                             <svg class="header__logo header__logo--mobile"><use xlink:href="#logo-mobile"></use></svg>
                         </a>
                         <div class="header__inner header__inner--mobile-buttons">
-                            <button class="button js-search-toggle" aria-haspopup="true" aria-label="Toggle mobile search">
+                            <button class="button js-mobile-search-toggle" aria-haspopup="true" aria-label="Toggle mobile search">
                                 <svg class="header__icon header__icon--open-search header__icon--open-search-menu-open icon icon--mobile-menu"><use xlink:href="#magnifying-glass"></use></svg>
-                                <svg class="header__icon header__icon--close-search header__icon--close-search-menu-open icon icon--mobile-menu"><use xlink:href="#cross"></use></svg>
                             </button>
                             <button class="button button--left-space js-mobile-menu-close">
                                 <svg class="header__icon header__icon--cross icon icon--mobile-menu"><use xlink:href="#cross"></use></svg>
@@ -118,6 +117,7 @@
                     </div>
                     {% primarynav %}
                 </section>
+
                 <div class="header__button-container">
                     <a href="#" class="button button--transparent button--narrow button--contains-icons">
                         <svg class="icon icon--person"><use xlink:href="#person-icon"></use></svg>
-- 
GitLab