view client/src/components/map/toolbar/Toolbar.vue @ 1372:553aadd97087

new cross profile workflow (WIP) Needs fixing of some bugs and not so nice looks.
author Markus Kottlaender <markus@intevation.de>
date Tue, 27 Nov 2018 12:59:26 +0100
parents 86be0002cd10
children 92d9dec88add
line wrap: on
line source

<template>
    <div class="ml-2">
        <div :class="'toolbar toolbar-' + (expandToolbar ? 'expanded' : 'collapsed')">
            <Identify></Identify>
            <Layers></Layers>
            <Profiles></Profiles>
            <Linetool></Linetool>
            <Polygontool></Polygontool>
            <Pdftool></Pdftool>
        </div>
        <div @click="$store.commit('application/expandToolbar', !expandToolbar)" class="toolbar-button bg-info text-white">
            <font-awesome-icon :icon="expandToolbar ? 'angle-up' : 'angle-down'"></font-awesome-icon>
        </div>
    </div>
</template>

<style lang="sass">
// not scoped to affect nested components
// doen't work when put in application/assets/application.sass... why??? o_O
.toolbar
  overflow: hidden
  transition: max-height 0.4s

.toolbar-collapsed
  max-height: (3 * $icon-height) + (3 * $offset)

.toolbar-expanded
  max-height: 100%

.toolbar-button
  opacity: $slight-transparent
  color: #666
  height: $icon-width
  width: $icon-height
  align-items: center
  justify-content: center
  display: flex
  background: #fff
  margin-bottom: $offset
  border-radius: $border-radius
  box-shadow: $shadow-xs
  z-index: 2
  pointer-events: auto
  .inverted
    color: $color-info
  .grey
    color: #ddd
</style>

<script>
/* This is Free Software under GNU Affero General Public License v >= 3.0
 * without warranty, see README.md and license for details.
 *
 * SPDX-License-Identifier: AGPL-3.0-or-later
 * License-Filename: LICENSES/AGPL-3.0.txt
 *
 * Copyright (C) 2018 by via donau
 *   – Österreichische Wasserstraßen-Gesellschaft mbH
 * Software engineering by Intevation GmbH
 *
 * Author(s):
 * Markus Kottländer <markus.kottlaender@intevation.de>
 */
import { mapState, mapGetters } from "vuex";

export default {
  name: "toolbar",
  components: {
    Identify: () => import("./Identify.vue"),
    Layers: () => import("./Layers.vue"),
    Linetool: () => import("./Linetool.vue"),
    Polygontool: () => import("./Polygontool.vue"),
    Profiles: () => import("./Profiles.vue"),
    Pdftool: () => import("./Pdftool.vue")
  },
  computed: {
    ...mapGetters("map", ["getLayerByName"]),
    ...mapState("map", ["lineTool", "polygonTool", "cutTool"]),
    ...mapState("application", ["expandToolbar"])
  },
  mounted() {
    window.addEventListener("keydown", e => {
      // Escape
      if (e.keyCode === 27) {
        this.lineTool.setActive(false);
        this.polygonTool.setActive(false);
        this.cutTool.setActive(false);
        this.$store.commit("map/setCurrentMeasurement", null);
        this.getLayerByName("Draw Tool")
          .data.getSource()
          .clear();
      }
    });
  }
};
</script>