* Introduce field setting to use plain text editor by default
* Remove leftover function from #1476
* Use boolean instead of string
* Simplify clear_other_field_duplicates
* Convert plain text key to camelCase
* Move HTML item below the existing checkbox, instead of to the right (dae)
Showing it on the right is more space efficient, but feels a bit
cluttered IMHO.
* Make private properties in Surrounder truly private
* Fix remove logic of Surrounder
* No reason for toggleTriggerRemove to be async
* Allow using alt-shift to set all remove formats but this one
* modifyFormat => updateFormat
* Fix formatting
* Export surrounder directly from RichTextInput
* Change wording in editor/surround
* Remove empty line
* Change wording
* Fix interfaces
* Add field description directly in NoteEditor
* Strip description logic from ContentEditable
* Make RichTextInput position: relative
* Make attachToShadow an async function
* Apply field styling to field description
* Show FieldDescription only if content empty
* Remove descriptionStore and descriptionKey
* Revert "Make attachToShadow an async function"
This reverts commit b62705eadf7335c7ee0c6c8797047e1f1ccdbf44.
SvelteActionReturnType does not accept Promise<void>
* Fix mess after merge commit
* Require registering surround formats
* Remove most of the original description placeholder implementation
* Move description showing logic to RichTextInput
- there is no need to propagate it to ContentEditable
* Remove the @html from field-description
This actually worked - however I removed it in case we'd rather offer
markdown support or something else in the future.
* Do not remove placeholder already on focus
- Other editors do not do it either
* Hide via hidden attribute instead of unmounting
* Do not pass content to ContentEditable
* Sort imports
* Change placeholder text color (dae)
In day mode, slightly-grey is almost indistinguishable from black
(at least on the monitor I'm using here)
It appears that a variable bound to the `innerHTML` property of
a contenteditable element is only updated when `input` event fires on
the element, and not when changes are made to the DOM programmatically.
* Format scss correctly so it passes ts:format
* Use on and singleCallback in ImageHandle and MathjaxHandle
* Add a few comments
* Fix relict of partial commit
* Fix 'element not found' in ImageHandle
* Remove setting css on image handle twice
* Remove use of container in ImageHandle
* Remove use of container in MathjaxHandle
* Use unprefixed properties of RichTextInputAPI
* Inline api to get to RichTextInputAPI
* Join customStyles into RichTextInputAPI
* Export RichTextInput; Remove SetContext
* Address eslint and svelte_check
- This is useful when you want to set up hooks, etc. on the EditorField
component
- Because when you can only use the NoteEditor export, you cannot notice
when fields are mounted or destroyed
* Move field description into EditingArea as placeholder
* Prevent insertion of breaks into empty fields
to allow :empty CSS selector to also work on fields other than the first one.
* Remove redundant setContext from EditingArea
* Fix import order
* Revert "Prevent insertion of breaks into empty fields"
This reverts commit 1615fd5cf441b1047dae6a34265acb9c5cae50b2.
* Use class:empty instead of :empty CSS pseudo-class
* Restrict description to single line, ellipse overflow
* Make description in field dialog a bit clearer
* Add crate csv
* Add start of csv importing on backend
* Add Menomosyne serializer
* Add csv and json importing on backend
* Add plaintext importing on frontend
* Add csv metadata extraction on backend
* Add csv importing with GUI
* Fix missing dfa file in build
Added compile_data_attr, then re-ran cargo/update.py.
* Don't use doubly buffered reader in csv
* Escape HTML entities if CSV is not HTML
Also use name 'is_html' consistently.
* Use decimal number as foreign ease (like '2.5')
* ForeignCard.ivl → ForeignCard.interval
* Only allow fixed set of CSV delimiters
* Map timestamp of ForeignCard to native due time
* Don't trim CSV records
* Document use of empty strings for defaults
* Avoid creating CardGenContexts for every note
This requires CardGenContext to be generic, so it works both with an
owned and borrowed notetype.
* Show all accepted file types in import file picker
* Add import_json_file()
* factor → ease_factor
* delimter_from_value → delimiter_from_value
* Map columns to fields, not the other way around
* Fallback to current config for csv metadata
* Add start of new import csv screen
* Temporary fix for compilation issue on Linux/Mac
* Disable jest bazel action for import-csv
Jest fails with an error code if no tests are available, but this would
not be noticable on Windows as Jest is not run there.
* Fix field mapping issue
* Revert "Temporary fix for compilation issue on Linux/Mac"
This reverts commit 21f8a261408cdae49ec031aa21a1b659c4f66d82.
* Add HtmlSwitch and move Switch to components
* Fix spacing and make selectors consistent
* Fix shortcut tooltip
* Place import button at the top with path
* Fix meta column indices
* Remove NotetypeForString
* Fix queue and type of foreign cards
* Support different dupe resolution strategies
* Allow dupe resolution selection when importing CSV
* Test import of unnormalized text
Close #1863.
* Fix logging of foreign notes
* Implement CSV exports
* Use db_scalar() in notes_table_len()
* Rework CSV metadata
- Notetypes and decks are either defined by a global id or by a column.
- If a notetype id is provided, its field map must also be specified.
- If a notetype column is provided, fields are now mapped by index
instead of name at import time. So the first non-meta column is used for
the first field of every note, regardless of notetype. This makes
importing easier and should improve compatiblity with files without a
notetype column.
- Ensure first field can be mapped to a column.
- Meta columns must be defined as `#[meta name]:[column index]` instead
of in the `#columns` tag.
- Column labels contain the raw names defined by the file and must be
prettified by the frontend.
* Adjust frontend to new backend column mapping
* Add force flags for is_html and delimiter
* Detect if CSV is HTML by field content
* Update dupe resolution labels
* Simplify selectors
* Fix coalescence of oneofs in TS
* Disable meta columns from selection
Plus a lot of refactoring.
* Make import button stick to the bottom
* Write delimiter and html flag into csv
* Refetch field map after notetype change
* Fix log labels for csv import
* Log notes whose deck/notetype was missing
* Fix hiding of empty log queues
* Implement adding tags to all notes of a csv
* Fix dupe resolution not being set in log
* Implement adding tags to updated notes of a csv
* Check first note field is not empty
* Temporary fix for build on Linux/Mac
* Fix inverted html check (dae)
* Remove unused ftl string
* Delimiter → Separator
* Remove commented-out line
* Don't accept .json files
* Tweak tag ftl strings
* Remove redundant blur call
* Strip sound and add spaces in csv export
* Export HTML by default
* Fix unset deck in Mnemosyne import
Also accept both numbers and strings for notetypes and decks in JSON.
* Make DupeResolution::Update the default
* Fix missing dot in extension
* Make column indices 1-based
* Remove StickContainer from TagEditor
Fixes line breaking, border and z index on ImportCsvPage.
* Assign different key combos to tag editors
* Log all updated duplicates
Add a log field for the true number of found notes.
* Show identical notes as skipped
* Split tag-editor into separate ts module (dae)
* Add progress for CSV export
* Add progress for text import
* Tidy-ups after tag-editor split (dae)
- import-csv no longer depends on editor
- remove some commented lines
Calling `moveCaretToEnd()` when `richText` is empty will cause the first keystroke of
ibus-based input methods with candidates to goes double. For example, if you
type "a" it becomes "aa". This problem exists in many linux distributions.
When `richText` is empty, there is no need to place the caret, just return
as a workaround.
Issue was introduced in 7922f18296
when the styling was moved into base.scss. From what I can tell, there
are two locations where the current styling is required:
- the editor, to ensure the tags are shown at the bottom
- the change notetype screen, which requires this styling for a sticky
bar at top
I'm no CSS guru, so if someone thinks this could be solved in a better
way, please submit a follow-up PR.
Closes#1782
* Move focus into input field, when input is shown
* Change trapFocusOut to move focus into available inputs
- This means that e.g. closing the HTML editor with focus in it will
focus the visual editor in turn
* Prevent Control+A unselecting tag editor when no tags exist
* Add ResizableImage.svelte in ts/editable
* Set image constrained via attributes instead of managed style sheet
* Implement new constrained size method
* Turn WithImageConstrained.svelte into normal ts file
* Introduce removeStyleProperties
Removes "style" attribute if all style properties were cleared
* Avoid --editor-width and use one variable set on container
* Disable shrinking if already smaller than shrunken size
* Add button to restore image to original size
* Don't allow restoring original size if no custom width set
* Bottom-center HandleLabel
* Satisfy svelte-check
* Instead of transforming to {\lt}, transform to <
- In Mathjax editor
- This way you can also use Mathjax convenience shortcuts like <=> in
chemistry mode: \ce{<=>}
* Remove unused translateEntitiesToMathjax() (dae)
https://github.com/ankitects/anki/pull/1818#discussion_r857238310
In the absence of strong arguments either way, and given the fact that
strong/em has broken a few (perhaps rare) use-cases, reverting seems
prudent. But happy to revisit this again in the future if someone has
a convincing argument for why we should be doing it differently.
Closes#1807
* Revert "Revert "Speed up editor by lazily loading CodeMirror (#1766)""
This reverts commit b0a2884f19.
* Pass in options via action update + Make access to editor optional
* First attempt at adding a directory for icons under //ts
* Fix image import
* Fix import order
* Add cloze button group
* Fix issue with toolbar.toolbar dynamically slottable
* Change tooltip for repeating cloze deletion
* Fix repeat cloze button not working on macOS (dae)
* Use async function in PlainTextInput
* Clean up PlainTextInput
* Refactor logic from {Rich,Plain}TextInput into own files
* Remove prohibited tags on content.subscribe which also parses the html
* Start using WithFloating for SelectedTagBadge
* Adjust arrow on WithFloating for all directions
* Move TagOptionsBadge to its own sub directory
* Show autocomplete menu via WithFloating
* Have WithFloating return asReference instead of initializing its own reference element
* Add html: overflow: hidden for editor
* Replace ButtonToolbar with generic div
* Move scroll logic into autocomplete item + restrict Popover width to 95vw
* Fix autocomplete menu after pressing enter after selecting
- should not trigger an autocomplete choose
* Overlap TagInput perfectly with Tag
* Satisfy formatter
* Fix autocompletion item scrolling too much
* Remove unused Tag.svelte focusable prop
* Remove console.log
* Fix floating arrow is a diamond in dark mode
* Set autocompletion menu to 80vw
* Implement a first version of WithFloating and Portal
* Add outside slot for Portal
* Execute computePosition from WithFloating
* Set up a first example of new WithFloating with the Latex menu
* Use autoUpdate in WithFloating
* Create sveltelib/position
* Add event-store
* Use event-store in close-on-click
* Implement subscribeToUpdates
* Introduce sass/elevation
* Split close-on-click to closing-click and subscribe-trigger
* Have closing-* stores return a symbol
- This way they act more of an EventEmitter than a store
* Allow passing show store
* Remove styling on float on updatePosition removal
* Implement a nice border for dropdowns
* Apply different border and box-shadow to Popover in dark/light theme
* Fix Ctrl+Shift+T not working
* Satisfy formatters and tests
* Add copyright header
* move copyright header to top (dae)
* Use async functions in CodeMirror.svelte
* Fix using async functions by modifying svelte-preprocess output
* Revert "Fix using async functions by modifying svelte-preprocess output"
This reverts commit 94c9cadaaa3ca2084780833e9efc7807f2f1d1a9.
Trying a different fix.
* Change TypeScript target to ES2019