* Proof-of-concept for showing card tags (#1626)
* Resolved most PR comments:
- Added a snackbar notification when clicking tag button
- Replaced magnifying glass icon with new tag icon
- Button now contains a span w/icon, to use text color
- Removed unnecessary attributes from button
- Backend now returns full noteInfos object
- Frontend now handles filtering tags
* Add options to show/hide tag button & filter tags
* Do not show tags button if, after filtering, we have zero tags.
* Change tags option to enums, optimize tags intersection check & fix code style.
* Update options-util.js to include new tag options.
* Fix wording on new tag setting.
* Add CSS to remove hidden buttons from the display layout.
* getAnkiNoteInfo extra parameter for additional info.
* Add new tag option to tests.
* Remove unnecessary changes related to anki tags option.
* Code style fixes.
* Update environment info to return the 'safari' browser
* Fix popup display on Safari
* Update environment assignment
* Add data-loading-stalled property when loading takes longer than expected
* Add notification when loading has stalled
* Allow getDictionaryInfo invocation on non-privileged contexts
* Update _validatePrivilegedMessageSender
* Don't listen to 'voiceschanged' event unless addEventListener is present
Also expose an event
* Update dictionary settings structure to use an array instead of an object
* Update ensureDictionarySettings implementation
* Remove some usage of ObjectPropertyAccessor
* Update test data
* Move translator.js
* Create new version of Translator
* Update Backend
* Update DictionaryDataUtil
* Update DisplayGenerator
* Create AnkiNoteDataCreator
* Replace AnkiNoteData with AnkiNoteDataCreator
* Update tests
* Remove AnkiNoteData
* Update test data
* Remove translator-old.js
* Add TypeScript interface definitions for the new translator data format
* Merge ungrouped characters
* Update iteration
* Fix incorrect code point handling
* Simplify text
* Specify language
* Update how parsed status is represented
* Add api.textHasJapaneseCharacters
* Add support for empty query
* Add support for showing the query parser for TextSourceElement
with content that does not start with Japanese text
* Add valid field
* Add isNoteDataValid function
* Update _areDefinitionsAddableForcedValue to return proper valid values
* Refactor isAnkiConnected check
* Force canAdd to false if not valid
* 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