diff --git a/src/components/Menu.js b/src/components/Menu.js
index 80510006..34402f6d 100644
--- a/src/components/Menu.js
+++ b/src/components/Menu.js
@@ -9,6 +9,10 @@ const selectedClassName = flag => flag
? 'selected'
: ''
+const hmenuCurClassName = flag => flag
+ ? 'HMenu__item--cur'
+ : ''
+
const MenuItem = ({active, text, url}) => (active
? {text}
: {text}
@@ -17,16 +21,23 @@ const MenuItem = ({active, text, url}) => (active
const Menu = ({items}) => {
const content = items.map((item, index) => (
- {!doDrawSubmenu(item) ? null :
+
+ {!doDrawSubmenu(item) ? null : (
- }
+ )}
))
return (
-
+
)
}
diff --git a/src/public/app.js b/src/public/app.js
new file mode 100644
index 00000000..0f82cc22
--- /dev/null
+++ b/src/public/app.js
@@ -0,0 +1,119 @@
+const body = document.querySelector('body')
+
+function isFolded(element) {
+ return element.classList.contains('HMenu--folded')
+}
+
+function isUnfolded(element) {
+ return element.classList.contains('HMenu--unfolded')
+}
+
+function isOpen(element) {
+ return element.classList.contains('HMenu--open')
+}
+
+function isClosed(element) {
+ return element.classList.contains('HMenu--closed')
+}
+
+function foldMenu(element) {
+ element.classList.remove('HMenu--unfolded')
+ element.classList.add('HMenu--folded')
+
+ return element
+}
+
+function unfoldMenu(element) {
+ element.classList.remove('HMenu--folded')
+ element.classList.add('HMenu--unfolded')
+
+ return element
+}
+
+function openMenu(element) {
+ body.classList.add('no-scroll')
+ element.classList.remove('HMenu--closed')
+ element.classList.add('HMenu--open')
+
+ return element
+}
+
+function closeMenu(element) {
+ body.classList.remove('no-scroll')
+ element.classList.remove('HMenu--open')
+ element.classList.add('HMenu--closed')
+
+ return element
+}
+
+function toggleMenu(element) {
+ if (isOpen(element)) {
+ closeMenu(element)
+ } else {
+ openMenu(element)
+ }
+}
+
+function createToggle() {
+ return `
+
+
+
+ `
+}
+
+function getToggleWidth(element) {
+ const value = element.dataset.toggleWidth
+ if (value) return Number(value)
+
+ return 700
+}
+
+function runHmenu() {
+ const menus = [...document.querySelectorAll('.HMenu')]
+
+ function initMenus() {
+ const w = body.clientWidth
+
+ return menus
+ .map(menu => {
+ const toggle = menu.querySelector('.HMenu__toggle')
+ toggle.addEventListener('click', e => {
+ e.preventDefault()
+ toggleMenu(menu)
+ })
+
+ const toggleWidth = getToggleWidth(menu)
+ const foldedState = w < toggleWidth
+
+ if (foldedState) {
+ return foldMenu(menu)
+ } else {
+ return unfoldMenu(menu)
+ }
+ })
+ .map(menu => closeMenu(menu))
+ }
+
+ function handleMenus() {
+ const w = body.clientWidth
+
+ return menus.map(menu => {
+ const toggleWidth = getToggleWidth(menu)
+ const foldedState = w < toggleWidth
+
+ if (foldedState && !isFolded(menu)) {
+ return foldMenu(menu)
+ } else if (!foldedState && isFolded(menu)) {
+ return unfoldMenu(menu)
+ } else {
+ return menu
+ }
+ })
+ }
+
+ initMenus()
+ window.addEventListener('resize', handleMenus)
+}
+
+runHmenu()
diff --git a/src/style/components/main-menu.scss b/src/style/components/main-menu.scss
index 0d06b012..4d2e07e2 100644
--- a/src/style/components/main-menu.scss
+++ b/src/style/components/main-menu.scss
@@ -1,8 +1,6 @@
@import "../variables";
.main-menu {
- white-space: nowrap;
-
font-size: $normal-font-size;
list-style: none;
diff --git a/src/style/components/navigation.scss b/src/style/components/navigation.scss
index 1e6d2639..3b68e1bf 100644
--- a/src/style/components/navigation.scss
+++ b/src/style/components/navigation.scss
@@ -1,16 +1,8 @@
@import "../variables";
.navigation {
- -webkit-overflow-scrolling: touch;
-
width: 100%;
- z-index: 100;
- overflow-x: scroll;
- position: fixed;
- top: 0;
- white-space: nowrap;
-
- background-color: rgba(255, 255, 255, 0.95);
+ background-color: white;
&__body {
display: flex;
diff --git a/src/style/hmenu.scss b/src/style/hmenu.scss
new file mode 100644
index 00000000..f982dbf7
--- /dev/null
+++ b/src/style/hmenu.scss
@@ -0,0 +1,130 @@
+.no-scroll {
+ overflow: hidden;
+}
+
+.HMenu {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+
+ width: 100%;
+ height: 100%;
+
+ position: relative;
+
+ list-style: none;
+}
+
+.HMenu li {
+ margin: 0 1em .5em 0;
+}
+
+
+
+
+.HMenu--folded.HMenu--closed {
+ justify-content: center;
+}
+
+.HMenu--folded.HMenu--closed .HMenu__item{
+ display: none;
+}
+
+.HMenu--folded .HMenu__item.HMenu__item--cur{
+ display: block;
+}
+
+
+
+
+
+
+.HMenu__toggle {
+ position: absolute;
+ top: 0;
+ left: 0;
+
+ display: flex;
+ align-items: center;
+
+ height: 3em;
+ font-size: 1rem;
+}
+
+
+
+
+
+
+.HMenu--unfolded {
+ margin-left: 1em;
+}
+
+.HMenu--unfolded .HMenu__toggle {
+ display: none;
+}
+
+
+
+
+
+.HMenu--folded.HMenu--open {
+ display: flex;
+ align-items: center;
+
+ width: 100%;
+ height: 100%;
+
+ position: fixed;
+ top: 0;
+ left: 0;
+
+ //background-color: rgba(169, 144, 97, 0.95);
+ background-color: rgba(255, 255, 255, 0.95);
+
+ flex-direction: column;
+ text-align: center;
+
+ overflow-y: auto;
+
+ font-size: 1.5rem;
+
+ /*transition: opacity 0.5s ease-in-out;*/
+ /*-webkit-transition: opacity 0.5s ease-in-out;*/
+}
+
+
+
+
+
+
+._HMenu--folded li:last-child {
+ margin-bottom: 2em;
+}
+
+
+
+
+
+.HMenu__item {
+ max-width: 10em;
+}
+
+
+
+
+
+
+
+.HMenu__toggle {
+ padding: 0 .5em;
+}
+
+.HMenu__toggle a {
+ text-decoration: none;
+ border: none;
+}
+
+.HMenu__toggle a:hover {
+ font-weight: bold;
+}
\ No newline at end of file
diff --git a/src/style/style.scss b/src/style/style.scss
index bd1fabeb..d7a8501d 100644
--- a/src/style/style.scss
+++ b/src/style/style.scss
@@ -39,6 +39,7 @@
@import "footer";
@import "kazimir/video";
+@import "hmenu";
// THEMES
diff --git a/src/views/main.hbs b/src/views/main.hbs
index c4cdc0b1..49df2983 100644
--- a/src/views/main.hbs
+++ b/src/views/main.hbs
@@ -114,6 +114,8 @@
{{{content}}}
+
+