diff --git a/assets/core/core.js b/assets/core/core.js index a6f49d2..d0dcd27 100644 --- a/assets/core/core.js +++ b/assets/core/core.js @@ -616,6 +616,7 @@ window.kit.service = window.kit.service || {}; * @class kitConfig */ var defaultConfig = { + version: '1.10', assetsPath: '', requiredDependencies: [], autoloadPluginList: [], diff --git a/assets/core/core.register.js b/assets/core/core.register.js index a7611e1..d6fa61c 100644 --- a/assets/core/core.register.js +++ b/assets/core/core.register.js @@ -69,7 +69,7 @@ __PluginManager__.registerPlugins({ module: '/tooltip.js', type: 'loader', css: '/tooltip.css', - onInstall: function(){ + onInstall: function(plugin){ var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { return new __pmGlobal__.Tooltip(tooltipTriggerEl, {sanitize: false}); @@ -82,8 +82,13 @@ __PluginManager__.registerPlugins({ module: '/tooltip2.js', type: 'loader', css: '/tooltip2.css', - onInstall: function(){ - + onInstall: function(plugin){ + var elements = [].slice.call(document.querySelectorAll('[data-kit-tooltip2="autoload"]')); + elements.map(function (element) { + var tooltip = new __pmGlobal__.Tooltip2(element); + tooltip.run(); + console.log(tooltip); + }); }, deps: ['Viewer', 'support', 'ActionCollection', 'Action', 'userAction', 'align', 'Collection', 'animations'], }, diff --git a/assets/support/support.js b/assets/support/support.js index d20c45a..df72886 100644 --- a/assets/support/support.js +++ b/assets/support/support.js @@ -3,6 +3,81 @@ __PluginManager__.register('support', function(module, exports, require, global) window.pre = console.log; + + var data = function(){ + function normalizeData(val) { + if (val === 'true') { + return true + } + + if (val === 'false') { + return false + } + + if (val === Number(val).toString()) { + return Number(val) + } + + if (val === '' || val === 'null') { + return null + } + + return val + } + + function normalizeDataKey(key) { + return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`); + } + + const manipulator = { + set(element, key, value, prefix = 'kit') { + if(prefix !== '') { + prefix = '-' + prefix; + } + element.setAttribute(`data${prefix}-${normalizeDataKey(key)}`, value) + }, + + remove(element, key, prefix = 'kit') { + if(prefix !== '') { + prefix = '-' + prefix; + } + element.removeAttribute(`data${prefix}-${normalizeDataKey(key)}`) + }, + + getList(element, prefix = 'kit') { + element = getNode(element); + + if (!element) { + return {}; + } + + const attributes = {}; + + Object.keys(element.dataset) + .filter(key => key.startsWith(prefix)) + .forEach(key => { + var regex = new RegExp(`^${prefix}`, ''); + var pureKey = key.replace(regex, ''); + pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); + if(pureKey !== '') { + attributes[pureKey] = normalizeData(element.dataset[key]) + } + }); + + return attributes + }, + + get(element, key, prefix = 'kit') { + if(prefix !== '') { + prefix = '-' + prefix; + } + return normalizeData(element.getAttribute(`data${prefix}-${normalizeDataKey(key)}`)) + }, + }; + return manipulator; + }(); + + var node = { isRelate: function (node, container = document) { return node === container || container.contains(node); @@ -68,6 +143,7 @@ __PluginManager__.register('support', function(module, exports, require, global) function isNumber(value) { return !Number.isNaN(value) && isFinite(value) && typeof value === 'number'; } + function isArray(value) { return Array.isArray(value);} /** * @return {number} */ @@ -160,12 +236,58 @@ __PluginManager__.register('support', function(module, exports, require, global) node.kit = node.kit || {}; node.kit[key] = value; } - function getNodeData(node, key) { - if(!isElement(node)) return null; - if(node.hasOwnProperty('kit') && node.kit.hasOwnProperty(key)) { - return node.kit[key]; + function setObjProp(object, branch, value) { + if(!Array.isArray(branch)) { + branch = [branch]; } - return null; + if(!isObject(object)) return false; + var i = 0, obj = {}, result = true; + obj[i] = object; + branch.forEach(function (key) { + if(!result) { + return; + } + ++i; + if(i === branch.length) { + obj[i-1][key] = value; + return; + } + obj[i-1][key] = obj[i-1][key] || {}; + result = isObject(obj[i-1][key]); + obj[i] = obj[i-1][key]; + }); + return result; + } + function getInstanceData(node, key, def = null) { + if(!Array.isArray(key)) { + key = [key]; + } + var branch = ['kit'].concat(key); + return getObjProp(node, branch, def); + } + + function getObjProp(object, branch, def = null) { + if(!Array.isArray(branch)) { + branch = [branch]; + } + if(!isObject(object)) return null; + var i = 0, obj = {}, result = true; + obj[i] = object; + branch.forEach(function (key) { + if(!result) { + return; + } + ++i; + if(!isObject(obj[i-1]) || !obj[i-1].hasOwnProperty(key)) { + result = false; + return; + } + obj[i] = obj[i-1][key]; + }); + if(result) { + return obj[i]; + } + return def; } function definePropertyGet(obj, key, val) { Object.defineProperty(obj, key, { @@ -203,7 +325,7 @@ __PluginManager__.register('support', function(module, exports, require, global) function insertAfter(newNode, referenceNode) { referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); } - function tagName(node, tagName) { + function setTagName(node, tagName) { if(!tagName) { return null; } @@ -229,6 +351,15 @@ __PluginManager__.register('support', function(module, exports, require, global) return result; } + function toString(value) { + return String(value); + } + + function getDataOptions(node, pluginId, prefix = 'kit') { + node = getNode(node); + node.getAttribute('') + } + /** * @memberOf kit */ @@ -258,7 +389,11 @@ __PluginManager__.register('support', function(module, exports, require, global) args2array, innerHtml, makeNodeList, - tagName + setTagName, + tagName: setTagName, + data, + setObjProp, + getObjProp }; return module.exports = support; diff --git a/assets/tooltip2/tooltip2.js b/assets/tooltip2/tooltip2.js index 17f4b03..756e8ad 100644 --- a/assets/tooltip2/tooltip2.js +++ b/assets/tooltip2/tooltip2.js @@ -10,6 +10,7 @@ kit.PluginManager.register('Tooltip2',function(module, exports, require, global) var align = require('align'); var animations = require('animations'); + const PLUGIN_PREFIX = 'kit'; const PLUGIN_NAME = 'tooltip2'; /** @@ -21,6 +22,8 @@ kit.PluginManager.register('Tooltip2',function(module, exports, require, global) hDirection: 'center', vDirection: 'top', offset: 10, + contentSelector: '.tooltip-inner', + content: '', template: '