Commit 66822ea9fe7a62155c321f916dd566f1421b00b2
1 parent
ceb40c2a7d
Exists in
master
and in
1 other branch
Logica inicial para setear sinonimos
Showing
5 changed files
with
106 additions
and
41 deletions
Show diff stats
src/app/components/inicio/inicio.component.ts
| 1 | import { Component, OnInit, ViewChild } from '@angular/core'; | 1 | import { Component, OnInit, ViewChild } from '@angular/core'; |
| 2 | import { PopoverDirective } from 'ngx-bootstrap'; | 2 | import { PopoverDirective } from 'ngx-bootstrap'; |
| 3 | import { appSettings } from 'src/etc/AppSettings'; | 3 | import { appSettings } from 'src/etc/AppSettings'; |
| 4 | import { Producto } from 'src/app/wrappers/producto'; | 4 | import { Producto } from 'src/app/wrappers/producto'; |
| 5 | import { ProductoService } from 'src/app/services/producto.service'; | 5 | import { ProductoService } from 'src/app/services/producto.service'; |
| 6 | import { Router } from '@angular/router'; | 6 | import { Router } from '@angular/router'; |
| 7 | import { Promocion } from 'src/app/wrappers/promocion'; | 7 | import { Promocion } from 'src/app/wrappers/promocion'; |
| 8 | import { Sinonimo } from 'src/app/wrappers/sinonimo'; | ||
| 8 | 9 | ||
| 9 | @Component({ | 10 | @Component({ |
| 10 | selector: 'app-inicio', | 11 | selector: 'app-inicio', |
| 11 | templateUrl: './inicio.component.html', | 12 | templateUrl: './inicio.component.html', |
| 12 | styleUrls: ['./inicio.component.scss'] | 13 | styleUrls: ['./inicio.component.scss'] |
| 13 | }) | 14 | }) |
| 14 | export class InicioComponent implements OnInit { | 15 | export class InicioComponent implements OnInit { |
| 15 | 16 | ||
| 16 | @ViewChild('pop', { static: false }) popoverDirective: PopoverDirective; | 17 | @ViewChild('pop', { static: false }) popoverDirective: PopoverDirective; |
| 17 | private productoAcargar: Producto; | 18 | private productoAcargar: Producto; |
| 18 | private promoAcargar: Promocion; | 19 | private promoAcargar: Promocion; |
| 19 | private sinonimoAcargar: Producto; | 20 | private sinonimoAcargar: Sinonimo; |
| 20 | 21 | ||
| 21 | promociones: Promocion[] = []; | 22 | promociones: Promocion[] = []; |
| 22 | sinonimos: Producto[] = []; | 23 | sinonimos: Sinonimo[] = []; |
| 23 | apiUrl: string = appSettings.apiUrl | 24 | apiUrl: string = appSettings.apiUrl |
| 24 | 25 | ||
| 25 | constructor( | 26 | constructor( |
| 26 | private router: Router, | 27 | private router: Router, |
| 27 | private productoService: ProductoService) { } | 28 | private productoService: ProductoService) { } |
| 28 | 29 | ||
| 29 | ngOnInit() { | 30 | ngOnInit() { |
| 30 | 31 | ||
| 31 | this.productoAcargar = this.productoService.productoAcargar; | 32 | this.productoAcargar = this.productoService.productoAcargar; |
| 32 | this.getPromociones(); | 33 | this.getPromociones(); |
| 33 | } | 34 | } |
| 34 | 35 | ||
| 35 | getPromociones() { | 36 | getPromociones() { |
| 36 | if (this.productoAcargar) { | 37 | if (this.productoAcargar) { |
| 37 | var sector = this.productoAcargar.CodSec; | 38 | var sector = this.productoAcargar.CodSec; |
| 38 | var codigo = this.productoAcargar.CodArt; | 39 | var codigo = this.productoAcargar.CodArt; |
| 39 | this.productoService.getPromocion(sector, codigo) | 40 | this.productoService.getPromocion(sector, codigo) |
| 40 | .subscribe((res: Promocion[]) => { | 41 | .subscribe((res: Promocion[]) => { |
| 41 | 42 | ||
| 42 | if (res.length === 0) { | 43 | if (res.length === 0) { |
| 43 | //Si no tiene promociones la cargará al carrito despues de un tiempo | 44 | //Si no tiene promociones la cargará al carrito despues de un tiempo |
| 44 | setTimeout(() => { | 45 | setTimeout(() => { |
| 45 | this.productoService.productos.push(this.productoAcargar); | 46 | this.productoService.productos.push(this.productoAcargar); |
| 46 | this.productoAcargar = undefined; | 47 | this.productoAcargar = undefined; |
| 47 | }, 2000) | 48 | }, 2000) |
| 48 | } else { | 49 | } else { |
| 49 | 50 | ||
| 50 | this.promociones = res; | 51 | this.promociones = res; |
| 51 | this.popoverDirective.show(); | 52 | this.popoverDirective.show(); |
| 52 | } | 53 | } |
| 53 | }, error => { console.error(error); }) | 54 | }, error => { console.error(error); }) |
| 54 | } | 55 | } |
| 55 | } | 56 | } |
| 56 | 57 | ||
| 57 | showPopover() { | 58 | showPopover() { |
| 58 | 59 | ||
| 59 | this.popoverDirective.show(); | 60 | this.popoverDirective.show(); |
| 60 | } | 61 | } |
| 61 | 62 | ||
| 62 | private goPage(pageUrl) { | 63 | private goPage(pageUrl) { |
| 63 | 64 | ||
| 64 | this.router.navigate([pageUrl]); | 65 | this.router.navigate([pageUrl]); |
| 65 | } | 66 | } |
| 66 | 67 | ||
| 67 | deshacerCarga() { | 68 | deshacerCarga() { |
| 68 | 69 | ||
| 69 | if (this.sinonimoAcargar || this.sinonimos.length > 0) { | 70 | if (this.sinonimoAcargar || this.sinonimos.length > 0) { |
| 70 | this.sinonimos = []; | 71 | this.sinonimos = []; |
| 71 | this.sinonimoAcargar = undefined; | 72 | this.sinonimoAcargar = undefined; |
| 72 | this.popoverDirective.hide(); | 73 | this.popoverDirective.hide(); |
| 73 | } | 74 | } |
| 74 | 75 | ||
| 75 | if (this.promoAcargar) { | 76 | if (this.promoAcargar) { |
| 76 | this.promoAcargar = undefined; | 77 | this.promoAcargar = undefined; |
| 77 | this.popoverDirective.show(); | 78 | this.popoverDirective.show(); |
| 78 | } else { | 79 | } else { |
| 79 | this.productoAcargar = undefined; | 80 | this.productoAcargar = undefined; |
| 80 | this.promociones = []; | 81 | this.promociones = []; |
| 81 | this.popoverDirective.hide(); | 82 | this.popoverDirective.hide(); |
| 82 | } | 83 | } |
| 83 | } | 84 | } |
| 84 | 85 | ||
| 85 | promoSeleccionada($event: Promocion) { | 86 | promoSeleccionada($event: Promocion) { |
| 86 | 87 | ||
| 87 | this.promoAcargar = $event; | 88 | this.promoAcargar = $event; |
| 88 | this.popoverDirective.hide(); | 89 | this.popoverDirective.hide(); |
| 89 | if (this.promoAcargar.sinonimos) { | 90 | if (this.promoAcargar.sinonimos) { |
| 90 | var sector = this.promoAcargar.sector; | 91 | var sector = this.promoAcargar.sector; |
| 91 | var codigo = this.promoAcargar.codigo; | 92 | var codigo = this.promoAcargar.codigo; |
| 92 | this.productoService.getPromocionSinonimos(sector, codigo) | 93 | this.productoService.getPromocionSinonimos(sector, codigo) |
| 93 | .subscribe((res: Producto[]) => { | 94 | .subscribe((res: Sinonimo[]) => { |
| 94 | res.forEach(resSinonimo => { | 95 | res.forEach(resSinonimo => { |
| 95 | this.promoAcargar.productos.forEach(producto => { | 96 | resSinonimo.productos.forEach(productoSinonimo => { |
| 96 | if (producto.id === resSinonimo.id) { | 97 | this.promoAcargar.productos.forEach(productoPromo => { |
| 97 | resSinonimo.esPadre = true; | 98 | if (productoPromo.id === productoSinonimo.id) { |
| 98 | } | 99 | productoSinonimo.esPadre = true; |
| 99 | }); | 100 | } |
| 101 | }); | ||
| 102 | |||
| 103 | }) | ||
| 100 | }) | 104 | }) |
| 101 | this.sinonimos = res; | 105 | this.sinonimos = res; |
| 102 | this.showPopover(); | 106 | this.showPopover(); |
| 103 | }) | 107 | }) |
| 104 | } | 108 | } |
| 105 | } | 109 | } |
| 106 | 110 | ||
| 107 | sinonimoSeleccionado($event: Producto) { | 111 | sinonimoSeleccionado($event: Sinonimo) { |
| 108 | 112 | ||
| 113 | console.log($event); | ||
| 109 | this.sinonimoAcargar = $event; | 114 | this.sinonimoAcargar = $event; |
| 110 | } | 115 | } |
| 111 | 116 | ||
| 112 | } | 117 | } |
| 113 | 118 |
src/app/components/popover-sinonimos/popover-sinonimos.component.html
| 1 | <div class="card-body fade-left"> | 1 | <div class="card-body fade-left"> |
| 2 | 2 | ||
| 3 | <div class="row m-0"> | 3 | <div class="row m-0"> |
| 4 | <div class="col text-left"> | 4 | <div class="col text-left"> |
| 5 | <p class="h4 card-title"> | 5 | <p class="h4 card-title"> |
| 6 | Personalice su pedido | 6 | Personalice su pedido |
| 7 | </p> | 7 | </p> |
| 8 | </div> | 8 | </div> |
| 9 | </div> | 9 | </div> |
| 10 | 10 | ||
| 11 | <div class="row m-0"> | ||
| 12 | <div class="col text-left"> | ||
| 13 | <p class="h5 card-title"> | ||
| 14 | Elija una opción | ||
| 15 | </p> | ||
| 16 | </div> | ||
| 17 | </div> | ||
| 18 | |||
| 19 | <div class="row m-0 overflow-scroll popover-size pr-2 my-2"> | 11 | <div class="row m-0 overflow-scroll popover-size pr-2 my-2"> |
| 20 | <div class="col"> | 12 | <div class="col"> |
| 21 | <div class="row" *ngFor="let sinonimo of popoverContent"> | 13 | <div class="row mb-2" *ngFor="let sinonimo of popoverContent"> |
| 22 | <div class="col pl-4 h6"> | 14 | <div class="col"> |
| 23 | <div class="custom-control custom-radio"> | 15 | |
| 24 | <input | 16 | <div class="row m-0"> |
| 25 | type="radio" | 17 | <div class="col text-left"> |
| 26 | [id]="sinonimo.id" | 18 | <p class="h5 card-title"> |
| 27 | name="sinonimoOpciones" | 19 | Elija una opción |
| 28 | class="custom-control-input" | 20 | </p> |
| 29 | (click)="setSinonimo(sinonimo)" | 21 | </div> |
| 30 | [checked]="sinonimo.esPadre"> | ||
| 31 | <label | ||
| 32 | class="font-weight-normal custom-control-label" | ||
| 33 | [for]="sinonimo.id"> | ||
| 34 | {{sinonimo.DetArt}} | ||
| 35 | </label> | ||
| 36 | </div> | 22 | </div> |
| 23 | |||
| 24 | <div class="row my-3 d-flex justify-content-between" *ngFor="let producto of sinonimo.productos"> | ||
| 25 | <div class="col-8 pl-4 h6 m-0"> | ||
| 26 | <div class="custom-control custom-radio"> | ||
| 27 | <input | ||
| 28 | type="radio" | ||
| 29 | [id]="producto.id" | ||
| 30 | [checked]="producto.esPadre" | ||
| 31 | name="sinonimoOpciones" | ||
| 32 | class="custom-control-input" | ||
| 33 | (click)="setSinonimo(sinonimo)"> | ||
| 34 | <label class="font-weight-normal custom-control-label" [for]="producto.id"> | ||
| 35 | {{producto.DetArt}} | ||
| 36 | </label> | ||
| 37 | </div> | ||
| 38 | </div> | ||
| 39 | <div class="col-auto"> | ||
| 40 | <div class="btn-group-sm btn-group float-left my-auto" role="group"> | ||
| 41 | <button type="button" class="btn btn-light btn-sm my-auto border"> | ||
| 42 | <i class="fa fa-plus" aria-hidden="true"></i> | ||
| 43 | </button> | ||
| 44 | <div class="bg-white border border-white px-3 my-auto text-dark h5"> | ||
| 45 | <small>{{producto.cantidad}}</small> | ||
| 46 | </div> | ||
| 47 | <button type="button" class="btn btn-light btn-sm my-auto border"> | ||
| 48 | <i class="fa fa-minus" aria-hidden="true"></i> | ||
| 49 | </button> | ||
| 50 | </div> | ||
| 51 | </div> | ||
| 52 | </div> | ||
| 53 | |||
| 37 | </div> | 54 | </div> |
src/app/components/popover-sinonimos/popover-sinonimos.component.ts
| 1 | import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core'; | 1 | import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core'; |
| 2 | import { PopoverDirective } from 'ngx-bootstrap'; | 2 | import { PopoverDirective } from 'ngx-bootstrap'; |
| 3 | import { Producto } from 'src/app/wrappers/producto'; | 3 | import { Producto } from 'src/app/wrappers/producto'; |
| 4 | import { Sinonimo } from 'src/app/wrappers/sinonimo'; | ||
| 4 | 5 | ||
| 5 | @Component({ | 6 | @Component({ |
| 6 | selector: 'app-popover-sinonimos', | 7 | selector: 'app-popover-sinonimos', |
| 7 | templateUrl: './popover-sinonimos.component.html', | 8 | templateUrl: './popover-sinonimos.component.html', |
| 8 | styleUrls: ['./popover-sinonimos.component.scss'] | 9 | styleUrls: ['./popover-sinonimos.component.scss'] |
| 9 | }) | 10 | }) |
| 10 | export class PopoverSinonimosComponent implements OnInit { | 11 | export class PopoverSinonimosComponent implements OnInit { |
| 11 | 12 | ||
| 12 | //Directiva del popover, para poder cerrarlo desde este componente | 13 | //Directiva del popover, para poder cerrarlo desde este componente |
| 13 | @Input() popover: PopoverDirective; | 14 | @Input() popover: PopoverDirective; |
| 14 | @Input() popoverContent: Producto[]; | 15 | @Input() popoverContent: Sinonimo[]; |
| 15 | @Output() sinonimoSeleccionado = new EventEmitter<Producto>(); | 16 | @Output() sinonimoSeleccionado = new EventEmitter<Sinonimo>(); |
| 16 | sinonimo: Producto; | 17 | sinonimo: Sinonimo; |
| 17 | 18 | ||
| 18 | constructor() { } | 19 | constructor() { } |
| 19 | 20 | ||
| 20 | ngOnInit() { | 21 | ngOnInit() { |
| 21 | 22 | ||
| 22 | //Seteo en la variable a emitir el sinonimo que sea padre | 23 | //Seteo en la variable a emitir el sinonimo que sea padre |
| 23 | this.popoverContent.forEach(sinonimo => { | 24 | this.popoverContent.forEach(sinonimo => { |
| 24 | this.sinonimo = sinonimo.esPadre ? sinonimo : undefined; | 25 | // this.sinonimo = sinonimo.esPadre ? sinonimo : undefined; |
| 25 | }) | 26 | }) |
| 26 | } | 27 | } |
| 27 | 28 | ||
| 28 | hidePopover() { | 29 | hidePopover() { |
| 29 | 30 | ||
| 30 | this.sinonimoSeleccionado.emit(this.sinonimo); | 31 | this.sinonimoSeleccionado.emit(this.sinonimo); |
| 31 | this.popover.hide(); | 32 | this.popover.hide(); |
| 32 | } | 33 | } |
| 33 | 34 | ||
| 34 | setSinonimo(sinonimo: Producto) { | 35 | setSinonimo(sinonimo: Sinonimo) { |
| 35 | 36 | ||
| 36 | this.sinonimo = sinonimo; | 37 | this.sinonimo = sinonimo; |
| 37 | } | 38 | } |
| 38 | 39 | ||
| 39 | } | 40 | } |
| 40 | 41 |
src/app/wrappers/sinonimo.ts
| File was created | 1 | import { Producto } from './producto'; | |
| 2 | |||
| 3 | export interface Sinonimo { | ||
| 4 | |||
| 5 | ID_SIN: number, | ||
| 6 | descripcion: string, | ||
| 7 | productos: Producto[], | ||
| 8 | } | ||
| 9 |
src/assets/scss/animation.scss
| 1 | .fade-in { | 1 | .fade-in { |
| 2 | margin-top: 25px; | 2 | margin-top: 25px; |
| 3 | font-size: 21px; | 3 | font-size: 21px; |
| 4 | text-align: center; | 4 | text-align: center; |
| 5 | animation: fadein 1s; | 5 | animation: fadein 1s; |
| 6 | -moz-animation: fadein 1s; /* Firefox */ | 6 | -moz-animation: fadein 1s; /* Firefox */ |
| 7 | -webkit-animation: fadein 1s; /* Safari and Chrome */ | 7 | -webkit-animation: fadein 1s; /* Safari and Chrome */ |
| 8 | -o-animation: fadein 1s; /* Opera */ | 8 | -o-animation: fadein 1s; /* Opera */ |
| 9 | } | 9 | } |
| 10 | 10 | ||
| 11 | @keyframes fadein { | 11 | @keyframes fadein { |
| 12 | from { | 12 | from { |
| 13 | opacity: 0; | 13 | opacity: 0; |
| 14 | } | 14 | } |
| 15 | to { | 15 | to { |
| 16 | opacity: 1; | 16 | opacity: 1; |
| 17 | } | 17 | } |
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | @-moz-keyframes fadein { | 20 | @-moz-keyframes fadein { |
| 21 | /* Firefox */ | 21 | /* Firefox */ |
| 22 | from { | 22 | from { |
| 23 | opacity: 0; | 23 | opacity: 0; |
| 24 | } | 24 | } |
| 25 | to { | 25 | to { |
| 26 | opacity: 1; | 26 | opacity: 1; |
| 27 | } | 27 | } |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | @-webkit-keyframes fadein { | 30 | @-webkit-keyframes fadein { |
| 31 | /* Safari and Chrome */ | 31 | /* Safari and Chrome */ |
| 32 | from { | 32 | from { |
| 33 | opacity: 0; | 33 | opacity: 0; |
| 34 | } | 34 | } |
| 35 | to { | 35 | to { |
| 36 | opacity: 1; | 36 | opacity: 1; |
| 37 | } | 37 | } |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | .fade-right { | 40 | .fade-right { |
| 41 | margin-top: 25px; | 41 | margin-top: 25px; |
| 42 | font-size: 21px; | 42 | font-size: 21px; |
| 43 | text-align: center; | 43 | text-align: center; |
| 44 | animation: faderight 1s; | 44 | animation: faderight 1s; |
| 45 | -moz-animation: faderight 1s; /* Firefox */ | 45 | -moz-animation: faderight 1s; /* Firefox */ |
| 46 | -webkit-animation: faderight 1s; /* Safari and Chrome */ | 46 | -webkit-animation: faderight 1s; /* Safari and Chrome */ |
| 47 | -o-animation: faderight 1s; /* Opera */ | 47 | -o-animation: faderight 1s; /* Opera */ |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | @keyframes faderight { | 50 | @keyframes faderight { |
| 51 | from { | 51 | from { |
| 52 | opacity: 0; | 52 | opacity: 0; |
| 53 | transform: translateX(-20px); | 53 | transform: translateX(-20px); |
| 54 | } | 54 | } |
| 55 | to { | 55 | to { |
| 56 | opacity: 1; | 56 | opacity: 1; |
| 57 | transform: translateX(0); | 57 | transform: translateX(0); |
| 58 | } | 58 | } |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | @-moz-keyframes faderight { | 61 | @-moz-keyframes faderight { |
| 62 | /* Firefox */ | 62 | /* Firefox */ |
| 63 | from { | 63 | from { |
| 64 | opacity: 0; | 64 | opacity: 0; |
| 65 | -moz-transform: translateX(-20px); | 65 | -moz-transform: translateX(-20px); |
| 66 | } | 66 | } |
| 67 | to { | 67 | to { |
| 68 | opacity: 1; | 68 | opacity: 1; |
| 69 | -moz-transform: translateX(0); | 69 | -moz-transform: translateX(0); |
| 70 | } | 70 | } |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | @-webkit-keyframes faderight { | 73 | @-webkit-keyframes faderight { |
| 74 | /* Safari and Chrome */ | 74 | /* Safari and Chrome */ |
| 75 | from { | 75 | from { |
| 76 | opacity: 0; | 76 | opacity: 0; |
| 77 | -webkit-transform: translateX(-20px); | 77 | -webkit-transform: translateX(-20px); |
| 78 | } | 78 | } |
| 79 | to { | 79 | to { |
| 80 | opacity: 1; | 80 | opacity: 1; |
| 81 | -webkit-transform: translateX(0); | 81 | -webkit-transform: translateX(0); |
| 82 | } | 82 | } |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | .fade-left { | 85 | .fade-left { |
| 86 | 86 | -webkit-animation: fadeleft 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; | |
| 87 | -webkit-animation: fadeleft .5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; | 87 | animation: fadeleft 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; |
| 88 | animation: fadeleft .5s cubic-bezier(0.25, 0.46, 0.45, 0.94) both; | ||
| 89 | } | 88 | } |
| 90 | 89 | ||
| 91 | @-webkit-keyframes fadeleft { | 90 | @-webkit-keyframes fadeleft { |
| 92 | 0% { | 91 | 0% { |
| 93 | -webkit-transform: scaleX(0); | 92 | -webkit-transform: scaleX(0); |
| 94 | transform: scaleX(0); | 93 | transform: scaleX(0); |
| 95 | -webkit-transform-origin: 100% 100%; | 94 | -webkit-transform-origin: 100% 100%; |
| 96 | transform-origin: 100% 100%; | 95 | transform-origin: 100% 100%; |
| 97 | opacity: 1; | 96 | opacity: 1; |
| 98 | } | 97 | } |
| 99 | 100% { | 98 | 100% { |
| 100 | -webkit-transform: scaleX(1); | 99 | -webkit-transform: scaleX(1); |
| 101 | transform: scaleX(1); | 100 | transform: scaleX(1); |
| 102 | -webkit-transform-origin: 100% 100%; | 101 | -webkit-transform-origin: 100% 100%; |
| 103 | transform-origin: 100% 100%; | 102 | transform-origin: 100% 100%; |
| 104 | opacity: 1; | 103 | opacity: 1; |
| 105 | } | 104 | } |
| 106 | } | 105 | } |
| 107 | 106 | ||
| 108 | @keyframes fadeleft { | 107 | @keyframes fadeleft { |
| 109 | 0% { | 108 | 0% { |
| 110 | -webkit-transform: scaleX(0); | 109 | -webkit-transform: scaleX(0); |
| 111 | transform: scaleX(0); | 110 | transform: scaleX(0); |
| 112 | -webkit-transform-origin: 100% 100%; | 111 | -webkit-transform-origin: 100% 100%; |
| 113 | transform-origin: 100% 100%; | 112 | transform-origin: 100% 100%; |
| 114 | opacity: 1; | 113 | opacity: 1; |
| 115 | } | 114 | } |
| 116 | 100% { | 115 | 100% { |
| 117 | -webkit-transform: scaleX(1); | 116 | -webkit-transform: scaleX(1); |
| 118 | transform: scaleX(1); | 117 | transform: scaleX(1); |
| 119 | -webkit-transform-origin: 100% 100%; | 118 | -webkit-transform-origin: 100% 100%; |
| 120 | transform-origin: 100% 100%; | 119 | transform-origin: 100% 100%; |
| 121 | opacity: 1; | 120 | opacity: 1; |
| 122 | } | 121 | } |
| 123 | } | 122 | } |
| 123 | |||
| 124 | .fade-bottom { | ||
| 125 | -webkit-animation: fade-top 0.4s cubic-bezier(0.39, 0.575, 0.565, 1) both; | ||
| 126 | animation: fade-top 0.4s cubic-bezier(0.39, 0.575, 0.565, 1) both; | ||
| 127 | } | ||
| 128 | |||
| 129 | @-webkit-keyframes fade-top { | ||
| 130 | 0% { | ||
| 131 | -webkit-transform: scaleY(0.4); | ||
| 132 | transform: scaleY(0.4); | ||
| 133 | -webkit-transform-origin: 100% 0%; | ||
| 134 | transform-origin: 100% 0%; | ||
| 135 | } | ||
| 136 | 100% { | ||
| 137 | -webkit-transform: scaleY(1); | ||
| 138 | transform: scaleY(1); | ||
| 139 | -webkit-transform-origin: 100% 0%; | ||
| 140 | transform-origin: 100% 0%; | ||
| 141 | } | ||
| 142 | } | ||
| 143 | |||
| 144 | @keyframes fade-top { | ||
| 145 | 0% { | ||
| 146 | -webkit-transform: scaleY(0.4); | ||
| 147 | transform: scaleY(0.4); | ||
| 148 | -webkit-transform-origin: 100% 0%; | ||
| 149 | transform-origin: 100% 0%; | ||
| 150 | } | ||
| 151 | 100% { | ||
| 152 | -webkit-transform: scaleY(1); | ||
| 153 | transform: scaleY(1); | ||
| 154 | -webkit-transform-origin: 100% 0%; | ||
| 155 | transform-origin: 100% 0%; | ||
| 156 | } | ||
| 157 | } |