Changelog Table of Contents 1.6.1 - 2022-01-14 Changed API changes: Reverted changes in window.NotifyOthers()
behaviour. Now it’s executed synchronously as before. Fixed 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 Added WIC support in image and art loaders, which enables WebP support (see FAQ for more info). API changes: Added IsInternal
field to action
argument (that is passed to on_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 spectrogram seekbar.js
sample (by marc2003). Changed 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. Fixed 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 Changed Rollbacked the fix for timers from 1.5.0 , since it was causing fb2k freezes (#135 ). Fixed Fixed unicode handling in script paths. 1.5.1 - 2021-07-03 Added API changes: Added plman.GetPlaylistLockName()
method. Fixed Fixed fb2k freeze that could happen when using ActiveXObject
. 1.5.0 - 2021-06-30 Added API changes: Added fine-grained playlist lock control via plman.GetPlaylistLockedActions()
and plman.SetPlaylistLockedActions()
(#144 ). Added utils.GetPackageInfo()
method. Added fb.Restart()
method. Changed 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 to GdiGraphics.CalcTextWidth()
to improve width calculation accuracy in certain cases (#140 ). utils.GetPackagePath()
is marked as [Deprecated] . Use utils.GetPackageInfo()
instead. plman.IsPlaylistLocked()
is marked as [Deprecated] . Use plman.GetPlaylistLockedActions()
instead. Fixed 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 in Configure
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 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 Fixed various bugs in Package
tab of Configure
dialog. Fixed sorting of package files. Fixed conflict with foo_wave_seekbar
. Fixed foo_acfu
integration. Fixed data not refreshing on Apply
in Configure
dialog. 1.4.0 - 2021-02-11 Added 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 in Configure
dialog. Added a link to component docs to foobar2000 Help
main menu. API changes: Added iterator protocol support to FbMetadbHandleList
. Added type
argument to FbUiSelectionHolder.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. Changed Moved Properties
dialog to a separate tab of Configure
dialog. Grab focus
is now a script property and is defined via window.DefineScript()
. Extracted Edge style
and Pseudo-transparency
options to a separate tab of Configure
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] . Use window.DefineScript()
instead. window.MemoryLimit
, window.PanelMemoryUsage
and window.TotalMemoryUsage
are marked as [Deprecated] . Use window.JsMemoryStats
instead. window.Name
now returns panel name instead of script name. Use window.ScriptInfo.Name
to retrieve script name. window.ShowConfigure()
is marked as [Deprecated] . Use window.ShowConfigureV2()
to configure panel and window.EditScript
to edit script. Fixed 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. Fixed various errors in complete
samples (by marc2003). 1.3.1 - 2020-07-18 Fixed 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 Added Re-added ability to automatically download thumbnail images to thumbs.js
sample (by marc2003). Added missing documentation for fb.GetDSPPresets()
and fb.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] . Use window.Tooltip
instead. Changed 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 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 in Find/Replace
dialog. Fixed crash in some of .js
samples when deleting a file via context menu. 1.2.3 - 2020-01-04 Added 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 in Configure
: Added wrap-around support. Dialog is transparent when unfocused. Made Go to
dialog in Configure
modeless. Changed 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 only playlist_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: Fixed Fixed rare crash when using utils.RunMainMenuCommand()
and utils.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 Added API changes: Added global constructor for GdiFont
. Added support for passing arguments to the callback in setInterval()
and setTimeout()
. Changed More accurate colour calculation in GetColourScheme()
and GetColourSchemeJson()
. 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. Fixed 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 Fixed another fb2k freeze on exit. 1.2.0 - 2019-04-22 Added 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. Changed Improved performance of utils.FileTest(path, 's')
. Fixed Fixed crashes in Thumbs
and Album 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()
and GdiBitmap.GetColourSchemeJSON()
. 1.1.5 - 2019-01-21 Changed Panel Properties now uses JSON format by default for export. Fixed Fixed incorrect parsing of UCS-2 LE encoded files. 1.1.4 - 2019-01-20 Fixed Fixed fb.RunContextCommandWithMetadb()
not working with most commands. 1.1.3 - 2019-01-17 Changed Removed image resizing for custom_image
in fb.DoDragDrop()
when image is smaller than the drag window. All file dialogs now remember last used location. Fixed 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 Added additional options to fb.DoDragDrop()
: show_text
, use_album_art
, use_theming
and custom_image
. By default fb.DoDragDrop()
now displays an album art of the dragged item (if available). Changed 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 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 Fixed error in object constructor when it is invoked with data from on_notify_data()
callback. 1.1.0 - 2018-11-19 Added 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 another FbMetadbHandleList
, from an array of FbMetadbHandle
, from a single FbMetadbHandle
and a default constructor. GdiBitmap
: from another GdiBitmap
. FbProfiler
: accepts the same arguments as fb.CreateProfiler()
. FbTitleFormat
: accepts the same arguments as fb.TitleFormat()
. 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. Changed API changes: fb.DoDragDrop()
now requires an additional window.ID
argument. fb.CreateHandleList()
is marked as [Deprecated] . Use FbMetadbHandleList
constructor instead. Reimplemented SMP call handling so as to conform with Run to completion
rule. Made adjustment to GC policies. Fixed FbMetadbHandle.FileSize
returns -1 properly now when file size is not available. 1.0.5 - 2018-11-06 Added 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
and PanelMemoryUsage
. Fixed 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 Added HTML documentation. Improved error reports of component startup failures. Ported JScript Panel changes: Added FbMetadbHandleList.RemoveAttachImages()
method. Changed Improved include()
performance by 2x. Tweaked GC for better UX during high load. Rewrote plman.PlaylistRecyclerManager
, since it was broken: Replaced Name
property with GetName()
method. Replaced Content
property with GetContent()
method. Renamed to plman.PlaylistRecycler
. Rewrote Interfaces.js
Fixed invalid and incorrect JSDoc tags. Renamed to foo_spider_monkey_panel.js
. Fixed 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()
and utils.ReadTextFile()
. Fixed ThemeManager.DrawThemeBackground()
: was ignoring state_id
argument. Fixed invalid calculation of image size, which resulted in premature OOM errors. 1.0.3 - 2018-10-11 Changed 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 ActiveXObject.js
: added info on helper methods ActiveX_Get()
/ActiveX_Set()
. 1.0.2 - 2018-10-05 Fixed Fixed regression in ActiveXObject
handling. 1.0.1 - 2018-10-05 Added Integrated foo_acfu
update checks. Added Scintilla line-wrap settings to Preferences > Tools > Spider Monkey Panel
. Changed [Experimental] Replaced utils.CreateHtmlWindow()
with utils.ShowHtmlDialog()
. Updated Interfaces.js
: Updated window.GetProperty()
/window.SetProperty()
docs. Updated utils.Version
doc. Updated FbMetadbHandleList.UpdateFileInfoFromJSON()
doc. Fixed Disabled callback invocation until script is fully evaluated. Fixed fb.RunContextCommandWithMetadb()
. Fixed samples: Removed left-over .Dispose()
calls. Rewrote HTML dialog sample (HtmlDialogWithCheckBox.txt). Added a few fixes to ActiveXObject
for better compatibility. 1.0.0 - 2018-10-01 Added 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. Changed 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()
and toArray()
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.