Add hero scheduling with start/end datetime fields using Joomla
calendar type and site timezone. Hero skips rendering outside the
configured range. Add A/B testing with weighted random variation
selection, session-sticky per module instance via subform repeatable.
Close#23 as substantially complete (animation library implemented
in prior phases). Language strings in all locales.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Re-enable the system plugin license check with a LICENSE_TYPE constant.
Set to 'free' — check exits immediately with zero overhead. Change to
'pro' to enable download key validation. Update plugin descriptions
and CLAUDE.md to document the licensing model.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add Joomla Log::add for article query, DirectoryIterator, and JSON
decode failures. Filter article content through HTMLHelper content.prepare
to prevent XSS. Add null guards on scroll indicator and mute toggle
hero/icon elements. Add console.warn on slide content JSON parse failure.
Remove stale license key references from package and plugin descriptions.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add content source selector — manual editor or Joomla article with
optional article title override. Add per-slide unique content via
subform repeatable field with heading, body, link, and link text per
slide, swapped in sync with background transitions using safe DOM
methods. Remove license key check from system plugin and plugin
dependency from module — extension is now free. Language strings in
all locales.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add configurable content entrance animations (fade-in, slide-up,
slide-left, slide-right) triggered by IntersectionObserver on scroll
into view, with adjustable delay. Add parallax scroll effect with
configurable speed (0.1–0.9) using passive scroll listener and GPU-
accelerated transforms. Both features respect prefers-reduced-motion.
Language strings in all locales.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add prefers-reduced-motion support (WCAG 2.1 AA) — disables slideshow
cycling, CSS transitions/animations, and Ken Burns zoom when OS setting
is enabled. Add optional scroll-down chevron indicator with bounce
animation and smooth-scroll click handler. Add video poster image
fallback displayed while video loads. Language strings in all locales.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add hex color validation for all color params, allowlist validation
for textAlign/fadeType/overlayType, range clamp for gradientAngle,
and try-catch around DirectoryIterator. Fix video.play() promise
rejection and iframe.contentWindow null guards in JS. Hardcode
package description in manifest. Normalize tabs throughout.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add vertical text alignment (top/center/bottom) for overlay content,
mobile-specific hero height via CSS custom property, and directional
gradient overlay (dark at bottom/top/left/right) reusing existing
overlay colour controls. Language strings added to all locale files.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix CSS injection on heroHeight with regex validation, add missing
language keys to .sys.ini files, fix plugin manifest languages folder
attribute and display name, narrow catch to \Exception with logging,
add error handling to pkg_script auto-enable, fix mobile CSS for
color/gradient modes, add SPDX headers, remove dead code, and update
stale file path headers.
Add configurable transition type for image slideshow: crossfade, slide,
fade-to-black, and zoom (Ken Burns).
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Restructure from standalone module to package extension (pkg_mokojoomhero)
containing mod_mokojoomhero and plg_system_mokojoomhero. Add two new hero
modes — solid color and gradient — with color pickers and angle controls,
using Joomla showon for conditional field display.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- New "Local Video" hero mode with Joomla Media Manager file picker
- Install script creates images/heroes/ folder on install/update
- Updated showMuteToggle to show for both video and localvideo modes
- All language strings (en-US/en-GB, ini + sys.ini) updated with new
keys: MODE_LOCALVIDEO, LOCAL_VIDEO_LABEL/DESC, CARD_DELAY, MUTE_TOGGLE
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Card fade-in delay: configurable delay (0-5000ms) before the content
card appears with a smooth slide-up animation. Set via cardDelay param.
- Mute toggle: optional button in bottom-right corner to unmute/mute
video audio. Videos always start muted (browser autoplay requirement).
Supports YouTube postMessage API, Vimeo postMessage, and native video.
- New manifest params: cardDelay (number), showMuteToggle (radio)
- Language strings added for both en-US and en-GB
Closes#39, closes#40
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use IntersectionObserver to pause videos when the hero is not visible
and resume when it scrolls back in. Supports native <video>, YouTube
(postMessage API with enablejsapi=1), and Vimeo embeds.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Show module title as h2 inside the card/content when showtitle is
enabled, keeping it within the overlay rather than above the hero
- Exclude .btn from card link color override so buttons retain their
own styling
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add #style/#script suffixes to preset dependencies (Joomla defaults
untyped deps to "preset", causing UnsatisfiedDependencyException)
- Fix asset URIs to use extension_name/file pattern — Joomla's
HTMLHelper auto-inserts the css/js folder
- Split video CSS into <video> (object-fit:cover) and <iframe>
(oversize+centre-crop) rules since object-fit doesn't apply to iframes
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Joomla's addExtensionRegistryFile('mod_foo') resolves to
media/mod_foo/joomla.asset.json, not modules/mod_foo/. Move CSS, JS,
and joomla.asset.json to src/media/ and add <media> tag to manifest.
- src/css/ → src/media/css/
- src/js/ → src/media/js/
- src/joomla.asset.json → src/media/joomla.asset.json
- Manifest: replace <folder>css/js</folder> in <files> with <media> tag
- Entry point: restore addExtensionRegistryFile + usePreset
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
addExtensionRegistryFile fails during countModules() — Joomla renders
modules early during template parsing and the preset registry lookup
fails. Switch to registerAndUseStyle/registerAndUseScript which work
reliably in all contexts.
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
On mobile (<=768px) the video/slideshow is hidden behind the card
and wastes bandwidth. Now:
- Hide video and slide elements via display:none
- Remove fixed height so hero auto-sizes to card content
- Clear overlay background (no need without background media)
- Skip slideshow JS timer on mobile via matchMedia check
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add heroContent param with Joomla editor field for rich HTML input
- Add showCard toggle to wrap content in a styled card (white bg, shadow, rounded)
- Card CSS: semi-transparent white, 8px radius, centered, max 700px
- Remove old $module->content fallback — content now comes from params
- Language strings for en-GB and en-US (both .ini and .sys.ini)
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Change default from 400px to 60vh (viewport-relative is more responsive)
- Add hint placeholder showing "e.g. 60vh or 400px"
- Update description to explain both px and vh units
Authored-by: Moko Consulting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>