diff --git a/assets/bsToast/bsToast.css b/assets/bsToast/bsToast.css index dff6550..d3fef82 100644 --- a/assets/bsToast/bsToast.css +++ b/assets/bsToast/bsToast.css @@ -28,6 +28,13 @@ margin-bottom: 0.75rem; } +.toast-title { + margin-right: auto; +} +.toast-desc {} +.toast-icon { + +} .toast-header { display: flex; align-items: center; diff --git a/assets/bsToastService/bsToastService.css b/assets/bsToastService/bsToastService.css new file mode 100644 index 0000000..1ac775a --- /dev/null +++ b/assets/bsToastService/bsToastService.css @@ -0,0 +1,8 @@ + +.toast-container--default { + z-index: 10000; + position: fixed!important; + bottom: 0!important; + right: 0!important; + padding: 1rem !important; +} \ No newline at end of file diff --git a/assets/bsToastService/bsToastService.js b/assets/bsToastService/bsToastService.js new file mode 100644 index 0000000..8670798 --- /dev/null +++ b/assets/bsToastService/bsToastService.js @@ -0,0 +1,78 @@ +/** @module bsToastService */ +kit.PluginManager.register('bsToastService', function(module, exports, require, global){ + var support = require('support'); + var bsToast = require('bsToast'); + var Collection = require('Collection'); + + + function Service() { + this.close = true; + this.option = { + animation: true, + autohide: true, + delay: 4000, + }; + this.closeTemplate = ''; + this.iconTemplate = ''; + /** + * @type {HTMLElement} + */ + this.container = null; + this.onShow = new Collection(); + } + + + Service.prototype.setContainer = function (parentNode = document.body, opClass = 'default') { + parentNode = support.getNode(parentNode); + if(opClass) { + opClass = 'toast-container--'+opClass; + } + + var opClassSelector = (opClass !== '')?('.'+opClass):''; + var container = parentNode.querySelector('.toast-container'+opClassSelector); + if(container) { + this.container = container; + return; + } + + var toastContainerTemplate = '
'; + this.container = support.makeNode(toastContainerTemplate); + if(support.isElement(parentNode)) { + parentNode.appendChild(this.container); + } + }; + + + Service.prototype.getToastNode = function (title, message, desc = '') { + var closeTemplate = this.close?this.closeTemplate:''; + var toastTemplate = ''; + return support.makeNode(toastTemplate); + }; + + Service.prototype.info = function (title, message, desc = '') { + var toastNode = this.getToastNode(title, message, desc); + var toast = new bsToast(toastNode, this.option); + toast.data = { + title: title, + message: message, + desc: desc, + date: new Date() + }; + support.setKit(toastNode, 'toast', toast); + this.container.appendChild(toastNode); + toast.show(); + this.onShow.eachCall(this, toast, toastNode); + }; + + + /** + * @memberOf kit.service + * @class toast + **/ + var toast = new Service(); + toast.setContainer(); + + global.service.toast = toast; + + module.exports = toast; +}); diff --git a/assets/core/core.js b/assets/core/core.js index 9724246..1bc6432 100644 --- a/assets/core/core.js +++ b/assets/core/core.js @@ -3,6 +3,7 @@ * @extends kitCorePlugins */ window.kit = window.kit || {}; +window.kit.service = window.kit.service || {}; (function(global){ var stateList = { undefined: 0, @@ -463,6 +464,8 @@ window.kit = window.kit || {}; return module.exports; }; + + __proto.depsCorrection = function(deps){ if(!Array.isArray(deps) ) { deps = [deps]; diff --git a/assets/core/core.register.js b/assets/core/core.register.js index 98916f8..459aa2c 100644 --- a/assets/core/core.register.js +++ b/assets/core/core.register.js @@ -54,6 +54,15 @@ __PluginManager__.registerPlugins({ ], deps: ['bsCore'], }, + bsToastService: { + path: __pmConfig__.assetsPath + '/bsToastService', + module: '/bsToastService.js', + type: 'loader', + css: [ + '/bsToastService.css' + ], + deps: ['bsToast', 'support', 'Collection'], + }, Tooltip: { path: __pmConfig__.assetsPath + '/tooltip', module: '/tooltip.js', diff --git a/assets/core/doc.js b/assets/core/doc.js index 8e6c0ba..a84cef7 100644 --- a/assets/core/doc.js +++ b/assets/core/doc.js @@ -12,7 +12,6 @@ * @property {kitPluginManagerRequire} require * @property {kitToolkit} toolkit * @property {kitModal} Modal - * @property {kitCookie} cookie * @property {kitConfig} config * @property {kitTooltip} tooltip * @property {kitPopover} Popover diff --git a/assets/support/support.js b/assets/support/support.js index 0a1e7c6..ee6e78b 100644 --- a/assets/support/support.js +++ b/assets/support/support.js @@ -89,7 +89,7 @@ __PluginManager__.register('support', function(module, exports, require, global) * @return Element */ function getNode(selector) { - if(isString(selector)) { + if(isString(selector) && selector !== '') { return document.querySelector(selector); } if(isNode(selector) || isElement(selector)) { @@ -115,7 +115,25 @@ __PluginManager__.register('support', function(module, exports, require, global) function isA(o,c){ return null!=c&&"undefined"!=typeof Symbol&&c[Symbol.hasInstance]?!!c[Symbol.hasInstance](o):o instanceof c } - + function makeNode(html = '') { + var nodeWrap = document.createElement('div'); + nodeWrap.innerHTML = html; + var r = nodeWrap.firstElementChild; + r.remove(); + return r; + } + function setKit(node, key, value) { + if(!isElement(node)) return false; + node.kit = node.kit || {}; + node.kit[key] = value; + } + function getKit(node, key) { + if(!isElement(node)) return null; + if(node.hasOwnProperty('kit') && node.kit.hasOwnProperty(key)) { + return node.kit[key]; + } + return null; + } /** * @memberOf kit @@ -137,7 +155,10 @@ __PluginManager__.register('support', function(module, exports, require, global) isElement, getNode, extend, - isA + isA, + makeNode, + setKit, + getKit }; return module.exports = support; diff --git a/tests/bsToastsTest.php b/tests/bsToastsTest.php index ab72b6e..d7105e6 100644 --- a/tests/bsToastsTest.php +++ b/tests/bsToastsTest.php @@ -16,44 +16,23 @@ $APPLICATION->ShowHead(); ?>