Commit graph

2172 commits

Author SHA1 Message Date
Henrik Giesel
e9e6e7f7e0 Fix Mathjax sometimes being deleted even though it's not selected (#1696)
* Fix frame element being deleted, when a frame handle is deleted from while selected

* Fix mixing up preceding/following
2022-02-27 17:58:01 +10:00
Henrik Giesel
c9203b5336 Consider using --force-message for ts/protobuf.bzl (#1694)
* Use --force-message in ts/protobuf

* Remove some now unnecessary type assertions in deck-options/lib

* Satisfy formatter
2022-02-27 17:35:07 +10:00
Damien Elmes
4fc7ff9962 Update to Jest 28 alpha
https://github.com/ankitects/anki/pull/1682
2022-02-25 16:20:50 +10:00
Damien Elmes
19d11486cb Update rules_nodejs 2022-02-25 16:19:26 +10:00
Damien Elmes
5342b57225 Update JS deps 2022-02-25 15:29:49 +10:00
Henrik Giesel
fbcd402c1e Fix plain text (#1689)
* Move remove-prohibited-tags logic from PlainTextInput

* Make CodeMirror export a promise

* Offer lifecycle hooks for PlainTextInput for easily accessing code mirror instance

* Fix </> breaking Mathjax

* remove debug statement (dae)
2022-02-25 11:14:26 +10:00
Henrik Giesel
2313245476 Fix setting of caret when creating clozes (#1688) 2022-02-25 11:07:44 +10:00
Henrik Giesel
a8532619f1 Fix insert media always insert at the start (on Windows) (#1684)
* Move Trigger into its own file

* Try implement HandlerList

* Implement new input handler and handler-list

* Use new refocus HandlerList in TextColorButton

* Fix TextColorButton on windows

* Move ColorPicker to editor-toolbar

* Change trigger behavior of overwriteSurround

* Fix mathjax-overlay flushCaret

* Insert image via bridgeCommand return value

* Fix invoking color picker with F8

* Have remove format work even when collapsed

* Satisfy formatter

* Insert media via callback resolved from python

* Replace print with web.eval

* Fix python formatting

* remove unused function (dae)
2022-02-25 10:59:06 +10:00
Damien Elmes
1ed6bc15dc interday sibling burying is only valid in v3 2022-02-23 14:33:52 +10:00
Henrik Giesel
46040999c5 Move all buttons to our custom inline surrounding (#1682)
* Clarify some comments

* Don't destructure insertion trigger

* Make superscript and subscript use domlib/surround

* Create new {Text,Highlight}ColorButton

* Use domlib/surround for textcolor

- However there's still a crucial bug, when you're breaking existing
  colored span when unsurrounding, their color is not restored

* Add underline format to removeFormats

* Simplify type of ElementMatcher and ElementClearer for end users

* Add some comments for normalize-insertion-ranges

* Split normalize-insertion-ranges into remove-adjacent and remove-within

* Factor out find-remove from unsurround.ts

* Rename merge-mach, simplify remove-within

* Clarify some comments

* Refactor first reduce

* Refactor reduceRight

* Flatten functions in merge-ranges

* Move some functionality to merge-ranges and do not export

* Refactor merge-ranges

* Remove createInitialMergeMatch

* Finish refactoring of merge-ranges

* Refactor merge-ranges to minimal-ranges and add some unit testing

* Move more logic into text-node

* Remove most most of the logic from remove-adjacent

- remove-adjacent is still part of the "merging" logic, as it increases
  the scope of the child node ranges

* Add some tests for edge cases

* Merge remove-adjacent logic into minimal-ranges

* Refactor unnecessary list destructuring

* Add some TODOs

* Put removing nodes and adding new nodes into sequence

* Refactor MatchResult to MatchType and return clear from matcher

* Inline surround/helpers

* Shorten name of param

* Add another edge case test

* Add an example where commonAncestorContainer != normalization level

* Fix bug in find-adjacent when find more than one nested nodes

* Allow comments for Along type

* Simplify find-adjacent by removing intermediate and/or curried functions

* Remove extend-adjacent

* Add more tests when find-adjacent finds by descension

* Fix find-adjacent descending into block-level elements

* Add clarifying comment to refusing to descend into block-level elements

* Move shifting logic into find-adjacent

* Rename file matcher to match-type

* Give a first implemention of TreeVertex

* Remove MatchType.ALONG

- findAdjacent now directly modifies the range

* Rename MatchType.MATCH into MatchType.REMOVE

* Implement a version of find-within that utilizies match-tree

* Turn child node range into a class

* Fix bug in new find-adjacent function

* Make all find-adjacent tests test for ranges

* Surrounding within farthestMatchingAncestor when available

* Fix an issue with negligable elements

- also rename "along" elements to "negligable"

* Add two TODOs to SurroundFormat interface

* Have a messy first implementation of the new tree-node algorithm

* Maintain whether formatting nodes are covered or within user selection

* Move covered and insideRange into TreeNode superclass

* Reimplement findAdjacent logic

* Add extension logic

* Add an evaluate method to nodes

* Introduce BlockNode

* Add a first evaluate implementation

* Add left shift and inner shift logic

* Implement SurroundFormatUser

* Allow pass in formatter, ascender and merger from outside

* Fix insideRange and covered switch-up

* Fix MatchNode.prototype.isAscendable

* Fix another switch-up of covered and insideRange...

* Remove a lot of old code

* Have surround functions only return the range

- I still cannot think of a good reason why we should return addedNodes
  and removedNodes, except for testing.

* Create formatting-tree directory

* Create build-tree directory + Move find-above up to /domlib

* Remove range-anchors

* Move unsurround logic into no-splitting

* Fix extend-merge

* Fix inner shift being eroneusly returned as left shift

* Fix oversight in SplitRange

* Redefine how ranges are recreated

* Rename covered to insideMatch and put as fourth parameter instead of third

* Keep track of match holes and match leaves

* Rename ChildNodeRange to FlatRange

* Change signature of matcher

* Fix bug in extend-merge

* Improve Match class

* Utilize cache in TextColorButton

* Implement getBaseSurrounder for TextColorButton

* Add matchAncestors field to FormattingNode

* Introduce matchAncestors and getCache

* Do clearing during parsing already

- This way, you know whether elements will be removed before getting to
  Formatting nodes

* Make HighlightColorButton use our surround mechanism

* Fix a bug with calling .removeAttribute and .hasAttribute

* Add side button to RemoveFormat button

* Add disabled to remove format side button

* Expose remove formats on RemoveFormat button

* Reinvent editor/surround as Surrounder class

* Fix split-text when working with insert trigger

* Try counteracting the contenteditable's auto surrounding

* Remove matching elements before normalizing

* Rewrite match-type

* Move setting match leaves into build

* Change editing strings

- So that color strings match bold/italic strings better

* Fix border radius of List options menu

* Implement extensions functionality

* Remove some unnecessary code

* Fix split range endOffset

* Type MatchType

* Reformat MatchType + add docs

* Fix domlib/surround/apply

* Satisfy last tests

* Register Surrounder as package

* Clarify some comments

* Correctly implement reformat

* Reformat with inactive eraser formats

* Clear empty spans with RemoveFormatButton

* Fix Super/Subscript button

* Use ftl string for hardcoded tooltip

* Adjust wording
2022-02-22 22:17:22 +10:00
RumovZ
549d31d439 Config for burying interday learning cards (#1680)
* Add config for burying interday learning cards

* Expose bury interday learning config in GUI
2022-02-22 21:37:59 +10:00
Damien Elmes
1c5077ab45 add back support for custom mount point in congrats screen
This was inadvertently dropped in 9ed42d2bac,
but AnkiWeb requires it.

In the future we will need to give these index pages a bit more thought,
as it's not very helpful to be exporting a creation function if we're
automatically mounting as the module is imported. Dropping the automatic
mounting would give us more flexibility, but currently that leads to
a FOUC in night mode, as the webview is revealed prior to a subsequent
web.eval() call being able to fire.
2022-02-17 16:28:48 +10:00
Damien Elmes
d4bca6d4d3 older Safari does not support Blob.arrayBuffer() 2022-02-15 15:02:45 +10:00
Damien Elmes
4989912597 add class to 'show timer' switch 2022-02-14 20:04:19 +10:00
Damien Elmes
18269ecdff fix reviewer_extras 2022-02-14 18:46:50 +10:00
RumovZ
cbe37d7095 V3 parent limits (#1638)
* avoid repinning Rust deps by default

* add id_tree dependency

* Respect intermediate child limits in v3

* Test new behaviour of v3 counts

* Rework v3 queue building to respect parent limits

* Add missing did field to SQL query

* Fix `LimitTreeMap::is_exhausted()`

* Rework tree building logic

https://github.com/ankitects/anki/pull/1638#discussion_r798328734

* Add timer for build_queues()

* `is_exhausted()` -> `limit_reached()`

* Move context and limits into `QueueBuilder`

This allows for moving more logic into QueueBuilder, so less passing
around of arguments. Unfortunately, some tests will require additional
work to set up.

* Fix stop condition in new_cards_by_position

* Fix order gather order of new cards by deck

* Add scheduler/queue/builder/burying.rs

* Fix bad tree due to unsorted child decks

* Fix comment

* Fix `cap_new_to_review_rec()`

* Add test for new card gathering

* Always sort `child_decks()`

* Fix deck removal in `cap_new_to_review_rec()`

* Fix sibling ordering in new card gathering

* Remove limits for deck total count with children

* Add random gather order

* Remove bad sibling order handling

All routines ensure ascending order now.
Also do some other minor refactoring.

* Remove queue truncating

All routines stop now as soon as the root limit is reached.

* Move deck fetching into `QueueBuilder::new()`

* Rework new card gather and sort options

https://github.com/ankitects/anki/pull/1638#issuecomment-1032173013

* Disable new sort order choices ...

depending on set gather order.

* Use enum instead of numbers

* Ensure valid sort order setting

* Update new gather and sort order tooltips

* Warn about random insertion order with v3

* Revert "Add timer for build_queues()"

This reverts commit c9f5fc6ebe.

* Update rslib/src/storage/card/mod.rs (dae)

* minor wording tweaks to the tooltips (dae)

+ move legacy strings to bottom
+ consistent capitalization (our leech action still needs fixing,
but that will require introducing a new 'suspend card' string as the
existing one is used elsewhere as well)
2022-02-10 09:55:43 +10:00
Henrik Giesel
042f953f4f Fix editor dropdowns (#1649) 2022-02-08 14:13:55 +10:00
Henrik Giesel
fe985644e9 Fix CommandIconButton (#1648)
- It did not respect shortcuts
2022-02-08 14:13:18 +10:00
Henrik Giesel
8c21b74ece Make sure initial comments are preserved in HTML editor (#1647) 2022-02-08 14:07:09 +10:00
Henrik Giesel
5345ecbc0c Fix field not restored if active (#1639)
* Fix field not being restored after Undo, if field also has focus

* Execute moveCaretToEnd after undoing a change

- Otherwise the caret might be placed in seemingly random positions

* Fix wording of comments

* Remove autofocus functionality of EditingArea

- instead await a tick in focusField
- We used the autofocus prop for the initial focus setting when opening the
  editor. However it seems that awaiting tick in focusField also does the trick.
2022-02-05 15:58:31 +10:00
Henrik Giesel
9f4f3d59d7 Fix CodeMirror retaining history of unrelated notes (#1640) 2022-02-04 18:40:50 +10:00
Henrik Giesel
fff0bd6e55 Use eslint for sorting our imports (#1637)
* Make eslint sort our imports

* fix missing deps in eslint rule (dae)

Caught on Linux due to the stricter sandboxing

* Remove exports-last eslint rule (for now?)

* Adjust browserslist settings

- We use ResizeObserver which is not supported in browsers like KaiOS,
  Baidu or Android UC

* Raise minimum iOS version 13.4

- It's the first version that supports ResizeObserver

* Apply new eslint rules to sort imports
2022-02-04 18:36:34 +10:00
Damien Elmes
c36ca1a212 fix mojibake on congrats screen
97a0c06eae (commitcomment-65963462)
2022-02-04 18:25:40 +10:00
Henrik Giesel
90188f2588 Improved add-on extension API (#1626)
* Add componentHook functionality

* Register package NoteEditor

* Rename OldEditorAdapter to NoteEditor

* Expose instances in component-hook as well

* Rename NoteTypeButtons to NotetypeButtons

* Move PreviewButton initialization to BrowserEditor.svelte

* Remove focusInRichText

- Same thing can be done by inspecting activeInput

* Satisfy formatter

* Fix remaining rebase issues

* Add .bazel to .prettierignore

* Rename currentField and activeInput to focused{Field,Input}

* Move identifier to lib and registration to sveltelib

* Fix Dynamic component insertion

* Simplify editingInputIsRichText

* Give extra warning in svelte/svelte.ts

- This was caused by doing a rename of a files, that only differed in
  case: NoteTypeButtons.svelte to NotetypeButtons.svelte
- It was quite tough to figure out, and this console.log might make it
  easier if it ever happens again

* Change signature of contextProperty

* Add ts/typings for add-on definition files

* Add Anki types in typings/common/index.d.ts

* Export without .svelte suffix

It conflicts with how Svelte types its packages

* Fix left over .svelte import from editor.py

* Rename NoteTypeButtons to unrelated to ensure case-only rename

* Rename back to NotetypeButtons.svelte

* Remove unused component-hook.ts, Fix typing in lifecycle-hooks

* Merge runtime-require and register-package into one file

+ Give some preliminary types to require

* Rename uiDidLoad to loaded

* Fix eslint / svelte-check

* Rename context imports to noteEditorContext

* Fix import name mismatch

- I wonder why these issues are not caught by svelte-check?

* Rename two missed usages of uiDidLoad

* Fix ButtonDropdown from having wrong border-radius

* Uniformly rename libraries to packages

- I don't have a strong opinion on whether to name them libraries or
  packages, I just think we should have a uniform name.
- JS/TS only uses the terms "module" and "namespace", however `package`
  is a reserved keyword for future use, whereas `library` is not.

* Refactor registration.ts into dynamic-slotting

- This is part of an effort to refactor the dynamic slotting (extending
  buttons) functionality out of components like ButtonGroup.

* Remove dynamically-slottable logic from ButtonToolbar

* Use DynamicallySlottable in editor-toolbar

* Fix no border radius on indentation button dropdown

* Fix AddonButtons

* Remove Item/ButtonGroupItem in deck-options, where it's not necessary

* Remove unnecessary uses of Item and ButtonGroupItem

* Fix remaining tests

* Fix relative imports

* Revert change return value of remapBinToSrcDir to ./bazel/out...

* Remove typings directory

* Adjust comments for dynamic-slottings
2022-02-03 14:52:11 +10:00
Hikaru Y
eebc97734b Fix field content overflowing its container (#1618) 2022-01-25 10:35:13 +10:00
Henrik Giesel
9c409e1bcf Separate input components into their own directories / Remove WithShortcut (#1613)
* Put PlainTextInput into its own directory

* Create a directory for RichTextInput

* Create editor-toolbar directory

* Move PreviewButton into editor-toolbar

* The time to refactor this is not quite yet here

* Create tag-editor directory

* Remove some of the uses of WithShortcut

* Remove all uses of WithShortcut from editor package

* Remove last uses of WithShortcut

* Fix typo
2022-01-24 11:43:09 +10:00
Damien Elmes
d7a7ac114f switch convenience symlinks to .bazel/
Unfortunately 13cfa87a82 broke the Svelte
language tools - presumably having paths outside of the repo is confusing
them.

As a plan B, the symlinks have been shifted to a single subdir. Along
with some exclusions in the VS Code config, this should allow VS Code
to continue to work out of the box, but the docs will need updating
to reflect the extra work required for PyCharm/IntelliJ.

+ fix svelte-check execution on a system without node installed. It
still throws up some errors that are presumably caused by our multiple
rootDirs - not sure if there's an easy way to work around that.
2022-01-24 11:06:02 +10:00
Damien Elmes
38b33d6a24 replace some bazel-bin references in our scripts
+ fix scripts/mypy-watch, and make it only listen to change events
2022-01-23 20:17:08 +10:00
Henrik Giesel
97a0c06eae Add _raw methods for all methods in the backend (#1594)
* Add _bytes methods for all methods in the backend

Expose get_note in qt/aqt/mediasrv.py

* Satisfy formatter

* Rename _bytes function to _raw and have them bytes as input

* Fix backend generation

* Use lib/proto/deckOptions in deck-options

* Add exposed_backend to qt/aqt/mediasrv.py

* Move some more backend methods to exposed_backend_list

* Use protobufjs for congrats and i18n

* Use protobufjs for completeTag

* Use protobufjs services in change-notetype

* Reorder post handlers in alphabetical manner

* Satisfy tests

* Remove unused collection methods

* Rename access_backend to raw_backend_request

* Use _vendor.stringcase instead of creating a new function

* Remove SKIP_UNROLL_OUTPUT

* Directly call _run_command in non _raw methods

* Remove TranslateString, ChangeNotetype and CompleteTag from SKIP_UNROLL_INPUT

* Remove UpdateDeckConfigs from SKIP_UNROLL_INPUT

* Remove ChangeNotetype from SKIP_UNROLL_INPUT

* Remove SKIP_UNROLL_INPUT

* Fix typing issue with translate_string

- Adds typing support for Protobuf maps in genbackend.py

* Do not emit convenience method for protobuf TranslateString
2022-01-21 21:32:39 +10:00
Henrik Giesel
0450e209d5 Fix the caret flushing behavior when moving out of a Mathjax element (#1605)
* Fix the caret flushing behavior when moving out of a Mathjax element

* Fix typing issue and add docs for ContentEditableAPI
2022-01-19 10:17:53 +10:00
Henrik Giesel
3ba86b6ae6 Fix bug when selecting text next to frame by clicking three times (#1604) 2022-01-19 10:15:53 +10:00
RumovZ
d173f7154a Webview margins (#1583)
* Improve side margins in card info screen

* Improve top margin in deck options screen

* Hide revlog time of day on narrow screens

* Remove monospace for now (dae)
2022-01-17 15:04:25 +10:00
Henrik Giesel
9ed42d2bac Remove individual .html files + other refactorings (#1588)
* Move some AddCards specific code to NoteCreator.svelte

* Add new strings for Toggling the Visual / HTML editor

* Set LabelContainer vertical-align to text-top

- Makes them look more centered

* Remove appendInParentheses helper

* Make all ts/*.html files include only module.js and module.css

* Move any JS from .html to index files

* Remove .html files from ts modules

* Remove Python with Starlark implemenation

* Remove reference to non-existing file

* Remove deck-option.html as well

* fix change-notetype screen (dae)
2022-01-16 15:05:35 +10:00
Damien Elmes
bf2aad8d46 update JS deps
- fixes warnings about security issues in marked/markdown-it
- jsdoc is mostly unmaintained at this point, and we need to override
its dependencies manually
- typescript is still pinned
2022-01-16 13:29:48 +10:00
Damien Elmes
e878c8f6d1 sass/codemirror does not appear to be used 2022-01-15 21:19:58 +10:00
Damien Elmes
1eda2bc6ca copy_bootstrap_css/icons were unused 2022-01-15 20:35:11 +10:00
Henrik Giesel
f5ecf063a3 Split/Merge editor.py for its three use cases (#1581)
* Forbid inserting object and iframe tags via PlainTextInput

* Add optional browserMode parameter to Editor

* Create new ts modules for three editor instances

- note-creator for AddCards
- browser-editor for the editor in the Browser
- reviewer-editor for the EditCurrent

* Revert "Forbid inserting object and iframe tags via PlainTextInput"

This reverts commit ab90ae8194494d883a1863126496e2d8f332509e.

* Refactor browserMode to editorMode

* Move new editor variants inside /ts/editor directory

* Fix typo
2022-01-12 14:51:43 +10:00
Henrik Giesel
d5211556cd Fix IME input after tab (#1584)
* Avoid initial call of mirror-dom

* Disable updateFocus from OldEditorAdapter

* fixes IME input duplication bug

* Fix saving of latestLocation for ContentEditable

* Fix IME after calling placeCaretAfterContent

* Export other libraries from domlib/index.ts

* Remove dead code

+ Uncomment code which was mistakenly left commmented
2022-01-12 08:39:41 +10:00
Ryan
34ec584316 Calendar graph uses consistent colors across years (#1585) 2022-01-11 16:26:26 +10:00
Henrik Giesel
d3ce4d16b9 Use default colors for CodeMirror in light theme Anki (#1578)
Refactor PlainTextInput

Put CodeMirror themes into variables
2022-01-10 12:51:50 +10:00
RumovZ
0ebaf7cb3e Fix padding and alignment inside revlog table (#1576)
* Use nested tables in revlog

This allows for centered rows, while still preserving internal
alignment.

* Fix hidden columns

* Replace inner tables with flexbox divs

* Replace revlog table with flexbox divs

* Replace flex-gap in revlog

Unsupported on iOS and Qt5.
2022-01-10 12:50:48 +10:00
Henrik Giesel
5fb47df0e3 Small Tag editor fixes (#1580)
* Adjust height of TagInputs to not switch when changing mode

* Hide scrollbar on tag suggestions when not necessary
2022-01-08 11:48:17 +10:00
Henrik Giesel
e07a5f2a77 Reset .style.width when resizing images (#1579) 2022-01-08 11:47:12 +10:00
Henrik Giesel
fcd47371dc Fix some Mathjax issues (#1547)
* Move move-nodes logic into domlib

Refactor input-manager

Refactor out FocusTrap from EditingArea

Remove unnecessary selecting of node from surround

Add onInput interface to input-manager

Create MathjaxElement.svelte

- This should contain all the setup necessary for displaying
  <anki-mathjax> elements in the rich text input
- Does not contain setup necessary for Mathjax Overlay

Deal with backwards deletion, when caret inside anki-mathjax

Set mathjax elements contenteditable=false

Do not undecorate mathjaxx element on disconnect

- Fixes issues, where Mathjax might undecorate when it is moved into a
  different div

Add framed element custom element

Introduce iterateActions to allow global hooks for RichTextInput

Remove some old code

Deal with deletion of frame handles

Make Anki frame and frame handles restore each other

Make FrameElement restore its structure upon modification

Frame and strip off framing from MathjaxElement automatically

Move FrameHandle to separate FrameStart/FrameEnd

Refactor FrameHandle

Set data-frames on FrameElement

Fix logic error connected to FrameElement

Communicate frameHandle move{in,out} to anki-mathjax

Clear selection when blurring ContentEditable

Make sure frame is destroyed when undecorating Mathjax

Use Hairline space instead of zeroWidth

- it has better behavior in the contenteditable when placing the caret
  via clicking

Allow detection of block elements with `block` attribute

- This way, anki-mathjax block="true" will make field a
field be recognized to have block content

Make block frame element operater without handles

- Clicking on the left/right side of a block mathjax will insert a br
  element to that side

When deleting, remove mathajax-element not just image

Update MathjaxButtons to correctly show block state

SelectAll when moving into inline anki mathjax

Remove CodeMirror autofocus functionality

Move it to Mathjaxeditor directly

Fix getRangeAt throwing error

Update older code to use cross-browser

Fix issue with FrameHandles not being properyly removed

Satisfy formatting

Use === instead of node.isSameNode()

Fix issue of focusTrap not initialized

* Fix after rebasing

* Fix focus not being moved to first field

* Add documentation for input-manager and iterate-actions

* Export logic of ContentEditable to content-editable

* Fix issue with inserting newline right next to inline Mathjax

* Fix reframing issue of Mathjax Svelte component

* Allow for deletion of Inline Mathjax again

* Rename iterate-actions to action-list

* Add copyright header

* Split off frame-handle from frame-element

* Add some comments for framing process

* Add mising return types
2022-01-08 11:46:01 +10:00
Damien Elmes
41833cc7ca another attempt at enforcing script load order
See discussion on 01195e9e9d (commitcomment-62861929)
2022-01-07 14:23:55 +10:00
Damien Elmes
8fa0c1eef0 Revert "Guarantee execution order of <script> elements (#1574)"
This reverts commit 01195e9e9d.

Reverting until this can be investigated:

01195e9e9d (commitcomment-62861929)
2022-01-04 10:43:56 +10:00
Hikaru Y
01195e9e9d Guarantee execution order of <script> elements (#1574) 2022-01-04 08:58:09 +10:00
Vova Selin
c9cc719c4b Minor changes to graphs (#1566)
* Add thousands comma separator for card counts graph

* Fix Answer Buttons graph's tooltip

Changes to the "times pressed" heading

* Shows the percent of that button out of all the presses

* Comma separates total on thousands

* Update CONTRIBUTERS

* Wider spacing for graph tables

* Switch to locale-based stats numbers

* Update CONTRIBUTORS 

Wrong email?

* Fix counts graph on narrow devices

Graph and table now align in a column when the device's screen is narrow. Columns widths are  bounded to not get too wide

* Rename toLocaleXXX functions

* toLocaleNumber -> localizedNumber
 *  toLocaleString -> localizedDate

Also cleans up sketchy "card counts" table formatting

* Localize more numbers

Uses locale-based rounding for more numbers now

* Localize graph axis ticks

* Fix future-due graph tooltip

* avoid div by zero (dae)

Ignoring NaN in localizedNumber() could potentially mask a mistake
in the future - better to explicitly handle the invalid case at the
source instead.
2021-12-29 15:04:15 +10:00
Hikaru Y
5e4a9ab745 Prevent unwanted <div> from being left behind when clearing field (#1565)
* Prevent unwanted <div> from being left behind when clearing field

* Use event.currentTarget instead of 'this'

* Check if event.data is empty for better performance

* Change order of conditions for better performance
2021-12-24 09:12:04 +10:00
Hikaru Y
8bb33f4ef1 Fix some issues with closing previewer (#1563)
* Fix media playback not terminating when previewer is closed

https://forums.ankiweb.net/t/anki-2-1-50-beta/15608/78

* Fix _on_preview_closed being called twice unnecessarily

The function was being called twice when the preview button is clicked
while the previewer is open.

* Fix console error caused by leftover code

The following error was shown in the console when closing previewer:
`Uncaught TypeError: Cannot read property 'classList' of null`

* Toggle state of preview button via 'active' prop
2021-12-20 20:23:50 +10:00
Damien Elmes
4c67b130d0 fix inverted SchedBuried and UserBuried in cards.ts
This wasn't causing any problems, as we only ever checked for both at
once.
2021-12-20 12:57:35 +10:00
Hikaru Y
a9be48f85a Preload external css files to prevent flash of unstyled content (#1558)
* Preload external css files to prevent flash of unstyled content

This is an implementation of the approach mentioned in the commit
message of 65c430a.

* Tweak max_age value for css files

Ensure that css preloading works even on a slow PC.
2021-12-16 21:47:10 +10:00
RumovZ
5ebf144306 Cap steps (#1548)
* Fix steps being mistaken for seconds

* Cap steps at `u32::max` seconds

* Fix overflow of steps in Rust

* Prevent overflow of `IntervalKind`

* Prevent overflow in `revlod/mod.rs`

Also replace some `as` with `from` and `try_from` as is recommended to
highlight potential issues.

* Ensure v2 doesn't store overflowing revlog ivls

* Lower steps cap in deck options

Whereas large card intervals are converted to days, revlog intervals use
i32s to store large numbers of seconds.

* Format
2021-12-15 18:46:26 +10:00
Damien Elmes
d47b0657ff run buildifier/buildozer to tidy up BUILD files 2021-12-14 09:18:24 +10:00
Matthias Metelka
9adfcd0884 Reimplement "Show Duplicates" button in editor (#1550)
* Add "Show duplicates" to LabelContainer

* Avoid bubbling down the duplicate logic into EditorField

* Move duplicate link into its own slot

to center it between name/description and field-state.

* Revert "Move duplicate link into its own slot"

This reverts commit 3a4511042d.

* Justify dupes within FieldState

to achieve the same result as before while avoiding additional logic within EditorField.

Co-Authored-By: Henrik Giesel <hengiesel@gmail.com>
2021-12-13 14:06:12 +10:00
Henrik Giesel
ea1946596c Add back wrap function (#1551)
* Remove surround from RichText and PlainText

* Export wrap
2021-12-13 14:00:35 +10:00
RumovZ
c411d699a9 Add shortcuts for list and indentation (#1546) 2021-12-10 17:54:31 +10:00
Matthias Metelka
086a3e674e Decrease button and tag size for Linux and Windows (#1532)
* Decrease button size for platforms other than Mac

* Refactor legacy button styles

* Restrict size of add-on icons
2021-12-06 19:01:15 +10:00
Henrik Giesel
5be046eacd Block {,max-}{width,height} from being copied (#1529) 2021-12-06 18:41:08 +10:00
Abdo
8e609818f9 Flip arrows of Bootstrap-styled <select>s for RTL langs (#1526)
* Flip arrows of Bootstrap-styled <select>s for RTL langs

* Use the dir attribute to set document direction

* Remove unused variable and fix use of CSS var
2021-12-06 18:40:26 +10:00
Hikaru Y
cacb49f81d Fix custom CSS not being applied to scrollbars in night mode (#1525) 2021-12-05 08:20:42 +10:00
Matthias Metelka
785f6a78fc Rename StickyNav to StickyHeader (#1524)
so as to not create false assumptions about its functionality.
2021-12-05 08:18:58 +10:00
Matthias Metelka
af5938c37b Align design of Change Notetype screen with rest of UI (#1522)
* Remove background and border from scrollArea

* Fix 1px of background text showing above template header on scroll

I couldn't figure out the reason for this "clipping" issue. What I tried:
- check HTML structure for any elements that might add extra padding/margin
- remove the 1px border of the header

* Adjust spacing to be more in line with rest of UI
2021-12-04 14:53:16 +10:00
Matthias Metelka
695ab0f193 Show downwards arrow on SelectButton (#1521)
* Show downwards arrow on SelectButton

The arrow wasn't showing because the button linear-gradient background overrides the background-image for the arrow.

Select can't have pseudo-elements, so I had to add an extra div.

* Remove height definition

to fix text cutting off on Windows.

* Hide default arrow in light theme

to keep consistency with dark theme, where the arrow has to be custom due to the button gradient.

* Use alternative approach to prevent text getting cropped

and add height definition back again.

Co-Authored-By: Hikaru Y. <47855854+hikaru-y@users.noreply.github.com>

* Adjust arrow position for rtl

Co-authored-by: Hikaru Y. <47855854+hikaru-y@users.noreply.github.com>
2021-12-04 08:08:20 +10:00
Henrik Giesel
b4772f47d1 Fix focus lost after adding note if non-sticky (#1523) 2021-12-03 21:41:12 +10:00
Damien Elmes
149819e5a1 update Node deps
TypeScript is currently pinned. Before updating to 4.5, we will likely
need to use --preserveValueImports in svelte.ts:
https://devblogs.microsoft.com/typescript/announcing-typescript-4-5/#preserve-value-imports

There's also an issue with missing types when importing from bootstrap
.js files that will need investigating.
2021-12-03 20:35:53 +10:00
Damien Elmes
66fa578d83 fix update-licenses.sh 2021-12-03 20:35:53 +10:00
Damien Elmes
714486c25b fix position showing as date in card stats
Fixes #1519
2021-12-02 16:10:29 +10:00
Matthias Metelka
834f09110e Add missing editorToolbar export (#1511) 2021-11-29 12:40:31 +10:00
RumovZ
54d39d1b3b Live theme changes (#1497)
* Allow theme change at runtime and add hook

* Save or restore default palette on theme change

* Update aqt widget styles on theme change

* styling fixes

- drop _light_palette, as default_palette serves the same purpose
- save default platform theme, and restore it when switching away
from nightmode
- update macOS light/dark mode on theme switch
- fix unreadable menus on Windows

* update night-mode classes on theme change

This is the easy part - CSS styling that uses standard_css or our
css variables should update automatically. The main remaining issue
is JS code that sets colors based on the theme at the time it's run -
eg the graph code, and the editor.

* switch night mode value on toggle

* expose current theme via a store; switch graphs to use it

https://github.com/ankitects/anki/issues/1471#issuecomment-972402492

* start using currentTheme in editor/components

This fixes basic editing - there are still components that need updating.

* add simple xcodeproj for code completion

* add helper to get currently-active system theme on macOS

* fix setCurrentTheme not being immediately available

* live update tag color

* style().name() doesn't work on Qt5

* automatic theme switching on Windows/Mac

* currentTheme -> pageTheme

* Replace `nightModeKey` with `pageTheme`

Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2021-11-25 07:17:41 +10:00
Damien Elmes
63b34e0f0e prettier: don't depend on system node being available 2021-11-25 07:14:15 +10:00
Matthias Metelka
e2a30666e4 Change Notetype UI Rework (#1499)
* Enable access to old notetype name

* Set minimum height for ChangeNotetypeDialog

* Add bootstrap icons to change-notetype

* Move alert up and make it collapsible

* Tweak some CSS

- Add variables --sticky-bg and --sticky-border to StickyContainer
- Tweak base.css

* Add translatable string "(Nothing)"

* Rework ChangeNotetype screen

* Initially load option at newIndex and remaining options on focus

Optimization for big notetypes:
Should increase efficiency from O(n²) to O(n). Test on notetype with 500 templates shows significant improvement in load time (~10s down to ~1s).

* Try to satisfy rust test

* Change arrow direction depending on reading direction

+ add 0.5em top padding to main

* Create Alert.svelte

* Introduce CSS variable --pane-bg

* Revert "Initially load option at newIndex and remaining options on focus"

This reverts commit f42beee45c.

* Final cleanup

* Refine padding/gutter
2021-11-24 12:09:55 +10:00
Henrik Giesel
a1d6269d49 Fix some issues with new surround buttons (#1505)
* Add a store to indicate whether input trigger is active

Button state is then indicated by: caretIsInBold XOR boldTriggerActive

* Fix surrounding where normalization is tripped up by empty text nodes

* Add failing test for unsurrounding

* Fix failing test

* prohibitOverlapse does not need to be active, if aboveEnd is null

* Reinsert Italic and Underline button

* Refactor find-adjacent to use sum types

* Simplify return value of normalizeAdjacent
2021-11-24 10:33:14 +10:00
Henrik Giesel
e14ab90551 Fix Cloze button (#1504) 2021-11-24 10:25:24 +10:00
Henrik Giesel
0f17c32401 Mathjax editor improvements (#1502)
* Remove unnecessary stopPropagation of mathjax-overlay events

* Use CodeMirror component for MathjaxHandle

* Refactor ResizeObserver code in MathjaxHandle

* Wrap setRange in CodeMirror in try/catch

* Add Mathjax Editor bottom margin

* Add custom Enter and Shift+Enter shortcuts for the MathjaxHandle

* Format

* Move placeCaretAfter to domlib

* Move focus back to field after editing Mathjax

* Put Cursor after Mathjax after accepting

* Add delete button for Mathjax

* Change border color of mathjax menu

* Refactor into MathjaxMenu

* Put caretKeyword in variable

* Use one ResizeObserver for all Mathjax images

* Add minmimum width for Mathjax editor

* is still smaller than minimal window width

* Add bazel directories to .prettierignore and format from root

* exclude ftl/usage (dae)

the json files that live there are output from our tooling, and
formatting them means an extra step each time we want to update them

also exclude .mypy_cache, which is output by scripts/mypy*

* minor ftl tweak: newline -> new line  (dae)
2021-11-23 10:27:32 +10:00
Henrik Giesel
a2aeaf456f Fix missing left margin in CongratsPage (#1498) 2021-11-19 11:02:54 +10:00
Henrik Giesel
cfe1895870 Reverse-engineer surrounding with execCommand (#1377)
* Add utility functions for saving and restoring the caret location

Implement surroundNoSplitting

Clarify surroundNoSplitting comments

Start implementing surroundSplitting and triggerIfSimpleInput

Fix after rebase

Implement findBefore / findAfter in lib/surround

* to merge adjacent nodes into the surrounding nodes

Use new prettier settings with lib/{location,surround}

Fix imports that I missed to rename

Add some tests for find-adjacent

Split find-within from find-adjacent

Normalize nodes after insertion in surroundNoSplitting

Do not deep clone surroundNode

-> no intention of supporting deep nodes, as normalization would be impossible

Add some tests concerning nested surrounding nested nodes

Select surroundedRange after surrounding

Fix ascendWhileSingleInline

A flawed first surround/trigger implementation

Move trigger out of lib/surround

Implement Input Manager as a way to handle bold on empty selection

Switch bold button away from execCommand

Pass in Matcher instead of selector to find-adjacent and surroundNoSplitting

* Also adds a failing test for no-splitting

Refactor find-adjacent

* add failing test when findBefore's nodes have different amounts of
  child nodes

Change type signature of find-adjacent methods to more single-concern

Add test for surrounding where adjacent block becomes three Text elements

Make nodes found within surrounded range extend the ranges endOffset

Add base parameter to surroundNoSplitting to stop ascending beyond container

Stop surrounding from bubbling beyond base in merge-match

Make all tests pass

Add some failing tests to point to future development

Add empty elements as constant

Implement a broken version of unsurround

Even split text if it creates zero-length texts

-> they are still valid, despite what Chromium says

Rename {start,end} to {start,end}Container

Add more unit tests with surround after a nested element

Set endOffset after split-off possibly zero length text nodes

Deal with empty elements when surrounding

Only include split off end text if zero length

Use range anchors instead off calcluating surroundedRange from offsets

* this approach allows for removal of base elements when unsurrounding

Comment out test which fail because of jsdom bugs

We'll be able to enable them again after Jest 28

Make the first unsurround tests pass

Add new failing test for unsurround text within tag

Fix unsurround

Test is deactivated until Jest 28

Rewrite input-manager and trigger callback after insertion

Avoid creating zero length text nodes by using insertBefore when appropriate

Implement matches vs keepMatches

Make shadow root and editable element available on component tree

Make WithState work with asynchronous updater functions

Add new Bold/Italic/UnderlineButton using our logic

Add failing test for unsurrounding

* Move surround/ to domlib

* Add jest dependency

* Make find-within return a sum type array rather than two arrays

* Use FoundMatch sum-type for find-above (and find-within)

* Fix issue where elements could be cleared twice

* if they are IN the range.endContainer

* Pass remaining test

* Add another failing test

* Fix empty text nodes being considered for surrounding

* Satisfy svelte check

* Make on more type correct

* Satisfy remaining tests

* Add missing copyright header
2021-11-18 19:18:39 +10:00
Henrik Giesel
88a637251b Introduce our own Container, Row, and Col components (#1495)
* Refactor out Placeholder from CardInfo.svelte

* Add breakpoint parameter for Container

- Use `Container` component inside `TitledContainer`

* Build Item into Row

- Use Row in DeckOptionsPage instead of just Item

* Reengineer Container/Row/Col CSS

* Inline Badges next to Labels when Lable spans multiple rows

* Adjust margins for mobile

* Implement Col component breakpoints

* Move card-info to use new Container and Row components

* Join StickyHeader and StickyFooter to StickyContainer

* Remove default middle vertical-alignment for Badges again

* Satisfy tests

* Restore inline gutters in change-notetype Mapper

* Add some comment to Col and Container

* Fix breaking behavior in DeckOptionsPage when multi-column

* Add back toolbar left padding to counter-act buttongroup right margins

* Make Label in SwitchRow take more of available space
2021-11-17 13:49:52 +10:00
Abdo
eb85653f0f Load missing i18n modules (#1494) 2021-11-17 07:28:48 +10:00
RumovZ
5c64aadb7a Garbage collect unused Fluent strings (#1482)
* Canonify import of i18n module

Should always be imported as `tr`, or `tr2` if there is a name collision
(Svelte).

* Add helper for garbage collecting ftl strings

Also add a serializer for ftl asts.

* Add helper for filter-mapping `DirEntry`s

* Fix `i18n_helpers/BUILD.bazel`

* run cargo-raze

* Refactor `garbage_collection.rs`

- Improve helper for file iterating
- Remove unused terms as well
- Fix issue with checking for nested messages by switching to a regex-
based approach (which runs before deleting)
- Some more refactorings and lint fixes

* Fix lints in `serialize.rs`

* Write json pretty and sorted

* Update `serialize.rs` and fix header

* Fix doc and remove `dbg!`

* Add binaries for ftl garbage collection

Also relax type constraints and strip debug tests.

* add rust_binary targets for i18n helpers (dae)

* add scripts to update desktop usage/garbage collect (dae)

Since we've already diverged from 2.1.49, we won't gain anything
from generating a stable json just yet. But once 2.1.50 is released,
we should run 'ftl/update-desktop-usage.sh stable'.

* add keys from AnkiMobile (dae)

* Mention caveats in `remove-unused.sh`
2021-11-12 18:19:01 +10:00
Damien Elmes
6220bdc33c fix card info layout & test code
Closes #1479

Related: #1470
2021-11-12 16:24:08 +10:00
Damien Elmes
0637f3190b another external workspace fix for sass 2021-11-12 15:02:17 +10:00
Henrik Giesel
dccd86c346 Save and restore location on ContentEditable (#1481)
* Add utility functions for saving and restoring the caret location

* Implement cross-browser.getSelection

* Save and restore location on ContentEditable

* Fix refocus by clicking on a field that had a non-collapsed selection
2021-11-09 12:53:39 +10:00
Matthias Metelka
1592fd0295 Editor Field Descriptions (#1476)
* Add description input to fields dialog

QLineEdit seems like the best option, as it saves space and motivates users to keep their descriptions concise.

* Add setDescriptions to note initialization script

Went for the extra function instead of including it in setFields to prevent potential add-on breakages.

* Add tooltip next to field name if description is set

* Refactor code according to suggestions

Set default tooltip placement to right instead of bottom

Use .get() for fld["description"]

Fix tab order in fields dialog

Swap out abbreviation "desc" for full length name to keep consistency

* Update Protobuf and Rust for description

Add description to notetypes.proto and schema11

Co-authored-by: RumovZ <RumovZ@users.noreply.github.com>

* Fix tooltips not updating with description

Remove redundant variable tooltipOptions

Update previousTooltip within reactive function

* Move LabelDescription out of LabelName

Co-authored-by: Henrik Giesel <hgiesel@users.noreply.github.com>

* Decrease icon size and fix alignment

Co-Authored-By: Henrik Giesel <hengiesel@gmail.com>

* the new key needs to be cleared from fields, not the notetype itself

Co-authored-by: RumovZ <RumovZ@users.noreply.github.com>
Co-authored-by: Henrik Giesel <hengiesel@gmail.com>
Co-authored-by: Damien Elmes <gpg@ankiweb.net>
2021-11-06 09:42:48 +10:00
Henrik Giesel
b97dc23b96 Several editor fixes (#1478)
* Declare toolbar api via modifiable property

* Fix addon buttons

* Assign editing areas in a synchronous way

* Restore the Tab shortcut that moves the caret to end

- moveCaretToEnd is called twice now: The moveCaretToEnd calls in
  *TextInput causes the caret to be moved to the end when switching back
  from the window and back.
- To fix this, I will need the code for saving and restoring locations
  from #1377

* Restore selections in the PlainTextInput

* Improve type safety of destroyable

- clearable-array was renamed to destroyable
2021-11-05 11:29:02 +10:00
Damien Elmes
4fa8bad822 speed up Svelte compile
Approx 27s -> 16s when rebuilding editor after making a change to
lib. Still slower than I'd like.
2021-11-04 15:18:28 +10:00
Damien Elmes
bb427c9d26 add a missing references line in ts/graphs 2021-11-04 14:56:50 +10:00
Henrik Giesel
d654a57a90 Set "no-non-null-assertion: off" by default (#1475) 2021-11-04 11:42:51 +10:00
Damien Elmes
5e8580e137 ensure revlog headers match alignment of columns
+ right-align interval; it looks bad centered
2021-11-02 16:32:09 +10:00
Damien Elmes
600cbe5ded use absolute package paths in eslint.bzl 2021-11-02 13:49:19 +10:00
Damien Elmes
cc325d74b8 add lint checks for unsupported browser API calls 2021-11-02 13:44:41 +10:00
Damien Elmes
37df65d0c8 avoid Object.fromEntries() and some instances of globalThis
Not supported on early iOS 12. This can be reverted after iOS 12
support is dropped, which should be soon.
2021-11-02 12:54:06 +10:00
Damien Elmes
dd4c4eb07c include subfolders in eslint/prettier checks 2021-11-02 12:50:27 +10:00
Damien Elmes
5bad3d067c revert congrats h3 style change from #1470
Presumably bootstrap is overriding the styling of headers; this is a
quick fix to make the header be bold again, like the graphs screen.
2021-11-01 12:55:31 +10:00
Damien Elmes
032c7e49c3 allow passing npm repo name in compile_svelte() 2021-10-31 18:10:11 +10:00
Damien Elmes
a3a9523f6f use absolute path for sql_format 2021-10-31 11:13:38 +10:00
Henrik Giesel
d74c38abe5 Several CSS fixes - Editor Cleanup (#1470)
* Refactor editor css, fix editor button highlight

- Avoid using webview.css
- Move more buttons css into button_mixins

* Fix DropdownItem appearance

* Fix the visuals of tags

* Make dropdown font slightly smaller

* Give SelectOption a background color

* Move some css from deck-options-base to CardStateCustomizer

* Avoid using core.scss for CardStats

* Avoid using sass/core in congrats package

* Inline core.scss into webview.scss

* Include fusion-vars for base.scss

* need to keep core.scss around for now (dae)
2021-10-31 08:29:22 +10:00
Matthias Metelka
f85e2e8cef Highlight field badges when toggled to non-default state (#1466) 2021-10-31 07:48:37 +10:00
Henrik Giesel
915b638dcc Fix DeckOptions toolbar having wrong margins and no flex-grow (#1464)
ButtonToolbar.svelte now has to assume that the button elements
are two levels below it. This can be simplified once we can use
flex-gap.
2021-10-28 19:37:52 +10:00
Abdo
9e97ac1023 Strip isolation chars from deck options warnings to fix RTL display (#1457)
Co-authored-by: Damien Elmes <dae@users.noreply.github.com>
2021-10-26 20:11:25 +10:00
Damien Elmes
eee17476e3 fix deprecation warning in latest svelte-preprocess 2021-10-26 08:43:02 +10:00
Damien Elmes
fb3e6db1c7 update js deps 2021-10-26 08:30:13 +10:00
Damien Elmes
e28f03c65a //ts:format now runs on current working directory, instead of entire repo 2021-10-23 15:48:33 +10:00
Damien Elmes
1f736cea99 minor tweak to new-platforms.md, and run prettier on docs 2021-10-23 15:40:45 +10:00
Henrik Giesel
90b4d97e66 Fix RTL text display being off + Update PlainTextInput RTL on save (#1448) 2021-10-23 11:06:15 +10:00
RumovZ
3454c9ba30 Card info cleanup (#1446)
* Cast proto interface to type ...

... instead of using non-null assertions in Revlog.svelte.

* Remove OptionalInt32 and OptionalUInt32
2021-10-23 11:00:43 +10:00
Damien Elmes
5d72f008f9 vendor stringcase
It's a tiny library that has not been updated in years, and it was
leading to a warning on startup:

 DeprecationWarning: invalid escape sequence \W
  return re.sub("\W+", "", string)
2021-10-22 08:56:44 +10:00
Henrik Giesel
44f0cba3fa Fix Preview button not showing and cloze button not hiding (#1437) 2021-10-20 07:09:12 +10:00
Henrik Giesel
1d77c10b3d Use trailingComma: all setting in .prettierrc (#1435) 2021-10-19 09:06:00 +10:00
Henrik Giesel
6509b18a0d Svelte Editor hotfixes (#1436)
* Fix white on white text in light mode

* Reflect rename to FieldsEditor in class name

* Fix adjusting fields ending in an endless loop
2021-10-19 08:38:06 +10:00
Henrik Giesel
96b8f2c32d Translate Editor entirely to Svelte (#1403)
* Translate editor to Svelte

Make editor fields grid rather than flexbox

Refactor ButtonToolbar margins

Remove remaining svelte.d.ts symlinks

Implement saveNow

Fix text surrounding

Remove HTML editor button

Clean up some empty files

Add visual for new field state badges

* Adds new IconConstrain.svelte to generalize the icon handling for
IconButton and Badge

Implement sticky functionality again

Enable Editable and Codable field state badges

Add shortcuts to FieldState badges

Add Shift+F9 shortcut back

Add inline padding back to editor fields, tag editor and toolbar

Make Editable and Codable only "visually hidden"

This way they are still updated in the background
Otherwise reshowing them will always start them up empty

Make empty editing area focusable

Start with moving fieldsKey and currentFieldKey to context.ts

Fix Codable being wrong size when opening for first time

Add back drag'n'drop

Make ButtonItem display: contents again

* This will break the gap between ButtonGroup items, however once we
  have a newer Chromium version we should use CSS gap property anyway

Fix most of typing issues

Use --label-color background color LabelContainer

Add back red color for dupes

Generalize the editor toolbar in the multiroot editor to widgets

Implement Notification.svelte for showing cloze hints

Add colorful icon to notification

Hook up Editable to EditingArea

Move EditingArea into EditorField

Include editorField in editor/context

Fix rebasing issues

Uniformly use SvelteComponentTyped

Take LabelContainer out of EditingArea

Use mirror-dom and node-store to export editable content

Fix editable update mechanism

Prepare passing the editing inputs as slots

Pass in editing inputs as slots

Use codable options again in codemirror

Delete editor/lib.ts

Remove CodableAdapter, Use more generic CodeMirror component

Fix clicking LabelContainer to focus

Use prettier

Rename Editable to ContentEditable

Fix writing Mathjax from Codable to Editable

Correctly adjust output HTML from editable

Refactor EditableStyles out of EditableContainer

Pass Image and Mathjax Handle via slots to Editable

Make Editable add its editingInputApi

Make Editable hideable

Fix font size not being set correctly

Refactor both fieldFocused and focusInCodable to focusInEditable

Fix focusIfField

Bring back $activeInput

Fix ClozeButton

Remove signifyCustomInput

Refactor MathjaxHandle

Refactor out some logic into store-subscribe

Fix Mathjax editor

Use focusTrap instead of focusing div

Delegate focus back to editingInput when refocusing focusTrap

Elegantly move focus between editing inputs when closing/opening

Make Codable tabbable

Automatically move caret to end on editable and codable

+ remove from editingInput api

Fix ButtonDropdown having two rows and missing button margins

Make svelte_check and eslint pass

Satisfy editor svelte_check

Save field updates to db again

Await editable styles before mounting content editable

Remove unused import from OldEditorAdapter

Add copyright header to OldEditorAdapter

Update button active state from contenteditable

* Use activateStickyShortcuts after waiting for noteEditorPromise

* Set fields via stores, make tags correctly set

* Add explaining comment to setFields

* Fix ClozeButton

* Send focus and blur events again

* Fix Codable not correctly updating on blur with invalid HTML

* Remove old code for special Enter behavior in tags

* Do not use logical properties for ButtonToolbar margins

* Remove getCurrentField

Instead use noteEditor->currentField or noteEditor->activeInput

* Remove Extensible type

* Use context-property for NoteEditor, EditorField and EditingArea

* Rename parameter in mirror-dom.allowResubscription

* Fix cutOrCopy

* Refactor context.ts into the individual components

* Move focusing of editingArea up to editorField

* Rename promiseResolve -> promiseWithResolver

* Rename Editable->RichTextInput and Codable->PlainTextInput

* Remove now unnecessary type assertion for `getNoteEditor` and `getEditingArea`

* Refocus field after adding, so subscription to editing area is refreshed
2021-10-18 22:01:15 +10:00
Damien Elmes
0af57b4170 add aliases to run vendored python and node from command line
You can then do './scripts/python -m venv /path/to/venv' to create
a virtual env based on the bundled Python, which can be handy if
you don't happen to have the appropriate version of Python installed
separately.
2021-10-18 19:50:41 +10:00
Damien Elmes
7405023b9b convert sql_format to ts_project; move into separate folder 2021-10-18 19:39:45 +10:00
RumovZ
45836b2ff8 Use null for missing stats 2021-10-18 09:36:31 +02:00
RumovZ
bde763dcad sentCardId -> requestedCardId 2021-10-18 09:12:10 +02:00
RumovZ
ff9dd841ca Use null for unset cardId 2021-10-18 09:11:00 +02:00
RumovZ
8fb055d72e Default to includeRevlog = true 2021-10-18 09:04:49 +02:00
RumovZ
b5368a0e23 Center placeholder 2021-10-18 09:01:25 +02:00
RumovZ
424a50dcdc Improve clarity in card info code a tiny little bit 2021-10-18 09:01:25 +02:00
RumovZ
ae4677c1c2 Move update logic into CardInfo.svelte
Also use a simpler and faster way to avoid race conditions.
2021-10-18 09:01:24 +02:00
RumovZ
847bf3fe12 Move update logic into CardInfo.svelte 2021-10-18 09:01:24 +02:00
RumovZ
083d2db98b Make CardStats a separate component 2021-10-18 09:01:23 +02:00
RumovZ
80ae938fc8 Implement reactively updating Card Info 2021-10-18 09:01:22 +02:00
Damien Elmes
659a175a13 drop ts_library() requirement in ts/svelte 2021-10-18 13:00:55 +10:00
Damien Elmes
5be9ae5229 pass ts deps into most Svelte packages; remove redundant deps
Henrik, I've left editable/editor alone to avoid causing a conflict;
please add them in your PR instead when you get a chance.
2021-10-18 12:44:31 +10:00
Damien Elmes
a78852d636 Svelte build improvements
1. All Svelte files in a package are compiled in one step now, which
ensures that properties that use types from a different Svelte file in the
same package are typed correctly. The single-file svelte() has been removed,
and compile_svelte() may be renamed to svelte() in the future.

2. The .ts files in the same package are included as part of the Svelte
compilation, so that types imported imported from .ts files in the
same package work.

3. Dependencies passed into the rule are now loaded into the TypeScript
compiler, so that properties referencing types from different packages
work. We'll need to update our compile_svelte() lines to list the
dependencies. For example, before this change:

% cat bazel-bin/ts/congrats/CongratsPage.svelte.d.ts
import { SvelteComponentTyped } from "svelte";
declare const __propDef: {
    props: {
        info: any;
    };
...

After adding //ts/lib to the deps of compile_svelte() in ts/congrats:

% cat bazel-bin/ts/congrats/CongratsPage.svelte.d.ts
import { SvelteComponentTyped } from "svelte";
import type { Scheduler } from "../lib/proto";
declare const __propDef: {
    props: {
        info: Scheduler.CongratsInfoResponse;
    };
...
2021-10-18 12:44:29 +10:00
Damien Elmes
276d8cc5a5 pass sole arg to cardStats as a dictionary
Easier to extend in the future, or (de)serialize in a strongly-typed
language.
2021-10-14 19:28:51 +10:00
Damien Elmes
dde0ef372f layout tweaks to card info
- negative margins result in truncated text when the window size
is reduced, so avoid them
- having a 100% table inside a flexbox is not responsive - the table
does not adjust its size as the width is increased or decreased
- in order to look decent on narrow screens (eg phones), we allow
margin collapsing
- in order to look decent on wide screens, we limit the maximum
width to something that is readable
- hide some columns in portrait mode on narrow screens

I tried preserving the centering with margin-left/right: auto, but
could not get it looking right, so have had to move things back to
left alignment.
2021-10-14 19:28:33 +10:00
Damien Elmes
084384c2b0 support #test in card-info.html
allows us to use scripts/ts-run and ts-watch to test the page
in Chrome by surfing to http://127.0.0.1:40000/_anki/pages/card-info.html#testXXX
2021-10-14 19:23:33 +10:00
RumovZ
ea9fc3730e Switch CardInfoDialog to ts page (#1414)
* Only collect card stats on the backend ...

... instead of rendering an HTML string using askama.

* Add ts page Card Info

* Update test for new `col.card_stats()`

* Remove obsolete CardStats code

* Use new ts page in `CardInfoDialog`

* Align start and end instead of left and right

Curiously, `text-align: start` does not work for `th` tags if assigned
via classes.

* Adopt ts refactorings after rebase

#1405 and #1409

* Clean up `ts/card-info/BUILD.bazel`

* Port card info logic from Rust to TS

* Move repeated field to the top

https://github.com/ankitects/anki/pull/1414#discussion_r725402730

* Convert pseudo classes to interfaces

* CardInfoPage -> CardInfo

* Make revlog in card info optional

* Add legacy support for old card stats

* Check for undefined instead of falsy

* Make Revlog separate component

* drop askama dependency (dae)

* Fix nightmode for legacy card stats
2021-10-14 19:22:47 +10:00
Damien Elmes
3a795aae22 declare bootstrap prereq in Svelte compile
Mistakenly stripped this out when removing the typescript dependencies
2021-10-13 11:48:22 +10:00
Henrik Giesel
ac92155a8e Put sass into repo directory (#1409)
Fix Sass build
2021-10-09 10:25:03 +10:00
Henrik Giesel
2680d1bad8 Fix prettier after moving node_modules to repo dir (#1413) 2021-10-09 10:13:14 +10:00
Henrik Giesel
f0b61782be Refactor i18n (#1405)
Merging note: the typing changes were fixed in a separate PR.

* Put rootDirs into subprojects

- typings do not work for any ts or svelte files
- if we set the 'rootDirs' in ts/tsconfig.json to '../bazel-bin/ts' and then inherit
  them from e.g. editor, the root will be changed to '../../bazel-bin/ts',
  however editor needs look in '../../bazel-bin/ts/editor' instead.

* Rename i18n and i18n_helpers to i18n-generated and i18n

- This way, we can restrict the awkwardness of importing files outside
  the ts directory within lib

* Fix missing typing of i18n and backend_proto by adding back symlinks

* Split up i18n-generated into i18n-{translate,modules}

* Change i18n from singleton to functions

* Revert "Put rootDirs into subprojects"

This partially reverts commit e1d4292ce3.

It seems like this might not be necessary after all.
However some other change made on this branch seems to have fixed
the .svelte.d.ts imports

* Introduce i18n-bundles to remove circular import

There was a circular import i18n.ts <-> i18n-translate.ts

* Create own directory for i18n

* Move lib/i18n/translate to lib/translate

* This restores tree shaking

* Update tsconfig libs and module

* es2018-2020 have wide support on all modern browsers including

* Switch bundles and langs inside i18n to variables again

* Add missing copyright header

* Rename translate.ts to ftl.ts

* Remove the symlinks again

I added them to fix to have completion for tr, however this would have
also have meant to abandon the tree shaking.
As we want to have tree shaking, it's also not necessary to have the
symlinks anymore

* Revert "Update tsconfig libs and module"

This reverts commit 0a96776a47.

* move withCollapsedWhitespace back to i18n/utils

* Add back /ts as in rootDirs
2021-10-07 23:31:49 +10:00
Damien Elmes
13ffa43d7e svelte needs its shims to generate prop typing
I erroneously removed them near the end of the ts_project work, and
didn't realise the properties had broken.
2021-10-07 21:33:21 +10:00
Damien Elmes
7cc3b1816c fix invalid arg to ButtonGroup revealed by typing fix 2021-10-07 21:33:15 +10:00
Damien Elmes
f209a72b7c move node_modules into root folder [action required]
Recommend removing ts/node_modules folder before attempting to
build after this update.

This moves ts/node_modules into the root of the project to work around
https://github.com/ankitects/anki/pull/1405#issuecomment-936213861

Also fixes the sass errors shown when running scripts/svelte-check
2021-10-07 11:42:27 +10:00
Damien Elmes
af88b480f9 use extra rootDir in tsconfig instead of symlinks
The nice thing about the symlink approach is that it allowed tsc -b
to function without any changes to the tsconfig.json file, but it meant
there were extra links we had to maintain. So instead, we just add an
extra rootDirs entry, and add two commented-out lines that can be
uncommented when wanting to build with tsc directly.
2021-10-01 18:36:52 +10:00
Damien Elmes
a5c7134d43 yarn upgrade --latest
bootstrap still held back
2021-10-01 12:52:53 +10:00
Damien Elmes
5d7eb8c425 update to latest rules_nodejs & switch to ts_project
ts_library() is deprecated and will presumably be dropped from a
future rules_nodejs, and it wasn't working with the jest tests
after updating, so we switch over to ts_project().

There are some downsides:

- It's a bit slower, as the worker mode doesn't appear to function
at the moment.
- Getting it working with a mix of source files and generated files
was quite tricky, especially as things behave differently on Windows,
and differently when editing with VS Code. Solved with a small patch
to the rules, and a wrapper script that copies everything into the
bin folder first. To keep VS Code working correctly as well, the built
files are symlinked into the source folder.
- TS libraries are not implicitly linked to node_modules, so they
can't be imported with an absolute name like "lib/proto" - we need
to use relative paths like "../lib/proto" instead. Adjusting "paths"
in tsconfig.json makes it work for TS compilation, but then it fails
at the esbuild stage. We could resolve it by wrapping the TS
libraries in a subsequent js_library() call, but that has the downside
of losing the transient dependencies, meaning they need to be listed
again.  Alternatively we might be able to solve it in the future by
adjusting esbuild, but for now the paths have been made relative to
keep things simple.

Upsides:

- Along with updates to the Svelte tooling, Svelte typing has improved.
All exports made in a Svelte file are now visible to other files that
import them, and we no longer rebuild the Svelte files when TS files
are updated, as the Svelte files do no type checking themselves, and
are just a simple transpilation. Svelte-check now works on Windows again,
and there should be no errors when editing in VS Code after you've
built the project. The only downside seems to be that cmd+clicking
on a Svelte imports jumps to the .d.ts file instead of the original now;
presumably they'll fix that in a future plugin update.
- Each subfolder now has its own tsconfig.json, and tsc can be called
directly for testing purposes (but beware it will place build products
in the source tree): ts/node_modules/.bin/tsc -b ts
- We can drop the custom esbuild_toolchain, as it's included in the
latest rules_nodejs.

Other changes:

- "image_module_support" is moved into lib/, and imported with
<reference types=...>
- Images are now imported directly from their npm package; the
extra copy step has been removed.

Windows users may need to use "bazel clean" before building this,
due to old files lying around in the build folder.
2021-10-01 12:52:53 +10:00
Damien Elmes
7ce0b944bd update svelte-check
Invoking from scripts/svelte-check is currently broken due to sass
imports - it appears to have been broken some time back.
2021-09-29 12:27:27 +10:00
Damien Elmes
899d0556e8 handle changed aria-expanded typing 2021-09-29 12:20:27 +10:00
Damien Elmes
6db52323dd make 'for' argument optional in TooltipLabel
The latest svelte-check has revealed we were not passing 'for' in
when we should have been. This is a quick hack to get the tests passing
again, but a better approach that actually makes this accessible again
would be good in the future.
2021-09-29 12:20:03 +10:00
Damien Elmes
9b994ac537 silence execCommand deprecation warnings for now 2021-09-29 11:36:37 +10:00
Damien Elmes
5d0736ab96 update svelte2tsx
We can now use the typings from the Svelte library instead of the
svelte2tsx shims
2021-09-25 11:07:31 +10:00
Damien Elmes
8f7e7498da update to TypeScript 4.4.x 2021-09-23 09:53:37 +10:00
Damien Elmes
81104f47f4 fixes for TypeScript 4.4.x
closes #1386
2021-09-23 09:52:21 +10:00
Damien Elmes
df26c61164 update ts deps
typescript and bootstrap have been pinned for now:

https://github.com/ankitects/anki/issues/1386
https://github.com/ankitects/anki/issues/1385

hint failures for svelte-check have also been temporarily turned
off, due to it now complaining about document.execCommand():

Hint: The signature '(commandId: string, showUI?: boolean, value?: string): boolean' of 'document.execCommand' is deprecated. (ts)
    const wrapWithForecolor = (color: string) => () => {
        document.execCommand("forecolor", false, color);
    };

Will follow up in #1377
2021-09-22 23:21:39 +10:00
Henrik Giesel
66608b06b0 Allow for explicit any 2021-09-17 21:30:32 +02:00
Henrik Giesel
16b6d95593 Make HandleSelection perfectly size when first activating 2021-09-17 21:23:04 +02:00
Henrik Giesel
1e2fa82446 Fix missizing of HandleSelection when first moving from empty to Mathjax 2021-09-17 20:54:37 +02:00
Henrik Giesel
82d93f3eae Ugly fix: do not execute moveCursorPastPostfix when front includes "anki-mathjax" 2021-09-17 20:12:11 +02:00
Henrik Giesel
222da3912a Add ChangeTimer.prototype.fireImmediately
so Mathjax is saved when exiting editor prematurely
2021-09-16 14:47:05 +02:00
Henrik Giesel
159e932f79 Wrap Mathjax compilation into try/catch 2021-09-16 14:31:20 +02:00
Henrik Giesel
4b0e35a357 Rename StickyBar and StickyBottom to StickyHeader and StickyFooter 2021-09-15 23:15:55 +02:00
Henrik Giesel
9f500cf78a Remove now unused import in TagEditor 2021-09-15 22:59:47 +02:00
Henrik Giesel
d6702c1c68 Fix suggestions not showing when typing space in a TagInput 2021-09-15 22:54:53 +02:00
Henrik Giesel
84eda7c547 Make the ImageHandle and MathjaxHandle dropdowns perfectly touch the HandleSelection 2021-09-15 22:26:32 +02:00
Henrik Giesel
f4aa6bf90b Stop propagation for paste in MathjaxHandle editor 2021-09-15 22:14:38 +02:00
Henrik Giesel
dbaba6233a Prevent hiding handles by clicking on handles 2021-09-15 17:56:56 +02:00
Henrik Giesel
d4c535183b Remove style attribute after remove float property if not styling left 2021-09-15 17:36:48 +02:00
Henrik Giesel
e10a5f0a38 Always correctly update MathjaxHandle position 2021-09-15 17:05:43 +02:00
Henrik Giesel
b7d8ae8f22 Correctly pass down dropdownObject... 2021-09-15 16:16:42 +02:00
Henrik Giesel
9d07639829 Using dropdownApi is much less faulty than using dropdownObject
- Update MathjaxSelection and Dropdown more reliably
2021-09-15 15:52:56 +02:00
Henrik Giesel
ca4430d922 Make StickyBottom actually stick and make editor fullsize + flexbox 2021-09-15 15:21:37 +02:00
Henrik Giesel
50cd722dc8 Import saveField from editor/saving.ts 2021-09-15 14:09:25 +02:00
Henrik Giesel
0fc5c87c1a Remove duplicate outline:none 2021-09-15 13:46:07 +02:00
Henrik Giesel
05cf123959 Apply specific CSS to Mathjax CodeMirror 2021-09-15 13:46:04 +02:00
Henrik Giesel
212b2ce8ba Satisfy eslint 2021-09-15 13:45:20 +02:00
Henrik Giesel
745c67fee5 Use editorfield instead of editor-field 2021-09-15 13:45:20 +02:00
Henrik Giesel
04d9ab1f56 Vertically center inline Mathjax 2021-09-15 13:45:20 +02:00
Henrik Giesel
75ee705c4e Generalize accesing anki-mathjax from image in MathjaxHandle 2021-09-15 13:45:20 +02:00
Henrik Giesel
f2dbe2415e Add copyright header to saving.ts 2021-09-15 13:45:20 +02:00
Henrik Giesel
722831ea8d Satisfy eslint 2021-09-15 13:45:19 +02:00
Henrik Giesel
975e798d70 Define CodeMirror in external codeMirror.ts 2021-09-15 13:45:19 +02:00
Henrik Giesel
5b03f51748 Correctly import CodeMirror 2021-09-15 13:45:19 +02:00
Henrik Giesel
9f201b7a7a Include codemirror libs for svelte 2021-09-15 13:45:19 +02:00
Henrik Giesel
65be772799 Satisfy eslint 2021-09-15 13:45:19 +02:00
Henrik Giesel
48912b016e Remove empty constructor 2021-09-15 13:45:19 +02:00
Henrik Giesel
970a5f008b Focus on mount when using Mathjax shortcuts 2021-09-15 13:45:17 +02:00
Henrik Giesel
32bdf0f242 Fix alignment of empty icon 2021-09-15 13:43:37 +02:00
Henrik Giesel
d6e2b794ec Change Wrap commands / shortcuts to use anki-mathjax 2021-09-15 13:42:36 +02:00
Henrik Giesel
eb2c81c79f Refactor editable/mathjax.ts 2021-09-15 13:33:25 +02:00
Henrik Giesel
9d671581ac Set fixed fontSizef or mathjax in editor for now 2021-09-15 13:33:25 +02:00
Henrik Giesel
6c0e649c79 Set color of Mathjax depending on nightMode 2021-09-15 13:33:24 +02:00
Henrik Giesel
7b509f8313 Wrap Mathjax buttons into toolbar 2021-09-15 13:33:24 +02:00
Henrik Giesel
befdbf2563 Move wrap to lib to allow editable to use it 2021-09-15 13:33:24 +02:00
Henrik Giesel
1f477916e6 Move setting inCodable to false into codable 2021-09-15 13:33:23 +02:00
Henrik Giesel
64b971c464 Display Mathjax error as title (tooltip) 2021-09-15 13:33:23 +02:00
Henrik Giesel
542c6965fb Show title on mathjax image 2021-09-15 13:33:22 +02:00
Henrik Giesel
c273084243 Display error Mathjax correctly 2021-09-15 13:33:22 +02:00
Henrik Giesel
5ddbcab636 Show math icon if Mathjax is empty 2021-09-15 13:33:22 +02:00
Henrik Giesel
428b292768 Disallow draggin of mathjax + only ever have one handle active 2021-09-15 13:33:21 +02:00
Henrik Giesel
875c6fe85f Fix return behavior on Mathjax decorated element 2021-09-15 13:33:21 +02:00
Henrik Giesel
b7be5ed3b5 Watch for childList instead of subtree 2021-09-15 13:33:21 +02:00
Henrik Giesel
dfee30dbe5 Display Mathjax editor and buttons at the same time 2021-09-15 13:33:20 +02:00
Henrik Giesel
8cadb90d29 Generalize ChangeTimer and use it in Mathjax editor 2021-09-15 13:33:20 +02:00
Henrik Giesel
631b985d12 Add ResizeObserver for MathjaxHandle 2021-09-15 13:33:20 +02:00
Henrik Giesel
f342edc43c Update editor when editing Mathjax 2021-09-15 13:33:19 +02:00
Henrik Giesel
5646bd34b4 Wait for stylesheets to load before setting field content 2021-09-15 13:33:19 +02:00
Henrik Giesel
269f09d739 Move elements inserted into decorated component no matter the position 2021-09-15 13:33:19 +02:00
Henrik Giesel
35098d0f40 Fix some cases where Mathjax whitespace formatting is destroyed 2021-09-15 13:33:19 +02:00
Henrik Giesel
0a003c7856 Use CodeMirror for Mathjax Editor 2021-09-15 13:33:18 +02:00
Henrik Giesel
0bb3696aa1 Autoupdate mathjax image
* propably should use changeTimer here
2021-09-15 13:33:18 +02:00
Henrik Giesel
c2fa9f3218 Fix focus issues with Mathjax editor 2021-09-15 13:33:18 +02:00
Henrik Giesel
e48ab77de2 First implementation of MathjaxHandleEditor
+ use manual focus highlighting on editing-area
2021-09-15 13:33:17 +02:00
Henrik Giesel
02d76240dd Make Mathjax menu also a floating dropdown menu like ImageHandle 2021-09-15 13:33:17 +02:00
Henrik Giesel
5589e2f7e1 Fix MathJax overlay after rebase 2021-09-15 13:33:17 +02:00
Henrik Giesel
90b0000f7b Add InlineBlock buttons to mathjax components 2021-09-15 13:33:12 +02:00
Henrik Giesel
70e4fd5a3b Add HandleControl to MathjaxHandle 2021-09-15 13:32:33 +02:00
Henrik Giesel
5bef89312e Display Mathjax handle when clicking mathjax 2021-09-15 13:32:33 +02:00
Henrik Giesel
7981cefb0c Rename showImageHandle to showHandles 2021-09-15 13:32:33 +02:00
Henrik Giesel
b092bd9f6d Formalize "Decorated components API" 2021-09-15 13:32:32 +02:00
Henrik Giesel
022143b38b Implement moveNodesInsertedBeforeEndToAfterEnd
This will prevent the user typing into the decorated elements
by accident because they place cursor behind it
2021-09-15 13:32:32 +02:00
Henrik Giesel
2787d7e7fd Unify anki-mathjax-* to just anki-mathjax 2021-09-15 13:32:32 +02:00
Henrik Giesel
d0e3bff267 Add MathjaxHandle 2021-09-15 13:32:32 +02:00
Henrik Giesel
3529e50f46 Implement latex highlighting for Latex in codable 2021-09-15 13:32:32 +02:00
Henrik Giesel
b2c9e672d4 Use margin:auto instead of text-align:center for mathjax-block 2021-09-15 13:32:31 +02:00
Henrik Giesel
7162a9b961 Do not start ImageHandle for images with [data-anki] 2021-09-15 13:32:31 +02:00
Henrik Giesel
7255312ec5 Nicely portray mathjax with right color + alignment in Editor 2021-09-15 13:32:31 +02:00
Henrik Giesel
1d05ada05b Enable edit mode for mathjax blocks 2021-09-15 13:32:31 +02:00
Henrik Giesel
9ca8e07bbe Correctly include editable css 2021-09-15 13:32:31 +02:00
Henrik Giesel
47653e9672 Survive to Codable and back 2021-09-15 13:32:31 +02:00
Henrik Giesel
24b852b99a Transform to mathjax components for fieldHTML 2021-09-15 13:32:31 +02:00
Henrik Giesel
49d2dd6660 Implement MathjaxBlock 2021-09-15 13:32:30 +02:00
Henrik Giesel
5811e59f27 Introduce editable module 2021-09-15 13:32:30 +02:00
Henrik Giesel
4f6468a925 Prevent tooltip expanding body tag in editor 2021-09-15 02:24:09 +02:00
Henrik Giesel
6c8767cd68 Do not stop showing suggestions when entering double colon for separator 2021-09-15 02:02:19 +02:00
Damien Elmes
b0350bafa7 bikeshedding: amount -> match_limit
+ convert from u32 in backend method
2021-09-12 11:57:49 +10:00
Henrik Giesel
9d0c3e0855 Cap tag suggestions at 500 2021-09-10 01:13:50 +02:00
Henrik Giesel
63398df036 Fix crosshair not showing on main text of Tag when in select mode 2021-09-09 22:31:16 +02:00
Henrik Giesel
27c6003038 Introduce TagEditMode as a wrapper around TagWithTooltip 2021-09-09 21:47:07 +02:00
Henrik Giesel
e8f4872391 Only hide DeleteBadge when hovering on tag 2021-09-09 20:16:52 +02:00
Henrik Giesel
80898d1954 Align suggestions with start of tag 2021-09-09 19:03:06 +02:00
Henrik Giesel
b46dcb5c72 Only show tag tooltip on hover, not focus 2021-09-09 18:36:29 +02:00
Henrik Giesel
f7a69e5e9a Scroll suggestion tag into view 2021-09-09 18:32:58 +02:00
Henrik Giesel
7150e1f149 Do not use overflow-x on ButtonToolbar
* Fixes deck-options dropdown not showing.
  It seems like it's no longer necessary
2021-09-09 17:50:02 +02:00
Henrik Giesel
51718134ea Fix Tag SPACER 2021-09-09 17:28:00 +02:00
Henrik Giesel
a1ca2cf4b9 Bubble up some functionality from Tag to TagWithTooltip and TagDeleteBadge 2021-09-09 17:18:47 +02:00
Henrik Giesel
71d4b4d9f7 Remove unused import 2021-09-09 15:38:12 +02:00
Henrik Giesel
8bbc001273 Fix bug where sometimes Autocomplete menu would not show even though suggestions exist 2021-09-09 15:38:11 +02:00
Henrik Giesel
bbba7307b3 Use noSuggestions 2021-09-09 15:38:11 +02:00
Henrik Giesel
500619d5cc Update Autocomplete position when suggestion selection makes it move to the next row 2021-09-09 15:38:10 +02:00
Henrik Giesel
9755b25fb1 Set disabled class on TagInput from WithAutocomplete 2021-09-09 15:38:10 +02:00
Henrik Giesel
e805c45403 Explicitly not support dropleft/dropright
We'll deal with it when we have a use case
2021-09-09 15:38:09 +02:00
Henrik Giesel
f34112ee28 Correctly place dropdown and only update if there's activeInput 2021-09-09 15:38:09 +02:00
Henrik Giesel
3fed669c45 Take most recent input as basis for suggestions 2021-09-09 15:38:09 +02:00
Damien Elmes
c83843812e add basic tag completion to backend
Matches should arrive in alphabetical order. Currently results are not
capped (JS should be able to handle ~1k tags without too much hassle),
and no reordering based on match location is done. Matches are substring
based, and multiple can be provided, eg "foo::bar" will match
"foof::baz::abbar".

This is not hooked up properly on the frontend at the moment -
updateSuggestions() seems to be missing the most recently typed character,
and is not updating the list of completions half the time.
2021-09-09 15:38:08 +02:00
Henrik Giesel
cfee5fb986 Decrease tag margins 2021-09-09 15:38:08 +02:00
Henrik Giesel
8b2e69b912 Add bottom padding to selected tag badge as well 2021-09-09 15:38:07 +02:00
Henrik Giesel
a7b01537f6 Use new style highlight for selected tags 2021-09-09 15:38:07 +02:00
Henrik Giesel
7aa599e72c Add slight padding around add tag icon 2021-09-09 15:38:07 +02:00
Henrik Giesel
cc430c5994 Add a zero-width tag to prevent resizing when adding tag 2021-09-09 15:38:06 +02:00
Henrik Giesel
047e466c98 Un-reverse TagEditor autocompletion navigation 2021-09-09 15:38:06 +02:00
Henrik Giesel
6f41c83587 Decrease padding of AutocompleteItem 2021-09-09 15:38:06 +02:00
Henrik Giesel
6af355f8d0 Adjust border radius of tags to fit new fields 2021-09-09 15:38:05 +02:00
Henrik Giesel
b70124a1e6 Update to use shortened SCSS paths for some components 2021-09-09 15:38:05 +02:00
Henrik Giesel
c15fcb8b7e Satisfy formatter 2021-09-09 15:38:04 +02:00
Henrik Giesel
deb572e637 Rename tagEditor tag-editor.ts 2021-09-09 15:38:04 +02:00
Henrik Giesel
3873c29022 Refer to ./ instead of components/ from within components 2021-09-09 15:38:04 +02:00
Henrik Giesel
e3fe65fc23 Fix ts/components:svelte_check 2021-09-09 15:38:03 +02:00
Henrik Giesel
5dc8224a1b Add scrollbar_lib to components 2021-09-09 15:38:03 +02:00
Henrik Giesel
22d63ec5fa Fix eslint 2021-09-09 15:38:02 +02:00
Henrik Giesel
9e12b25d21 Fix colon insertion behavior 2021-09-09 15:38:02 +02:00
Henrik Giesel
879cd116a6 Replace delim char with colons on copying tags 2021-09-09 15:38:02 +02:00
Henrik Giesel
0db1b9cc78 Fix TagSpacer 2021-09-09 15:38:01 +02:00
Henrik Giesel
93ba4a2cd8 Implement nowrap mode 2021-09-09 15:38:01 +02:00
Henrik Giesel
bf6e587161 Implement TagWithTooltip 2021-09-09 15:38:00 +02:00
Henrik Giesel
9e91307c5d Move WithTooltip to components 2021-09-09 15:38:00 +02:00
Henrik Giesel
cc9e3e2455 Use Unicode delimiter character 2021-09-09 15:38:00 +02:00
Henrik Giesel
58dc22ee7b Improve space behavior 2021-09-09 15:37:59 +02:00
Henrik Giesel
f5feed589e Improve enter behavior 2021-09-09 15:37:59 +02:00
Henrik Giesel
39a1f6199e Split when no autocomplete item is selected 2021-09-09 15:37:59 +02:00
Henrik Giesel
c0944ec3a1 Add tag shorting behavior 2021-09-09 15:37:58 +02:00
Henrik Giesel
a49fd5ab2a Space out Sticky Bottom with Spacer component 2021-09-09 15:37:58 +02:00
Henrik Giesel
494d1e206d Deselect on clicking delete icon 2021-09-09 15:37:58 +02:00
Henrik Giesel
98baca8809 Add small horizontal margin so selected highlight can show 2021-09-09 15:37:57 +02:00
Henrik Giesel
596e7e0e70 Special handling of Backspace/Delete etc. for displaying shortcuts 2021-09-09 15:37:57 +02:00
Henrik Giesel
9682e84452 Add select all shortcut
+ Remove addEventListener for Ctrl+C/V/A
  It seems like they're really not necessary
2021-09-09 15:37:57 +02:00
Henrik Giesel
09f00a92aa Position stickyBottom fixed 2021-09-09 15:37:56 +02:00
Henrik Giesel
37d30284fc Improve positioning of tag editor badges 2021-09-09 15:37:56 +02:00
Henrik Giesel
928866b5aa Fix after rebase 2021-09-09 15:37:56 +02:00
Henrik Giesel
c8bcca517b Improve paste behavior 2021-09-09 15:37:55 +02:00
Henrik Giesel
2fc5c73b74 Do not update/activate Autocomplete on Control+C,A,V 2021-09-09 15:37:55 +02:00
Henrik Giesel
5a41409f54 Do not open autocomplete on clicking input 2021-09-09 15:37:55 +02:00
Henrik Giesel
b91db34aec Allow clicking on suggestion items 2021-09-09 15:37:54 +02:00
Henrik Giesel
964e97a384 Pass activeName to Tag as well 2021-09-09 15:37:54 +02:00
Henrik Giesel
444afa5b00 Adjust position so tags do not even move a single pixel when going into editing 2021-09-09 15:37:54 +02:00
Henrik Giesel
6af2ab437e Adjust paddings a bit more 2021-09-09 15:37:54 +02:00
Henrik Giesel
5bb6df757e Center delete icon without padding/margin 2021-09-09 15:37:53 +02:00
Henrik Giesel
58c35f316d Fix autocomplete dropdown
+ find a different solution for making tags and tag inputs same size
2021-09-09 15:37:53 +02:00
Henrik Giesel
e3be5972b8 Switch WithAutocomplete to WithDropdown and fix SelectedTagBadge 2021-09-09 15:37:53 +02:00
Henrik Giesel
a576228c08 Add SelectedTagBadge to offer context items for selected tags 2021-09-09 15:37:53 +02:00
Henrik Giesel
408ff4f061 Implement selectRange 2021-09-09 15:37:52 +02:00
Henrik Giesel
b178b86afd Make automatic deselect when leaving tag editor 2021-09-09 15:37:52 +02:00
Henrik Giesel
2fc7602406 Make tags selectable 2021-09-09 15:37:52 +02:00
Henrik Giesel
984afb8812 Implement controlPressed and shiftPressed 2021-09-09 15:37:52 +02:00
Henrik Giesel
9f0bf7484b Create lib/keys.ts 2021-09-09 15:37:52 +02:00
Henrik Giesel
81274169cd First steps toward tag selection 2021-09-09 15:37:51 +02:00
Henrik Giesel
c8c86d376a Implement autocomplete hiding on empty activeInput + remove logging 2021-09-09 15:37:51 +02:00
Henrik Giesel
b2d9500816 Fix behavior when autocompletion shows 2021-09-09 15:37:51 +02:00
Henrik Giesel
033f39f52f Fix join behavior and exclude Backspace/Delete from printable character 2021-09-09 15:37:51 +02:00
Henrik Giesel
8d8dd4fca0 Disable toggle on clicking element (toggle) for WithAutocomplete 2021-09-09 15:37:51 +02:00
Henrik Giesel
84d060a5b8 Improve no reflow a little bit 2021-09-09 15:37:51 +02:00
Henrik Giesel
b4860fbc6b Fix autocomplete showing on arrow keys and height resize on no tags 2021-09-09 15:37:50 +02:00
Henrik Giesel
8a648a4bcf Implement accepting suggestions via Enter 2021-09-09 15:37:50 +02:00
Henrik Giesel
b6ffc4d071 Introduce AutocompleteItem
* needs too much custom styling / behavior to be done with DropdownItem
2021-09-09 15:37:50 +02:00
Henrik Giesel
d2d6623788 suggestions -> suggestionsPromise, so it works with external APIs 2021-09-09 15:37:50 +02:00
Henrik Giesel
d5eff3b75c Don't allow Enter/Tab/Arrows for Autocomplete, if not active
Don't show Autocomplete, if there are no items available
2021-09-09 15:37:49 +02:00
Henrik Giesel
c18c0dd5b9 Have WithAutocomplete export its API
allows it to be used in more contexts
2021-09-09 15:37:49 +02:00
Henrik Giesel
85a5f627be Rename TagAutocomplete to WithAutocomplete
It's general enough to be used in other cases too
2021-09-09 15:37:49 +02:00
Henrik Giesel
6bf478acdf Improve visuals of Tag component 2021-09-09 15:37:49 +02:00
Henrik Giesel
477796fb3d Save deletions via delete icon to db 2021-09-09 15:37:48 +02:00
Henrik Giesel
fc5dffbf86 Save tags back to Python 2021-09-09 15:37:47 +02:00
Henrik Giesel
51732b4470 Set tags from Python 2021-09-09 15:37:47 +02:00
Henrik Giesel
72b4487f39 Remove deleteActiveTag, fix appendEmptyTag 2021-09-09 15:37:47 +02:00
Henrik Giesel
a88af9954c Fix some deletion behavior 2021-09-09 15:37:47 +02:00
Henrik Giesel
151a64af7f Make Autocomplete dismount along with TagInput on blur 2021-09-09 15:37:47 +02:00
Henrik Giesel
263ee2364d Implement on:autocomplete 2021-09-09 15:37:46 +02:00
Henrik Giesel
978b2d6227 Don't highlight suggestion items
Other suggestions menus don't do it either
2021-09-09 15:37:46 +02:00
Henrik Giesel
3d013fd521 Fix tagmove 2021-09-09 15:37:46 +02:00
Henrik Giesel
5b473df41c Introduce activeName so we can pass it to TagAutocomplete 2021-09-09 15:37:45 +02:00
Henrik Giesel
253c6d702b Export choice as autocompletionChoice from TagAutocomplete 2021-09-09 15:37:45 +02:00
Henrik Giesel
3a7df7ca40 Make tagunique a more general tagaccept
* tagaccept includes what was previous done by on:blur
* on:blur in TagInput was in some cases not bubbled up to TagEditor for some reason
2021-09-09 15:37:45 +02:00
Henrik Giesel
b59c5bcc8d Use Autocomplete on TagInput again 2021-09-09 15:37:44 +02:00
Henrik Giesel
60faccebc0 Pass original to Autocomplete 2021-09-09 15:37:44 +02:00
Henrik Giesel
2a10d1a236 Fix TagBadge and TagSpacer + shortcut 2021-09-09 15:37:44 +02:00
Henrik Giesel
415c473d89 Export blink as a function, works more reliably 2021-09-09 15:37:43 +02:00
Henrik Giesel
b842a1d6f2 Fix behavior when simply entering a duplicate 2021-09-09 15:37:43 +02:00
Henrik Giesel
6a3b88cfb8 Implement tagsplit 2021-09-09 15:37:43 +02:00
Henrik Giesel
d706640acd Fix tagjoinnext 2021-09-09 15:37:43 +02:00
Henrik Giesel
a4ca20d852 Fix tagjoinprevious 2021-09-09 15:37:43 +02:00
Henrik Giesel
1766162241 Fix tagmove 2021-09-09 15:37:42 +02:00
Henrik Giesel
20971037ab Fix TagBadge and TagSpacer 2021-09-09 15:37:42 +02:00
Henrik Giesel
0a6dcfd55b Align tagenter tagdelete and tagunique 2021-09-09 15:37:42 +02:00
Henrik Giesel
da713badc0 Implement decideAfterBlur and activeAfterBlur 2021-09-09 15:37:42 +02:00
Henrik Giesel
02fc7cc16f Prefer focusing TagInput in onMount 2021-09-09 15:37:41 +02:00
Henrik Giesel
75783fff7c Completely decouple Tag from TagInput 2021-09-09 15:37:41 +02:00
Henrik Giesel
ea08e89d33 Add .input to Tag interface 2021-09-09 15:37:41 +02:00
Henrik Giesel
f6927bea41 Remove special treatment of last tag 2021-09-09 15:37:41 +02:00
Henrik Giesel
da3ea03694 Try to remove special handling of last tag / inputNew 2021-09-09 15:37:40 +02:00
Henrik Giesel
13f16790d6 Improve behavior when moving towards newInput 2021-09-09 15:37:40 +02:00
Henrik Giesel
f6ca173d0c tagmove should act like tagjoin on empty inputs 2021-09-09 15:37:40 +02:00
Henrik Giesel
5999b3459b Fix double delete on empty input 2021-09-09 15:37:40 +02:00
Henrik Giesel
7a7c862fa9 Implement blink on duplicate detected 2021-09-09 15:37:39 +02:00
Henrik Giesel
12a3d83d0a Add some visual for TagAutocomplete 2021-09-09 15:37:39 +02:00
Henrik Giesel
8d691c217a Minimize reflow upon clicking tag 2021-09-09 15:37:39 +02:00
Henrik Giesel
b91d20bd85 Implement tagmovenext fully 2021-09-09 15:37:39 +02:00
Henrik Giesel
8fd2f1a8c4 Almost implement tagmove
* tagmovenext will start on the last position rather than first
2021-09-09 15:37:38 +02:00
Henrik Giesel
8a6067958f Reimplement tagjoin with tick() 2021-09-09 15:37:38 +02:00
Henrik Giesel
766270a7bf Start implemention tagmove 2021-09-09 15:37:38 +02:00
Henrik Giesel
a8b002acee Set caret correctly after tagjoin 2021-09-09 15:37:38 +02:00
Henrik Giesel
e6bd66b894 Show Autocomplete on keydown, hide on blur 2021-09-09 15:37:38 +02:00
Henrik Giesel
2629afe6b0 Adjust padding of TagInput a little 2021-09-09 15:37:37 +02:00
Henrik Giesel
a0c44f55db Fix some WithDropdownMenu logic 2021-09-09 15:37:37 +02:00
Henrik Giesel
e368cf09a8 Factor out ButtonToolbar from TagAutocomplete 2021-09-09 15:37:37 +02:00
Henrik Giesel
0d394814e7 Decouple TagInput from TagAutocomplete completely 2021-09-09 15:37:37 +02:00
Henrik Giesel
7b6f49577a Add tabbable option to DropdownItem 2021-09-09 15:37:37 +02:00
Henrik Giesel
f52ad747cb Fix issue with text showing below StickyBottom 2021-09-09 15:37:37 +02:00
Henrik Giesel
68509995d5 Make tags stand less out in dark mode 2021-09-09 15:37:36 +02:00
Henrik Giesel
178062fc2d Make styling of DropdownMenu easier by introducing dropdown-content 2021-09-09 15:37:36 +02:00
Henrik Giesel
e287b396f9 Decouple Autocomplete from TagInput:
Allows to only have one autocompletion for all tags, rather than every
tag having its own
2021-09-09 15:37:36 +02:00
Henrik Giesel
59ef4259f5 Remove dead code from TagAutocomplete 2021-09-09 15:37:36 +02:00
Henrik Giesel
b778653851 Implement tagjoin events 2021-09-09 15:37:36 +02:00
Henrik Giesel
bbb4084f03 Delete tag when update reveals its a duplicate 2021-09-09 15:37:35 +02:00
Henrik Giesel
9706b1e15c Enable keyed blocks in TagEditor for tags 2021-09-09 15:37:35 +02:00
Henrik Giesel
0fcead4843 Rewrite paste behavior 2021-09-09 15:37:35 +02:00
Henrik Giesel
a4f52f82d8 Delete when updating tagname to empty text 2021-09-09 15:37:35 +02:00
Henrik Giesel
3869db8c86 Connect Bootstrap dropdown with trigger via classes/props 2021-09-09 15:37:34 +02:00
Henrik Giesel
6e563ddf49 Use our DropdownMenu component for TagAutocomplete 2021-09-09 15:37:34 +02:00
Henrik Giesel
3d594c1883 Allow correctly adding tags
+ Make taginput unfocusable via Tab => prefer Ctrl+Shift+T
2021-09-09 15:37:34 +02:00
Henrik Giesel
2a30eccfa4 Make caret cursor more discoverable 2021-09-09 15:37:34 +02:00
Henrik Giesel
eff5df2c69 Remove TagInputEdit and TagInputNew 2021-09-09 15:37:34 +02:00
Henrik Giesel
d89a6af45f Port Focus tags shortcut to webview 2021-09-09 15:37:34 +02:00
Henrik Giesel
f047441c18 Behave correctly upon Enter on TagInputEdit 2021-09-09 15:37:34 +02:00
Henrik Giesel
cecbafcec8 Create AddTagBadge component 2021-09-09 15:37:33 +02:00
Henrik Giesel
2b9e32fb08 Make Tag icon an add tag icon 2021-09-09 15:37:33 +02:00
Henrik Giesel
bcd6e037f2 Adjust offsets and sizes to make tag input smaller 2021-09-09 15:37:33 +02:00
Henrik Giesel
4aaba0875f Enable tag delete icon 2021-09-09 15:37:33 +02:00
Henrik Giesel
016d815ee1 Port most components from first tageditor PR 2021-09-09 15:37:33 +02:00
Henrik Giesel
7f6e7235f1 Display a tag-outline icon in the bottom left 2021-09-09 15:37:33 +02:00
Henrik Giesel
9919cf2b47 Add Tag DeleteIcon 2021-09-09 15:37:33 +02:00
Henrik Giesel
8b92ba7fa4 Add Tag.svelte 2021-09-09 15:37:33 +02:00
Henrik Giesel
37fdefaf40 Mount TagEditor 2021-09-09 15:37:33 +02:00
Damien Elmes
0c94600be6 Merge pull request #1357 from hgiesel/preventstickybubble
Prevent sticky bubble
2021-09-08 19:02:00 +10:00
Henrik Giesel
6b633fc275 However bubble up when clicking on label container itself 2021-09-07 15:02:59 +02:00
Henrik Giesel
828cf80f68 Put sticky tooltip on icon, not label container 2021-09-07 14:33:15 +02:00
Henrik Giesel
26e9fa1c01 Prevent sticky bubbling and saveField before toggling sticky 2021-09-07 14:33:05 +02:00
Damien Elmes
1aad956872 fix case of fields table 2021-09-07 10:22:22 +10:00
Damien Elmes
d96b017d52 remove recursive symlink
https://github.com/ankitects/anki/pull/1332#issuecomment-913572914
2021-09-06 21:26:30 +10:00
Henrik Giesel
90dc1a0b40 Fix Float buttons in rtl 2021-09-06 21:15:37 +10:00
Henrik Giesel
803bf1b9d4 Fix ButtonDropdown disappearing when mouseupping on HandleBackground 2021-09-06 21:15:37 +10:00
Henrik Giesel
912fb0d94d Fix Tab not moving caret to end 2021-09-06 21:15:37 +10:00
Henrik Giesel
57eb988068 Make clicking on labelcontainer move focus to field 2021-09-06 21:15:37 +10:00
Henrik Giesel
997e28384d Decrease margin of the pin icon on the right 2021-09-06 21:15:37 +10:00
Henrik Giesel
b7ca721a2c Have a uniform border-radius for buttons and fields 2021-09-06 21:15:37 +10:00
Henrik Giesel
212fd00405 Add a dashed border around pictures when image-editing 2021-09-06 21:15:37 +10:00
Henrik Giesel
63bc3f823b Make focus highlight artificial and based on :focus-within 2021-09-06 21:15:37 +10:00
Henrik Giesel
b40f7ef262 Remove comma 2021-09-06 21:15:37 +10:00
Henrik Giesel
214b674cad Prevent overflow of sizeDimensions or image handle buttons 2021-09-06 21:15:37 +10:00
Henrik Giesel
abf0eb1c16 Fix automatic positioning of ButtonDropdown after changing float property 2021-09-06 21:15:37 +10:00
Henrik Giesel
620f9cb765 Introduce WithImageConstrained 2021-09-06 21:15:37 +10:00
Henrik Giesel
732886ea7e Parameterize overlay handle offsets 2021-09-06 21:15:37 +10:00
Henrik Giesel
02413acd88 Move more logic into HandleSelection 2021-09-06 21:15:37 +10:00
Henrik Giesel
b7d2791e92 Remove unused import tick 2021-09-06 21:15:37 +10:00
Henrik Giesel
ce8abfb1d0 Implement HandleLabel 2021-09-06 21:15:37 +10:00
Henrik Giesel
e59d02178c Implement HandleBackground 2021-09-06 21:15:37 +10:00
Henrik Giesel
384bb70fd5 Remove unused nightMode from ImageHandle 2021-09-06 21:15:37 +10:00
Henrik Giesel
29d6d524d0 Introduce HandleControl 2021-09-06 21:15:37 +10:00
Henrik Giesel
fce34cafd9 Introduce HandleSelection.svelte 2021-09-06 21:15:37 +10:00
Henrik Giesel
b501326c89 Change SizeSelect.images back to const: no reactivity needed here 2021-09-06 21:15:37 +10:00
Henrik Giesel
598d3bfbc5 Also check for sizeSelect.includes 2021-09-06 21:15:37 +10:00
Henrik Giesel
76d56d73a7 Make images in SizeSelect variable again 2021-09-06 21:15:37 +10:00
Henrik Giesel
f7a99063a8 Only allow ImageHandle on valid pictures (determined in SizeSelect) 2021-09-06 21:15:37 +10:00
Henrik Giesel
299892c40f Fix resetting image-handle-bg on no activeImage 2021-09-06 21:15:37 +10:00
Henrik Giesel
480138f8e3 Set max-width of images in the reviewer to 100% 2021-09-06 21:15:37 +10:00
Henrik Giesel
1c8d5d3fa7 Make first adjustment of size dimensions wait for setting of dimensions label 2021-09-06 21:15:37 +10:00
Henrik Giesel
55b63b9a45 Better algorithmus for minimum resize + prevent overflow of dimensions 2021-09-06 21:15:37 +10:00
Henrik Giesel
62639f3108 Constrain with proportions in SizeSelect 2021-09-06 21:15:37 +10:00
Henrik Giesel
ac182473ac Show custom dimensions again 2021-09-06 21:15:37 +10:00
Henrik Giesel
a7d117b6bc Detect active status again 2021-09-06 21:15:37 +10:00
Henrik Giesel
027db43664 Implement new resizing algorithm
* resizes against the original parameters
2021-09-06 21:15:37 +10:00
Henrik Giesel
e2d345bfd2 Manage CSSStyleSheet from within SizeSelect where each image has one rule 2021-09-06 21:15:37 +10:00
Henrik Giesel
16a394fa7d Hide Float icons when width too small + Avoid too small resizing 2021-09-06 21:15:37 +10:00
Henrik Giesel
ccc44d1632 Revert "During resizing, make the smaller dimension decide the new dimensions"
This reverts commit 5bad9a913ce7b4a4cc58106936203fddec37d6da.

The previous behavior was the one you can observe in most graphical editors:
The bigger dimension (width or height) will decide the size, not the smaller one.
2021-09-06 21:15:37 +10:00
Henrik Giesel
0ffa5030e5 During resizing, make the smaller dimension decide the new dimensions 2021-09-06 21:15:37 +10:00
Henrik Giesel
a7fa217306 Reset height, so it defaults to "auto"
* This allows more flexible dynamic resizing for the image in the (p)reviewer
2021-09-06 21:15:37 +10:00
Henrik Giesel
3fe1180f39 Add margin to other side of dimensions 2021-09-06 21:15:37 +10:00
Henrik Giesel
63fed87b48 Do not allow for resizing when in constrained mode 2021-09-06 21:15:37 +10:00
Henrik Giesel
c4f47be673 Don't show same dimensions twice if there are no custom dimensions 2021-09-06 21:15:37 +10:00
Henrik Giesel
db558c869d Change position of float buttons and dimension
* So we can show dimensions at lower image sizes
2021-09-06 21:15:37 +10:00
Henrik Giesel
fce63ed718 Deal with case where no style.{width,height} is set for size dimensions 2021-09-06 21:15:37 +10:00
Henrik Giesel
460b6f33c9 Dispaly "actualHeight / actualWidth" even in constrained mode 2021-09-06 21:15:37 +10:00
Henrik Giesel
2a548f2ebd Turn off no-explicit-warning for editing-area 2021-09-06 21:15:36 +10:00
Henrik Giesel
e8ec6b61a7 Use ResizeObserver to resize overlay if necessary 2021-09-06 21:15:36 +10:00
Henrik Giesel
2224d1c287 Reset image handle on keydown and blur 2021-09-06 21:15:36 +10:00
Henrik Giesel
796037649a Better RTL support 2021-09-06 21:15:36 +10:00
Henrik Giesel
9342d19504 Move selector / active logic up to ImageHandle 2021-09-06 21:15:36 +10:00
Henrik Giesel
47cd308251 Do not use width/height auto important to avoid enlarging smaller images 2021-09-06 21:15:36 +10:00
Henrik Giesel
7696a181f3 Implement Maximum image size mechanism 2021-09-06 21:15:36 +10:00
Henrik Giesel
a6b071d849 Add float tooltips 2021-09-06 21:15:36 +10:00
Henrik Giesel
5257a4db26 Allow SW resize 2021-09-06 21:15:36 +10:00
Henrik Giesel
5e91108a79 Bind to style properties instead of events 2021-09-06 21:15:36 +10:00
Henrik Giesel
b919b9cb7f Add functionality to set float of image 2021-09-06 21:15:36 +10:00
Henrik Giesel
2a81273115 Image resizes preserves ratio 2021-09-06 21:15:36 +10:00
Henrik Giesel
9b97320438 Add image-handle-dimensions to show dimensions directly on image 2021-09-06 21:15:36 +10:00
Henrik Giesel
53d1435aa7 First implementation of ImageHandle 2021-09-06 21:15:36 +10:00
Damien Elmes
3e5a2a92c7 Introduce editable-container
Contains the shadow root, and references to the styles.
Is ignorant of Editable.
Is necessary, so our we editable.scss does not need to contain
information about Codable, ImageHandle or all those other things which
have nothing to do with Editable
2021-09-06 21:15:36 +10:00
Damien Elmes
f07b72a708 Merge pull request #1332 from hgiesel/svelteexportcontext
Shorten CSS references for `@import` or `@use`
2021-09-06 21:10:27 +10:00
Henrik Giesel
dc9a65bd8b Disallow setting, deleting or defining properties on packages 2021-09-03 00:52:39 +02:00
Henrik Giesel
7cb3c4a996 Add ts/sass/anki, a symlink to ts/sass for add-ons 2021-09-03 00:18:17 +02:00
Henrik Giesel
269b75ef4e Fix for svelte_check 2021-09-02 23:37:17 +02:00
Henrik Giesel
1f34b666b9 Uniformly shorten SCSS imports/uses 2021-09-02 23:37:17 +02:00
Henrik Giesel
c521568303 Directly include CSS from bootstrap and codemirror packages 2021-09-02 23:37:16 +02:00
Henrik Giesel
0667706d60 Add source for block level elements 2021-09-02 22:31:25 +10:00
Henrik Giesel
f7954af1be Remove special treatment of empty anki-editable 2021-09-02 22:31:25 +10:00
Henrik Giesel
47252983c5 Check for non-existence of block tags instead of exclusive existence of inline tags in editable 2021-09-02 22:31:25 +10:00
Damien Elmes
f5bbeba218 Merge pull request #1350 from hgiesel/exportshortcuts
Implement register-package and export some packages
2021-09-02 22:23:12 +10:00
Damien Elmes
575ddb6cc6 Merge pull request #1351 from hgiesel/fontisinline
Add FONT as an inline tag
2021-09-02 22:22:19 +10:00
Damien Elmes
3fc1ead668 don't allow | in generic family 2021-09-02 21:05:17 +10:00
Henrik Giesel
bafbdb3835 Add FONT as an inline tag 2021-08-31 13:59:07 +02:00
Henrik Giesel
76ca1356ac Implement register-package and export some packages
Exported packages are:
* anki/packages
* anki/shortcuts
* anki/bridgecommand
2021-08-30 14:41:40 +02:00
Damien Elmes
481a87367c fix incorrect calendar day labels
https://forums.ankiweb.net/t/day-of-the-week-legend-on-heatmap/9450/7
2021-08-24 12:17:35 +10:00
Damien Elmes
aaa6ecb7e6 Merge pull request #1340 from hgiesel/exportinternal
Export Svelte internals
2021-08-24 10:42:17 +10:00
Damien Elmes
875fd62264 expose require() instead of the svelte global
- Means add-on authors should not need to inject any code in their build
- Should be more flexible - we can export multiple libraries if we wish,
and don't have to worry about require() being clobbered by old add-ons.
2021-08-24 10:22:07 +10:00
Henrik Giesel
119d2e0eb4 Rename cross-unit to export-internal 2021-08-23 23:45:50 +02:00
Henrik Giesel
8f8914f3c7 Update Svelte to 3.42.2 2021-08-23 23:38:16 +02:00
Henrik Giesel
0585a5da3e Export WithShortcut 2021-08-23 21:23:04 +02:00
Henrik Giesel
5c987896cf Export svelte_internal as library on window object
Closes https://github.com/ankitects/anki/issues/1328.
2021-08-23 21:16:15 +02:00
Damien Elmes
21c2fe7b2d add note about interday learning cards being fetched preferentially
+ priority->order
2021-08-22 15:32:46 +10:00
Damien Elmes
0aae073056 adding options to sort by ascending/descending ease 2021-08-22 15:32:46 +10:00
Damien Elmes
3ec3b4242f Merge pull request #1335 from hikaru-y/fix-editor-fontfamily
Quote font family names
2021-08-20 14:39:29 +10:00
Damien Elmes
104a24bc1d add options to v3 to preserve new card gather order
Allows cards to be presented in deck order when gather priority is set
to 'deck'.
2021-08-20 12:03:32 +10:00
hikaru-y
0331da21e6 Quote font family names, except for generic families
Fixes https://forums.ankiweb.net/t/font-script-is-not-changing-in-the-anki-windows/12465
2021-08-20 04:31:11 +09:00
Damien Elmes
6ddbe8fd3e put reviews at bottom of reviews graph
https://forums.ankiweb.net/t/new-reviews-graph-design-is-worse-than-it-was-in-2-1-40/9807
2021-08-19 21:43:00 +10:00
Damien Elmes
6410e66857 filtered decks w/ scheduling disabled in v3 now log reviews 2021-08-19 20:25:29 +10:00
Damien Elmes
fb7eabcb80 fix mutateNextCardStates being exported into global namespace
https://forums.ankiweb.net/t/v3-custom-scheduler-not-working/12441
2021-08-19 10:21:04 +10:00
hikaru-y
e23737fb6c Use <template> element instead of Range.createContextualFragment()
https://forums.ankiweb.net/t/audio-in-back-template-is-played-on-front-template-on-desktop-2-1-46/12399

Unlike when using <template> element, if a DocumentFragment is created
using Range.createContextualFragment(), <audio>/<video> elements
with `aotoplay` will play immediately even before they are inserted into
the actual document, which will cause audio or video on the answer side
to be played on the question side.
2021-08-18 00:04:02 +09:00
Damien Elmes
37ed7f9bae fix inverted 'skip question when replaying answer' option
I'd intended to add a new string but overlooked it.

https://forums.ankiweb.net/t/bug-always-include-question-side-when-replaying-audio/12273/2
2021-08-15 16:15:14 +10:00
Damien Elmes
eae17ffbff use alphanumeric keyboard in SpinBoxFloat
https://forums.ankiweb.net/t/error-setting-hard-interval-on-ios/12105/3
2021-08-09 14:15:16 +10:00
Henrik Giesel
b396ef558c Satisfy eslint 2021-08-03 06:12:04 +02:00
Henrik Giesel
00b990b79e Add tooltip for Toggly sticky icon 2021-08-03 06:02:29 +02:00
Henrik Giesel
485460870c Increase inactive opacity a little for better discoverability 2021-08-03 05:52:57 +02:00
Henrik Giesel
2649dc0ad7 Add toggle sticky shortcuts F9 and Shift+F9 2021-08-03 05:52:07 +02:00
Damien Elmes
9a809af6ab Merge pull request #1320 from hgiesel/colorpickerplus
Remember last text and highlight color again
2021-08-03 09:07:46 +10:00
Henrik Giesel
39566638f3 Remember last text and highlight color again 2021-08-02 23:12:00 +02:00
Damien Elmes
bd146fa4fb update congrats screen periodically; automatically move back to study 2021-08-02 16:05:18 +10:00
Damien Elmes
86d5d7e020 don't hide learning count on congrats screen when learning is overdue
The v3 scheduler will delay the final card from being shown twice in
a row, but the overdue case was being treated the same as the no-learning
case, leading to the message being hidden.
2021-08-02 15:57:09 +10:00
Damien Elmes
b5808eea9e fix inability to map fields from larger to smaller notetype
We were using the new item count instead of the old one.

https://forums.ankiweb.net/t/issue-changing-note-type-on-2-1-45/11822
2021-07-31 18:30:50 +10:00
Henrik Giesel
94eff9a864 Install Ctrl+Shfit+V paste only on Apple platforms 2021-07-31 03:43:10 +02:00
Henrik Giesel
8c6df4461d Remove registerShortcut for Ctrl+C/V/A/X from editor/index.ts 2021-07-30 22:28:40 +02:00
Damien Elmes
7513f9789f export jQuery, not just $
https://github.com/ankitects/anki/pull/1314#issuecomment-889597619
2021-07-30 18:30:37 +10:00
Damien Elmes
d511f2bd18 Merge pull request #1314 from hgiesel/fixjqueryreviewer
Export jquery correctly
2021-07-29 23:26:05 +10:00
Henrik Giesel
652e4e6368 Export jquery correctly 2021-07-29 15:18:51 +02:00
Damien Elmes
83a4e510da Merge pull request #1312 from hgiesel/smalleditorrefactors
Use :host instead of :host-context
2021-07-28 13:19:04 +10:00
Damien Elmes
cd784dd652 show warning when trying to indent plain text
https://forums.ankiweb.net/t/2-1-45-release-candidate/11362/55
2021-07-28 12:18:04 +10:00
Damien Elmes
e3b970961f add reviewer_extras.js back 2021-07-27 15:13:39 +10:00
Henrik Giesel
f682cdf755 Use :host instead of :host-context 2021-07-26 16:06:50 +02:00
Henrik Giesel
8335f81396 Use event object in createShortcut, fix F8 for highlight 2021-07-26 06:15:30 +02:00
Henrik Giesel
78f3aff987 Rename to text color and text color highlight 2021-07-26 05:28:28 +02:00
Henrik Giesel
380ba8a5cc Use new for-loop 2021-07-19 01:34:14 +02:00
Henrik Giesel
07e07aa6da Catch hook errors in two ways:
- try/catch for catching synchronous errors
- Promise.allSettled will allow for rejected promises without fast-failing other promises
2021-07-19 01:23:41 +02:00
Damien Elmes
2f56b43859 expose _queueAction
https://github.com/ankitects/anki/pull/1292#issuecomment-881795577
2021-07-17 12:12:07 +10:00
Damien Elmes
a1f0287d4a css_browser_selector was logging to the console 2021-07-17 09:25:05 +10:00
Damien Elmes
e80d539f87 keep _updateQA exposed for now, as some add-ons use it 2021-07-17 09:11:05 +10:00
Henrik Giesel
36ebcd8bd8 Allow any in reviewer/index.ts 2021-07-16 17:28:31 +02:00
Henrik Giesel
45fa549540 Add back opacity change 2021-07-16 17:26:04 +02:00
Henrik Giesel
170bc5c25e Revert to MathJax through script tag 2021-07-16 16:56:57 +02:00
Henrik Giesel
4888f5ee79 Add copyright header 2021-07-16 16:56:57 +02:00
Henrik Giesel
0695638ed8 Satisfy formatter 2021-07-16 16:56:57 +02:00
Henrik Giesel
0bb6f56c74 Satisfy eslint 2021-07-16 16:56:56 +02:00
Henrik Giesel
28e2f62793 Remove protobuf important from reiewer (no longer necessary (?)) 2021-07-16 16:56:56 +02:00
Henrik Giesel
cb890b849b Do not set opacity to 0 in reviewer 2021-07-16 16:56:56 +02:00
Henrik Giesel
70040d508e Include MathJax over ts/reviewer 2021-07-16 16:56:56 +02:00
Henrik Giesel
dbbb590c2f Simplify some reviewer code 2021-07-16 16:56:56 +02:00
Henrik Giesel
6ef8e17f60 Create reviewer/images.ts 2021-07-16 16:56:56 +02:00
Henrik Giesel
c62d2dc033 Export jquery via ts/reviewer 2021-07-16 16:56:56 +02:00
Henrik Giesel
8ee6eb71eb Include css-browser-selector via ts/reviewer 2021-07-16 16:56:56 +02:00
Henrik Giesel
2536063784 Export getTypedAnswer 2021-07-16 16:56:56 +02:00
Henrik Giesel
791d7f2f4b Move reviewer to ts/reviewer 2021-07-16 16:56:55 +02:00
Damien Elmes
1d4fb0ca50 add note about display order using current deck 2021-07-13 15:58:06 +10:00
Damien Elmes
314df22e1e move bury options below display order
Causes the timer settings to appear at the bottom left, which is a bit neater.
2021-07-13 15:45:08 +10:00
Damien Elmes
e7f249f4b7 Merge pull request #1286 from ankitects/proto
Split backend.proto into multiple files
2021-07-11 19:53:04 +10:00
Damien Elmes
f0ce1cfc9d rename workspace
I'd forgotten that Bazel "helpfully" adds __init__.py files into folders
that match the workspace name, breaking imports.
2021-07-10 23:58:53 +10:00
Damien Elmes
e3b53fc078 split out remaining tags, stats, media and rendering 2021-07-10 23:16:18 +10:00
Damien Elmes
673955de5b split out sync, search, scheduler & config 2021-07-10 21:33:12 +10:00
Damien Elmes
1fb86d499d split out decks, deckconfig, notes, notetypes 2021-07-10 20:44:22 +10:00
Damien Elmes
c43674762e split out cards and collection 2021-07-10 19:52:31 +10:00
Damien Elmes
5255409093 refactor protobuf handling for split/import
In order to split backend.proto into a more manageable size, the protobuf
handling needed to be updated. This took more time than I would have
liked, as each language handles protobuf differently:

- The Python Protobuf code ignores "package" directives, and relies
solely on how the files are laid out on disk. While it would have been
nice to keep the generated files in a private subpackage, Protobuf gets
confused if the files are located in a location that does not match
their original .proto layout, so the old approach of storing them in
_backend/ will not work. They now clutter up pylib/anki instead. I'm
rather annoyed by that, but alternatives seem to be having to add an extra
level to the Protobuf path, making the other languages suffer, or trying
to hack around the issue by munging sys.modules.
- Protobufjs fails to expose packages if they don't start with a capital
letter, despite the fact that lowercase packages are the norm in most
languages :-( This required a patch to fix.
- Rust was the easiest, as Prost is relatively straightforward compared
to Google's tools.

The Protobuf files are now stored in /proto/anki, with a separate package
for each file. I've split backend.proto into a few files as a test, but
the majority of that work is still to come.

The Python Protobuf building is a bit of a hack at the moment, hard-coding
"proto" as the top level folder, but it seems to get the job done for now.

Also changed the workspace name, as there seems to be a number of Bazel
repos moving away from the more awkward reverse DNS naming style.
2021-07-10 19:17:05 +10:00
Damien Elmes
3ca4ca397a add workaround for protobufjs requiring uppercase package names
I mourn the time lost trying to track this down :-(

https://github.com/protobufjs/protobuf.js/issues/1014

We can't patch the minified file in dist without essentially duplicating
it, so this change also switches from the external file to including
the src file as part of the bundle.
2021-07-10 15:24:01 +10:00
abdo
f9e86ccf6f Tweak deck options tooltips for RTL languages 2021-07-10 00:45:10 +03:00
Damien Elmes
14263c7a79 move protobuf into separate folder in preparation for multiple files 2021-07-09 21:02:40 +10:00
hikaru-y
d7ec723f4b Set lineWiseCopyCut option to false
Fixes https://forums.ankiweb.net/t/anki-2-1-45-beta/10664/103
Related: https://github.com/codemirror/CodeMirror/issues/3169
2021-07-08 01:19:19 +09:00
Damien Elmes
0043910ae7 Merge pull request #1280 from hgiesel/addonimprov2
Export via components for Deck Options
2021-07-07 09:53:05 +10:00
Damien Elmes
13dcc9636e Merge pull request #1279 from hgiesel/addonimprov
Remove disabled / Export via Components
2021-07-07 09:31:00 +10:00
Henrik Giesel
30a50b746b Export editor globals under anki namespace 2021-07-06 03:48:33 +02:00
Henrik Giesel
a3a558159b Don't use containers components within Container
- dynamic componets will be placed outside of the inner container
2021-07-06 03:43:40 +02:00
Henrik Giesel
f323f96a85 Export under anki.components 2021-07-06 03:36:02 +02:00
Henrik Giesel
9546c49f93 Remove WithShortcut for now - it does not work 2021-07-05 22:32:19 +02:00
Henrik Giesel
fb3545545c disabledKey => fieldFocusedKey 2021-07-05 18:15:03 +02:00
Henrik Giesel
57fe9f91c2 Fix issues with sometimes cause assignment of wrong position value 2021-07-05 17:17:58 +02:00
Henrik Giesel
9e415344ae Use Components.svelte instead of exporting from EditorToolbar.svelte 2021-07-05 16:19:03 +02:00
Damien Elmes
42514dd008 add comment about the use of linear-gradient
Otherwise one of us is likely to return to the code in a few years,
think it could be made simpler, and then break things again. :-)
2021-07-05 11:09:22 +10:00
hikaru-y
22e036a129 Prevent #dupe bgcolor from being carried over when copying text
use 'background-image' instead of 'background-color'
to prevent the background-color from being carried over
when copying text to another field in day mode
2021-07-05 04:11:03 +09:00
Damien Elmes
447bd2671c Merge pull request #1273 from hgiesel/macshortcuts
Execute Ctrl+C/V/X/A via execCommand in editor
2021-07-04 16:02:52 +10:00
Henrik Giesel
5b2290f868 Execute Ctrl+C/V/X/A through execCommand in editor (so we can customize it) 2021-07-03 01:48:49 +02:00
Henrik Giesel
76f432c94f Allow non-null assertion in focus-handlers 2021-07-03 01:14:59 +02:00
Henrik Giesel
1968972c1c Move selection into editable, if it's not there after focus 2021-07-03 01:00:52 +02:00
Damien Elmes
f4b15e1351 Merge pull request #1266 from hgiesel/renamelib
More uniform file naming
2021-07-02 09:31:52 +10:00
Henrik Giesel
db4cbfcb26 More uniform file naming
kebap-case for .ts, .scss, .html, and directories
2021-07-01 12:24:16 +02:00
Henrik Giesel
2680ffb969 Use better cloze button icon 2021-07-01 11:46:39 +02:00
Henrik Giesel
27335e1d33 Refactor WithDropdown to be more versatile and cause less bugs 2021-06-30 14:01:33 +02:00
Damien Elmes
dc0c8c217f unpin bootstrap now that 5.0.1 is out
4d51a13259
2021-06-29 11:25:14 +10:00
Damien Elmes
fdfcfee5d6 Merge pull request #1262 from hgiesel/visibledeckpreset
Make input in TextInputModal in dark mode visible
2021-06-29 11:24:21 +10:00
Henrik Giesel
48afafb04e Make input in TextInputModal in dark mode visible 2021-06-29 03:20:15 +02:00
Damien Elmes
e26f461ada use css columns instead of grid
Alternative approach to #1255

thanks to Hikaru and Henrik for the margin fix, and Matthias for
the initial idea and prototypes!
2021-06-29 11:19:56 +10:00
Damien Elmes
50e7d6ea00 disable cloze&math buttons in html mode
Following on from 35777bb0ca
Keeping them active seems to encourage users to experiment:
https://forums.ankiweb.net/t/cloze-deleting-html-svg/11011
2021-06-25 10:31:47 +10:00
Henrik Giesel
1599526726 Make Codable abstract more over its textarea v codemirror when using fieldHTML 2021-06-24 19:55:50 +02:00
Henrik Giesel
9f0343f591 Make EditingArea intialize this.fieldHTML, not Editable.fieldHTML 2021-06-24 19:15:07 +02:00
Damien Elmes
4ba0c8d169 mobile fixes for js field
Without the overflow change, the page viewport gets messed up.
And for some reason specifying the font size as 1rem does not work;
it needs to be explicitly set to 16px to prevent zoom in.
2021-06-24 18:06:22 +10:00
Damien Elmes
04d6a89216 disable smart quotes and capitalization in js field
+ use bootstrap styling
2021-06-24 18:00:06 +10:00
Damien Elmes
b959feb6e5 expose scheduler js option in deck config 2021-06-24 14:38:10 +10:00
Damien Elmes
841250533d gear -> revert icon
https://forums.ankiweb.net/t/anki-2-1-45-beta/10664/30
2021-06-24 13:07:03 +10:00
Damien Elmes
a277dc96ba Merge pull request #1248 from ankitects/revert-on-right
Move deck options revert button to right; hide when inactive
2021-06-24 13:01:57 +10:00
Henrik Giesel
e5709ec90c Adapt use of createDropdown for editor buttons 2021-06-22 17:31:06 +02:00
Damien Elmes
7416660c59 move revert button to the right
With a confirmation step now, accidental taps when scrolling shouldn't
be an issue, and it leaves more room for the text.
2021-06-22 09:41:31 +10:00
Damien Elmes
7e96005d54 hide revert button when not active 2021-06-22 09:38:28 +10:00
Damien Elmes
15825f5629 fix svelte-check error by tweaking formatting
🤷
2021-06-22 09:27:37 +10:00
Henrik Giesel
40058b49b2 Have swithes be blue when checked in night mode 2021-06-21 22:37:37 +02:00
Henrik Giesel
b89fbe1aa5 Replace dash with underscore for night_mode_lib 2021-06-21 21:51:15 +02:00
Henrik Giesel
4ee66fb742 Add night_mode_lib as SCSS target 2021-06-21 21:44:23 +02:00
Henrik Giesel
447f50724a Always show spinning reverse icon on mobile 2021-06-21 21:35:20 +02:00
Henrik Giesel
7b01dd1719 Remove use of bootstrap-dark.night-mode for deckoptions
The CSS for the Switch component had a conflict regarding background color
Also generally it makes sense to put the CSS into the components
2021-06-21 21:16:40 +02:00
Henrik Giesel
28bab1f7a1 Position Revert/Gear button on the left of the label
+ Make the reverse arrow spin
2021-06-21 20:48:33 +02:00
Henrik Giesel
69ec04190c Make gear button show dropdown menu 2021-06-21 20:24:15 +02:00
Henrik Giesel
ad6577d88c Revert button with gear icon, that shows revert dropdown item 2021-06-21 19:11:10 +02:00
Henrik Giesel
60f0ad4093 Associate Switch labels with their respective switches 2021-06-21 18:15:41 +02:00
Henrik Giesel
c99330990a Put tooltip only on the info badge 2021-06-21 17:48:18 +02:00
Damien Elmes
f695fac40b remove explicit line-height
It was causing text in dropdowns to be slightly truncated
(eg "Tag Only")
2021-06-21 17:02:48 +02:00
Damien Elmes
eda359d652 remove left pad on switches 2021-06-21 17:02:48 +02:00
Damien Elmes
db48fe2124 decrease margins in deck options top sticky bar 2021-06-21 17:02:48 +02:00
Henrik Giesel
00fb0e7395 Add g-1 class to DeckoptionsPage. Include transitions.scss
* Modal misbehaved before
2021-06-21 17:02:48 +02:00
Henrik Giesel
2d3f967899 Disable RevertButton tooltip on touch devices
The tooltip will show after you clicked Revert. There's no sensible way
to show the tooltip, without also triggering the functionality
2021-06-21 17:02:48 +02:00
Henrik Giesel
e20a5bf2f0 Make TriggerType an input argument for WithTooltip 2021-06-21 17:02:48 +02:00
Henrik Giesel
e131f23037 Increase padding on tooltips + Remove erroneous closing angle bracket 2021-06-21 17:02:48 +02:00
Henrik Giesel
708feac2a2 Implement Switch and SwitchRow 2021-06-21 17:02:48 +02:00
Henrik Giesel
bce4c4d393 Properly dispose of tooltip resources when unmounting 2021-06-21 17:02:48 +02:00
Henrik Giesel
024517e864 Reverse RevertButton being on the right side 2021-06-21 17:02:48 +02:00
Henrik Giesel
827ca7efe5 Alternative solution to markdown tooltips creating bottom margin 2021-06-21 17:02:48 +02:00
Henrik Giesel
f67b9b75da Update RevertButton to use Badge and WithTooltip 2021-06-21 17:02:48 +02:00
Henrik Giesel
01f074785c Add a tooltip showing delay of a quarter second 2021-06-21 17:02:48 +02:00
Henrik Giesel
94c24c0f44 Add back info circles, remove underlines 2021-06-21 17:02:48 +02:00
Henrik Giesel
895bb454ef Update NotetypeSelector to use Item instead of ButtonToolbarItem 2021-06-21 17:02:48 +02:00
Henrik Giesel
6c9de074b6 Fix tooltip regression 2021-06-21 17:02:48 +02:00
Henrik Giesel
13accfa840 Have decimal keyboard for SpinBoxFloat 2021-06-21 17:02:48 +02:00
Henrik Giesel
77cfebcccc Have numeric keyboard for SpinBox 2021-06-21 17:02:48 +02:00
Henrik Giesel
99caaf8d71 Switch Revert button and input element position 2021-06-21 17:02:48 +02:00
Henrik Giesel
e4e6dd3a39 Implement WithTooltip 2021-06-21 17:02:48 +02:00
Henrik Giesel
74ebf7e9ad Wrap label and HelpPopup into span
Avoids HelpPopup in a differnt column upon label wrapping
2021-06-21 17:02:48 +02:00
Henrik Giesel
9acf6af355 Make revert button horizontal padding smaller 2021-06-21 17:02:48 +02:00
Henrik Giesel
18f33e117d Have colors inherit for badges 2021-06-21 17:02:48 +02:00
Henrik Giesel
73e66d6dd0 Add down-arrow SASS function 2021-06-21 17:02:48 +02:00
Henrik Giesel
6462643328 Use custom down arrow for both SelectButton and EnumSelector 2021-06-21 17:02:48 +02:00
Henrik Giesel
745f940890 Put Col types into col.ts 2021-06-21 17:02:48 +02:00
Henrik Giesel
bf7efa19c1 Fix formatting 2021-06-21 17:02:48 +02:00
Henrik Giesel
191684c1b0 Rename SectionItem to just Item and use across option sections 2021-06-21 17:02:46 +02:00
Henrik Giesel
d54b21db7a Import API from all option sections 2021-06-21 17:01:45 +02:00
Henrik Giesel
0e0bdccba7 Add Container.svelte 2021-06-21 17:01:45 +02:00
Henrik Giesel
695fa09619 Remove SCSS from ConfigEditor 2021-06-21 17:01:45 +02:00
Henrik Giesel
b684101d9b Implement CheckBoxRow and SpinBoxFloatRow 2021-06-21 17:01:45 +02:00
Henrik Giesel
019d41d01d Implement EnumSelectorRow and StepsInputRow 2021-06-21 17:01:45 +02:00
Henrik Giesel
d43d7b10e0 Implement SpinBoxRow 2021-06-21 17:01:45 +02:00
Henrik Giesel
cf89d89dc2 Add breakpoint for Bury EnumSelector 2021-06-21 17:01:44 +02:00
Henrik Giesel
9e3d955502 Use Row and Col in favor of ConfigEntry 2021-06-21 17:01:44 +02:00
Henrik Giesel
7d0a02fe56 Remove ConfigEntryFull 2021-06-21 17:01:44 +02:00
Henrik Giesel
4e11cade23 Factor RevertButton out of components 2021-06-21 17:01:44 +02:00
Henrik Giesel
a07dc2bd7a Change margin and gutters off rows 2021-06-21 17:01:44 +02:00
Henrik Giesel
d8e285ba69 Move the remaining Options to new ConfigEntry layout 2021-06-21 17:01:44 +02:00
Henrik Giesel
a89e048259 Update DailyLimits and NewOptions to new format 2021-06-21 17:01:44 +02:00
Henrik Giesel
8bab61c62c Wrap input and revert button into one col 2021-06-21 17:01:44 +02:00
Henrik Giesel
b02d14dcbd Introduce TitledContainer 2021-06-21 17:01:44 +02:00
Henrik Giesel
26c4753c38 Allow for gutters between rows 2021-06-21 17:01:44 +02:00
Henrik Giesel
af3f65188f Vertically align text + Remove bottom margin from alerts 2021-06-21 17:01:44 +02:00
Henrik Giesel
2ddc22f6c2 Turn icons into Bootstrap badges in deckoptions 2021-06-21 17:01:44 +02:00
Henrik Giesel
588faf5f50 Start using Bootstrap grid for deckoptions 2021-06-21 17:01:44 +02:00
Henrik Giesel
cb14011410 Use Bootstrap containers instead of CSS in base for deckoptions 2021-06-21 17:01:44 +02:00
Henrik Giesel
43b5ba42ba Add container scss to deckoptions-base 2021-06-21 17:01:44 +02:00
Henrik Giesel
9def4075b5 Make API argument required in ConfigEditor 2021-06-21 17:01:44 +02:00
Henrik Giesel
d2360869b3 Add Section and SectionItem for the deckoptions 2021-06-21 17:01:44 +02:00
Henrik Giesel
0061d61db5 Generalize ButtonToolbarItem to SectionItem 2021-06-21 17:01:42 +02:00
Damien Elmes
16e37c5537 Merge pull request #1244 from hgiesel/colorpickersetcolor
Make Color Pickers also format with colors
2021-06-20 15:58:58 +10:00
Damien Elmes
d89c538c48 in/out -> request/response
The saved characters weren't worth the increased difficulty when
reading, and the fact that we were deviating from protobuf norms.
2021-06-20 15:49:20 +10:00
Henrik Giesel
b1414c188d Add type hint in WithColorHelper 2021-06-19 16:31:35 +02:00
Henrik Giesel
0a7697596d Make Color Pickers also format with colors 2021-06-19 16:27:09 +02:00
Damien Elmes
5715a28c76 support jsdom tests
Alternative would be to switch to jsdom for everything, but TextEncoder
is currently missing from jsdom, and jsdom mode is slower IIRC.
2021-06-19 09:43:09 +10:00
Henrik Giesel
cac802872c Cannot create Jest jsdom tests (?) 2021-06-18 20:41:54 +02:00
Damien Elmes
22f073d29c Merge pull request #1242 from hgiesel/codable
In-line HTML-Editing for Editor
2021-06-18 17:18:35 +10:00
Henrik Giesel
c74d486120 Satisfy svelte_check 2021-06-18 03:12:02 +02:00
Henrik Giesel
44ed54a20f Remove components from editor BUILD.bazel again 2021-06-18 02:59:45 +02:00
Henrik Giesel
519cc78c66 Disable function dropdown when no field selected 2021-06-18 02:51:42 +02:00
Henrik Giesel
8ca7dc589c Satisfy linter 2021-06-18 02:44:15 +02:00
Henrik Giesel
f06b709a66 Make text wrapper buttons work with Codable 2021-06-18 02:33:56 +02:00
Henrik Giesel
35777bb0ca Disable Media button for Codable, but keep wrapping and cloze key for now 2021-06-18 02:02:01 +02:00
Henrik Giesel
5992910fe8 Disable ColorButtons for Codable 2021-06-18 01:44:15 +02:00
Henrik Giesel
2de2e7ccf5 Allow Tab and Shift+Tab on Codable 2021-06-18 01:32:46 +02:00
Henrik Giesel
dee7be2323 Disable FormatBlock buttons for Codable 2021-06-18 01:17:43 +02:00
Henrik Giesel
dd1344d7f0 Disable Bold button in Codable 2021-06-18 00:27:07 +02:00
Henrik Giesel
0315aeefd7 Make different onPaste behavior for Editable and Codable 2021-06-17 23:12:15 +02:00
Henrik Giesel
32b3702d3c Have correct enter behavior in for Editable and Codable 2021-06-17 22:02:06 +02:00
Henrik Giesel
e773d75f6d Add autoclosetag addon for CodeMirror 2021-06-17 21:45:11 +02:00
Henrik Giesel
b1414376e4 Make it so you don't have to close the HTML mode for html to be written back 2021-06-17 21:36:56 +02:00
Henrik Giesel
bf9cbcd527 Only toggle the current field, not all 2021-06-17 20:57:20 +02:00
Henrik Giesel
7687a030ff Make Codable enter behavior the same as Editable 2021-06-17 20:47:33 +02:00
Henrik Giesel
7530121314 Match and fold tags 2021-06-17 20:27:34 +02:00
Henrik Giesel
44e2560c8b Make editable hide correctly when activating codable 2021-06-17 19:08:14 +02:00
Henrik Giesel
df32f60029 Successfully add monokai theming 2021-06-17 18:36:12 +02:00
Henrik Giesel
751747a693 Make DOMParser correctly return innerHTML 2021-06-17 17:52:27 +02:00
Henrik Giesel
d2b697fc1b Make Codable correctly update the editable state and its button 2021-06-17 17:49:50 +02:00
Henrik Giesel
6ce9d18e4c Apply the Monokai theme 2021-06-17 17:18:00 +02:00
Henrik Giesel
e895f85cbc Setup toggleHtmlEdit on editingArea 2021-06-17 17:08:33 +02:00
Henrik Giesel
c6cee3bf31 Connect HtmlEditButton to codable 2021-06-17 15:30:05 +02:00
Henrik Giesel
48c8f89a11 Display CodeMirror in editingArea 2021-06-17 14:44:03 +02:00
Henrik Giesel
96e549e0d4 Add codable element 2021-06-17 13:46:25 +02:00
Damien Elmes
532ac8b511 Merge pull request #1230 from RumovZ/fields-check
Check for misplaced or missing clozes when adding and in the editor
2021-06-17 21:26:16 +10:00
Damien Elmes
48cffca7a9 update js deps; pin marked
marked 2.1.0 fails to run on node 12
2021-06-16 16:47:32 +10:00
RumovZ
be54c4352a Merge cloze hint divs into one 2021-06-15 08:43:18 +02:00
RumovZ
3572f0a0c6 Add editor hints for cloze errors 2021-06-12 17:35:40 +02:00
hikaru-y
d6370d13bf Disable color picker buttons when a field is not focused 2021-06-11 23:36:06 +09:00
Damien Elmes
cd303de619 specific encoding of strings.json
https://forums.ankiweb.net/t/win10-build-error-unicodedecodeerror-gbk-codec-cant-decode-byte-0x91/10714
2021-06-11 20:12:38 +10:00
Damien Elmes
548f62c6df Merge pull request #1225 from kelciour/segoe-ui-font-fix
Fix  Segoe UI got replaced with Arial on Windows
2021-06-10 22:29:06 +10:00
Damien Elmes
153e1e8d41 new change notetype implementation for the frontend
- changes can now be undone
- the same field can now be mapped to multiple target fields, allowing
fields to be cloned
- the old Qt dialog has been removed
- the old col.models.change() API calls the new code, to avoid
breaking existing consumers. It requires the field map to always
be passed in, but that appears to have been the common case.
- closes #1175
2021-06-10 22:19:24 +10:00
kelciour
8a81533336 fix default font family
Probably a regression introduced with 818fe75721
2021-06-10 12:07:52 +03:00
Damien Elmes
95151f5025 add LIFO sorting options for new cards 2021-06-08 14:01:46 +10:00
Damien Elmes
33cecaa618 use different toolbar size on Mac
see discussion on 8c8bf26488
2021-06-05 11:28:36 +10:00
Damien Elmes
e03cb50915 tooltip styling fix
Thanks Matthias!

https://forums.ankiweb.net/t/anki-2-1-45-alpha/10061/88
2021-06-04 15:27:27 +10:00
Damien Elmes
8c8bf26488 try toolbar size of 1.85rem
https://forums.ankiweb.net/t/anki-2-1-45-alpha/10061/97
2021-06-04 15:11:34 +10:00
Damien Elmes
5f44bf503e make _vars.scss public 2021-06-04 14:39:53 +10:00
Damien Elmes
d38f57cf3c Merge pull request #1213 from RumovZ/new-flags
Add pink, turquoise and purple flags
2021-06-02 11:22:26 +10:00
RumovZ
9e43c91a62 Tweak flag colors 2021-06-01 18:14:54 +02:00
Damien Elmes
b26385420e Merge pull request #1211 from hgiesel/bettercolor
Implement new text color / highlight color buttons
2021-06-01 17:55:57 +10:00
Damien Elmes
170a177c60 ensure changes to current field are saved before saving deck opts
https://forums.ankiweb.net/t/anki-2-1-45-alpha/10061/70
2021-06-01 15:54:07 +10:00
Damien Elmes
9a76565101 add options to sort reviews by deck
https://forums.ankiweb.net/t/is-studying-subdeck-by-subdeck-broken-in-2-1-44-mac/10458/2
2021-06-01 13:22:39 +10:00
RumovZ
9e56a4421b Add violet, turquoise and purple flags 2021-05-31 12:03:30 +02:00
Henrik Giesel
ecc8fed5a9 Change default icon size of IconButtons 2021-05-31 00:31:10 +02:00
Henrik Giesel
d358d0eb1e Remove rainbow SCSS 2021-05-31 00:20:41 +02:00
Henrik Giesel
973cd59b29 Make ColorPicker buttons halfwidth 2021-05-31 00:17:06 +02:00
Henrik Giesel
6d72e7bc49 Implement new ColorPicker 2021-05-30 22:58:40 +02:00
Henrik Giesel
93c0770cd0 Implement WithColorHelper.svelte 2021-05-30 21:44:05 +02:00
Henrik Giesel
dcdca0ac7a Implement new way to way to display icons in IconButtons
* allows for multiple icons overlay
* allows to make individual icons smaller/bigger
2021-05-30 21:05:16 +02:00
Henrik Giesel
794f9db637 Add new color icons 2021-05-30 20:09:09 +02:00
Damien Elmes
7108d8615b Merge pull request #1202 from hgiesel/nowrapdeckoptionstoolbar
Uniformly use properties to Button{Toolbar,Group} for setting button properties
2021-05-29 10:39:11 +10:00
Henrik Giesel
1caf7ada72 Add overflow-x: hidden for SelectButton 2021-05-28 21:33:34 +02:00
Damien Elmes
098acaf665 round to whole seconds
the steps are serialized as f32, and the resulting imprecision was
leading to decimal values

closes #1203
2021-05-28 19:34:25 +10:00
Damien Elmes
8ca1360f38 allow running test with 'bazel run jest' 2021-05-28 19:24:58 +10:00
Henrik Giesel
054f96b726 Uniformly use variables to Button{Toolbar,Group} for setting button properties
Instead of using WithTheming around ButtonToolbar/ButtonGroup
2021-05-27 17:13:36 +02:00
Damien Elmes
4a575dbe0a hook up some missing translations in deck options screen 2021-05-26 14:41:18 +10:00
Damien Elmes
6a823e53a1 add option to clone current config 2021-05-26 13:20:24 +10:00
Damien Elmes
ce9e1c3370 roll back sass for now to quieten deprecation warnings
https://github.com/twbs/bootstrap/issues/34051
2021-05-26 10:20:34 +10:00
Damien Elmes
3489257f41 update ts deps
- prettier's formatting has changed, so files needed to be reformatted
- dart is spitting out deprecation warnings like:

254 │   2: $spacer / 2,
    │      ^^^^^^^^^^^
    ╵
    bazel-out/darwin-fastbuild/bin/ts/sass/bootstrap/_variables.scss 254:6  @import
    ts/sass/button_mixins.scss 2:9                                          @use
    ts/components/ColorPicker.svelte 2:5                                    root stylesheet

DEPRECATION WARNING: Using / for division is deprecated and will be removed in Dart Sass 2.0.0.

Recommendation: math.div($grid-gutter-width, 2)
2021-05-26 09:37:40 +10:00
Damien Elmes
87cfd51cfa update rules_nodejs 2021-05-26 09:12:23 +10:00