This fixes an issue where the VE document model is incorrectly used in
computing gutter width based on directionality. It should instead be the
VE surface view's direction, in the event the user the is editing in RTL
on a LTR document. See T374196#10311711.
Bug: T374196
Follow-Up: I81e863e19d6d0bad2cc2be743df896e17a8dc548
Change-Id: Ic37d1004e9606dc2d29d98d29f28743202dd5683
This is toggled by pressing Mod-Shift-, (or Command-Shift-, on MacOS),
which then puts focus on the preferences panel. It can be closed with
the Escape key, just like other CM panels.
The CodeMirror class comes with these extension which can be toggled in
preferences:
* Bracket matching
* Line numbering
* Line wrapping
* Highlight the active line
* Show special characters
Only bracket matching, line numbering, and line wrapping are available
in the 2017 editor.
The bidi isolation and template folding extensions are registered in
CodeMirrorModeMediaWiki as they are MW-specific. CodeMirrorPreferences'
new registerExtension() method allows any consumer of CodeMirror to add
any arbitrary extensions to the preferences panel. This is expected to
be called *after* CodeMirror has finished initializing. The
'ext.CodeMirror.ready' hook now passes the CodeMirror instance to
accommodate this.
The preferences are stored as a single user option in the database,
called 'codemirror-preferences'. The defaults can be configured with the
$wgCodeMirrorDefaultPreferences configuration setting. The
sysadmin-facing values are the familiar boolean, but since CodeMirror is
widely used, we make extra efforts to reduce the storage footprint (see
T54777). This includes only storing preferences that differ from the
defaults, and using binary representation instead of boolean values,
since the user option is stored as a string.
For now, all preferences are ignored in the 2017 editor. In a future
patch, we may add some as toggleable Tools in the VE toolbar.
Other changes:
* Refactor CSS to use a .darkmode() mixin
* Add a method to create a CSS-only fieldset in CodeMirrorPanel
* Fix Jest tests now that there are more calls to mw.user.options.get()
* Adjust Selenium tests to always use CM6
* Adjust Selenium tests to delete test pages (useful for local dev)
* Remove unused code
Bug: T359498
Change-Id: I70dcf2f49418cea632c452c1266440effad634f3
This preference doesn't have a default value, meaning any and all values
are saved when it should only save if it doesn't match the default. This
causes bloat to the user_properties table (see T286270 for the same
situation that happened with the 'usecodemirror' preference).
This patch sets a default value so that only values different than it
are stored.
Bug: T286270
Change-Id: Ie9fc1f4265a6f6df2bc2cc4e99ad4294a76e2769
This fixes some Chromium-specific issues where offsetWidth was rounded
up and could cause misalignment issues. It does not fix all alignment
issues, but should hopefully be an improvement in most cases.
Other changes:
* Add Core VE padding to match CM5 variant (doesn't affect WMF cluster)
* Remove redundant margin rules from VE surface
* Minor code cleanup
Bug: T357482
Change-Id: Ic4246c0b8c39914021bbc2a84d52b332dafec20a
Temporary solution to T367256 before a folding gutter is applied. Hide the folding tooltip when typing, and make the tooltip semi-transparent until hovered.
Bug: T367256
Change-Id: I3ee3de737aa36692d094a54e0eea94d6f5690767
Just like the 2017 editor, we show the number of results and which one
is currently highlighted.
This patch also brings the Tab behaviour closer to the 2017 editor.
Hitting Tab from the search input focuses the replace input, followed by
the replacement buttons, then the find buttons, then the content
editable. Shift+Tab largely does the reverse, except Shift+Tab from the
editor doesn't bring you to the search panel. Doing this would require a
lot of work for minor benefit, as we'd need to determine which panel to
focus to.
Add basic unit test
Bug: T371436
Change-Id: I968f91320ecb6ab9e9da0994052d33c76f85974b
RTL rules within and around the content need to apply to the content
language, not the interface language, so we want to disable the normal
CSSJanus auto-flipping.
Bug: T357482
Bug: T374196
Change-Id: If0becbf7e0baa61118a22af375be0d107567226d
I74bcbc46b0 erroneously passed the model's directionality (how it is
saved) and not the view. This caused misalignment issues when changing
directionality.
Bug: T374196
Follow-Up: I74bcbc46b0b62ff2ed138fe57d852a3cd87c22d0
Change-Id: I81e863e19d6d0bad2cc2be743df896e17a8dc548
Forward keydown events on the CodeMirror DOM element to the #wpTextbox1
element, on which WikiEditor's handlers are registered.
CM6 support to come later.
Bug: T62928
Depends-On: I18db5b6c53000457524573a9ae06939e8df0dc4f
Change-Id: I0e67f2db6b29636fe25583e926a9fb12a69e3851
This does the same as before.
Also:
* Make use of more fitting ??= operator.
* We can use & for union types, I believe.
Change-Id: I359408473882a9337b40ec464562a4358f8d3241
This fixes a bug in the 2017 editor implementation where changes to the
gutter width were calculated before the gutter element was updated.
This fix prevents misalignment issues when copying and pasting large
amounts of content.
Bug: T373649
Change-Id: I74bcbc46b0b62ff2ed138fe57d852a3cd87c22d0