Skip to content

Instantly share code, notes, and snippets.

@dsternlicht
dsternlicht / App.vue
Last active November 27, 2018 14:53
Vue app component
<template>
<div id="app">
<button class="modal_opener" v-on:click="toggleModal()">
Click Me! I Don't Bite... <span role="img" aria-label="emoji">😛</span>
</button>
<Modal
v-bind="{ closeCallback: toggleModal, show, customClass: 'custom_modal_class'}"
>
<h2>Told Ya!</h2>
@dsternlicht
dsternlicht / modal.component.ts
Last active November 27, 2018 14:59
Angular modal component
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'app-modal',
templateUrl: './modal.component.html',
styleUrls: ['./modal.component.css']
})
export class ModalComponent implements OnInit {
@Input() show = false;
@Input() customClass = '';
@dsternlicht
dsternlicht / modal.component.html
Last active November 27, 2018 15:00
Angular modal component html
<div [ngClass]="customClass || ''" class="modal" [ngStyle]="{display: show ? 'block' : 'none'}">
<div class="overlay" (click)="closeCallback()"></div>
<div class="modal_content">
<ng-content></ng-content>
<button title="Close" class="close_modal" (click)="closeCallback()">
<i class="fas fa-times"></i>
</button>
</div>
</div>
@dsternlicht
dsternlicht / app.component.ts
Last active November 27, 2018 14:56
Angular app component
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'modal-app';
showModal = false;
@dsternlicht
dsternlicht / app.component.html
Last active November 27, 2018 14:56
Angular app component html
<div class="app">
<button class="modal_opener" (click)="toggleModal()">
Click Me! I Don't Bite... <span role="img" aria-label="emoji">😛</span>
</button>
<app-modal
[show]="showModal"
[customClass]="'custom_modal_class'"
[closeCallback]="toggleModal"
>
@dsternlicht
dsternlicht / app.js
Last active November 27, 2018 15:00
Using the React Modal component
import React, { Component } from 'react';
import Modal from './modal/modal';
import './app.css';
class App extends Component {
state = {
showModal: false
}
@dsternlicht
dsternlicht / modal.js
Last active November 27, 2018 14:58
React Modal component
import React from 'react';
import PropTypes from 'prop-types';
import './modal.css';
const Modal = ({ children, customClass, show, closeCallback }) => (
<div className={`modal ${customClass}`} style={{ display: show ? 'block' : 'none'}}>
<div className="overlay" onClick={closeCallback}></div>
<div className="modal_content">
{children}
@dsternlicht
dsternlicht / modal.js
Last active November 27, 2018 15:01
Main script of our vanilla JS popup
var btn = document.getElementById('modal_opener');
var modal = document.querySelector('.modal');
function attachModalListeners(modalElm) {
modalElm.querySelector('.close_modal').addEventListener('click', toggleModal);
modalElm.querySelector('.overlay').addEventListener('click', toggleModal);
}
function detachModalListeners(modalElm) {
modalElm.querySelector('.close_modal').removeEventListener('click', toggleModal);
@dsternlicht
dsternlicht / index.html
Last active November 27, 2018 15:01
Complete HTML for our vanilla modal component
<html>
<head>
<title>Vanilla Modal</title>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">
<!-- CSS Import -->
<link rel="stylesheet" href="style.css" />
</head>
<body>
<!-- Clicking this button will open the modal -->
<button id="modal_opener">Click Me! I Don't Bite... 😛</button>
@dsternlicht
dsternlicht / index.html
Last active November 27, 2018 15:02
HTML Mock for our vanilla modal component
<div class="modal" style="display: none">
<div class="overlay"></div>
<div class="modal_content">
<!-- Dynamic Section -->
<h2>Told Ya!</h2>
<iframe src="https://giphy.com/embed/l52CGyJ4LZPa0" width="480" height="273" frameBorder="0" class="giphy-embed" allowFullScreen></iframe><p><a href="https://giphy.com/gifs/sandler-sentences-sounding-l52CGyJ4LZPa0">via GIPHY</a></p>
<!-- End of Dynamic Section -->
<button title="Close" class="close_modal">
<i class="fas fa-times"></i>
</button>