@miraidesigns/modal

1.0.0 • Public • Published

Modal

Modal allows you to display any kind of content in a modal popup.
Requires the Button, Elements and Helpers module for proper appearance.


HTML

<div class="mdf-modal" aria-modal="true">
    <div class="mdf-modal__content">
        <!-- Your content here -->
    </div>

    <button class="mdf-button mdf-button--icon mdf-modal__close" aria-label="Close modal">
        <svg class="mdf-icon" viewBox="0 0 24 24" aria-hidden="true">
            <use href="./assets/images/icons.svg#clear"></use>
        </svg>
    </button>

    <div class="mdf-modal__backdrop"></div>
</div>

Sass

// Include default styles without configuration
@forward '@miraidesigns/modal/styles';
// Configure appearance
@use '@miraidesigns/modal' with (
    $variable: value
);

@include modal.styles();

TypeScript

import { MDFModal } from '@miraidesigns/modal';

const modal = new MDFModal(document.querySelector('.mdf-modal'));
modal.open();

Examples

Dynamic content

Its very easy to add content to the modal.
In the example below we will create a baby Lightbox.

import { MDFModal } from '@miraidesigns/modal';

const modal = new MDFModal(document.querySelector('.mdf-modal'));

// Here we loop through our hypothetical list of image links.
for (const link of document.querySelectorAll('a.img-link')) {
    // We listen for the click event.
    link.addEventListener('click', (evt: MouseEvent) => {
        // Prevent the default link behavior.
        evt.preventDefault();
    
        // The link's `href` attribute holds the URL to our image file.
        const src = (link as HTMLLinkElement).href;

        // Now we simply insert an `<img>` tag with our `src`.
        modal.insertHTML(`<img src="${src}">`);

        // And open the modal.
        modal.open();
    });
}

Requests

You may request content from a different URL to populate the modal.

HTML

<div class="mdf-modal" aria-modal="true">
    <div class="mdf-modal__content mdf-modal__content--padded">
        <div class="mdf-modal__loading"></div>
    </div>

    <button class="mdf-button mdf-button--icon mdf-modal__close" aria-label="Close modal">
        <svg class="mdf-icon" viewBox="0 0 24 24" aria-hidden="true">
            <use href="./assets/images/icons.svg#clear"></use>
        </svg>
    </button>

    <div class="mdf-modal__backdrop"></div>
</div>

TypeScript

import { MDFModal } from '@miraidesigns/modal';

const modal = new MDFModal(document.querySelector('.mdf-modal'));

// Open the request for the given URL.
modal.openRequest('example.org');

// Set any headers if you need to.
modal.setRequestHeader('Content-Type', 'text/html');

// Finally we request the element we need with a CSS selector.
modal.requestContent('.example');

Implementation

Classes

Name Type Description
mdf-modal Parent Contains the modal content and backdrop
mdf-modal--active Modifier 1. Prepares the modal to be visible
mdf-modal--fade-in Modifier 2. Fades-in the modal and allows for interaction
mdf-modal__content Parent/Child Content container. Child to .mdf-modal
mdf-modal__content--padded Modifier Add padding to the content
mdf-modal__close Child Closes the modal. Child to .mdf-modal
mdf-modal__backdrop Child Modal backdrop. Child to .mdf-modal

Events

Name Data Description
MDFModal:closed null Fires when the modal closes
MDFModal:load null Fires when the requested modal content is ready
MDFModal:open null Fires when the modal opens

Properties

Name Type Description
.container HTMLElement Returns the modal container element
.request XMLHttpRequest Returns the current request
.timeout number Get or set the request timeout value
.readyState number Get the request readyState
.open() (): void Open the modal
.close() (): void Close the modal
.append(elem) (Element): void Add the given element to the modal content
.insertHTML(html) (string): void Insert the given string of HTML into the modal content
.openRequest(url) (string): void Open the request for the given URL
.setRequestHeader(header, value) (string, string): void Add header to the request. May be called repeatedly to add multiple headers
.requestContent(selector) (string): void Request the element with the given selector from the opened URL
.on(type, listener, options?) (string, EventListenerOrEventListenerObject, AddEventListenerOptions): void Listen to Modal specific events. Allowed values are load open close.

Package Sidebar

Install

npm i @miraidesigns/modal

Weekly Downloads

1

Version

1.0.0

License

ISC

Unpacked Size

24.9 kB

Total Files

8

Last publish

Collaborators

  • miraidesigns