From e259186d4c97b9161ae46858d9229a0c6f7c7189 Mon Sep 17 00:00:00 2001
From: koehr <n@koehr.in>
Date: Sun, 5 Apr 2020 15:01:39 +0200
Subject: [PATCH] adds extended menu

---
 src/components/deck-card-editor-menu.vue | 53 +++++++++++++++++++++---
 src/components/deck-card-editor.vue      |  2 +-
 2 files changed, 48 insertions(+), 7 deletions(-)

diff --git a/src/components/deck-card-editor-menu.vue b/src/components/deck-card-editor-menu.vue
index 7d830b7..03bad6f 100644
--- a/src/components/deck-card-editor-menu.vue
+++ b/src/components/deck-card-editor-menu.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="menu-bar" :class="{ active }">
+  <menu class="menu-bar" :class="{ active }">
     <button class="editor-button-bold" :class="{ active: value.bold }" @click="menuAction('bold')" />
     <button class="editor-button-italic" :class="{ active: value.italic }" @click="menuAction('italic')" />
 
@@ -9,21 +9,27 @@
 
     <button class="editor-button-bullet-list" :class="{ active: value.bulletList }" @click="menuAction('bulletList')" />
     <button class="editor-button-horizontal-rule" :class="{ active: value.separator}" @click="menuAction('separator')" />
-    <button class="editor-button-horizontal-rule" :class="{ active: value.spacer}" @click="menuAction('spacer')" />
 
-    <button class="editor-button-stat-block" :class="{ active: value.statBlock }" @click="menuAction('statBlock')" />
-  </div>
+    <button class="editor-button-dropdown" :class="{ active: dropdownOpen }" @click="toggleDropdown" />
+
+    <div class="extended-menu" v-show="dropdownOpen">
+      <button class="extended-menu-button" @click="extMenuAction('statBlock')">Stat Block (DnD5e)</button>
+      <button class="extended-menu-button" @click="extMenuAction('boxes')">Empty Boxes</button>
+    </div>
+  </menu>
 </template>
 
 <script lang="ts">
 import { Component, Prop, Vue } from 'vue-property-decorator'
-import { blocks, State } from '@/editor'
+import { blocks, marks, State } from '@/editor'
 
 @Component
 export default class DeckCardEditorMenu extends Vue {
   @Prop() public readonly active!: boolean
   @Prop() public readonly value!: State
 
+  private dropdownOpen = false
+
   private menuAction (name: string) {
     const newState = { ...this.value }
 
@@ -32,13 +38,23 @@ export default class DeckCardEditorMenu extends Vue {
         newState[block] = false
       })
       newState[name] = true
-    } else { // marks behave like checkboxes
+    } else if (marks.indexOf(name)) { // marks behave like checkboxes
       newState[name] = !newState[name]
     }
 
     this.$emit('input', newState)
     this.$emit('action', name)
   }
+
+  private toggleDropdown () {
+    this.dropdownOpen = !this.dropdownOpen
+    this.$emit('action', 'refocus')
+  }
+
+  private extMenuAction (name: string) {
+    this.menuAction(name)
+    this.dropdownOpen = false
+  }
 }
 </script>
 
@@ -92,4 +108,29 @@ export default class DeckCardEditorMenu extends Vue {
 .editor-button-horizontal-rule:after { content: '—'; }
 
 .editor-button-stat-block:after { content: 'ST'; }
+
+.menu-bar > button.editor-button-dropdown {
+  width: 3.6rem;
+}
+.menu-bar > button.editor-button-dropdown:after {
+  content: ' more ';
+  width: 90%;
+  font-size: 1rem;
+}
+
+.extended-menu {
+  width: 100%;
+  height: 4rem;
+  padding-top: .5rem;
+  background: var(--highlight-color);
+}
+.extended-menu-button {
+  width: 97%;
+  height: 1.6rem;
+  margin: 0 .1rem;
+  background-color: #EEE;
+  color: black;
+  font-size: 1rem;
+  border: none;
+}
 </style>
diff --git a/src/components/deck-card-editor.vue b/src/components/deck-card-editor.vue
index d69a8a2..cb3f4da 100644
--- a/src/components/deck-card-editor.vue
+++ b/src/components/deck-card-editor.vue
@@ -83,7 +83,7 @@ export default class DeckCardEditor extends Vue {
     content.focus()
 
     const cmd = menuActionToCommand[action]
-    cmd()
+    if (cmd) cmd()
 
     this.$nextTick(() => this.syncMenuState())
   }