* Add _getTemplates function
* Add template renderer to display pages
* Add AnkiNoteBuilder to Display
* Update AnkiTemplatesController to directly use TemplateRenderer
* Remove old APIs
* Update AnkiNoteBuilder to not store a reference to an AniConnect instance
* Use more consistent details format
* Organize options assignment
* Move media injection
* Inject images before injecting audio
* Make functions private
* Make static functions private
* Add function guiBrowseNote
* Assign default server as null
* Use get/set properties for server/enabled
* Refactor option values
* Refactor createNote/Data functions to not use options format directly
* Use createNote for testing
* Add errors
* Remove JsonSchema.clone
* Move createProxy function
* Group public properties first
* Create private version of getPropertySchema
* Mark functions as private
* Use non-static getValidValueOrDefault
* Mark private
* Make public validate function not take an info parameter
* Remove JsonSchema
* Add isValid function
* Use isValid for some tests
* Fix incorrect type
* Move simple find sort into translator.js
* Remove unused
* Use direct reference to database
* Make field private
* Remove statics
* Convert functions to private
* Organize by public/private
* Revert audio fetching functionality to use XMLHttpRequest
* Replace requestJson
* Replace requestJson
* Replace requestJson
* Replace requestJson and requestText
* Fix tests
* Include support for vulgar word searches
* Remove request.js
* Move options functions into a class
* Rename and privatize
* Organize by public/private
* Refactor to use async function
* Simplify update function signature
* Add comment for update
* Rename
* Copy _applyUpdates into _legacyProfileUpdateUpdateVersion
* Organize
* Move profile options updates
* Refactor update details
* Add async support
* Formatting
* Update eslint to 7.5.0
* Update eslint-plugin-no-unsanitized to 3.1.2
* Update fake-indexeddb to 3.1.1
* Rename DictionaryImporter.import to .importDictionary
Conflicts with o-unsanitized/method
* Update _updateSearchQuery to return the promise
* Update how the clipboard search popup is opened
* Create an API function to open the search popup
* Skip animation on popup creation
* Add API function
* Use a stringified JSON details object for extension port names
* Fix incorrect frame ID check
* Add support for connecting to different tabs
* Add function for invoking on a different tab
* Refactor searchQueryUpdate action
* Use standard message handler style
* Use name "promiseOrResult" for consistency
* Use standard message handler convention for Yomichan message handlers
* Use common message handler invoker
* Create FrameClient and FrameEndpoint
* Use new Frame* classes for Popup=>frame connection
* Update api.sendMessageToFrame and api.broadcastTab to include the sender's frameId
* Update FrameClient to store the frame's frameId
* Add clone function
* Replace utilIsolate with clone
* Replace JsonSchema.isolate with clone function
* Include core.js for tests which use json-schema.js
* Update visisted set
* Add support for injecting stylesheets into a custom parent node
* Add api.getStylesheetContent
* Add support for injecting a CSS file's content
* Add usePopupShadowDom option
* Use a per-parentNode cache
* Add support for using a shadow DOM wrapper around popup iframes
* Ignore the popup container instead of the frame
* Update test
* Rename db to _db
* Create GenericDatabase class
* Catch prepare error
* Allow database to be purged even if it was not open
* Remove unused functions
* Change static functions to non-static
* Delete and count using the media object store
* Update tests
* Convert handlebars.js to a class
* Move/rename function
* Update helper registration
* Rename helper functions
* Limit cache size
* Make render() async
* Rename and move
* Use new CrossFrameAPI for popup proxy communication
* Remove use of old cross-frame communication classes
* Remove use of old cross-frame communication files
* Make the crossFrame object a member of the api object
* Fix _modifySetting being async
* Return values for modifySettings's set and splice actions
* Add apiGetSettings
* Create a class which can accumulate tasks to run in bulk
* Create a class which binds input elements to customizable sources
* Create class which binds input elements to settings
* Add support for value transforms
* Remove redundant ObjectPropertyAccessor.getPathArray
* Fix not using correct types for input.min/max/step
* Fix wrong condition
* Use api object
* wip
* add environment class
* use Environment class
* use Environment for scanning modifier options
* remove Environment in favor of API
* await promise
* use modifier symbols on macOS
* fix key separator issues
* if else to switch
* simplify variable names
* Update getProfile/getProfileFromContext to store this.options in a variable
* Add useSchema parameter to options getter functions
* Add apiModifySettings
* Use apiModifySettings instead of apiOptionsSet
* Remove apiOptionsSet
* Fix incorrect deleteCount check
* Require explicit scope for options
* Throw on invalid scope
* Update onProgress callback to handle multiple arguments
* Add apiImportDictionaryArchive
* Add apiDeleteDictionary
* Make onProgress the last argument for consistency
* Remove deprecated util functions
* Fix issue with missing progress args
* Remove function calls which modify the database from Translator
* Update tests
* Fix errors not being serialized correctly in _createActionListenerPort
* Add API function to send a message to a specific frameId in a tab
* Update _windowMessageHandlers to support additional info per handler
* Remove message token
* Add new authorization check
* Set up new initialization handler
* Update initialization
* Remove message token
* Replace 'prepare' with 'configure'
* Create new prepare function
* Change configure guard
* Log errors in onMessage
* Improve popup initialize function
* Clear secret/token in _resetFrame
* Remove backend message token
* Clear src and srcdoc attributes before loading
* Don't treat about:blank unloads as load events
* Mark functions as private
* Remove constructor side effects
* Use safer handler invocation
* Mark functions as private
* Mark fields as private
* Update BackendApiForwarder public API
* Create new logging methods on yomichan object
* Use new yomichan.logError instead of global logError
* Remove old logError
* Handle unhandledrejection events
* Add addEventListener stub
* Update log function
* Update error conversion to support more types
* Add log event
* Add API log function
* Log errors to the backend
* Make error/warning logs update the badge
* Clear log error indicator on extension button click
* Log correct URL on the background page
* Fix incorrect error conversion
* Remove unhandledrejection handling
Firefox doesn't support it properly.
* Remove unused argument type from log function
* Improve function name
* Change console.warn to yomichan.logWarning
* Move log forwarding initialization into main scripts