Skip to main content

Changelog

0.0.20

Note that this release contains a breaking change.

Removed

  • (BREAKING): removed the plugin.rem.createWithMarkdown method. It has been replaced by two new methods: plugin.rem.createSingleRemWithMarkdown and plugin.rem.createTreeWithMarkdown.

Added

  • Added plugin.rem.createTreeWithMarkdown(markdown) method. This method creates a tree of Rem from your parsed markdown. Newlines will be turned into separate sibling/child Rem.
  • Added plugin.rem.createSingleRemWithMarkdown(markdown) method. This method creates a single Rem from your parsed markdown. Newlines will NOT be turned into separate sibling/child Rem.

0.0.19

Added

  • Added a new namespace for accessing knowledge base information. To access a user's knowledge base information, your plugin needs to add the KnowledgeBaseInfo permission scope in the manifest.json file. See the permission scope docs for more detail.
  • Added plugin.kb.getCurrentKnowledgebaseData and plugin.kb.isPrimaryKnowledgeBase methods

Other Changes

  • We now support uploading unlisted plugins for personal use. See the unlisted plugins docs for a guide on how to upload and install unlisted plugins.

0.0.18

Added

  • Added a new method called plugin.app.transaction to run code inside a transaction. If the code throws an error, the transaction will be not be saved to disk. Be careful not to hold transactions open for extended periods of time, as this might block other parts of the app.

Theming and CSS

  • We now support uploading simpler CSS snippet plugins which only contain CSS. Simply copy and paste your CSS snippet into a snippet.css file, zip and upload. No need to mess around with GitHub or JS! See the Custom CSS docs for a guide on how to do this.

Other Changes

  • Updated the plugin.rem.createWithMarkdown function so that if the markdown string contains newlines, a single Rem is created containing newlines, rather than a separate Rem for each newline.
  • Added clickOutsideToClose?: boolean parameter to the plugin.widget.openPopup method.
  • Added addTitle?: boolean parameter to the plugin.rem.createLinkRem method.

0.0.17

Added

  • Added a new method to create Rem representing web links called plugin.rem.createLinkRem.
    • If you want to include the link in rich text, use the plugin.richText.rem method and pass the link Rem's _id as an argument

Fixes and Improvements

  • Made some minor changes related to fix special callback handling. This should only affect custom SRS scheduler plugins.

0.0.16

Fixes and Improvements

  • Small fix to the RepetitionStatus interface, renaming the customData field to pluginData.

0.0.15

This version adds support for Plugin SRS Schedulers as well as some new features and bug fixes.

Added

Plugin SRS Schedulers

With this release RemNote now supports Plugin SRS Schedulers. It will be possible to install Plugin Schedulers through the plugin marketplace and customize them in the Custom Scheduler settings page.

  • Added a new plugin.scheduler namespace.
  • Added a plugin.scheduler.registerCustomScheduler method to register a plugin scheduler with custom scheduler parameters.
  • Upated the plugin.app.registerCallback command to optionally take a generic parameter. This is used to provide type inference for the special SRSScheduleCard callback.

Other Additions

  • Added a new parameter closeWhenClickOutside?: boolean to the plugin.window.openFloatingWidget method. It is true by default.
  • Added support for custom placeholders to the RichTextEditor components through a new placeholder prop.
  • Added a new QueueLoadCard event which fires each time a card changes in the queu so you can keep track of what the current card in the queue is.
  • Added a new widget location filter field called remId to the registerWidget options parameter. Plugins can now register widgets in locations filtered by a particular Rem Id.

Fixes and Improvements

  • Fixed an issue with localhost plugins failing to activate.
  • Fixed editor text not immediately updating when calling the rem.setBackText method.
  • Fixed the RichText component throwing an error and refusing to load.
  • Fixed button click events not working in native plugins.
  • Fixed registered plugin commands not always getting added to the Omnibar and Slash Command Menu.

0.0.14 - 2022-09-22

Fixed

  • Fixed incompatibility of the npx scripts with lower node versions.

0.0.11..0.0.13 - 2022-09-22

Skipped.

0.0.10 - 2022-09-20

This version we focused on tooling around plugin creation.

Added

  • npx scripts to initialise and validate a plugin before upload.
    • npx remnote-plugin init command to generate the manifest.json file with an interactive prompt.
    • npx remnote-plugin validate to validate the plugin before uploading.
  • Support plugin template npm scripts on Windows.
  • Json schema and linting for manifest.json.
  • richText.indexOfElementAt function to convert a string index to a rich text element array index.

Fixes and Improvements

  • Fix getSelectedRem and getSelectedText reactivity.
  • Removed stealKeys and releaseKeys methods from the editor namespace. They have already been moved into the app namespace.

Theming and CSS

0.0.9 - 2022-08-31

Fixed

  • Fix window.stealKeys, window.releaseKeys and app.unregisterWidget calling wrong endpoints.

0.0.8 - 2022-08-31

Changed

  • Manifest: repoUrl is required for now.
  • Manifest: enabledOnMobile (boolean) must be set if the plugin should run on mobile. Make sure the plugin does require any features not supported on mobile yet, like the right sidebar.
    • ✨ Completely refactored the editor namespace.
    • This makes it more suitable for programmatically modifying content. We plan to reintroduce methods to simulate user actions.
  • Rem class
    • Renamed Rem.tagAncestorRem to Rem.ancestorTagRem and Rem.tagDescendantRem to Rem.descendantTagRem.
    • Renamed Rem.u to Rem.updatedAt and Rem.o to Rem.localUpdatedAt.
    • Renamed (set)isCollapsedPortal to (set)isCollapsed.
  • RichTextBuilder normalizes rich text now. This turns value() into an async method.
  • Changed getFocusedPortalId(): RemId to getFocusedPortal(): Rem.
  • Removed getDescendantIds(): RemId[] in favor of getDescendants() : Rem[].
  • Moved stealKeys/releaseKeys into the app namespace.
  • Moved getWidgetContext into the widget namespace.
  • Flattened context data for WidgetLocation.Popup (context.openContext.focusedRemId -> context.focusedRemId)

Added

  • ✨ Added 18 new methods to the richText namespace
    • General: empty, indexOf, length
    • Modification: replaceAllRichText, split, splitRichText, trim, trimStart, trimEnd
    • Formatting: removeTextFormatFromRange, applyTextFormatFromRange, applyTextFormatFromRange
    • Conversion: toHTML
    • Linking: getRemIdsFromRichText, deepGetRemIdsFromRichText, getRemAndAliasIdsFromRichText, deepGetRemAndAliasIdsFromRichText, findAllExternalURLs
  • ✨ Added experimental rem.getAll() and card.getAll() methods to get all rem or cards respectively. Use with care on large KBs😄.
  • ✨ Added experimental shotcut capturing system to implement custom keyboard controls, like a VIM mode.
  • Support reactivity in the index widget. Wrap your API calls in plugin.track() and they rerun automatically when something has changed.
  • Make focus.focusedRem() and focus.getFocusedPortal() reactive and add AppEvents.FocusedRemChange and AppEvents.FocusedPortalChange events for manual tracking.
  • Add AppEvent.PowerupSlotChanged event to watch for powerup changes, like todo status or highlight color.
  • Added date.getDailyDoc(date: Date).
  • Added Rem.removeTag(tagId: RemId, removeProperties = false). If removeProperties is specified all slots of the tag will be removed as well.
  • Added Rem.removePowerup(powerupCode). It will always remove all powerup slots.
  • Added onlyProgrammaticModifying: boolean and hidden: boolean powerup slot options. Set these to ensure data consistency.
  • Added widget.closeAllFloatingWidgets().

Fixes and Improvements

  • Many methods accept Rem as parameter in addition to RemId. Rem wrapper objects are the preferred way to work with rem and we want to abstract away RemIds as best as possible.
  • Fix AppEvents.QueueCompleteCard event being triggered too often.
  • Fix RichTextBuilder duplicating references.
  • Make searchContextRemId optional in search.search(). If you omit the context rem searches globally.
  • Typings: Add return type for all methods that were still returning Promise<any>.
  • Typings: Type Rem.setHighlightColor with the available highlight colors.
  • Typings: Add RepetitionStatus type.

Theming and CSS

  • Added data-cloze-id data attribute to Fill-In-The-Blank elements.
  • Added rn-plugin-root class to the plugin iframe (sandboxed) or div (native) node.

Other

  • Add Repository and Report bugs links to the marketplace details page.
  • Manifests are now validated on build.

0.0.7 - 2022-08-01

Changed

  • Change getFocusedRemId(): RemId to getFocusedRem(): Rem.

Added

  • Added Rem.addPowerup(powerupCode: BuildInPowerupCodes).
  • Added widget.getDimensions(widgetInstanceId: number). You can get the widgetInstanceId from the getWidgetContext().
  • Added remId to the widget context of WidgetLocation.UnderRemEditor.

Fixes and Improvements

  • Some Rem methods had the wrong permission levels.

Other

0.0.6 - 2022-07-14

Changed

  • Make settings.getSetting generic, e.g. plugin.settings.getSetting<string>('my-string-setting');

0.0.5 - 2022-07-14

0.0.4 - 2022-07-14

Changed

  • Move addListener and removeListener into new event namespace.
  • Move register* and toast into new app namespace.
  • Move unregisterWidget and getWidgetContext to the widget namespace.

0.0.3 - 2022-07-14

Changed

  • Refactored useReactiveAPI to useTracker replacing individual hooks.

0.0.2 - 2022-07-11

Added

  • useReactiveAPI hook.

0.0.1 - 2022-07-09

Initial release 🎉.