File Details
v1.4.6
- R
- Mar 29, 2026
- 68.13 KB
- 22
- 12.0.0
- Retail
File Name
JetTools-v1.4.6.zip
Supported Versions
- 12.0.0
JetTools
v1.4.6 (2026-03-29)
Full Changelog Previous Releases
- feat: CombatTimer, CombatRes modules + button/anchor/preview fixes (#20)
- Add CombatTimer and CombatRes modules; consolidate sidebar tabs
- Remove AbstractFramework dependency (toc, pkgmeta, Core.lua)
- Add Modules/CombatTimer.lua: elapsed combat time overlay (MM:SS / MM:SS.d,
print-on-end, font, position settings) - Add Modules/CombatRes.lua: Rebirth charge+cooldown tracker (group-only,
charge coloring, optional label, font, position settings) - Update JetTools.toc with new module load order
- Options.lua rewritten with pure WoW API (no AbstractFramework)
- Consolidate sidebar: CombatStatus/CombatTimer/CombatRes → 'Combat' tab;
PetReminders/StealthReminder → 'Reminders' tab
- fix: use explicit background texture for sidebar button tinting
GetNormalTexture() returns nil on UIPanelButtonTemplate buttons in modern
WoW. Store an explicit WHITE8X8 texture on btn._bg and tint that instead. - fix(Options): resolve four nil-safety issues in widget helpers
- JT_CreateCheckButton: remove bogus CheckButton.SetChecked shim that
referenced a non-existent global; CheckButton frames already have
SetChecked built-in - JT_CreateButton: call SetNormalTexture() before GetNormalTexture()
so tinting doesn't crash when UIPanelButtonTemplate has no NormalTexture - JT_CreateDropdown: same SetNormalTexture fix for the dropdown button
- ClearFrame: remove SetParent(nil) which reparents to WorldFrame in
modern WoW; Hide() alone is correct and sufficient
- fix: options UI widget bugs
- Slider: replace OptionsSliderTemplate with plain Slider to eliminate
Low/High/Text child frames that overlapped our value readout; add
track background, styled thumb, flanking min/max labels - Dropdown arrow: fix garbled ▾ glyph (\xbe is not valid Lua 5.1;
use \226\150\190 decimal escapes for U+25BE) - Dropdown singleton bug: rows are now children of scrollContent inside
the popup, hidden on OnHide, and always assigned fresh OnClick
closures so the second (and later) dropdowns on a page work correctly - Dropdown long lists: added scroll frame + UIPanelScrollBarTemplate
inside the popup, capped at maxVisible rows height; bar shown only
when items exceed maxVisible - Main scrollbar: hide bar entirely when scrollRange == 0 so short
module pages don't show a spuriously active scrollbar
- fix: dropdown double-wraps pre-built {text,value} options tables
BuildOptionControl was wrapping all options[1]-truthy arrays, but
GetAvailableFonts() already returns {text,value} pairs. Detect that
case (first entry is a table with a .text field) and use the list
directly instead of re-wrapping, which produced item.text =
and a SetText() error. - feat: auto-preview, anchor frame input, and global font dropdown
- CombatTimer/CombatRes: ShowPreview()/HidePreview() for live preview while
options panel is open; OnSettingChanged re-calls ShowPreview() if panel open - CombatTimer/CombatRes: anchorFrame input setting; ApplyPosition() resolves
_G[anchorFrame] with UIParent fallback - Core: JT:GetAvailableFonts() helper (LSM or FALLBACK_FONTS); JT:ApplyGlobalFont()
broadcasts fontFace to all font-aware modules and persists to JetToolsDB.globalFont - Options: global font dropdown in title bar; refreshes on OnShow from JetToolsDB
- Options: merge character tabs; fix spacing; expand position range + anchor points for combat overlays
- Options.lua: merge CharacterSheet, GearUpgradeRanks, CharacterStatFormatting into a single 'Character' sidebar tab
- Options.lua: fix vertical overlap — slider bottom gap +10px, input +8px; dropdown shifted down 14px to absorb label overhang
- CombatTimer/CombatRes: posX range expanded to ±2000, posY to ±1200
- CombatTimer/CombatRes: add anchorPoint + relativePoint dropdowns (9 WoW anchor points each)
- CombatTimer/CombatRes: ApplyPosition() now uses anchorPoint/relativePoint settings
- CombatTimer/CombatRes: OnSettingChanged triggers on anchorPoint/relativePoint changes
- Core.lua: add anchorPoint/relativePoint defaults (CENTER/CENTER) for both modules
- fix: replace dropdown arrow FontString with Texture to fix missing glyph
U+25BE (▾) is not present in WoW's bundled fonts (FRIZQT__, ARIALN),
causing the arrow indicator to render as an empty box. Switch to a
native WoW texture (Interface\Buttons\Arrow-Down-Up) cropped to the
down-arrow half via SetTexCoord — no font dependency, always visible.
Closes jettools-8xk - chore: sync beads interactions log
- fix: hoist groupState to module-level local in Options.lua
BuildOptionControl._groupState was attaching a field to a function value,
which is illegal in Lua 5.1 and caused a crash:
'attempt to index upvalue BuildOptionControl (a function value)'
Fix: declare 'local groupState = ' at module scope before
BuildOptionControl is defined, and update all references. - chore: update beads interactions log
- fix: add isPreviewMode flag to keep previews visible while options panel is open
CombatTimer and CombatRes previews were unreliable when modules were
disabled because Disable() hid the frame and OnUpdate had no mechanism
to keep it shown. Introduce isPreviewMode to:
- Block Disable() from hiding the frame during a preview session
- Prevent UpdateDisplay() from hiding the CombatRes frame in preview mode
- Ensure OnUpdate skips its normal logic (which would overwrite preview text)
while preview is active, but still keeps the frame shown - Use isPreviewMode directly in OnSettingChanged instead of querying the
global frame state, making the logic self-contained
- fix: button artwork bleed, preview guard, and anchor frame resolution
- Options.lua: add JT_StripButtonTextures() helper that overrides all four
texture slots (normal, pushed, highlight, disabled) on UIPanelButtonTemplate
buttons; apply to JT_CreateButton (all styles incl. unstyled), the dropdown
button, and the sidebar nav buttons — eliminates the red/orange Blizzard
artwork bleed in all interactive states (jettools-tf6) - Options.lua OnShow: only call ShowPreview() when settings.enabled is true,
so disabled modules don't pop up their overlay when the options panel opens
(jettools-iyn) - CombatTimer + CombatRes ApplyPosition(): replace bare _G[anchorName] lookup
with ResolveAnchorFrame() which (a) supports case-insensitive friendly
aliases (chat, minimap, playerframe, targetframe, etc.), (b) validates the
resolved object has GetObjectType before using it, (c) prints a helpful
warning and falls back to UIParent on invalid input, and (d) temporarily
clears SetClampedToScreen before SetPoint so large X/Y offsets are applied
correctly then re-enables clamping (jettools-4ro)
- fix: always show previews in options panel regardless of enabled state
The previous fix (jettools-iyn) added an settings.enabled guard to the
OnShow preview logic, which broke previews for all users since CombatTimer
and CombatRes both default to enabled=false. Previews should always display
when the options panel opens — that's their entire purpose. - chore: update beads interactions log
- Add BuffBarStyling module with collapsible options groups
Implements the BuffBarStyling module per plans 011/012/013: a 0.1s ticker
styles BuffBarCooldownViewer children with configurable texture, bar size,
font, icon visibility, and 1px black border, then repositions the viewer to
a named anchor frame with configurable anchor points and X/Y offsets.
Options.lua gains a new 'group' schema type for collapsible sections,
with state stored per-group and repopulation triggered via
JT._requestOptionsRepopulate.

