Commit Graph

1925 Commits

Author SHA1 Message Date
Ken Johnson 151cc14364 Migrate from TravisCI to GitHub Actions
Replaced outdated TravisCI configuration with modern GitHub Actions workflow.

Changes:
- Added .github/workflows/ci.yml with GitHub Actions configuration
- Removed .travis.yml (TravisCI configuration)
- Updated to use Ruby 3.4.1 (was 2.6.5)
- Replaced PhantomJS setup with modern Selenium WebDriver
- Added bundler caching for faster builds
- Added security audit step with bundle-audit
- Runs tests on push to main and on pull requests

The new workflow:
- Uses latest GitHub Actions (checkout@v4, ruby/setup-ruby@v1)
- Automatically caches gems for faster subsequent runs
- Sets up test database properly before running tests
- Runs RSpec tests in maintainer mode
- Includes optional security audit check

Fixes #491

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-05 12:27:20 -05:00
Ken Johnson 2a4171daf3 Merge pull request #493 from OWASP/feature/upgrade-ruby-version
Upgrade Ruby from 3.3.6 to 3.4.1
2026-01-05 12:22:50 -05:00
Ken Johnson 1bd6ee3a0e Upgrade Ruby from 3.3.6 to 3.4.1
Updated Ruby to the latest stable 3.4.x release for improved performance
and security updates.

Changes:
- Updated .ruby-version to 3.4.1
- Updated Gemfile ruby version requirement to 3.4.1
- Updated README.md to reflect Ruby 3.4.1 requirement
- Updated Dockerfile from ruby:2.6.5 to ruby:3.4.1
- Removed outdated bundler version constraint in Dockerfile

Tested:
- Bundle install successful with Ruby 3.4.1
- Test suite runs successfully (46 examples, 1 pre-existing failure)
- Rails server starts and responds correctly

Fixes #490

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-05 11:51:05 -05:00
Ken Johnson 8686f78a2b Merge pull request #492 from OWASP/fix/remaining-css-selector-issues
Fix remaining CSS selector and form field issues from UI/UX overhaul
2026-01-05 11:00:42 -05:00
Ken Johnson 5dd05249ec Fix remaining CSS selector and form field issues from UI/UX overhaul
This addresses the remaining test failures @jasnow reported in issue #486.

Fixes:
1. Ambiguous Login button - Changed from click_button "Login" to
   find("input[type='submit'][value='Login']").click to specifically
   target the form submit button and avoid the header Login button

2. Fixed password_complexity_spec field names:
   - user_email → email
   - user_first_name → first_name
   - user_last_name → last_name
   - user_password → password
   - user_password_confirmation → password_confirmation
   - Submit → Create Account (correct button text)

3. Applied same selector fix to login helper in capybara_shared.rb

These changes complete the test suite fixes for the new UI that was
introduced in the file upload UX improvements.

Related: #486

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-05 08:21:46 -05:00
Ken Johnson 48e04c4c28 Merge pull request #489 from OWASP/fix/readme-wiki-vulnerabilities
Replace vulnerability list with link to wiki as source of truth
2026-01-04 17:54:38 -05:00
Ken Johnson 3adfb4f973 Replace vulnerability list with link to wiki as source of truth
Instead of maintaining a duplicate list of vulnerabilities in the README,
point users to the wiki where the complete and authoritative list exists
with full tutorials and explanations.

This keeps the wiki as the single source of truth for vulnerability
documentation while still giving README readers a high-level overview.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-04 17:51:57 -05:00
Ken Johnson dbec561582 Merge pull request #488 from OWASP/feature/modernize-readme
Modernize and restructure README for better clarity and accuracy
2026-01-04 17:49:56 -05:00
Ken Johnson e148a03142 Remove OWASP badge from README
Removed OWASP badge from README.
2026-01-04 17:48:06 -05:00
Ken Johnson 41fcc1ac75 Modernize and restructure README for better clarity and accuracy
This comprehensive README update improves the documentation structure,
updates outdated information, and provides a clearer learning path for users.

Key improvements:
- Added OWASP Flagship badge and clearer project description
- Created "What is RailsGoat?" section explaining the educational purpose
- Added comprehensive "Vulnerabilities Included" section listing all 11+ vulnerabilities
- Restructured "Quick Start" with numbered steps and clearer prerequisites
- Added "Learning Path" section with 3-step approach (tests → explore → wiki)
- Updated all outdated technical information:
  * Rails 8.0 with Ruby 3.3.6 (was "3 to 6")
  * Removed references to deprecated Thin, PhantomJS, and Poltergeist
  * Updated Docker instructions (removed outdated docker-machine references)
  * Corrected Rails version branches (added rails_5, updated main to Rails 8)
- Reorganized content flow: what → why → how → learn → advanced → contribute
- Moved "Support" to bottom with expanded help resources
- Simplified Docker and MySQL sections under "Advanced Configuration"
- Added security warning footer about not deploying publicly
- Improved formatting with bold headings and better code block examples

The new structure guides users from understanding what RailsGoat is,
through installation, to actively learning from the vulnerabilities.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-04 17:44:44 -05:00
Ken Johnson e46cda0342 Merge pull request #487 from OWASP/fix/ubuntu-test-failures-issue-486
Fix test failures on Ubuntu and other platforms (issue #486)
2026-01-04 17:39:50 -05:00
Ken Johnson 7afaabdb9b Remove confusing pending status from password_hashing_spec
The password_hashing_spec was using 'pending unless verifying_fixed?' which caused
confusing output in maintainer mode:
- Before: "1 example, 0 failures, 1 pending" with "(compared using ==)" message
- After: "1 example, 0 failures" - clean output

The spec now uses conditional expectations:
- Training mode: expects password is NOT MD5 hashed (test fails, vulnerability exists)
- Maintainer mode: expects password IS MD5 hashed (test passes, verifies vulnerability)

This addresses the "(compared using ==)" error message that @jasnow reported in issue #486.

Related to #486
2026-01-04 17:38:40 -05:00
Ken Johnson 7712f5867f Fix test failures on Ubuntu and other platforms (issue #486)
Fixes test suite to run cleanly across different platforms (macOS, Linux, Windows)
after the Rails 5→8 upgrade and UI/UX overhaul.

## Issues Fixed

1. **Firefox/Selenium driver errors**: Removed deprecated Poltergeist/PhantomJS
   configuration and properly configured Selenium with headless Chrome. This
   works across all platforms without requiring Firefox.

2. **CSS selector errors** ('Unable to find css ".signup"'): The UI/UX overhaul
   removed the .signup CSS class. Updated the login helper to work with the
   new login form structure.

3. **Ambiguous Login button**: The new UI has both a Login button and Login link.
   Changed from `click_on "Login"` to `click_button "Login"` to be specific.

4. **Deprecation warning**: Opted into Rails 8.1 behavior for to_time timezone
   preservation to eliminate deprecation warnings.

## Changes

- spec/support/capybara_shared.rb:
  * Removed deprecated Poltergeist/PhantomJS configuration
  * Configured Selenium with headless Chrome
  * Updated login helper to work with new UI (removed .signup/.actions selectors)
  * Changed click_on to click_button for specificity

- spec/spec_helper.rb:
  * Removed conflicting Capybara.javascript_driver override that was forcing
    selenium_headless (which tried to use Firefox)

- config/application.rb:
  * Added config.active_support.to_time_preserves_timezone = :zone to opt into
    Rails 8.1 behavior and eliminate deprecation warning

## Test Results

Before: 43 failures (driver errors, CSS selector errors)
After: 46 examples, 0 failures, 14 pending 

The 14 pending specs are expected - they verify vulnerabilities still exist.

## Platform Requirements

JavaScript tests now require Chrome/Chromium to be installed:
- macOS: Chrome is usually installed
- Ubuntu: `sudo apt-get install chromium-browser chromium-chromedriver`
- Windows: Chrome is usually installed

Fixes #486

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-04 11:09:14 -05:00
Ken Johnson 716fe29015 Merge pull request #482 from OWASP/feature/improve-file-upload-ux
Fix file upload flash messages and add GET redirect
2025-12-11 13:50:28 +00:00
Ken Johnson d8c48bec1f Remove fade class from flash messages to fix invisible alerts 2025-12-11 13:46:23 +00:00
Ken Johnson 3bd1fc2464 Remove duplicate flash message rendering - layout already handles it 2025-12-11 13:42:21 +00:00
Ken Johnson 6dc7ebac33 Simplify flash message handling - flash.each includes flash.now automatically 2025-12-11 13:39:52 +00:00
Ken Johnson 8c121cab65 Fix undefined method error for flash.now by using to_hash.empty? 2025-12-11 13:36:11 +00:00
Ken Johnson 004cf1e863 Fix flash.now messages not displaying in benefit forms view
Changed flash message check to include both flash and flash.now since
error messages use flash.now when re-rendering without redirect.

This ensures validation error messages display immediately when users
upload invalid files.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 13:30:12 +00:00
Ken Johnson 635d45d790 Add local flash message display to benefit forms page
Added flash message rendering directly on the benefit forms page to
ensure upload feedback is always visible, even if the layout partial
isn't rendering properly.

This provides redundancy for flash messages and ensures users always
see upload success/error feedback.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 13:29:05 +00:00
Ken Johnson bcf1aabd35 Add redirect for GET requests to /upload endpoint
Added a redirect handler for users who try to access /upload via GET
request instead of using the form POST. This prevents errors and guides
users to the proper upload form.

Changes:
- Added GET route for /upload that redirects to benefit forms page
- Added redirect_to_benefit_forms action in controller
- Shows info flash message directing users to the upload form

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 13:25:50 +00:00
Ken Johnson dea247d06e Merge pull request #481 from OWASP/feature/improve-file-upload-ux
Improve file upload UX with validation and feedback messages
2025-12-11 13:15:03 +00:00
Ken Johnson 705f7508aa Fix flash messages not appearing after file upload
Changed flash message handling to ensure success and error messages
are visible to users after file upload attempts.

Changes:
- Use flash.now for validation errors (no file, wrong type, too large)
  so messages display immediately without redirect
- Re-render index page on validation errors instead of redirecting
- Keep regular flash for success messages to persist through redirect
- Refactored file listing into load_uploaded_files helper method

Before: Flash messages were set but not displaying after redirect
After: Users see clear feedback for all upload outcomes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 13:13:22 +00:00
Ken Johnson f21da3f075 Improve file upload UX with validation and uploaded files display
Enhanced the benefit forms file upload functionality to provide better
user feedback and visibility of uploaded files.

Changes:
1. Added file type validation in controller:
   - Only accepts PDF, DOC, DOCX, JPG, PNG formats
   - Shows clear error message with the rejected file extension

2. Added file size validation:
   - Maximum 10MB file size limit
   - Shows file size in error message if exceeded

3. Improved success/error messages:
   - Shows specific filename on successful upload
   - Shows detailed error messages for validation failures

4. Added uploaded files display section:
   - Lists all uploaded files with icons based on file type
   - Shows file size and upload timestamp
   - Provides download button for each file
   - Only displays when files exist

Before: Users received generic "Something went wrong" message with no
indication of why uploads failed. No way to see uploaded files.

After: Clear validation feedback tells users exactly what went wrong
(wrong format, too large, etc.) and uploaded files are visible with
download links.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-11 13:13:21 +00:00
Ken Johnson c7c9619a36 removed unnecessary files 2025-12-11 11:58:41 +00:00
Ken Johnson 51d1a5f8c8 Merge pull request #480 from OWASP/fix/dropdown-display-and-readme-cleanup
Add styling to admin user management page and fix form submission
2025-12-11 11:55:33 +00:00
Ken Johnson 7b77d8281c Add styling to admin user management page and fix form submission
This commit improves the admin user management interface while preserving
the intentional mass assignment vulnerability for educational purposes.

Changes:
1. Removed layout false from admin controller to enable full styling
2. Modernized admin users table view with Bootstrap components:
   - Added page header with icon and description
   - Wrapped table in card component for better visual hierarchy
   - Updated admin indicator to use Bootstrap icons
   - Modernized Edit button styling

3. Fixed admin update_user action form submission error:
   - Previous code caused ForbiddenAttributesError in Rails
   - Used to_unsafe_h to explicitly bypass strong parameters
   - VULNERABILITY PRESERVED: This intentionally allows mass assignment
   - See wiki: Extras:-Mass-Assignment-Admin-Role.md
   - Fixed password field filtering to handle blank passwords correctly

The mass assignment vulnerability is maintained as a teaching example per
the OWASP RailsGoat mission. Students can learn about privilege escalation
attacks through the admin parameter.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-10 13:43:39 +00:00
Ken Johnson d08af9cdbf Merge pull request #479 from OWASP/fix/dropdown-display-and-readme-cleanup
Fix navbar alignment and font size toggle functionality
2025-12-09 17:14:06 +00:00
Ken Johnson 2cc86dd271 Fix navbar alignment and font size toggle functionality
Fixed two UI issues in the navigation header:

1. **Navbar Alignment**: Added CSS to remove margin/padding from forms in the
   header to ensure the Tutorials button (created with button_to) aligns
   properly with other navbar items like font size controls and user dropdown.

2. **Font Size Toggle**: Added data-turbolinks="false" to font size control
   links to force full page reload. Previously, clicking the small font button
   wouldn't apply changes until manual refresh due to Turbolinks caching. Now
   both font size buttons work immediately.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 17:08:41 +00:00
Ken Johnson a827e3d61e Merge pull request #478 from OWASP/fix/dropdown-display-and-readme-cleanup
Fix messages dropdown display and remove broken badges
2025-12-09 17:01:36 +00:00
Ken Johnson aefbe201d3 Fix dropdown text cutoff by reducing padding to optimal value
Reduced padding from 0.85rem to 0.5rem and adjusted line-height from 1.6 to 1.5
to prevent text from being cut off at the bottom of the dropdown selector. Also
added option styling to ensure consistent spacing throughout the dropdown.

The excessive padding was causing the text to be vertically centered in a way
that cut off descenders. The new values provide clean text rendering without cutoff.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 16:59:26 +00:00
Ken Johnson 5f8c24b285 Add !important rules to ensure dropdown height CSS applies
Added !important to all dropdown height/padding CSS rules to ensure
they override any conflicting Bootstrap or global styles:
- min-height: 52px !important
- line-height: 1.6 !important
- padding: 0.85rem 0.75rem !important
- vertical-align: middle !important
- box-sizing: border-box !important

This forces the styles to apply and prevent text cutoff.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 16:49:51 +00:00
Ken Johnson da1ce63e59 Increase dropdown height and padding to fully prevent text cutoff
Increased vertical spacing to ensure recipient names display fully:
- min-height: 48px → 52px
- line-height: 1.5 → 1.6
- padding: 0.75rem → 0.85rem
- Added vertical-align: middle

This provides more breathing room for text to prevent any cutoff
at the bottom of the dropdown field.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 16:47:54 +00:00
Ken Johnson 89cdf5f1d7 Fix dropdown text being cut off at the bottom
Added CSS to ensure proper height and padding:
- min-height: 48px (provides enough vertical space)
- line-height: 1.5 (proper text spacing)
- padding: 0.75rem (matches Bootstrap form-control-lg)

This prevents the selected recipient name from being cut off
at the bottom of the dropdown field.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 16:01:00 +00:00
Ken Johnson 9bc03f67af Remove all custom dropdown JavaScript and excessive CSS
The custom JavaScript was actually interfering with normal browser
behavior. The hide().show() and attribute manipulation was causing
the dropdown to reset visually after selection.

Changes:
- Removed all custom dropdown change event handlers
- Removed all debugging console logs
- Removed excessive !important CSS rules
- Removed debug red border
- Kept only the simple focus styling

Now using native browser select behavior with Bootstrap form-control
styling, which should work correctly out of the box.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 15:35:26 +00:00
Ken Johnson a9335952a5 Change dropdown from form-select to form-control class
Bootstrap 5's form-select class may have rendering issues.
Switched to form-control which has simpler styling and should
display the selected text properly.

Also explicitly added ID attribute to ensure JavaScript targets
the correct element.

Added additional debugging for:
- Font family
- Transform
- Position
- Z-index
- Padding
- Inner text/HTML of selected option

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 15:33:25 +00:00
Ken Johnson 632f8ca08e Add comprehensive CSS debugging and forced visibility properties
Added extensive CSS properties to force text visibility:
- Explicit text-indent: 0
- Overflow: visible
- Font-size and line-height
- Proper padding
- Red border for visual debugging

Added comprehensive JavaScript logging of computed styles:
- Font size, color, background
- Text indent, overflow
- Display, visibility, opacity
- Width and height

This will help identify which CSS property is hiding the selected text.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 15:30:39 +00:00
Ken Johnson b4a95e54a9 Add comprehensive debugging for dropdown selection issue
Added extensive console logging to diagnose why selected value
isn't displaying in the dropdown:
- Select element's full text content
- Selected index position
- Total options count
- Option text at selected index
- Explicitly setting 'selected' attribute on options

This will help identify whether the issue is with:
- Option selection not being applied
- Visual rendering despite correct selection
- Bootstrap form-select interference

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 15:05:06 +00:00
Ken Johnson ffac25bae3 Further improve dropdown selection display with enhanced CSS and debugging
Added enhanced CSS with !important rules and explicit appearance properties
to ensure the dropdown properly displays the selected recipient name.

Changes:
- Added explicit appearance properties for proper browser rendering
- Added !important to color and background-color rules
- Added styling for option:checked state
- Enhanced JavaScript debugging with value and color logging
- Added hide/show to force visual re-render

The console logs now show:
- Selected recipient name
- Selected value
- Current color CSS property

This should help diagnose and fix the visual display issue.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 15:04:36 +00:00
Ken Johnson 65e42ceee3 Remove Travis CI badge and improve dropdown selection handling
1. Removed broken Travis CI build status badge from README header

2. Enhanced dropdown selection on messages page:
   - Added explicit JavaScript change event handler
   - Added CSS to ensure proper text color and background
   - Added blur/focus to force visual update after selection
   - Added console logging for debugging

This should resolve the issue where selected recipient names weren't
displaying properly in the dropdown after selection.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 14:59:07 +00:00
Ken Johnson a477b783e8 Merge pull request #477 from OWASP/fix/ui-improvements-and-cleanup
Fix UI issues and remove broken links
2025-12-09 14:55:53 +00:00
Ken Johnson 05cc35927a Fix dropdown selection display on messages page
Added prompt option "Select a recipient..." to the To dropdown on
the messages page. This provides a clear placeholder and makes the
selected user's name visible after selection.

Before: Dropdown showed no placeholder, making it unclear what was selected
After: Shows "Select a recipient..." by default, then displays the
       selected user's name when a recipient is chosen

Fixes the issue where clicking a user in the dropdown didn't show
their name in the dropdown field.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 14:51:41 +00:00
Ken Johnson fe53d38da0 Remove broken CodeClimate badge from README
Removed the CodeClimate badge link from the README header as the
CodeClimate links are no longer functional.

Kept the Build Status badge from Travis CI.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 14:50:25 +00:00
Ken Johnson c9ceabc27d Fix DataTables column configuration error on pay page
Fixed "Requested unknown parameter '1' for row 0, column 1" error
by adding explicit column definitions to the DataTable initialization.

The issue occurred because DataTables was initialized without column
definitions, but data was being added as arrays. DataTables needs
explicit column configuration to properly map array data to columns.

Changes:
- Added "columns" configuration to DataTable initialization
- Defined all 4 columns with proper titles
- Set "orderable: false" for Actions column

This fixes the popup error that appeared when visiting /users/1/pay

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-09 14:48:12 +00:00
Ken Johnson b6270db2d6 Merge pull request #476 from OWASP/rails-8-upgrade
Upgrade to Ruby 3.3.6 and Rails 8.0.4
2025-12-07 22:38:22 +00:00
Ken Johnson decf82962d Simplify admin user editing - remove modal, use regular CRUD pages
Remove complex modal implementation and replace with simple page navigation:
- Convert get_user view from modal partial to full edit page
- Add proper form with Bootstrap 5 styling
- Link directly from users list to edit page
- Update controller actions to redirect instead of returning JSON
- Add flash messages for success/error feedback
- Remove all modal JavaScript and markup
- Remove modal CSS and backdrop handling

Benefits:
- Much simpler and more maintainable
- No JavaScript errors or complexity
- Standard Rails CRUD pattern
- Better user experience with proper navigation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 22:26:17 +00:00
Ken Johnson 844acfc8e6 Use proper Bootstrap 5 native modal API with initialization
Bootstrap 5 removed jQuery plugin support, so .modal('show') doesn't work.
Switch back to native Bootstrap 5 Modal API with proper initialization:

- Dispose of any existing modal instance before creating new one
- Create modal with explicit options (backdrop, keyboard, focus)
- Add detailed console logging for each step

This ensures the modal is properly initialized before showing.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 22:16:24 +00:00
Ken Johnson b3b1b0d01d Use jQuery modal API instead of Bootstrap 5 native API
Switch from bootstrap.Modal class to jQuery .modal('show') method.
Bootstrap 5 still supports the jQuery plugin API for backwards
compatibility, and this method handles initialization automatically.

This should fix the issue where modal.show() was called but the
modal wasn't appearing visually.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 22:14:00 +00:00
Ken Johnson dff2e150a2 Add more detailed modal debugging
- Log modal element to verify it exists
- Check for existing modal instance before creating new one
- Log each step of modal creation and show process

This helps identify why modal.show() isn't displaying the modal.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 22:12:59 +00:00
Ken Johnson b4c6f93f68 Add debugging and fix form field attributes in admin modal
- Add console logging to openEditModal function to debug AJAX load
- Add explicit id and name attributes to admin select field
- Only show modal after content successfully loads
- Log errors if modal content fails to load

This helps diagnose the modal loading issue and fixes the Chrome
warning about form fields lacking id/name attributes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 21:54:46 +00:00