diff --git a/scss/_logger.scss b/scss/_logger.scss new file mode 100644 index 000000000..bc2da384a --- /dev/null +++ b/scss/_logger.scss @@ -0,0 +1,57 @@ +.logger-toast { + border-radius: 0.5em; + box-shadow: 0 0 8px #888; + padding: 1em; + right: 0; + left: 0; + margin-right: auto; + margin-left: auto; + text-align: center; + position: fixed; + z-index: 999; + display: inline-block; + max-width: 90%; + bottom: 2.5rem; +} + +.logger-primary { + fill: #084298; + color: #084298; + background-color: #cfe2ff; + border-color: #b6d4fe; +} + +.logger-success { + fill: #0f5132; + color: #0f5132; + background-color: #d1e7dd; + border-color: #badbcc; +} + +.logger-info { + fill: #055160; + color: #055160; + background-color: #cff4fc; + border-color: #b6effb; +} + +.logger-warning { + fill: #664d03; + color: #664d03; + background-color: #fff3cd; + border-color: #ffecb5; +} + +.logger-danger { + fill: #842029; + color: #842029; + background-color: #f8d7da; + border-color: #f5c2c7; +} + +.logger-light { + fill: #636464; + color: #636464; + background-color: #fefefe; + border-color: #fdfdfe; +} \ No newline at end of file diff --git a/scss/origo.scss b/scss/origo.scss index adef8d848..3b2003b57 100644 --- a/scss/origo.scss +++ b/scss/origo.scss @@ -49,6 +49,7 @@ @import 'scalepicker'; @import 'embedded-overlay'; @import 'spinner'; + @import 'logger'; } html, diff --git a/src/components/logger.js b/src/components/logger.js new file mode 100644 index 000000000..4b603de2b --- /dev/null +++ b/src/components/logger.js @@ -0,0 +1,109 @@ +import { Icon, Component, Modal } from '../ui'; + +let viewer; +let defaults = { + toast: { + status: 'light', + title: 'Meddelande', + duration: 5000 + }, + modal: { + status: 'light', + title: 'Meddelande', + duration: 0 + } +}; + +function getClass(status) { + let cls; + if (status === 'primary') { + cls = 'logger-primary'; + } else if (status === 'success') { + cls = 'logger-success'; + } else if (status === 'info') { + cls = 'logger-info'; + } else if (status === 'warning') { + cls = 'logger-warning'; + } else if (status === 'danger') { + cls = 'logger-danger'; + } else { + cls = 'logger-light'; + } + return cls; +} + +const createModal = function createModal(options) { + const modalSettings = { ...defaults.modal, ...options }; + const { + title = '', + message = '', + duration, + status + } = modalSettings; + const contentCls = getClass(status); + + let modal = Modal({ + title, + content: message, + target: viewer.getId(), + contentCls + }); + + if (duration && duration > 0) { + setTimeout(() => { + modal.closeModal(); + modal = null; + }, duration); + } +}; + +const createToast = function createToast(options = {}) { + const toastSettings = { ...defaults.toast, ...options }; + const { + status, + duration, + icon, + title = '', + message = '' + } = toastSettings; + + const contentCls = getClass(status); + const toast = document.createElement('div'); + const parentElement = document.getElementById(viewer.getId()); + parentElement.appendChild(toast); + toast.classList.add('logger-toast'); + toast.classList.add(contentCls); + + const content = ` +