- Unreleased
- 1.6.1
- 1.6.0
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.1
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
1.6.1 - 2022-01-14
- API changes:
- Reverted changes in
window.NotifyOthers()
behaviour. Now it's executed synchronously as before.
- Reverted changes in
- Fixed various bugs in the event handling system, which were causing unexpected behaviour and crashes.
- Fixed right-mouse-btn-down and middle-mouse-btn-down events not being processed.
1.6.0 - 2021-09-11
- Added WIC support in image and art loaders, which enables WebP support (see FAQ for more info).
- API changes:
- Added
IsInternal
field toaction
argument (that is passed toon_drag_*
callbacks). - Added ability to generate main menu items dynamically and handle it via the following API:
fb.RegisterMainMenuCommand()
.fb.UnregisterMainMenuCommand()
.on_main_menu_dynamic()
callback.
- Expanded playlist undo API:
plman.Undo()
.plman.Redo()
.plman.IsUndoAvailable()
.plman.IsRedoAvailable()
.
- Added
- Added
spectrogram seekbar.js
sample (by marc2003).
- Reimplemented event handling system.
- API changes:
window.NotifyOthers()
is now executed asynchronously.fb.DoDragDrop()
is now executed asynchronously.on_main_menu()
callback is marked as [Deprecated]. Use dynamically generated main menu items instead.
- Removed unneeded writes to script package
.json
. - Fixed (?) drag-n-drop sometimes not working (#60).
- Fixed timers not stopping when they should (#135).
1.5.2 - 2021-08-10
- Fixed unicode handling in script paths.
1.5.1 - 2021-07-03
- API changes:
- Added
plman.GetPlaylistLockName()
method.
- Added
- Fixed fb2k freeze that could happen when using
ActiveXObject
.
1.5.0 - 2021-06-30
- API changes:
- Added fine-grained playlist lock control via
plman.GetPlaylistLockedActions()
andplman.SetPlaylistLockedActions()
(#144). - Added
utils.GetPackageInfo()
method. - Added
fb.Restart()
method.
- Added fine-grained playlist lock control via
utils.InputBox()
now automatically resizes to fit the text (#71).- Additional properties provided by component are no longer displayed when not set (#141).
- API changes:
- Added
use_exact
argument toGdiGraphics.CalcTextWidth()
to improve width calculation accuracy in certain cases (#140). utils.GetPackagePath()
is marked as [Deprecated]. Useutils.GetPackageInfo()
instead.plman.IsPlaylistLocked()
is marked as [Deprecated]. Useplman.GetPlaylistLockedActions()
instead.
- Added
- Fixed various bugs and crashes in
Configure
dialog. - Revamped package update process to avoid potential problems when that package is being in use (#137).
- Fixed inability to import package if there are no packages installed (#134).
Enable drag-n-drop
checkbox value inConfigure
dialog is no longer ignored.- Slow script detection now works inside script-editing modals (#143).
- Fixed incorrect relative path calculation when
include
is called from methods defined in another file (#142). - Fixed timers not stopping when they should (#135).
- Fixed various errors in
complete
samples (by marc2003):- Fixed crash on invalid query in auto-playlist script.
- Thumbs script now downloads images only when the corresponding mode is set.
1.4.1 - 2021-02-14
- Changed casing of
window.JsMemoryStats
fields for consistency with the rest of API. - Added indicator when panel name is overriden by the script in
Configure
dialog. - Improved package manager behaviour in various scenarios.
- Fixed various bugs in
Package
tab ofConfigure
dialog. - Fixed sorting of package files.
- Fixed conflict with
foo_wave_seekbar
. - Fixed
foo_acfu
integration. - Fixed data not refreshing on
Apply
inConfigure
dialog.
1.4.0 - 2021-02-11
- Added a brand new
Configure
dialog! - Added more ways to consume scripts:
- Quick access to built-in script samples.
- Load scripts by path.
- Use script packages (see below for more info).
- Implemented script package support:
- Can contain multiple scripts and assets.
- Can be easily exported and imported as a single file.
- Has a package manager to view and manage all installed packages.
- Panel name can be changed now via
Configure
dialog. - Default script editor can be changed now via drop-down menu of
Edit
button inConfigure
dialog. - Added a link to component docs to foobar2000
Help
main menu. - API changes:
- Added iterator protocol support to
FbMetadbHandleList
. - Added
type
argument toFbUiSelectionHolder.SetSelection()
. - Added
fb.Version
property. - Added
utils.DetectCharset()
method. - Added
utils.EditTextFile()
method. - Added
utils.FileExists()
method. - Added
utils.GetFileSize()
method. - Added
utils.GetPackagePath()
method. - Added
utils.IsDirectory()
method. - Added
utils.IsFile()
method. - Added
utils.SplitFilePath()
method. - Added
window.DefineScript()
method. - Added
window.EditScript()
method. - Added
window.ShowConfigureV2()
method. - Added
window.JsMemoryStats
property. - Added
window.ScriptInfo
property.
- Added iterator protocol support to
- Moved
Properties
dialog to a separate tab ofConfigure
dialog. Grab focus
is now a script property and is defined viawindow.DefineScript()
.- Extracted
Edge style
andPseudo-transparency
options to a separate tab ofConfigure
dialog. - API changes:
utils.FileTest()
is marked as [Deprecated]. Use new corresponding methods instead.window.ID
is now optional and unused in all methods that required it.window.DefinePanel()
is marked as [Deprecated]. Usewindow.DefineScript()
instead.window.MemoryLimit
,window.PanelMemoryUsage
andwindow.TotalMemoryUsage
are marked as [Deprecated]. Usewindow.JsMemoryStats
instead.window.Name
now returns panel name instead of script name. Usewindow.ScriptInfo.Name
to retrieve script name.window.ShowConfigure()
is marked as [Deprecated]. Usewindow.ShowConfigureV2()
to configure panel andwindow.EditScript
to edit script.
- Fixed component crash when passing objects to
console.log()
. - Fixed component crash when there is a stack overflow in JS.
- Fixed the weird image offset when using
fb.DoDragDrop()
with custom image and theming disabled. - Fixed
utils.ShowHtmlDialog()
not applying IE mode, when HTML code is passed directly to the method. - Various
ActiveXObject
fixes:- Errors in callbacks passed to
ActiveXObject
objects and methods are now properly propagated to the script. - Fixed inability to use subscripts with some
ActiveXObject
objects. - Added iterator protocol support to enumerable
ActiveXObject
objects.
- Errors in callbacks passed to
- Fixed various errors in
complete
samples (by marc2003).
1.3.1 - 2020-07-18
- Fixed
FbTooltip.SetFont()
not working. - Fixed a memory leak when using
window.Tooltip
. - Fixed task id collision in
gdi.LoadImageAsync()
.
1.3.0 - 2020-07-10
- Re-added ability to automatically download thumbnail images to
thumbs.js
sample (by marc2003). - Added missing documentation for
fb.GetDSPPresets()
andfb.SetDSPPreset()
. - API changes:
- Added
GdiBitmap.InvertColours()
method. - Added
ActiveXObject.ActiveX_CreateArray()
method. - Added
window.Tooltip
property. - Added
FbTooltip.SetFont()
method. window.CreateTooltip()
method is marked as [Deprecated]. Usewindow.Tooltip
instead.
- Added
- Updated SpiderMonkey JavaScript engine to 68.8.0 ESR:
- ECMAScript 2019 conformant JavaScript.
- Various performance improvements and bug fixes.
- Adjusted a "Function failed successfully" error message (e.g. when running out of GDI handles).
- Updated
Tooltip
sample.
- Fixed incorrect sorting in
FbMetadbHandleList.OrderByRelativePath()
. - Fixed
fb.GetDSPPresets()
: now it returns a proper value. - Fixed
fb.IsMainMenuCommandChecked()
not working with hidden by default menu items. - Fixed garbled error messages on systems with non-English locale.
- Fixed
Replace All
action and RegExp handling inFind/Replace
dialog. - Fixed crash in some of
.js
samples when deleting a file via context menu.
1.2.3 - 2020-01-04
- Moved documentation from Wiki to a new homepage: https://theqwertiest.github.io/foo_spider_monkey_panel:
- Contains JS documentation for the latest release.
- Contains script showcase with basic information about sample scripts and user-made scripts.
- Updated
FindReplace
dialog inConfigure
:- Added wrap-around support.
- Dialog is transparent when unfocused.
- Made
Go to
dialog inConfigure
modeless.
- Reimplemented
FbMetadbHandleList::OrderByRelativePath()
:- Uses MUCH less memory.
- Faster by 10% (on sorted list) to 500% (on unsorted list).
- Adjusted codepage detection with various file handling methods.
- Adjusted playlist lock check during drag-n-drop and
plman.AddLocations()
: now onlyplaylist_lock::filter_add
flag is checked. - Removed unneeded
on_size()
call. - Adjusted component initialization time reported in console to be more accurate.
- Updated marc2003 scripts:
- Note:
ListenBrainz
sample was removed - use https://github.com/marc2k3/foo_listenbrainz2 instead.
- Note:
- Fixed rare crash when using
utils.RunMainMenuCommand()
andutils.IsMainMenuCommandChecked()
. - Fixed crash when working with COM on systems with non-English locale.
- Fixed
window.GetProperty()
not working when name contained whistespace at the beggining. - Fixed other various crashes.
- Fixed occasional double error report in console.
- Fixed crashes in
jsplaylist-mod
and other complete samples (by marc2003).
1.2.2 - 2019-09-14
- API changes:
- Added global constructor for
GdiFont
. - Added support for passing arguments to the callback in
setInterval()
andsetTimeout()
.
- Added global constructor for
- More accurate colour calculation in
GetColourScheme()
andGetColourSchemeJson()
. - Made GetColourXXX and GetFontXXX behaviour more consistent:
- GetColourXXX always returns black colour when the requested one is not available.
- GetFontXXX always returns null when the required font is not found.
- Tweaked GC behaviour to reduce memory consumption during panel reload.
- Updated
HtmlDialogWithCheckBox
sample.
- A lot of fixes to
utils.ShowHtmlDialog()
:- Fixed an occasional fb2k crash.
- Added proper shortcut handling (e.g. CTRL-C, CTRL-V).
- Fixed
enter
key always closing the dialog. - Fixed incorrect handling of some keyboard events (e.g. space and tab keys).
- Fixed
FbUiSelectionHolder.SetPlaylistSelectionTracking()
not working. - Fixed fb2k crash when there is an error in a cached script.
- Fixed slow script handler triggering wrongly with some modal dialogs.
- Fixed error report being blank in some cases.
- Fixed docs for
FbMetadbHandle.GetFileInfo()
: was missing info about return value. - Fixed crashes in
jsplaylist-mod
,js-smooth
,thumbs
and other complete samples (by marc2003).
1.2.1 - 2019-04-24
- Fixed another fb2k freeze on exit.
1.2.0 - 2019-04-22
- Improved
include()
method:- Added support for relative paths.
- Added script caching - script file will be read only once from filesystem (even if it is included from different panels). Improves panel initialization speed when re-using same script files.
- Added include guard - script won't be evaluated a second time if it was evaluated before in the same panel (handled by new
options.always_evaluate
argument).
- Added slow script handling: script can be aborted now if it's unresponsive for some time.
- Improved performance of
utils.FileTest(path, 's')
.
- Fixed crashes in
Thumbs
andAlbum Art
complete samples (by marc2003). - Fixed
GdiBitmap.GetColourScheme()
not limiting the number of output colours. - Fixed potential memory leaks when using
window.NotifyOthers()
. - Tweaked GC to reduce the memory footprint.
- Fixed fb2k freeze on exit.
- Fixed invalid colour calculation in
GdiBitmap.GetColourSchemeJSON()
. - Fixed colour rounding errors in
GdiBitmap.GetColourScheme()
andGdiBitmap.GetColourSchemeJSON()
.
1.1.5 - 2019-01-21
- Panel Properties now uses JSON format by default for export.
- Fixed incorrect parsing of UCS-2 LE encoded files.
1.1.4 - 2019-01-20
- Fixed
fb.RunContextCommandWithMetadb()
not working with most commands.
1.1.3 - 2019-01-17
- Removed image resizing for
custom_image
infb.DoDragDrop()
when image is smaller than the drag window. - All file dialogs now remember last used location.
- Fixed
Last.fm Similar Artists + User Charts + Recent Tracks
script crash. - Fixed callbacks not triggering when
MenuObject.TrackPopupMenu()
or default context menu is active.
1.1.2 - 2019-01-09
- Added additional options to
fb.DoDragDrop()
:show_text
,use_album_art
,use_theming
andcustom_image
. - By default
fb.DoDragDrop()
now displays an album art of the dragged item (if available).
- Cleaned up
Panel Configuration
dialog:- Moved all buttons and checkboxes to menu bar.
- Added
Help
button, which opens supplied html documentation. Export
\Import
now use*.js
extension by default.
- Fixed callbacks not triggering when
fb.DoDragDrop()
is active. - Fixed
on_colours_changed()
callback not triggering in DUI. - Fixed several fb2k crashes when triggerring script error.
- Fixed several fb2k freezes when fetching album art through 3rd party components.
- Fixed a few more fb2k freezes.
- Fixed
utils.ReadTextFile()
not working with empty files. - Fixed
utils.GetAlbumArtAsync()
not working in some cases. - Removed extra quotes in
console.log()
when printing strings outside of objects and arrays. - Fixed occasional EOL issues in error report.
1.1.1 - 2018-11-20
- Fixed error in object constructor when it is invoked with data from
on_notify_data()
callback.
1.1.0 - 2018-11-19
- Improved drag-n-drop window:
- Image displays number of tracks being dragged.
- Tooltip text describes the performed drop action (configurable through
action.Text
field).
- API changes:
- Added
clearInterval()
,clearTimeout()
,setInterval()
,setTimeout()
methods to global namespace. - Added
gdi.LoadImageSyncV2()
method. - Added
utils.GetAlbumArtAsyncV2()
method. - Added arguments to
FbProfiler.Print()
: additional message and an option to disable component info. - Added global constructors for the following objects:
FbMetadbHandleList
: from anotherFbMetadbHandleList
, from an array ofFbMetadbHandle
, from a singleFbMetadbHandle
and a default constructor.GdiBitmap
: from anotherGdiBitmap
.FbProfiler
: accepts the same arguments asfb.CreateProfiler()
.FbTitleFormat
: accepts the same arguments asfb.TitleFormat()
.
- Added
- Improved logging of objects through
console.log
: now it displays object's content as well. - Added documentation link to default context menu (accessible via
WIN-SHIFT-RightClick
). - Added
callbacks
to HTML documentation. - Updated basic samples with the new methods.
- API changes:
fb.DoDragDrop()
now requires an additionalwindow.ID
argument.fb.CreateHandleList()
is marked as [Deprecated]. UseFbMetadbHandleList
constructor instead.
- Reimplemented SMP call handling so as to conform with
Run to completion
rule. - Made adjustment to GC policies.
FbMetadbHandle.FileSize
returns -1 properly now when file size is not available.
1.0.5 - 2018-11-06
- Added basic handling of exception-like objects and objects derived from
Error
in pre-ES6 style. - Added handling of unhandled rejected promises.
- API changes:
- Added properties to
window
for memory usage tracking:MemoryLimit
,TotalMemoryUsage
andPanelMemoryUsage
.
- Added properties to
- Fixed timing of promises invocation: now conforms to ES standard.
- Fixed several memory leaks on panel layout switch and on script error.
- Fixed crash on in-panel layout switch.
1.0.4 - 2018-10-25
- Added HTML documentation.
- Improved error reports of component startup failures.
- Ported JScript Panel changes:
- Added
FbMetadbHandleList.RemoveAttachImages()
method.
- Added
- Improved
include()
performance by 2x. - Tweaked GC for better UX during high load.
- Rewrote
plman.PlaylistRecyclerManager
, since it was broken:- Replaced
Name
property withGetName()
method. - Replaced
Content
property withGetContent()
method. - Renamed to
plman.PlaylistRecycler
.
- Replaced
- Rewrote
Interfaces.js
- Fixed invalid and incorrect JSDoc tags.
- Renamed to
foo_spider_monkey_panel.js
.
- Fixed crash when
on_main_menu()
callback was invoked. - Fixed crash when switching layout from inside the panel.
- Fixed occasional crash on panel removal.
- Fixed incorrect handling of UTF-16 BOM files in
include()
andutils.ReadTextFile()
. - Fixed
ThemeManager.DrawThemeBackground()
: was ignoringstate_id
argument. - Fixed invalid calculation of image size, which resulted in premature OOM errors.
1.0.3 - 2018-10-11
- Reimplemented
utils.ShowHtmlDialog()
. It's no longer considered [Experimental] and is safe to use. - Updated
Interfaces.js
:- Updated
utils.ShowHtmlDialog()
doc. - Updated
fb.DoDragDrop()
doc. - Updated
fb.IsMainMenuCommandChecked()
doc.
- Updated
- Updated
ActiveXObject.js
: added info on helper methodsActiveX_Get()
/ActiveX_Set()
.
1.0.2 - 2018-10-05
- Fixed regression in
ActiveXObject
handling.
1.0.1 - 2018-10-05
- Integrated
foo_acfu
update checks. - Added Scintilla line-wrap settings to
Preferences > Tools > Spider Monkey Panel
.
- [Experimental] Replaced
utils.CreateHtmlWindow()
withutils.ShowHtmlDialog()
. - Updated
Interfaces.js
:- Updated
window.GetProperty()
/window.SetProperty()
docs. - Updated
utils.Version
doc. - Updated
FbMetadbHandleList.UpdateFileInfoFromJSON()
doc.
- Updated
- Disabled callback invocation until script is fully evaluated.
- Fixed
fb.RunContextCommandWithMetadb()
. - Fixed samples:
- Removed left-over
.Dispose()
calls. - Rewrote HTML dialog sample (HtmlDialogWithCheckBox.txt).
- Removed left-over
- Added a few fixes to
ActiveXObject
for better compatibility.
1.0.0 - 2018-10-01
- Added stack trace to error reports.
- API changes:
- JavaScript is now conformant to ES2017 standard.
- All arrays now can be accessed directly with [] operator (no need for
toArray()
cast). - FbMetadbHandleList items now can be accessed with [] operator.
- Added global
include()
method. - Added
window.DefinePanel()
method. - [Experimental] Added
utils.CreateHtmlWindow()
method.
- Rewrote component to use Mozilla SpiderMonkey JavaScript engine.
- Windows 7 is the minimum supported OS now.
- API changes:
- All methods and properties are case-sensitive as required by ECMAScript standard.
- Removed
Dispose()
andtoArray()
methods. - Removed
FbMetadbHandleList.Item()
method. - Removed old
==PREPROCESSOR==
panel header support. utils.Version
returns string instead of number.- More rigorous error checks.
- Updated samples with compatibility fixes.