Link Search Menu Expand Document

Changelog

Table of Contents


Unreleased

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.

Copyright © 2018-2021 Yuri Shutenko.
Distributed by an MIT license.