87 lines
3.2 KiB
JavaScript
87 lines
3.2 KiB
JavaScript
|
|
/* LikeC4 Webcomponent Loader for Hugo/Docsy */
|
||
|
|
(function() {
|
||
|
|
'use strict';
|
||
|
|
|
||
|
|
// Check if the component is already loaded
|
||
|
|
if (customElements.get('likec4-view')) {
|
||
|
|
console.log('LikeC4 component already loaded');
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Function to dynamically import the ES6 module
|
||
|
|
function loadLikeC4Module() {
|
||
|
|
// Try different possible paths for the webcomponent
|
||
|
|
const possiblePaths = [
|
||
|
|
// Absolute Hugo paths (most likely to work)
|
||
|
|
'/js/likec4-webcomponent.js',
|
||
|
|
// Relative paths from current page
|
||
|
|
'../js/likec4-webcomponent.js',
|
||
|
|
'../../js/likec4-webcomponent.js',
|
||
|
|
'../../../js/likec4-webcomponent.js',
|
||
|
|
// Fallback paths
|
||
|
|
'./js/likec4-webcomponent.js',
|
||
|
|
'js/likec4-webcomponent.js'
|
||
|
|
];
|
||
|
|
|
||
|
|
let pathIndex = 0;
|
||
|
|
|
||
|
|
function tryNextPath() {
|
||
|
|
if (pathIndex >= possiblePaths.length) {
|
||
|
|
console.error('All module paths failed');
|
||
|
|
showErrorMessage('Failed to load interactive diagram module');
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const modulePath = possiblePaths[pathIndex];
|
||
|
|
console.log(`Trying to load LikeC4 module from: ${modulePath}`);
|
||
|
|
|
||
|
|
// Dynamic import with error handling
|
||
|
|
try {
|
||
|
|
const importFunction = new Function('specifier', 'return import(specifier)');
|
||
|
|
importFunction(modulePath)
|
||
|
|
.then(function(module) {
|
||
|
|
console.log('LikeC4 webcomponent loaded successfully');
|
||
|
|
// Hide any loading indicators
|
||
|
|
hideLoadingIndicators();
|
||
|
|
})
|
||
|
|
.catch(function(error) {
|
||
|
|
console.warn(`Failed to load from ${modulePath}:`, error.message);
|
||
|
|
pathIndex++;
|
||
|
|
tryNextPath();
|
||
|
|
});
|
||
|
|
} catch (error) {
|
||
|
|
console.warn(`Dynamic import failed for ${modulePath}:`, error.message);
|
||
|
|
pathIndex++;
|
||
|
|
tryNextPath();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
tryNextPath();
|
||
|
|
}
|
||
|
|
|
||
|
|
function hideLoadingIndicators() {
|
||
|
|
const loadingElements = document.querySelectorAll('.likec4-loading, #likec4-loading');
|
||
|
|
loadingElements.forEach(function(el) {
|
||
|
|
el.style.display = 'none';
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
function showErrorMessage(message) {
|
||
|
|
const containers = document.querySelectorAll('.likec4-container');
|
||
|
|
containers.forEach(function(container) {
|
||
|
|
const errorDiv = document.createElement('div');
|
||
|
|
errorDiv.style.cssText = 'position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: #dc3545; text-align: center; font-size: 14px; max-width: 300px;';
|
||
|
|
errorDiv.textContent = message;
|
||
|
|
container.appendChild(errorDiv);
|
||
|
|
});
|
||
|
|
hideLoadingIndicators();
|
||
|
|
}
|
||
|
|
|
||
|
|
// Check if DOM is ready
|
||
|
|
if (document.readyState === 'loading') {
|
||
|
|
document.addEventListener('DOMContentLoaded', loadLikeC4Module);
|
||
|
|
} else {
|
||
|
|
loadLikeC4Module();
|
||
|
|
}
|
||
|
|
})();
|