* more better pan zoom with space for drag, shift for horizontal scroll and ctrl for zoom
* use middle mouse button for drag
* improve panning with space + mousemove, remove middle mouse implementation
* handle tool change after mouseup event
* Preserve HTML formatting inside clozes
* Place caret after/inside cloze
To match the old behavior
* Fix clozing in mathjax
* Formatting
* Avoid .extractContents() and handle partially covered tags
* Exclude range end if endOffset == 0
* Remove unnecessary branches
* Use nodeIsElement
* Let extractContents() handle partially selected nodes
* fix: ensure proper drawing of shape tools after pan/zoom
* remove sticky bottom toolbar
* make bounding-box not selectable after undo/redo
* fix: resize issue, added option to pan using alt/shift + mouse wheel
* drag with touchpad
* use isDesktop and move globalThis to index.ts
* gesture event not required, use preventDefault with passive false in wheel event
* use shift in mac and ctrl in pc
* fix: blur in io, remove panzoom and use fabricjs for panzoom
- remove panzoom
- implement panzoom using fabricjs
- set background image for canvas
- add bounding rect for canvas
- draw or add point inside in bounding rect
- update zoom tool
* support pinch to zoom on mobile client
* fix lagging of canvas, zoom in draw mode
* panning in touch events
* Update JS deps
* Update semver-compat Rust deps
* Update some semver-incompat Rust deps
- hyper/axum held back because reqwests is not ready
- rusqlite held back due to burn-rs incompat version
- wiremock held back due to compile issue
* pylint wants changes to our _rsbridge.pyi
* Update Python deps
Also solves a security warning in orjson
Reformat with latest black
* Factor out common code in bold/italic/underline/sub/sup buttons
* Update exclusiveNames' states on click
* Update exclusiveNames' states on keyboard shortcut
The congrats page fetches data once a minute, and onRefreshTimer()
reloads the page once every 10 minutes. If a data fetch is in flight
when the page reload happens, it can cause a 'failed to fetch' error
to occur.
Closes#2895
* Expose tag name to add-ons via data attribute
* Expose autocomplete items to add-ons as data attributes
* Use common data-addon* prefix for attributes
* Fix undo handling of group and some other IO tools
* Emit change signal inside onObjectModified
* Fix group lost after moving group then undoing
* Skip undo entry if canvas has not changed
The onObjectModified() call I added in a previous commit to deleteDuplicateTools results in a duplicate undo entry for the delete tool. Checking for duplicate entries seems simpler than having to think about where onObjectModified() should be called exactly
* Fix extra undo entry added after ungroup
* Prefer key over keyCode
* Do not close TS pages on Esc when floating elements are open
* Close pop-up when Escape is pressed regardless of keepOnKeyup
* Close help modals when Escape is pressed
* Avoid duplicate handling of Esc in WithFloating
* Formatting
* Handle closing of preset management modals
* Reset text input modal to initial value
The problem at the moment is that the two left buttons are not part
of the scrollable area on the right, and the scrollable area has been
manually positioned. We would need to move the buttons into the toolbar
area, and then hide them when using the desktop editor. For now, I've
just added wrapping/smaller text instead.
https://forums.ankiweb.net/t/image-occlusion-editor-buttons-overlap-in-some-languages/38499
Our average calculation is based on pre-binned values, so it's not
entirely accurate, but using the midpoint of the bin brings us closer.
In the future we can solve this by calculating it on the Rust end instead.
Confirmed correct layout in RTL mode.
I experimented with adding a tooltip as well, as suggested in
https://forums.ankiweb.net/t/anki-23-12-beta/37771/82, but it's
confusing as we already change the mouse cursor/underline when the user
hovers over a label. Given the help text universally starts with
"affects the entire collection", I think that's good enough.