Add DeviceDetector and postres_cursor

This commit is contained in:
Dan Milne
2025-11-13 08:35:00 +11:00
parent cc8213f87a
commit 2c7b801ed5
15 changed files with 472 additions and 158 deletions

View File

@@ -2,18 +2,29 @@
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
static targets = ["form", "toggle", "ruleTypeSelect", "actionSelect", "patternFields", "rateLimitFields", "redirectFields", "helpText", "conditionsField"]
static targets = ["form", "toggle", "ruleTypeSelect", "actionSelect", "patternFields", "rateLimitFields", "redirectFields", "helpText", "conditionsField", "expiresAtField"]
connect() {
this.setupEventListeners()
console.log("QuickCreateRuleController connected")
this.initializeFieldVisibility()
}
toggle() {
this.formTarget.classList.toggle("hidden")
console.log("Toggle method called")
console.log("Form target:", this.formTarget)
if (this.formTarget.classList.contains("hidden")) {
this.resetForm()
if (this.formTarget) {
this.formTarget.classList.toggle("hidden")
console.log("Toggled hidden class, now:", this.formTarget.classList.contains("hidden"))
if (this.formTarget.classList.contains("hidden")) {
this.resetForm()
} else {
// Form is being shown, clear the expires_at field for Safari
this.clearExpiresAtField()
}
} else {
console.error("Form target not found!")
}
}
@@ -81,13 +92,28 @@ export default class extends Controller {
if (this.hasRedirectFieldsTarget) this.redirectFieldsTarget.classList.add("hidden")
}
clearExpiresAtField() {
// Clear the expires_at field - much simpler with text field
if (this.hasExpiresAtFieldTarget) {
this.expiresAtFieldTarget.value = ''
}
}
resetForm() {
if (this.formTarget) {
this.formTarget.reset()
// Reset rule type to default
if (this.hasRuleTypeSelectTarget) {
this.ruleTypeSelectTarget.value = "network"
this.updateRuleTypeFields()
// Find the actual form element within the form target div
const formElement = this.formTarget.querySelector('form')
if (formElement) {
formElement.reset()
// Explicitly clear the expires_at field since browser reset might not clear datetime-local fields properly
this.clearExpiresAtField()
// Reset rule type to default
if (this.hasRuleTypeSelectTarget) {
this.ruleTypeSelectTarget.value = "network"
this.updateRuleTypeFields()
}
}
}
}
@@ -95,19 +121,8 @@ export default class extends Controller {
// Private methods
setupEventListeners() {
// Set up action change listener to show/hide redirect fields
if (this.hasActionSelectTarget) {
this.actionSelectTarget.addEventListener("change", () => {
this.updateRuleTypeFields()
})
}
// Set up toggle button listener
if (this.hasToggleTarget) {
this.toggleTarget.addEventListener("click", () => {
this.toggle()
})
}
// Event listeners are handled via data-action attributes in the HTML
// No manual event listeners needed
}
initializeFieldVisibility() {