123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- import { hexToRgb } from './utils';
- import { removeClass, getTopMargin, fadeIn, show, addClass } from './handle-dom';
- import defaultParams from './default-params';
- var modalClass = '.sweet-alert';
- var overlayClass = '.sweet-overlay';
- /*
- * Add modal + overlay to DOM
- */
- import injectedHTML from './injected-html';
- var sweetAlertInitialize = function() {
- var sweetWrap = document.createElement('div');
- sweetWrap.innerHTML = injectedHTML;
- // Append elements to body
- while (sweetWrap.firstChild) {
- document.body.appendChild(sweetWrap.firstChild);
- }
- };
- /*
- * Get DOM element of modal
- */
- var getModal = function() {
- var $modal = document.querySelector(modalClass);
- if (!$modal) {
- sweetAlertInitialize();
- $modal = getModal();
- }
- return $modal;
- };
- /*
- * Get DOM element of input (in modal)
- */
- var getInput = function() {
- var $modal = getModal();
- if ($modal) {
- return $modal.querySelector('input');
- }
- };
- /*
- * Get DOM element of overlay
- */
- var getOverlay = function() {
- return document.querySelector(overlayClass);
- };
- /*
- * Add box-shadow style to button (depending on its chosen bg-color)
- */
- var setFocusStyle = function($button, bgColor) {
- var rgbColor = hexToRgb(bgColor);
- $button.style.boxShadow = '0 0 2px rgba(' + rgbColor + ', 0.8), inset 0 0 0 1px rgba(0, 0, 0, 0.05)';
- };
- /*
- * Animation when opening modal
- */
- var openModal = function(callback) {
- var $modal = getModal();
- fadeIn(getOverlay(), 10);
- show($modal);
- addClass($modal, 'showSweetAlert');
- removeClass($modal, 'hideSweetAlert');
- window.previousActiveElement = document.activeElement;
- var $okButton = $modal.querySelector('button.confirm');
- $okButton.focus();
- setTimeout(function () {
- addClass($modal, 'visible');
- }, 500);
- var timer = $modal.getAttribute('data-timer');
- if (timer !== 'null' && timer !== '') {
- var timerCallback = callback;
- $modal.timeout = setTimeout(function() {
- var doneFunctionExists = ((timerCallback || null) && $modal.getAttribute('data-has-done-function') === 'true');
- if (doneFunctionExists) {
- timerCallback(null);
- }
- else {
- sweetAlert.close();
- }
- }, timer);
- }
- };
- /*
- * Reset the styling of the input
- * (for example if errors have been shown)
- */
- var resetInput = function() {
- var $modal = getModal();
- var $input = getInput();
- removeClass($modal, 'show-input');
- $input.value = defaultParams.inputValue;
- $input.setAttribute('type', defaultParams.inputType);
- $input.setAttribute('placeholder', defaultParams.inputPlaceholder);
- resetInputError();
- };
- var resetInputError = function(event) {
- // If press enter => ignore
- if (event && event.keyCode === 13) {
- return false;
- }
- var $modal = getModal();
- var $errorIcon = $modal.querySelector('.sa-input-error');
- removeClass($errorIcon, 'show');
- var $errorContainer = $modal.querySelector('.sa-error-container');
- removeClass($errorContainer, 'show');
- };
- /*
- * Set "margin-top"-property on modal based on its computed height
- */
- var fixVerticalPosition = function() {
- var $modal = getModal();
- $modal.style.marginTop = getTopMargin(getModal());
- };
- export {
- sweetAlertInitialize,
- getModal,
- getOverlay,
- getInput,
- setFocusStyle,
- openModal,
- resetInput,
- resetInputError,
- fixVerticalPosition
- };
|