Changelog
0.0.39
- Breaking: updated the
plugin.app.registerPowerupmethod to take an object argument instead.
0.0.38
- Added
cardIdto theAppEvents.RevealAnswerevent data.
0.0.37
- Added
plugin.app.waitForInitialSyncmethod which returns a promise that resolves when the initial sync is complete. This is useful for plugins that need to wait for the initial sync to complete before eg. syncing data from a third party service.
0.0.36
- Added
plugin.queue.getCurrentCardmethod to get the current card in the flashcard queue.
0.0.35
- Small CSS changes to fix native plugins in dark mode.
0.0.34
- Added
WidgetLocation.FlashcardUnderwidget location which allows you to add extra elements under the flashcard content.
0.0.33
- Added a new
queueItemTypeFilterfor the register widget method.
0.0.32
- Added a new reader namespace
plugin.readerwhich contains methods related to the PDF reader and web reader. - Added
SelectionType.PDFandSelectionType.WebReaderto theSelectionTypeenum. Methods that return aSelectionTypevariable may now take these new values. - Added a
DocumentViewercomponent to render a Rem using the full document editor.
0.0.31
- Added
parseAndInsertHtmlmethod to theplugin.richTextnamespace. - Added
plugin.rem.createTablemethod for creating table Rem. - Added
rem.isTablemethod to check if a Rem is a table. - Added
rem.setTableFiltermethod to set the filter of a table. - Added
Queryclass to help build table filters. For example:
// Filter a table to show only Rem where the `column-id` column contains the text "hello" or "world".
const tableRem = ...
const query = Query.tableColumn('column-id', Query.or([
Query.text(TextMatcher.Contains, 'hello'),
Query.text(TextMatcher.Contains, 'world'),
]));
await tableRem.setTableFilter(query);
- Added property options to the
plugin.app.registerPowerupmethod. This allows plugins to integrate nicely with tables. For example:
await plugin.app.registerPowerup(
'Incremental',
powerupCode,
'Incremental Everything Powerup',
{
slots: [
{
code: prioritySlotCode,
name: 'Priority',
propertyType: PropertyType.NUMBER,
propertyLocation: PropertyLocation.RIGHT,
},
{
code: nextRepDateSlotCode,
name: 'Next Rep Date',
propertyType: PropertyType.DATE,
propertyLocation: PropertyLocation.RIGHT,
},
],
},
);
- Added
plugin.app.unregisterMenuItemmethod to unregister menu items. - Added
plugin.queue.inLookbackModemethod to check if the user has gone back in the flashcard queue. - Added
PluginCommandMenuLocation.DocumentMenulocation to theplugin.app.registerMenuItemmethod.
0.0.30
Added
- Added
SpecialPluginCallback.GetNextCardcallback which allows you to inject cards into the flashcard queue. - Added
rem.allRemInFolderQueuemethod which returns all the Rem which are searched for cards in when practicing a specific Rem's cards in the flashcard queue. - Added
WidgetLocation.FlashcardAnswerButtonswidget location which allows you to override the flashcard answer buttons. - Added
PluginCommandMenuLocation.ReaderMenuandPluginCommandMenuLocation.PDFHighlightPopupLocationlocations to theplugin.app.registerMenuItemmethod.
0.0.29
Added
- Added
rem.getTagPropertyValue(propertyId: RemId)andrem.setTagPropertyValue(propertyId: RemId, value: any)methods to get and set the value of a cell in a table. - Added
rem.getPropertyType()method to get the data type of a tag's property. - Added the ability to register menu item buttons in the table property menu using the
plugin.app.registerMenuItemmethod.
0.0.28
Added
- Added
getPlatformandgetOperatingSystemmethods to theplugin.appnamespace.
0.0.27
Added
- Added the
scheduledfield to theRepetitionStatusinterface.
0.0.26
Added
- Added the
createdAtfield to theRemobject.
0.0.25
Added
- Added
window.isPageOpenmethod to check whether a user is on a particular page. Eg.window.isPageOpen(PageType.Queue). - Added a new
plugin.queuenamespace containing methods related to the flashcard queue. - Added
plugin.queue.getNumRemainingCardsmethod to check how many cards are left in the current queue. - Added
plugin.queue.getCurrentStreakmethod to get the user's current streak.
0.0.24
Added
- Added widget mount locations for the Flashcard Home Deck Page and the Learning Progress Page.
0.0.23
Added
- Added
data-plugin-idselectors to style specific plugins. - Plugins must update to >= SDK v0.0.23 for the selector to appear.
Example:
div[data-plugin-id='demo-tabs'] {
color: blue;
}
0.0.22
Updated
- Custom CSS block styles will be applied to plugins.
- Theme plugin styles will be applied to other plugins.
- Plugins must update to >= SDK v0.0.22 to be styled by Custom CSS and themes.
0.0.21
Added
- Added
cardId: string | undefinedparameter to theSRSScheduleCardcallback. Note thatcardIdisundefinedwhen the method is called to calculate interval dates for the interval spacing visualization on the Custom Scheduler settings page. But when calculating scheduling dates for cards, thecardIdshould always be defined.
0.0.20
Note that this release contains a breaking change.
Removed
- (BREAKING): removed the
plugin.rem.createWithMarkdownmethod. It has been replaced by two new methods:plugin.rem.createSingleRemWithMarkdownandplugin.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.getCurrentKnowledgebaseDataandplugin.kb.isPrimaryKnowledgeBasemethods
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.transactionto 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.createWithMarkdownfunction 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?: booleanparameter to theplugin.widget.openPopupmethod. - Added
addTitle?: booleanparameter to theplugin.rem.createLinkRemmethod.
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.remmethod and pass the link Rem's_idas an argument
- If you want to include the link in rich text, use the
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
RepetitionStatusinterface, renaming thecustomDatafield topluginData.
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.schedulernamespace. - Added a
plugin.scheduler.registerCustomSchedulermethod to register a plugin scheduler with custom scheduler parameters. - Upated the
plugin.app.registerCallbackcommand to optionally take a generic parameter. This is used to provide type inference for the specialSRSScheduleCardcallback.
Other Additions
- Added a new parameter
closeWhenClickOutside?: booleanto theplugin.window.openFloatingWidgetmethod. It is true by default. - Added support for custom placeholders to the
RichTextEditorcomponents through a newplaceholderprop. - Added a new
QueueLoadCardevent 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
remIdto theregisterWidgetoptions 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.setBackTextmethod. - Fixed the
RichTextcomponent 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
npxscripts 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
npxscripts to initialise and validate a plugin before upload.npx remnote-plugin initcommand to generate the manifest.json file with an interactive prompt.npx remnote-plugin validateto validate the plugin before uploading.
- Support plugin template npm scripts on Windows.
- Json schema and linting for
manifest.json. richText.indexOfElementAtfunction to convert a string index to a rich text element array index.
Fixes and Improvements
- Fix
getSelectedRemandgetSelectedTextreactivity. - Removed stealKeys and releaseKeys methods from the editor namespace. They have already been moved into the app namespace.
Theming and CSS
- Added
data-rem-propertyanddata-rem-container-propertydata attribute to target slot instances like[[Aliases]].
0.0.9 - 2022-08-31
Fixed
- Fix
window.stealKeys,window.releaseKeysandapp.unregisterWidgetcalling wrong endpoints.
0.0.8 - 2022-08-31
Changed
- Manifest:
repoUrlis 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
editornamespace. - This makes it more suitable for programmatically modifying content. We plan to reintroduce methods to simulate user actions.
- ✨ Completely refactored the
Remclass- Renamed
Rem.tagAncestorRemtoRem.ancestorTagRemandRem.tagDescendantRemtoRem.descendantTagRem. - Renamed
Rem.utoRem.updatedAtandRem.otoRem.localUpdatedAt. - Renamed
(set)isCollapsedPortalto(set)isCollapsed.
- Renamed
RichTextBuildernormalizes rich text now. This turnsvalue()into anasyncmethod.- Changed
getFocusedPortalId(): RemIdtogetFocusedPortal(): Rem. - Removed
getDescendantIds(): RemId[]in favor ofgetDescendants() : Rem[]. - Moved
stealKeys/releaseKeysinto theappnamespace. - Moved
getWidgetContextinto thewidgetnamespace. - Flattened context data for
WidgetLocation.Popup(context.openContext.focusedRemId->context.focusedRemId)
Added
- ✨ Added 18 new methods to the
richTextnamespace- General:
empty,indexOf,length - Modification:
replaceAllRichText,split,splitRichText,trim,trimStart,trimEnd - Formatting:
removeTextFormatFromRange,applyTextFormatFromRange,applyTextFormatFromRange - Conversion:
toHTML - Linking:
getRemIdsFromRichText,deepGetRemIdsFromRichText,getRemAndAliasIdsFromRichText,deepGetRemAndAliasIdsFromRichText,findAllExternalURLs
- General:
- ✨ Added experimental
rem.getAll()andcard.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()andfocus.getFocusedPortal()reactive and addAppEvents.FocusedRemChangeandAppEvents.FocusedPortalChangeevents for manual tracking. - Add
AppEvent.PowerupSlotChangedevent to watch for powerup changes, like todo status or highlight color. - Added
date.getDailyDoc(date: Date). - Added
Rem.removeTag(tagId: RemId, removeProperties = false). IfremovePropertiesis specified all slots of the tag will be removed as well. - Added
Rem.removePowerup(powerupCode). It will always remove all powerup slots. - Added
onlyProgrammaticModifying: booleanandhidden: booleanpowerup slot options. Set these to ensure data consistency. - Added
widget.closeAllFloatingWidgets().
Fixes and Improvements
- Many methods accept
Remas parameter in addition toRemId.Remwrapper objects are the preferred way to work with rem and we want to abstract awayRemIds as best as possible. - Fix
AppEvents.QueueCompleteCardevent being triggered too often. - Fix
RichTextBuilderduplicating references. - Make
searchContextRemIdoptional insearch.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.setHighlightColorwith the available highlight colors. - Typings: Add
RepetitionStatustype.
Theming and CSS
- Added
data-cloze-iddata attribute to Fill-In-The-Blank elements. - Added
rn-plugin-rootclass to the pluginiframe(sandboxed) ordiv(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(): RemIdtogetFocusedRem(): Rem.
Added
- Added
Rem.addPowerup(powerupCode: BuildInPowerupCodes). - Added
widget.getDimensions(widgetInstanceId: number). You can get thewidgetInstanceIdfrom thegetWidgetContext(). - Added
remIdto the widget context ofWidgetLocation.UnderRemEditor.
Fixes and Improvements
- Some
Remmethods had the wrong permission levels.
Other
- Added documentation for the
searchnamespace. - Added documentation for the
richTextnamespace. - Added documentation for Floating Widgets and Popup Widgets and Pane Widgets.
0.0.6 - 2022-07-14
Changed
- Make
settings.getSettinggeneric, e.g.plugin.settings.getSetting<string>('my-string-setting');
0.0.5 - 2022-07-14
0.0.4 - 2022-07-14
Changed
- Move
addListenerandremoveListenerinto neweventnamespace. - Move
register*andtoastinto newappnamespace. - Move
unregisterWidgetandgetWidgetContextto thewidgetnamespace.
0.0.3 - 2022-07-14
Changed
- Refactored
useReactiveAPItouseTrackerreplacing individual hooks.
0.0.2 - 2022-07-11
Added
useReactiveAPIhook.
0.0.1 - 2022-07-09
Initial release 🎉.