forked from fr/deguapp
		
	Added: modal component
This commit is contained in:
		@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <meta charset="UTF-8">
 | 
					    <meta charset="UTF-8">
 | 
				
			||||||
    <link rel="icon" href="/favicon.ico">
 | 
					    <link rel="icon" href="/favicon.ico">
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
				
			||||||
    <title>Vite App</title>
 | 
					    <title>DeguApp</title>
 | 
				
			||||||
  </head>
 | 
					  </head>
 | 
				
			||||||
  <body>
 | 
					  <body>
 | 
				
			||||||
    <div id="app"></div>
 | 
					    <div id="app"></div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,17 @@ import { RouterLink, RouterView } from 'vue-router'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  <main class="content">
 | 
					  <main class="content">
 | 
				
			||||||
    <RouterView />
 | 
					    <RouterView />
 | 
				
			||||||
 | 
					    <button type="button" class="btn" @click="showModal">
 | 
				
			||||||
 | 
					      Open Modal!
 | 
				
			||||||
 | 
					    </button>
 | 
				
			||||||
 | 
					    <Modal
 | 
				
			||||||
 | 
					      v-show="isModalVisible"
 | 
				
			||||||
 | 
					      @close="closeModal"
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      <template #header>
 | 
				
			||||||
 | 
					        <h1>Tohle Je Muj Header</h1>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </Modal>
 | 
				
			||||||
  </main>
 | 
					  </main>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <!-- <footer>
 | 
					  <!-- <footer>
 | 
				
			||||||
@@ -32,4 +43,27 @@ import { RouterLink, RouterView } from 'vue-router'
 | 
				
			|||||||
  </footer> -->
 | 
					  </footer> -->
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					  import Modal from './components/Modal.vue';
 | 
				
			||||||
 | 
					  export default {
 | 
				
			||||||
 | 
					    name: 'App',
 | 
				
			||||||
 | 
					    components: {
 | 
				
			||||||
 | 
					      Modal,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    data() {
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        isModalVisible: false,
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    methods: {
 | 
				
			||||||
 | 
					      showModal() {
 | 
				
			||||||
 | 
					        this.isModalVisible = true;
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      closeModal() {
 | 
				
			||||||
 | 
					        this.isModalVisible = false;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style scoped></style>
 | 
					<style scoped></style>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
:root {
 | 
					 | 
				
			||||||
    --clr1: #0f0f0f;
 | 
					 | 
				
			||||||
    --clr2: #3f3f3f;
 | 
					 | 
				
			||||||
    --clr3: #232D3F;
 | 
					 | 
				
			||||||
    --clr4: #23455b;
 | 
					 | 
				
			||||||
    --clr5: #223440;
 | 
					 | 
				
			||||||
    --clr6: #ffffff;    
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										2
									
								
								frontend/src/assets/main.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								frontend/src/assets/main.scss
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					@import 'vars';
 | 
				
			||||||
 | 
					@import 'nav';
 | 
				
			||||||
							
								
								
									
										10
									
								
								frontend/src/assets/vars.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								frontend/src/assets/vars.scss
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					$clr-1: orange;
 | 
				
			||||||
 | 
					$clr1: #0f0f0f;
 | 
				
			||||||
 | 
					$clr2: #3f3f3f;
 | 
				
			||||||
 | 
					$clr3: #232D3F;
 | 
				
			||||||
 | 
					$clr4: #23455b;
 | 
				
			||||||
 | 
					$clr5: #223440;
 | 
				
			||||||
 | 
					$clr6: #ffffff;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										114
									
								
								frontend/src/components/Modal.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								frontend/src/components/Modal.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					    <div class="modal-backdrop">
 | 
				
			||||||
 | 
					        <div class="modal">
 | 
				
			||||||
 | 
					            <header class="modal-header">
 | 
				
			||||||
 | 
					              <slot name="header">
 | 
				
			||||||
 | 
					                This is the default title!
 | 
				
			||||||
 | 
					              </slot>
 | 
				
			||||||
 | 
					              <button
 | 
				
			||||||
 | 
					                type="button"
 | 
				
			||||||
 | 
					                class="btn-close"
 | 
				
			||||||
 | 
					                @click="close"
 | 
				
			||||||
 | 
					              >
 | 
				
			||||||
 | 
					                x
 | 
				
			||||||
 | 
					              </button>
 | 
				
			||||||
 | 
					            </header>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <section class="modal-body">
 | 
				
			||||||
 | 
					              <slot name="body">
 | 
				
			||||||
 | 
					                This is the default body!
 | 
				
			||||||
 | 
					              </slot>
 | 
				
			||||||
 | 
					             </section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <footer class="modal-footer">
 | 
				
			||||||
 | 
					              <slot name="footer">
 | 
				
			||||||
 | 
					                This is the default footer!
 | 
				
			||||||
 | 
					              </slot>
 | 
				
			||||||
 | 
					              <button
 | 
				
			||||||
 | 
					                type="button"
 | 
				
			||||||
 | 
					                class="btn-green"
 | 
				
			||||||
 | 
					                @click="close"
 | 
				
			||||||
 | 
					              >
 | 
				
			||||||
 | 
					                Close Modal
 | 
				
			||||||
 | 
					              </button>
 | 
				
			||||||
 | 
					            </footer>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					  export default {
 | 
				
			||||||
 | 
					    name: 'ModalComponent',
 | 
				
			||||||
 | 
					    methods: {
 | 
				
			||||||
 | 
					      close() {
 | 
				
			||||||
 | 
					        this.$emit('close');
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					  @import "@/assets/vars";
 | 
				
			||||||
 | 
					  .modal-backdrop {
 | 
				
			||||||
 | 
					    position: fixed;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					    bottom: 0;
 | 
				
			||||||
 | 
					    left: 0;
 | 
				
			||||||
 | 
					    right: 0;
 | 
				
			||||||
 | 
					    background-color: rgba(0, 0, 0, 0.7);
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    justify-content: center;
 | 
				
			||||||
 | 
					    align-items: center;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .modal {
 | 
				
			||||||
 | 
					    background: $clr-1;
 | 
				
			||||||
 | 
					    box-shadow: 2px 2px 20px 1px;
 | 
				
			||||||
 | 
					    overflow-x: auto;
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    flex-direction: column;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .modal-header,
 | 
				
			||||||
 | 
					  .modal-footer {
 | 
				
			||||||
 | 
					    padding: 15px;
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .modal-header {
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    border-bottom: 1px solid #eeeeee;
 | 
				
			||||||
 | 
					    color: #4AAE9B;
 | 
				
			||||||
 | 
					    justify-content: space-between;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .modal-footer {
 | 
				
			||||||
 | 
					    border-top: 1px solid #eeeeee;
 | 
				
			||||||
 | 
					    flex-direction: column;
 | 
				
			||||||
 | 
					    justify-content: flex-end;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .modal-body {
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    padding: 20px 10px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .btn-close {
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					    right: 0;
 | 
				
			||||||
 | 
					    border: none;
 | 
				
			||||||
 | 
					    font-size: 20px;
 | 
				
			||||||
 | 
					    padding: 10px;
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					    font-weight: bold;
 | 
				
			||||||
 | 
					    color: #4AAE9B;
 | 
				
			||||||
 | 
					    background: transparent;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .btn-green {
 | 
				
			||||||
 | 
					    color: white;
 | 
				
			||||||
 | 
					    background: #4AAE9B;
 | 
				
			||||||
 | 
					    border: 1px solid #4AAE9B;
 | 
				
			||||||
 | 
					    border-radius: 2px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@@ -1,6 +1,4 @@
 | 
				
			|||||||
import './assets/_general.scss'
 | 
					import './assets/main.scss'
 | 
				
			||||||
import './assets/_vars.scss'
 | 
					 | 
				
			||||||
import './assets/nav.scss'
 | 
					 | 
				
			||||||
import { createApp } from 'vue'
 | 
					import { createApp } from 'vue'
 | 
				
			||||||
import App from './App.vue'
 | 
					import App from './App.vue'
 | 
				
			||||||
import router from './router'
 | 
					import router from './router'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,9 +12,6 @@ const router = createRouter({
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
      path: '/about',
 | 
					      path: '/about',
 | 
				
			||||||
      name: 'about',
 | 
					      name: 'about',
 | 
				
			||||||
      // route level code-splitting
 | 
					 | 
				
			||||||
      // this generates a separate chunk (About.[hash].js) for this route
 | 
					 | 
				
			||||||
      // which is lazy-loaded when the route is visited.
 | 
					 | 
				
			||||||
      component: () => import('../views/AboutView.vue')
 | 
					      component: () => import('../views/AboutView.vue')
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user