====== Nützliche Require.js Scripte ====== Hier das Basic Script wie man require.js klever integriert. ===== Reihenfolge der Dateien ===== Wie require.js Files lädt: - die require.js - danach die angegeben config.js - dann die main.js oder app.js aus der config.js - dann alle Module wie sie aufgerufen werden per ''require( '../..' )'' **Ein Hinweis:** Man kann einzelne Libraries mit //require('path/to/dein_modul');// angeben, aber sauberer, sicherer & stabiler ist, auch bei einzelnen Bilbiotheken immer den Paramter als array zu übergeben: ''require( ['path/to/dein_modul'] );'' ===== Code Beispiel der einzelnen Datein ===== Hier Drei Schritte als Code Beispiele um: zu implementieren, konfigurieren & ein eigenes Modul zu schreiben ==== Beispiel um require.js einfach zu implementieren ==== in den '''' Teil des HTML schreibt man: Der Code lädt require.js und startet die configuration, diese sollte dann so ungefähr aussehen: ''/assets/js/require-config.js'' require.config({ urlArgs : "bust=" + (new Date()).getTime(), // Cache Buster beim Entwickeln, dass immer die neuste Datei geladen wird paths: { // Definieren von vorgegebenen Libraries 'jquery' : 'vendor/jquery', 'jquery-clndr' : 'vendor/jquery.clndr.min', 'uikit' : 'vendor/uikit.min', 'uikit-icons' : 'vendor/uikit-icons.min', 'TAFFY' : 'vendor/taffy.min', 'moment' : 'vendor/moment-with-locales', 'mustache' : 'vendor/mustache.min', }, // Macht einen Wrapper um Plugins, und man kann sagen welches Sub-Library welche anderen Bibliotheken braucht shim: { 'jquery-clndr' : ['jquery'], 'uikit-icons' : ['uikit'], } }); requirejs( ['main'] ); // Lädt das Haupt-Script Der hier gezeigte Vendor-Folder muss im gleichen Verzeichnis wie die config-file liegen, sprich: //assets/js/vendor/...// ==== Beispiel für eine main.js File ==== Am Ende des vorherigen Scripts wird die main.js im //assets/js/...// Folder geladen, diese kann so aussehen: define( function( require ){ /* R E Q U I R E D S C R I P T S Die immer geladen werden sollen */ const jQuery = require( 'jquery' ); const uikit = require( 'uikit' ); const uikit_icons = require( 'uikit-icons' ); /* E I G E N E S C R I P T S */ /* === Init ratioResizer === */ const ratioResizer = require( 'brandgrad/ratioResizer' ); // Modul Laden const youtubeResize = new ratioResizer( 'iframe[src^="https://www.youtube.com"]', 16, 9 ); // Modul Starten }) Das ist die //main.js// File oder auch //app.js// File. Am Ende wird ein Modul/eine Klasse geladen und gestartet. ==== Beispiel um Module mit IF-Bedingungen laden zu lassen ==== Dieser Code sollte Teil der main.js File. Require.js lädt sonst immer alle Scripte. Das funktioniert nur mit diesem Syntax! const page_has_kalender = document.querySelector( '#KalenderEvents' ); if( page_has_kalender ){ require( ['meine-module/kalender'], function ( kalendarModule ) { // ... Code falls man mit dem Modul was machen will }); } ==== Beispiel für ein Modul ==== Auch diese muss in entsprechenden Folder liegen: ''assets/js/brandgrad/ratioResizer.js'' define( function( require ){ //const jQuery = require( 'jquery' ); //const Mustache = require( 'mustache' ); return function( selector, ratio_width, ration_height ){ /* S E T T I N G S */ let delay_timer = 500; // Window Event soll nur alle 0.5s abgefuert werden (performance) /* N O D E S */ let youtube_embeds = document.querySelectorAll( selector ); /* I N I T */ resize_nodes( youtube_embeds, 16, 9 ); /* E V E N T S */ var delay; window.addEventListener( 'resize', function(){ clearTimeout( delay ); timer = setTimeout( function ( event ) { resize_nodes( youtube_embeds, 16, 9 ); }, delay_timer ); } ) /* M E T H O D S */ function resize_nodes( node_list, ratio_width, ration_height ){ for(let index = 0; index < youtube_embeds.length; index++) { resize_node( node_list[index], ratio_width, ration_height ); } } function resize_node( node, ratio_width, ration_height ){ node.style.width = '100%'; node.style.maxWidth = '100%'; let current_width = node.offsetWidth; let new_height = ( current_width / ratio_width ) * ration_height; node.style.height = new_height + 'px'; } return {} } })