* Create Logger class and log instance
* Replace yomichan.logWarning with log.warn
* Replace yomichan.logError with log.error
* Replace yomichan.log with log.log
* Update the Yomichan class to use the global log object
* Update lint rules
* Move bg/js/anki.js to js/comm/anki.js
* Move bg/js/mecab.js to js/comm/mecab.js
* Move bg/js/search-main.js to js/display/search-main.js
* Move bg/js/template-patcher.js to js/templates/template-patcher.js
* Move bg/js/template-renderer-frame-api.js to js/templates/template-renderer-frame-api.js
* Move bg/js/template-renderer-frame-main.js to js/templates/template-renderer-frame-main.js
* Move bg/js/template-renderer-proxy.js to js/templates/template-renderer-proxy.js
* Move bg/js/template-renderer.js to js/templates/template-renderer.js
* Move bg/js/media-utility.js to js/media/media-utility.js
* Move bg/js/native-simple-dom-parser.js to js/dom/native-simple-dom-parser.js
* Move bg/js/simple-dom-parser.js to js/dom/simple-dom-parser.js
* Move bg/js/audio-downloader.js to js/media/audio-downloader.js
* Move bg/js/deinflector.js to js/language/deinflector.js
* Move bg/js/backend.js to js/background/backend.js
* Move bg/js/translator.js to js/language/translator.js
* Move bg/js/search-display-controller.js to js/display/search-display-controller.js
* Move bg/js/request-builder.js to js/background/request-builder.js
* Move bg/js/text-source-map.js to js/general/text-source-map.js
* Move bg/js/clipboard-reader.js to js/comm/clipboard-reader.js
* Move bg/js/clipboard-monitor.js to js/comm/clipboard-monitor.js
* Move bg/js/query-parser.js to js/display/query-parser.js
* Move bg/js/profile-conditions.js to js/background/profile-conditions.js
* Move bg/js/dictionary-database.js to js/language/dictionary-database.js
* Move bg/js/dictionary-importer.js to js/language/dictionary-importer.js
* Move bg/js/anki-note-builder.js to js/data/anki-note-builder.js
* Move bg/js/anki-note-data.js to js/data/anki-note-data.js
* Move bg/js/database.js to js/data/database.js
* Move bg/js/json-schema.js to js/data/json-schema.js
* Move bg/js/options.js to js/data/options-util.js
* Move bg/js/background-main.js to js/background/background-main.js
* Move bg/js/permissions-util.js to js/data/permissions-util.js
* Move bg/js/context-main.js to js/pages/action-popup-main.js
* Move bg/js/generic-page-main.js to js/pages/generic-page-main.js
* Move bg/js/info-main.js to js/pages/info-main.js
* Move bg/js/permissions-main.js to js/pages/permissions-main.js
* Move bg/js/welcome-main.js to js/pages/welcome-main.js
* Move fg/js/frame-ancestry-handler.js to js/comm/frame-ancestry-handler.js
* Move fg/js/frame-offset-forwarder.js to js/comm/frame-offset-forwarder.js
* Move fg/js/dom-text-scanner.js to js/dom/dom-text-scanner.js
* Move fg/js/text-source-element.js to js/dom/text-source-element.js
* Move fg/js/text-source-range.js to js/dom/text-source-range.js
* Move fg/js/float-main.js to js/display/popup-main.js
* Move fg/js/content-script-main.js to js/app/content-script-main.js
* Move fg/js/frontend.js to js/app/frontend.js
* Move fg/js/popup-factory.js to js/app/popup-factory.js
* Move fg/js/popup-proxy.js to js/app/popup-proxy.js
* Move fg/js/popup-window.js to js/app/popup-window.js
* Move fg/js/popup.js to js/app/popup.js
* Move mixed/js/core.js to js/core.js
* Move mixed/js/yomichan.js to js/yomichan.js
* Move mixed/js/timer.js to js/debug/timer.js
* Move mixed/js/hotkey-handler.js to js/input/hotkey-handler.js
* Move mixed/js/hotkey-help-controller.js to js/input/hotkey-help-controller.js
* Move mixed/js/hotkey-util.js to js/input/hotkey-util.js
* Move mixed/js/audio-system.js to js/input/audio-system.js
* Move mixed/js/media-loader.js to js/input/media-loader.js
* Move mixed/js/text-to-speech-audio.js to js/input/text-to-speech-audio.js
* Move mixed/js/comm.js to js/comm/cross-frame-api.js
* Move mixed/js/api.js to js/comm/api.js
* Move mixed/js/frame-client.js to js/comm/frame-client.js
* Move mixed/js/frame-endpoint.js to js/comm/frame-endpoint.js
* Move mixed/js/display.js to js/display/display.js
* Move mixed/js/display-audio.js to js/display/display-audio.js
* Move mixed/js/display-generator.js to js/display/display-generator.js
* Move mixed/js/display-history.js to js/display/display-history.js
* Move mixed/js/display-notification.js to js/display/display-notification.js
* Move mixed/js/display-profile-selection.js to js/display/display-profile-selection.js
* Move mixed/js/japanese.js to js/language/japanese-util.js
* Move mixed/js/dictionary-data-util.js to js/language/dictionary-data-util.js
* Move mixed/js/document-focus-controller.js to js/dom/document-focus-controller.js
* Move mixed/js/document-util.js to js/dom/document-util.js
* Move mixed/js/dom-data-binder.js to js/dom/dom-data-binder.js
* Move mixed/js/html-template-collection.js to js/dom/html-template-collection.js
* Move mixed/js/panel-element.js to js/dom/panel-element.js
* Move mixed/js/popup-menu.js to js/dom/popup-menu.js
* Move mixed/js/selector-observer.js to js/dom/selector-observer.js
* Move mixed/js/scroll.js to js/dom/window-scroll.js
* Move mixed/js/text-scanner.js to js/language/text-scanner.js
* Move mixed/js/cache-map.js to js/general/cache-map.js
* Move mixed/js/object-property-accessor.js to js/general/object-property-accessor.js
* Move mixed/js/task-accumulator.js to js/general/task-accumulator.js
* Move mixed/js/environment.js to js/background/environment.js
* Move mixed/js/dynamic-loader.js to js/scripting/dynamic-loader.js
* Move mixed/js/dynamic-loader-sentinel.js to js/scripting/dynamic-loader-sentinel.js
* Move background.html to /
* Move context.html to /
* Move info.html to /
* Move legal.html to /
* Move permissions.html to /
* Move pitch-accents-preview.html to /
* Move popup-preview.html to /
* Move search.html to /
* Move settings.html to /
* Move settings2.html to /
* Move template-renderer.html to /
* Move welcome.html to /
* Move float.html to /
* Move display-templates.html to /
* Update how query post-processing is implemented
* Update DisplaySearch to not subclass Display
* Update display construction
* Make display initialization consistent
* Remove unused
* Fix wanakana binding
* Use own frame/tab ID
* DisplaySearch => SearchDisplayController
* Fix globals
* Add key icon
* Update context icon styles
* Add permissions links
* Show warning badge if permissions are insufficient for certain settings
* Create PermissionsUtil
* Use PermissionsUtil in Backend
* Update SettingsController to use PermissionsUtil
* Update AnkiController to use getRequiredPermissionsForAnkiFieldValue
* Show the permissions buttons/links on the context page when necessary
* Update MV3 compatibility
* Update frameInformationGet to also return the tab ID
* Add tabId to Frontend
* Pass tabId/frameId to Display
* Pass ownership information using setContent
* Remove ownerFrameId for Popup classes
* Use frameId instead of ownerFrameId for screenshotting
* Use contentOrigin instead of owner
* Update _invokeContentOrigin implementation
* Refactor PermissionsToggleController to not require a setting
* Update nativeMessaging to be optional on Chrome
* Update parsing.enableMecabParser setting to request permissions
* Update permissions page to use PermissionsToggleController
* Update permissions documentation
* Disable toggle for permissions which are not optional
* Validate source window before handling messages
* Add unregisterHandler to CrossFrameAPI
* Refactor the process FrameAncestryHandler uses to get ancestor frame IDs
* Store a mapping of child frame information
* Update getFrameAncestryInfo to only run once
* Add getAllPermissions function
* Add permissionsChanged event
* Update ClipboardPopupsController to show permissions validation info
* Add invalid indicator
* Display invalid indicator when permissions are not valid
* Fix border color transition not being necessary on input-suffix-button
* Update _addAnkiNote to track errors
* Change comparison
* Update anki note adding to show errors
* Fix template
* Show errors when Anki card creation behaves unexpectedly
* Update some errors related to anki media injection
* Update addAnkiNote error handling
* Improve Anki errors
* Simplify error messages related to template rendering
* Update wording to be less repetitive
* Remove the shadow theme option from the welcome page, to avoid confusion
* Update input sizes
* Update select text to not clip the triangle icon
* Update wording
* Update descriptions
* Remove "popup" to not exclude the search page
* Add autoSearchClipboardContent option
* Hide header if there is any search text
* Add setting for autoSearchClipboardContent
* Add support for autoSearchClipboardContent
* Update badge indications to be based off current profile
* Update warning badge to display when no dictionaries are enabled
* Show how many dictionaries are enabled
* Add _getExpressionAndReading utility
* Add _getExpressionReadingKey utility
* Add _getAudioOptions
* Separate some logic into _createAudioFromInfoList
* Update cache data format so that it can be accessed synchronously
* Allow sources to be manually specified
* Add options to enable playback of a specific entry of a source
* Use a standard map
* Wrap function
* Improve cache to support multiple different source arrays
For the same reading/expression
* Rename variable
* Use null instead of an error
* Simplify details
* Simplify audio creation
* Return an array of sources instead of a single item
* Use sourceIndex instead of index
* Rename APIs
* Return more info about the source
* Return source instead of sourceIndex
* Create HotkeyHelpController
* Expose getAllTemplates
* Update hotkeys on the context page
* Update hotkeys on the display pages
* Fix display issue where a hotkey used to be defined but no longer is
* Add support for allowing TextScanner.search to force focus
* Simplify query parser searched event forwarding
* Defer fallback creation
* Simplify event listeners
* Change type to pointerType
* Change cause to eventType
* Change empty to passive; make .search function passive
* Remove unused input index
* Update settings v2 to be the default for existing users
* Update information on the old settings page
* Update information on the new settings page
* Update tests
* Add popupWindow options
* Add toBoolean converter
* Add settings
* Use new options
* Add test link
* Fix window state not working
* Make the window section advanced only
* Clarify the meaning of the 'None' option; rename to 'No key'
* Clarify Auto-hide search popup
* Clarify Scan delay
* Move Support inputs for devices with touch screens; make advanced
* Assign missing type
* Update KeyboardMouseInputField to use an array instead of a string
* Use "modifiers" instead of "value" or "inputs"
* Simplify
* Add support for using keys
* Use bool args instead of a string
* Create AnkiNoteData
* Create AnkiNoteDataDefinitionProxyHandler
* Update media injection
* Create AnkiNoteDataDefinitionSecondaryProperties
* Update note context format
* Expose url and cloze on definition
* Simplify for understandability
* Remove unused _createNoteData
* Update public object
* Remove trims on sentence, since it should already be trimmed
* Fix unused global
* Pass url into setContent
* Update where url is checked from
* Add documentTitle to state information
* Update how _getNoteContext gets the document title
* Update how url is fetched for options context
* Pass document title in to 'searched' event
* Refactor note adding/viewing functions
* Move _addDefinition
* Update where anki field templates are assigned
* Update _createNote to not include options/templates arguments
* Simplify getAnkiNoteInfo to not require duplicateScope
* Move TemplateRendererProxy creation into AnkiNoteBuilder
* Simplify _stringReplaceAsync
* Organize note generation
* Rename API
* Make the template rendering function more generic
* Rename sentenceExtent with sentenceScanExtent
* Update TextScanner.setOptions
* Change function argument order
* Rename quote map variables
* Fix edge case quote handling
* Update terminator maps to support character inclusion
* Copy set intersection functions
* Remove unused functions
* Simplify url check
* Remove parseUrl
* Simplify stringReverse
* Remove hasOwn due to infrequent use
* Rename errorToJson/jsonToError to de/serializeError
For clarity on intended use.
* Fix time argument on timeout
* Add missing return value
* Throw an error for unexpected argument values
* Add documentation comments
* Add support for regex replacements during the translation process
* Allow assignment of textReplacements
* Rename
* Set up test data
* Write expected data
* Set up options
* Prevent infinite loop if regex matches empty string
* Implement setting controller
* Add support for testing pattern replacements
* Separate material styles into a separate file
* Improve action button styles
* Rename --font-size-default to --font-size
* Remove px units
* Remove some material vars
* Fix some variable names
* Define variables
* Remove --shadow-vertical
* Revert name change
* Move var
* Rename var
* Update vars
* Remove redundant vars
* Update search styles
* Update styles
* Update colors
* Update variable names
* Include material.css on float.html page
* Improve styles for #content-scroll-focus
* Create new class to manage and control document focus
* Use new focus class
* Add a check to prevent redundant .blur calls
* Improve furigana when reading kana is not an exact match
* Simplify group structure
* Return consistent type
* Add more tests
* Remove redundant isAmbiguous assignment
* Simplify group usage
* Add helper function
* Optimize returned arrays
* Use variable
* Remove s(p)lice calls
* Reduce number of convertKatakanaToHiragana calls
* Optimize text length access
* Optimize reading substring
* Move segmentize to a separate function
* Use var
* Use _createFuriganaSegment
* Optimize distributeFuriganaInflected
* Improve styles for settings-item-button
* Add hover/active styles to settings-item-button
* Use consistent phrasing for setting buttons and include ellipsis
* Add script to build library files
* Add built parse5 library
* Add new SimpleDOMParser which uses parse5
* Update license info
* Update MV3 build to use the new SimpleDOMParser
* Update file exclusions
* Hide/clarify license info for MV2 builds
* Update tag style
* Add styles/HTML for notifications
* Add DisplayNotification class
* Add support for tag notifications
* Simplify notification content
* Make storage controller optional
* Make more elements optional
* Update styles
* Create new welcome page
* Update URL for welcome guide
* Remove old guide
* Fix unused global
* Add api.getAnkiConnectVersion
* Enable basic functionality when certain features/elements aren't present
* Add info page
* Update information links
* Update info link on the settings v2 page
* Update formatting
* Add missing rule for progressive/perfect
* Add adnomial -ki rule
* Update rules for irregular verbs
* Organize rules by rulesOut
For the most part, the order is:
adj-i => v1 => v5 => vs => vk => other
* Add tests
* Remove unused
* Create DatabaseVM
* Update sequences in test dictionary
* Update documentation
* Add second valid testing dictionary
* Set up translator tests
* Write expected data
* Initial setup of settings page v2
* Add security options
* Add layout-aware scanning option
* Fix style
* Set up simple setting bindings
* Convert colors to variables
* Refactor, remove unused
* Set up variables for some size values
* Mark expandable entries with a pointer cursor
* Add scroll top link
* Update sidebar styles
* Update icon button styles
* Fix padding when settings are wrapped
* Update shadow styles
* Use animation timings
* Add support for being able to open the sidebar on small-screen/mobile devices
* Update styles and preview sidebar
* Add ability to expand the preview sidebar
* Scroll to initial target only after advanced setting is set
* Fix rebase issues
* Update z-index of modal
* Use Modal for testing
* Set up modal controller
* Update button styles
* Update modal design
* Update styling of multi-part inputs
* Fix button styles
* Create SettingsDisplayController
* Update scanning inputs
* Use nested option
* Update animation timings
* Update modals to be display:none when not open
* Update included scripts
* Move modal link/input control to SettingsDisplayController
* Simplify event handlers
* Add audio sources options modal
* Allow certain nodes to be selected on click
* Implement top link
* Add environment-specific display styles
* Implement storage info
* Update modal controller
* Remove TODO
* Remove unnecessary <br>
* Add primary dictionary option under result grouping option
* Simplify transform
* Update styles for short inputs
* Add toggleable status footer
* Update modal styles
* Fix more-toggle elements sometimes affecting wrong targets
* Add selector-observer.js reference
* Add support for dynamically-generated more-toggle elements
* Rename result grouping modes and add descriptions
* Update icon button style
* Add a no-more-only class
* Use absolute URLs
* Add kebab-menu icon button
* Update text styles
* Add disabled styles
* Update toggle styles to support default pointer when disabled
* Update modal.js reference
* Disable box shadow for disabled buttons
* Add support for menus, use menus for audio source removal
* Disable pointer events when a modal is closing
* Update the escape key to close menus before closing modals
* Add support for dictionary modals
* Remove debug log
* Remove redundant spinner
* Update nested option visibility
* Add support for import/export/reset
* Update URL
* Reorganize
* Add comments
* Fix toggle highlight not working
* Add radio style
* Fix dictionary separator line
* Add mouse icon
* Add support for an icon button container with input height
* Update profile selects
* Add support for editing profiles and profile conditions
* Enable overflow scrolling for popup menus
* Add support for input suffix buttons
* Style updates
* Implement Anki card controls
* Improve dictionary information
* Punctuation
* Add support for Anki card templates
* Add support for using the tab key
* Add support for custom CSS modal
* Add support for simple scanning inputs
* Simplify
* Don't exit modals/menus when pressing escape while an input is focused
* Add checkbox styles
* Set up advanced scanning inpugs
* Reorganize
* Add outer theme option
* Add controller for nested popups
* Update scannings inputs
* Set up settings for touch/pen inputs
* Add modal for input prevention
* Update label styles
* Options updates
* Update duplicate scope options
* Only show quality when format is JPEG
* Add auto-scaling options
* Update navigation options
* Rearrange options
* Fix icon
* Add group for popup-size
* Update styles for inputs
* Update description
* Update appearance of checkboxes, toggles, and radios
* Add more advanced popup options
* Add debug option
* Add pitch accent display options
* Update input fields
* Add conjugation
* Update guide link
* Update and simplify primary/secondary dictionaries
* Update link
* Un-nest a setting
* Update wordings
* Use consistent styling for lists
* Fix custom CSS modal fade affecting the layout
* Fix z-index of the top link
* Disable word wrap on some text
* Disable highlight color
* Update FAB positioning and sizing
* Update button spacing
* Remove preview frame controller code
* Remove welcome.html
* Update seconds units
* Use all appearance styles
* Add option for anki.checkForDuplicates
* Rearrange options
* Fix redundant margin assignment
* Move scanning.enableOnSearchPage option such that it is not nested
* Organize/update options
* Fix history assignment on the search page
* Use clear instead of assigned
* Simplify definitions assignment
* Organize
* Fix query not being cleared
* Fix media loading
* Fix potential issue with options not being assigned
* Catch error when frameId is null, causing infinite loop
* Fix frontend construction parameters
* Only ignore nodes on non-web pages
* Fix issue where options might not be assigned on nested frontends
* Refactor default TextScanner options
* Add option to enable search only on click
* Simplify restore state assignment
* Update options context passing
* Fix empty title
* Use TextScanner to scan content inside of Display
* Rename ignoreNodes to excludeSelector(s)
* Fix options update incorrectly triggering a re-search
* Fix copy throwing an error on the search page
* Replace _onSearchQueryUpdated with _search
* Use include selector instead of exclude selector
* Pass childrenSupported as a parameter to Frontend/Popup constructors
* Remove setChildrenSupported
* Use event listener instead of function override
* Update options order
* Expand options and use object for clarity
* Fix childrenSupported not being fully propagated
* Refactor context-main.js
* Simplify tags
* Use flex layout
* Use image masks for icons, update styles
* Remove old classes
* Add profile button
* Add support for profile selection
* Add title
* Swap the options and search link order
* Fix title
* Make section comments into single line comments
* Update :before/:after to be ::before/::after
* Organize and compact CSS
* Remove obsolete style
* Add padding var
* Use calc and var for layout units and common values
* Update search page styles
* Simplify expression creation
* Add attribute indicating whether the reading is the same or not
* Update kanji debug info
* Remove some unnecessary null checks
* Simplify iterable check
* Update float and search HTML to be more consistent
* Update translator to flag redundant tags instead of remove
* Update how compact tags are shown in the popup
* Pass compactTags option to note builder
* Update options templates
* Add options upgrade
* Add options upgrade test
* Update Display.setOptionsContext to update options
* Update how options context is updated in Popup
* Omit optionsContext for some _showPopupContent calls
* Remove extension unload
* Disable modifier keys in frontend's options context
* Update how text scanner passes modifiers to options context
* Update how options context is passed to display
* Update how display uses options context
* Update event order
* Update inputs
* Add type and cause to input info
* Update input info args
* Simplify arguments
* Update argument name
* Change order
* Use same selectors
* Use consistent stylesheet declaration
* Fix query parser not being cleared
* Set property upon load
* Don't focus for Enter key press
* Update search page styles
* Update indent and nodes
* Support dark style
* Add missing var
* Add options.global.showPopupPreview option
* Add preview visibility control using a checkbox
* Add attribute on page load
* Disable animation until page is loaded
* Remove unused function
* Update expresionMulti detection
* Simplify kanji early escape
* Simplify frequency/pitch data creation
* Update implementation of _buildTermMeta
* Update how pitch accents sources are collected
* Remove old _buildTermMeta
* Fix default options not having the correct versions
* Move schema validation
* Remove legacy version number
* Add tests for OptionsUtil.getDefault()
* Remove unused getValidValueOrDefault
* Check if element exists
* Add delete function
* Add support for deleting via popup menu
* Update how count visibility is updated
* Update dictionary deletion progress updates
* Update storage stats after dictionary deletion
* Create new SelectorObserver class
* Update DOMDataBinder to use SelectorObserver
* Update names to be more clear
* Remove attributeOldValue parameter, clarify attributes parameter
* Add documentation
* Add helper function _getElementRelativeToAncestor
* Move helper functions
* Add setVisibility transform
* Add support for data-transform attribute shorthand
* Add support for using the document element as the ancestor
* Remove redundant assignment of select value
* Update TTS preparation
* Don't hide options
* Improve voice sorting
* Update event handler
* Apply options to all selects targeting audio.textToSpeechVoice
* Update selector
* Use IDs
* Move test text to a hidden text input
* Rename TemplateHandler to HtmlTemplateCollection
* Rename _templateHandler to _templates
* Allow creation from both string and element
* Simplify setup of templates, don't throw errors on invalid ID
* Simplify variable name
* Add dictionaryNames array
* Update how the dictionary field is assigned
* Use "dictionary" instead of "title" for consistency
* Remove redundant dictionary name
* Use _expandTags to create pitch accent tags
* Add abstraction: _getDefinitionPrimaryExpressionAndReading
* Reuse existing definitions in a sequence
* Revert change to related definition source/rawSource/sourceTerm
* Update _getDefinitionPrimaryExpressionAndReading to return best match
* Group reduction functions together
* Group simple helpers
* Add label comments
* Move core _findTerms functions to top
* Move _getSecondarySearchDictionaryMap and _getDictionaryPriority
* Move tag helpers
* Move _getTextOptionEntryVariants
* Move functions up
* Move functions up
* Update label comments
* Add sourceTerm field to 'term' and 'termGrouped' definitions
* Fix comparison of expressions which are always the same
* Rename/restructure term info map
* Add source term
* Add sourceTerm to expressions array
* Reuse furiganaSegments
* Add helper function _createExpressionDetailsListFromTermInfoMap
* Add expressions array to termMergedByGlossary
* Add expressions to definition types 'term' and 'termGrouped'
* Rename expressionDetails* to termDetails*
* Correct the source/rawSource/sourceTerm for related sequenced definitions
* Simplify structure of sequencedDefinitions
* Remove TODO
* Refactor internal options for findTerms to not use the settings object
* Move findTerms/findKanji options creation
* Deconstruct used options values to variables before any await calls
* Rename findTermsOptions to just options
* Add documentation comments
* Add type information about definitions
* Add helper function _getSecondarySearchDictionaryMap
* Use spreads instead of concat
* Create helper function for assigning disambiguation info
* Add _getTermTagsScoreSum helper
* Rename variables
* Move assignment of definition details
* Convert databaseDefinitions to standard definitions
* Move creation of definitions
* Always pass definitionsByGlossary directly to _mergeByGlossary
* Refactor how used definitions are tracked
* Change _mergeByGlossary parameters
* Simplify _mergeByGlossary
* Generate definition structure at the end of the function
* Add reusable function to clone a tag
* Restructure merged sub-definition creation
* Move setup of totalExpressionSet/totalReadingSet
* Track all definitions with matching glossary
* Move creation of definitionTags
* Update score calculation for multiple definitions
* Disambiguate function name
* Rename variables
* Add helper function _createMergedGlossaryTermDefinition
* Remove rarely used check for secondary search results
Unclear what the purpose was since it was almost never used
* Update data structure
* Rename function/variable
* Add helper functions _createMergedTermDefinition
* Assign expressionDetails to variable
* Add rawSource to grouped definitions
* Use shared function for creating unused definition entries
* Add helper function _createMapKey
* Refactor _createExpressionDetails
* Change argument order
* Add _getTagNamesWithCategory helper
* Optimize _compressDefinitionTags
* Add _createGroupedTermDefinition helper
* Add type information
* Use consistent order for term definition fields, add comments for omitted fields
* Remove unused index field
* Add helper function _createKanjiDefinition
* Update types
* Add frequencies/pitches arrays
* Update terms array setup
* Simplify for loop
* Remove redundant property assignment
* Simplify how deinflections with no definitions are ignored
* Ensure duplicates are removed
* Rename variable
* Add comments about duplicate data
* Refactor variable/parameter names
* Move functions
* Rename functions
* Rename variable
* Add dictionaryPriority field
* Simplify priority comparison
* Rename argument
* Optimize comparison function when dictionary priority is not needed
* Add length check
* Remove unused parameter
* Rename variables/parameters
* Rename dictionaries to enabledDictionaryMap
* Store compactTags/mainDictionary options to variables
* Refactor _getSearchableText
* Simplify object structure of deinflections
* Modify existing array when removing duplicates
* Update _sortDefinitions to not return a value
* Use explicit argument value
* Use a Collator for string comparisons
* Simplify order comparison
* Improve tag creation and sanitization
* Switch .map to a for loop, skip null meta
* Add _createKanjiStat
* Move _sortDefinitions definition
* Fix kanji stat sorting
* Remove return value from _sortTags
* Add _sortKanji
* Add fast exits for sorting
* Add _sortDefinitionsByIndex
* Combine sort function
* Improve creation of kanji definition data
* Use "databaseDefinitions" instead of "definitions" to disambiguate
* Simplify
* Simplify further
* Simplify max length calculation
* More destructuring
* Use databaseDefinitions variable name
* Move _mergeBySequence body into _getSequencedDefinitions
* Use databaseDefinitions field name
* Move maxLength calculation
* Use shared _createTermDefinitionFromDatabaseDefinition
* Simplify map
* Move definition sorts for better consistency and less redundancy
* Move _createExpression function
* Update setup of sequenced definitions
* Simplify for loop
* Add scanOnTouchMove/preventTouchScrolling scanning input options
* Add settings controls
* Support scanOnTouchMove in TextScanner
* Support preventTouchScrolling in TextScanner
* Use _sendMessageTab
* Move _sendMessageAllTabs next to _sendMessageTab
* Rename function
* Add and use _sendMessageTabIgnoreResponse
* Add and use _sendMessageIgnoreResponse
* Always include params
* Update function consistency
* Move loadImageBase64 into DictionaryImporter
* Convert mediaUtility to a class
* Add getFileExtensionFromImageMediaType to MediaUtility
* Use MediaUtility instead of _getImageExtensionFromMediaType
* Use MediaUtility in ClipboardReader to validate images before reading
* Create ClipboardReader class
* Use ClipboardReader in Backend
* Update ClipboardMonitor to use ClipboardReader
* Replace _onApiClipboardImageGet call
* Assign clipboard reader browser
* Add options for searchTerms and searchKanji
* Add settings HTML
* Add options to TextScanner
* Update _search/_findDefinitions to include searchTerms/searchKanji args
* Update _searchAtFromMouseMove args
* Change argument structure for _searchAt
* Use scanning options for searchTerms and searchKanji
* Add options for scanning input types
* Move buttons in layout, refactor CSS
* Add options for input types
* Use input type filters
* Add _getMatchingInputGroupFromEvent
* Use input filters for touch events
* Add _getTemplates function
* Add template renderer to display pages
* Add AnkiNoteBuilder to Display
* Update AnkiTemplatesController to directly use TemplateRenderer
* Remove old APIs
* Add inputs to options.scanning
* Update CSS for mouse buttons
* Update list counters
* Set up HTML/CSS
* Add input controller
* Use new inputs
* Include mouse buttons
* Update how button inputs are detected
* Add index/empty fields to the input details object
* Update none check for scanning modifier
* Remove old settings
* Remove unused global
* 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
* Add hideDelay option
* Add _clearSelection
* Use hideDelay
* Prevent repeated delayed selection clears
* Fix popup hide timer being cleared when the cursor is moved into the frame
* Add functions for getting keyboard key information
* Use os + DocumentUtil to get modifier key names
* Remove keyboard modifier info from environment info