Translate links and buttons in hardcoded french
This commit is contained in:
68
app/javascript/controllers/lucide_controller.js
Normal file
68
app/javascript/controllers/lucide_controller.js
Normal file
@@ -0,0 +1,68 @@
|
||||
import { Controller } from "@hotwired/stimulus"
|
||||
|
||||
// Connects to data-controller="lucide"
|
||||
export default class extends Controller {
|
||||
static targets = ["icon"]
|
||||
|
||||
connect() {
|
||||
this.initializeIcons()
|
||||
|
||||
// Listen for Turbo navigation events to reinitialize icons
|
||||
document.addEventListener('turbo:render', this.handleTurboRender.bind(this))
|
||||
document.addEventListener('turbo:frame-render', this.handleTurboFrameRender.bind(this))
|
||||
}
|
||||
|
||||
disconnect() {
|
||||
// Clean up event listeners
|
||||
document.removeEventListener('turbo:render', this.handleTurboRender.bind(this))
|
||||
document.removeEventListener('turbo:frame-render', this.handleTurboFrameRender.bind(this))
|
||||
}
|
||||
|
||||
// Initialize all Lucide icons in the controller scope
|
||||
initializeIcons() {
|
||||
if (typeof lucide !== 'undefined') {
|
||||
// Initialize icons within this controller's element
|
||||
lucide.createIcons({
|
||||
element: this.element
|
||||
})
|
||||
} else {
|
||||
console.warn('Lucide not loaded yet, retrying...')
|
||||
// Retry after a short delay if Lucide hasn't loaded yet
|
||||
setTimeout(() => this.initializeIcons(), 100)
|
||||
}
|
||||
}
|
||||
|
||||
// Method to reinitialize icons after dynamic content changes
|
||||
reinitialize() {
|
||||
this.initializeIcons()
|
||||
}
|
||||
|
||||
// Method to create a specific icon programmatically
|
||||
createIcon(iconName, element = null) {
|
||||
if (typeof lucide !== 'undefined') {
|
||||
const targetElement = element || this.element
|
||||
lucide.createIcons({
|
||||
element: targetElement,
|
||||
icons: {
|
||||
[iconName]: lucide[iconName]
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Handle Turbo page renders
|
||||
handleTurboRender() {
|
||||
// Small delay to ensure DOM is fully updated
|
||||
setTimeout(() => this.initializeIcons(), 10)
|
||||
}
|
||||
|
||||
// Handle Turbo frame renders
|
||||
handleTurboFrameRender(event) {
|
||||
// Initialize icons within the specific frame that was rendered
|
||||
if (event.detail && event.detail.newFrame) {
|
||||
lucide.createIcons({
|
||||
element: event.detail.newFrame
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user