Skip to content
Snippets Groups Projects
Select Git revision
  • cfa077b5c58d2d96fb8685382a15e74017162c4d
  • master default protected
  • detached4
  • detached3
  • detached2
  • bsv-next
  • detached
  • php82
  • 6.x
  • 6.4.0
  • 6.3.3
  • 6.3.2
  • 6.3.1
  • 6.3.0
  • 6.2.7
  • 6.2.6
  • 6.2.5
  • 6.2.4
  • 6.2.3
  • 6.2.2
  • 6.2.1
  • 6.2.0
  • 6.1.3
  • 6.1.2
  • 6.1.1
  • 6.1.0
  • 6.0.0
27 results

main.js

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    main.js 2.31 KiB
    import {createApp} from 'vue';
    import {createBootstrap} from 'bootstrap-vue-next';
    import unicaenVue from './unicaenVue';
    
    function init(vues, options)
    {
        const components = {};
    
        if (undefined === options) {
            options = {};
        }
    
        // Convertir les chemins des composants en noms de composants
        for (const path in vues) {
            let compPath = path.slice(2, -4);
            let compName = compPath.replaceAll('/', '');
            components[compName] = vues[path].default;
        }
    
        // Fonction pour initialiser une application Vue sur un élément
        function mountVueApp(el)
        {
            let app = createApp({
                template: el.innerHTML,
                components: components
            });
    
            if (undefined !== options.beforeMount) {
                options.beforeMount(app);
            }
    
            // Autoload des composants déclarés
            if (undefined !== options.autoloads) {
                for (const alias in options.autoloads) {
                    let compName = options.autoloads[alias].replaceAll('/', '');
                    app.component(alias, components[compName]);
                }
            }
    
            app.use(createBootstrap({components: true, directives: true}));
            app.mount(el);
    
            if (undefined !== options.afterMount) {
                options.afterMount(app);
            }
        }
    
        // Initialiser les applications Vue sur les éléments existants
        for (const el of document.getElementsByClassName('vue-app')) {
            mountVueApp(el);
        }
    
        // Observer les changements du DOM pour détecter les nouveaux éléments chargés en AJAX
        const observer = new MutationObserver((mutationsList) => {
            for (const mutation of mutationsList) {
                if (mutation.type === 'childList') {
                    // Vérifier si de nouveaux éléments avec la classe .vue-app ont été ajoutés
                    for (const node of mutation.addedNodes) {
                        if (node.nodeType === Node.ELEMENT_NODE && node.classList.contains('vue-app')) {
                            mountVueApp(node);
                        }
                    }
                }
            }
        });
    
        // Démarrer l'observation du DOM
        observer.observe(document.body, {
            childList: true, // Observer les ajouts/suppressions d'enfants
            subtree: true,   // Observer tout le sous-arbre du DOM
        });
    }
    
    export default {
        init
    };