* Remove unused ignoreSelectors
* Remove unused isMouseButtonPressed
* Update getWritingMode to use the immediate element if possible
* Move static functions to DocumentUtil
* Fix documentation
* Use getAttribute instead of dataset, in case SVG node APIs are unusual
* Use pointer-events instead of fill
* Use elementFromPoint instead of elementsFromPoint
* Move TextSourceRange static functions to DocumentUtil
getWritingMode is also simplified
* Update Google Docs range to be empty to match other range sources
* Rename imposterContainer to imposterElement
* Add static creation functions
* Add static creation function
* Remove unused collapse function
* Don't select imposter elements
* Refactor setEndOffset
* Adjust argument order for setEndOffset
* Update TextSourceRange constructor
* Remove unused isConnected
* Cache rects
* Fix test
* Remove unused getRect
* Revert "Fix test"
* Remove cachedRect
* Use the source element rect to handle scroll differences
* Writing mode update
* Remove _cachedRects update
This shouldn't be necessary as the imposter is usually detached
almost immediately after scanning, giving no time for the window
to be resized or scrolled.
* Make all methods static
The two non-static methods are kept for temporary compatibility
* Use this instead of class name now that functions are static
* Update test
* Don't instantiate DocumentUtil
* Remove temporary non-static methods
* Remove unused global declaration
* Update settings controller to consistently initialize
* Allow profile index to be reset if an error occurs
* Update message handler to be async
* Fix error when deleting the current profile
* Add support for an idle timeout when downloading audio
* Update eslint rules
* Pass idleTimeout to the downloader from DisplayAnki
* Add anki.downloadTimeout setting
* Update tests
* Assign _audioDownloadIdleTimeout using settings
* Show info about cancelled downloads
* Handle Firefox bug
* Improve audio errors
* Refactor
* Move functions to RequestBuilder
* Do not change selection if user selected text manually
* Remove capture argument for selectionchange listener
It is not applicable
* Make a note of user selection when Yomichan is enabled
User might have some text selected on a page prior to enabling Yomichan
via the toolbar icon; let it stay intact.
* Extract selection change by user listener into a method
* Move the "Add" button into the footer
* Scroll to the bottom when adding
* Move the Audio Sources add button
* Simplify, remove the (?) link
* Move "Add" button to footer
* Remove unnecessary return
* Move touch start input filtering
* Refactor
* Add scanOnTouchPress
* Add preventPenScrolling
* Rename scanOnPenPress to scanOnPenMove
* Rename scanOnPenRelease to scanOnPenReleaseHover
* Simplify
* Refactor _searchAtFromPen early exit
* Merge _penPointerPressed and _penPointerReleased into a single variable
* Add more options
* Simplify pen pointer coordinates
* Implement scanOnPenPress and scanOnPenRelease
* Implement scanOnTouchRelease
* Fix tests
* Don't search on touch cancel
* Cancel touch if the touch action is used for scrolling or other gestures
* Fix incorrect scroll prevention options being used
* Organize options
* Fix typos
* Update material.css to support password fields
* Support password
* Add "apiKey" setting
* Use apiKey
* Update options if API key changes
* Update tests
* Add AnkiConnect.guiEditNote
* Update _onApiNoteView to first try guiEditNote
* Add setting
* Update noteView API
* Use setting
* Return which mode was used
* Update DisplayGenerator
* Handle errors in DisplayAnki
* Update docs
* Add isErrorUnsupportedAction function
* Add an allowFallback option to noteView
* Disambiguate
* Simplify now that preferredMode isn't used
* Update settings info
* Implement test buttons
* Update styles
* Update status visibility
* Wrap layout
* Update description
* Update date
* Move some common functionality
* Move setupEnvironmentInfo into ExtensionContentController
* Move background/environment.js to extension/environment.js
* Generalize _onBeforeSendHeadersAddListener
* Simplify filter assignment
* Use requestId rather than done
* Properly support Firefox addListener without arguments
* Add details to fetchAnonymous errors
* Refactor
* Enable support for no header modifications
* Update MV3 support for error details
* Expose errors in downloadTermAudio
* Throw an error if audio download fails due to potential permissions reasons
* Rename elementRect to sourceRect
* Add getRects function to TextSourceElement and TextSourceRange
* Add jsdocs
* Remove unnecessary valid parameter
* Remove default parameter
* Make optionsContext optional
* Remove unnecessary checks
* Update sourceRect to use left/right rather than x/y
* Update the return type of Popup*.getFrameRect
* Rename some unrelated rect vars for disambiguation
* Disambiguate between Popup.Rect and Popup.ValidRect
* Move sourceRect destructuring
* Pass multiple source rects
* Simplify
* Change Rect to use right/bottom rather than width/height
* Update how popup offset is applied
* Simplify frame offset
* Remove _applyFrameOffset
* Use right/bottom rather than width/height
* Simplify some positioning settings
* Update parameter names for clarity
* Fix typos
* Refactor data type for _getPosition* functions
* Support using multiple source rects
* Combine _getPosition functions
* Refactor
* Expose after dataset value
* Consistently use this's property
* Add jsdoc
* Remove regex construction for SimpleDOMParser.getElementsByClassName
* Remove regex construction for CssStyleApplier._getRulesForClass
* Rename, add jsdoc for clarity
* Pass JapaneseUtil instance to StructuredContentGenerator
* Move body of createStructuredContent to an internal function
* Create _createStructuredContentGenericElement
* Wrap structured content in a <span>
* Change _createStructuredContent to _appendStructuredContent
* Add public appendStructuredContent function
* Add missing return
* Remove unused _createDocumentFragment
* Automatically assign lang=ja for content with Japanese characters
without an explicit language
* Add test