xiaowang/kirby/panel/dist/js/plugins.js
2022-03-22 15:39:39 +01:00

75 lines
1.7 KiB
JavaScript

window.panel = window.panel || {};
window.panel.plugins = {
components: {},
created: [],
icons: {},
routes: [],
use: [],
views: {},
thirdParty: {}
};
window.panel.plugin = function (plugin, parts) {
// Blocks
resolve(parts, "blocks", function (name, options) {
if (typeof options === "string") {
options = { template: options };
}
window.panel.plugins.components[`k-block-type-${name}`] = {
extends: "k-block-type",
...options
};
});
// Components
resolve(parts, "components", function (name, options) {
window.panel.plugins.components[name] = options;
});
// Fields
resolve(parts, "fields", function (name, options) {
window.panel.plugins.components[`k-${name}-field`] = options;
});
// Icons
resolve(parts, "icons", function (name, options) {
window.panel.plugins.icons[name] = options;
});
// Sections
resolve(parts, "sections", function (name, options) {
window.panel.plugins.components[`k-${name}-section`] = {
...options,
mixins: ["section", ...(options.mixins || [])]
};
});
// `Vue.use`
resolve(parts, "use", function (name, options) {
window.panel.plugins.use.push(options);
});
// Vue `created` callback
if (parts["created"]) {
window.panel.plugins.created.push(parts["created"]);
}
// Login
if (parts.login) {
window.panel.plugins.login = parts.login;
}
// Third-party plugins
resolve(parts, "thirdParty", function (name, options) {
window.panel.plugins.thirdParty[name] = options;
});
};
function resolve(object, type, callback) {
if (object[type]) {
for (const [name, options] of Object.entries(object[type])) {
callback(name, options);
}
}
}