New changes:
57f8064b6 tests: Enforce dm unit test coverage at 20% per file and 80% globally
6f757c670 LinkAnnotation: add a getFragment method for consistency with MWInternalLinkAnnotation
c40a3f152 Drop the classList polyfill for IE9
d1af6c6bb Update OOjs UI to v0.21.1
bfb35aaef Localisation updates from https://translatewiki.net.
Bug: T162277
Change-Id: I5146bc421bb88e56bafadccefc7bbdee106504ea
This is run after the targetPromise completes (via the platform-agnostic
setDefaultMode proxy), which is the correct time to do so. We should not
do this twice, and we definitely shouldn't do this before the target has
successfully loaded, lest a user ends up with us setting their option to
"prefer" an editor that they actually can't load. Whoops.
Bug: T156316
Change-Id: Icf4b5ddd9c8265ade55f43328f807344b41db350
* Pass a wikitext promise, instead of wikitext
* Handle writing of content to the dialog from within
the dialog.
* Handle diff errors within the dialog.
* Never disable the 'Return to save form' (approve) button
* Remove redundant messages
Change-Id: Ibd76e8951998f751abfb4f407682202c2f73ac7e
New changes:
dc0cad28c tests: Factor out ve.dm.TestRebaseClient/Server into their own files
98061108b Convert RebaseServer tests to data provider
3e746a51b Update OOjs to v2.0.0
16231a812 [BREAKING CHANGE] Drop support for Internet Explorer 9
64daeb4b5 Localisation updates from https://translatewiki.net.
3310e876c Update DOMPurify to 0.8.5
579033a83 Follow-up 16231a81: Drop IE9 support in createDocumentFromHtmlUsingIframe
Bug: T162277
Change-Id: If17c6a3fac0920db29f80069f344ffd6be46c3c9
This will be required later when we have to fetch the original
document from the server before running a visual diff.
Change-Id: I351688f4d1fec892bc297f40c209939cbb2ccf95
Since the PopupWidget rewrite, margins for aligning popup anchors
should be set on the anchor itself, not on the popup.
Change-Id: If8237ae5edbc2e8c5cb99147f392aae52e642765
The styles are not specific to the Vector and MonoBook skins, but rather
to the MediaWiki and Apex themes of OOjs UI. Rename them to reflect that.
Change-Id: I757e8d96625feb8290cbf7837b5d801961cda344
Provide a utility funcition in ve.init.mw.LinkCache to do this.
Also use this in ve.ce.MWTransclusionNode/ve.ui.MWPreviewElement, and
introduce to ve.ce.MWExtenionNode
Bug: T73900
Bug: T153535
Change-Id: Ieb9a0274b8c5ae1932c431546f09d18000fa6dd9
This is a little inelegant, but it works in both CE and transclusion
content.
Bug: T52497
Depends-On: If058843924c3b30c116df2520aef93a004d98a5d
Change-Id: I88d45aad2aaa45e71b433350986b19764603a1f2
The bare minimum of elements that must be present on the page for
VisualEditor to start and mostly work is:
* '#content' to attach our interface (toolbar etc.)
* '#mw-content-text' to replace with the editing surface
* '#ca-edit' to start up the editor
When those elements are missing (and we expect them to be present,
e.g. we're not on a special page), we print a console warning.
For example, VisualEditor now launches on Timeless and CologneBlue.
It does not launch and prints a warning on Modern and Erudite.
(It is actually possible to edit and save pages on CologneBlue,
although various pieces of the interface look funny.)
This does not change which skins we claim to support: these are still
currently only Vector, MonoBook and Apex. But it allows third-party
skin developers to more easily test the editor and fiddle with their
CSS to make it look right.
Bug: T161373
Change-Id: I97c786f3c8c795c238b10bef332a129ea26f86c2
The element has both the class and the id set to 'catlinks'. This is
just for consistency, I have no preference on which to use.
Change-Id: Ic96b0f21fe790d0aa03bfd6366ba246e8493a038
Redirect pages have two extra things not present on normal pages:
* Redirect subtitle: the "Redirect page" shown under the page heading.
* Redirect page content header: the "↳ Foo" at the beginning of content.
Our handling was pretty messy and had some bugs (T161614).
Notable behavior changes:
* Update 'wgIsRedirect' in mw.config after saving the page.
* Use #mw-content-text rather than .mw-jump for inserting the fake .redirectMsg.
.mw-jump is not guaranteed to exist on the page (it's a skin feature).
* Never replace the real .redirectMsg existing on the page, except by the
new HTML after a page is saved. Our fake is separate now.
Bug: T161614
Change-Id: I96a5e45a71bf10bf6a2b501dc0cf81e6c37060ec
To reproduce: start editing a page, turn it into a redirect,
cancel editing and go back to view mode. The "Redirect page"
subtitle under the page title should disappear.
Note that #redirectsub is correctly spelled all lowercase,
unlike #contentSub.
This reverts commit 0e1bc7309b
and fixes the code instead.
Change-Id: Ibacd73122dfec63268a77794bc77c4b88876d3ee
As it happens, #redirectsub is correctly spelled all lowercase,
unlike #contentSub. This line does nothing. We remove #redirectsub
correctly elsewhere; I don't think this was ever meant to be here.
Follows-up 96421b283c.
Change-Id: I3e4c6eb2ff94f363b488477b3ddd248e571e723a
Stops us including "[edit]" in the summary when people have marked whole
headings for translation.
Bug: T160911
Change-Id: I906398e6bf45433d904795847f59b5bf0148092f
Running setNotices( [] ) makes MWNoticesTool run this.destroy() to avoid taking
up extra space in the toolbar when not needed.
Also, make setNotices() bail earlier.
Change-Id: I492fd59a1e15e8f296bf7f03d9b0035c40dafa59
This avoids an OOui deprecation warning for trying to toggle a popup which
isn't connected to anything.
Bug: T160161
Change-Id: I9ad97785f0de4ecf81d189985459689644e25923
Distinguish between the initial summary state, and a value stored from the
summary when switching modes. This lets us avoid overwriting a stored value
when section-editing, or assuming a stored value after a switch was never
edited.
Bug: T159686
Change-Id: Ie7640538140a14bbafd539b3a45928f5c55cf804
Switching modes recreates the toolbar, so if someone has already edited the
save summary it shouldn't update the initialEditSummary to that.
Bug: T159686
Change-Id: I4109442853916bebae2bce804fcd6777e3eb6d34
The non-FullRestbaseURL branch didn't handle converting the provided wikitext,
causing data loss when switching from source to visual modes.
Bug: T158692
Change-Id: I283afc4be1e322228d6ec572bfa8542ba8fd9ce7
Switching from visual to source reruns setupUnloadHandlers, which caused an
infinite loop where it thought it was its own fallback pre-existing handler.
Bug: T153346
Change-Id: I8df55a5395ede02fc34ec47a94f2c780dc08595f
Since December, the handler now expects to be passed the mode we're switching
to. Since we're filtering for just the edit link and not edit source, we can
hardcode 'visual' here.
Bug: T159374
Change-Id: I160045dd59ff1b4c2d180dbbe37280a1839886df
* Ensure DAT styles are fully scoped to DAT instances
* Ensure that generic desktop target rules are in the correct file
* Remove old unused rules
Change-Id: I466a0547ff9a0fa1102aac0b1e501a6ba6863ca3
Pencil is the icon we use for 'edit' elsewhere in the UI.
Use the eye icon for the VE tool to specify 'visual'.
Bug: T116417
Change-Id: I12b6bab2a52758685abde04579b274a32d651174
This will make it easier for third parties to load the required
modules for an article-like target.
Also cleanup mobileArticleTarget to better match desktopArticleTarget.
Change-Id: Idb75e2bd99d8cf2c298e101cf92e8af4f85f5ad5
Refactor saveFail's badtoken handling out so it can be reused by
getWikitextFragment.
Bug: T156991
Change-Id: I686cddb5be4484211fa69640044db1bc34eacefc
These are now computed upstream based on position of toolbar.
The menu tool now needs its indicator explicitly hidden.
Change-Id: Id2280f70553e1e45f3a42af45684c5808797925c
This is just dead code. We never call `.showMessage( 'captcha', ... )`
(the CAPTCHA is shown in the 'api-save-error' message).
Change-Id: I48f51e89d5b366384d184e2ed505be9e7b8f3401
As for the Translate extension this will read a global set by the
TwoColConflict extension to disable the VisualEditor and its hooks
on the modified edit conflict page there.
Bug: T156251
Change-Id: I164d1546c9d98d8715650e13c63a01d06c76315d
Refactor save dialog setup so logic for canPreview/canReview
is external and passed in.
'Show preview' will show in the VE command help dialog until
I56c1036e6 is merged in core.
Bug: T149914
Change-Id: Id718ad622be43c03df61d12b8688d53462c59f36
When switching from the old wikitext editor to VE, we stored "editing..." as
the original page title. Then restored that when saving / switching to "read".
Instead, detect if we're on top of the classic editor, and use the pagename
message to make a plausibly-correct title.
Bug: T126077
Change-Id: Ib0289de71c3ae947ca0a3e45fe1e620378689c35
This wasn't such a big deal in VE because we load the full
page anyway, but in NWE it is more annoying if you reload the
page and are dumped in a different edit area.
Change-Id: If49569cbe1a2759d8cbbd7ee42dd1b88da39a946
Provide a common function to parsing, and always pass
section to the target, instead of having the target
re-compute it itself.
Change-Id: If9fc24ffa51507cd969fa1b4dfc1519a0b50a572
This has to go to the API, because it's skinnable. Also, separates out a few
of the initial page setup functions so they can be re-applied to the new
content inserted.
Bug: T151651
Change-Id: I8d5a6504edc2e0486a0b4f016d8ee6d9a6228de9
Create a new MWSaveDialogAction, which can be hooked up to triggers. Switch
the existing save dialog accesskey to just use the trigger system.
(Maintaining all the accesskey logic, so we don't change the shortcut on
people.)
Bug: T149914
Change-Id: I9b4ef8504148703556f802b266a517dd5098c06b
New changes:
f58ddea DiffElement: Use document slices with full internal lists
83800c0 DebugBar: Remove hard-coded i18n
b4f89e1 Update OOjs UI to v0.18.1
40c7bf6 Factor out active node functionality from SectionNode for captions
2d967be Move 'mode' property to surface, rename target property to 'defaultMode'
5d8c214 wrapAllNodes in sourcefragment
dd3d9e5 Refactor ve.dm.Transaction
9d61aca Use canonical ve.dm.TransactionBuilder.static.newFrom* methods
df4f72a Make table caption node an active node
b79f72d Core source mode
7533ac4 Localisation updates from https://translatewiki.net.
ae30d71 SourceSurfaceFragment: Check range is not collapsed
Local changes:
Get edit mode from surface where possible
Depends-On: Iec758c1892d518ad4bc2c0d1aaf6ca00fa354323
Change-Id: Ifaf6a26078b2731b374aaad2cb40c08928de9c84
New changes:
f1297b8 [BREAKING CHANGE] Allow target widgets to be re-used
Local changes:
Re-use target widgets
Change-Id: I5decb918f398704d4b6c108a16fbc1cc073ef077
This is set to 'true' in mw.Target#setupSurface(), but not initialised or
used there in that class.
It was previous initialised in an indirect subclass (DesktopArticleTarget).
Move this to the parent class instead for clarity.
Change-Id: Ie3e12d254aa4b689fdce64620e110164311bc60a
Reject the activating deferred making handleLoadFailure
redundant.
Fix logic for switching back to OWE aware of NWE.
Change-Id: I328fc944bb6b9152752742fe35c56b95e3255b88
Otherwise if the target was already loaded the mode will
not be changed, which can cause the wrong editor to load
in multi edit tab mode.
Change-Id: I64071dfdfc8511cce51bda20b9c62d7fc126c528
We should avoid using alert()s as much as possible due to their unhealthy
interaction patterns with any other open tabs or user tasks.
Change-Id: Ib6a217c988322ad17bc7e649c3281eb053b54bbc
Gives us extra functionality like checking for
isUnmodifiedLeftClick which makes CTRL+click on SET
not change the current page, as expected.
Change-Id: Icb37d7383374ee63798443659a2bcb2f1545c8c5
* ext.visualEditor.mwwikitext does not have mobile target
* We call mw.libs.ve.setEditorPreference from ArticleTarget
Change-Id: Ifae6e951155c83b13f3111732b0dc500349b1df2
Just use the normal section parameter, haven't been able to figure out why VE
would need to be special about that.
Bug: T149958
Change-Id: I9338d0f1498fbb579fa8c340d6e7274c6d48155b
This prevents the discard warning from being shown if the user
switches back to NWE then back to VE, as by this point they
have left section editing.
Change-Id: I734684c54a8900aab3332ed8421cb42f7f845738
New changes:
e4c8003 Bring in target 'mode' property from MW
Local changes:
Use upstream Target#setMode functionality
Depends-On: I9d501cb77c714fbd299b5816d302b0bdde7833cd
Change-Id: I2fcda6ca7d82d880101d9ba2a027d4ef066aa238
Transform rules mess up the z-index context, so this
puts the toolbar dropdowns back in front of the content.
Change-Id: I7ba2cf295c83c55e5b1eead3a04760ea53390d37
NWE can return data in 'visualeditoredit' instead of
'visualeditor'. We may want to change this later.
Also restore removed hack code that popuplates missing
VE API data when requesting wikitext.
Change-Id: I9a782a85444d37a3e21c071db7e175ee9b0b1c4f
These require POST, especially paction=serializeforcachekey because
it calls ApiStashEdit::parseAndStash() which needs a master DB connection.
Move them to the edit module so we can require POST for that one and keep
allowing GET for the main module. This fixes the warnings we currently get
for using parseAndStash() in a module that does not require POST.
Change-Id: I64a8ed7305105fa4c46902b99984306a7ff468cc
New changes:
abf8f41 Replace Array#concat with Array#push in converter
02aeb90 Localisation updates from https://translatewiki.net.
902ddda Use safer batchPush in converter
6368191 Use current surface's sequence registry in command help dialog
f7ce4b9 Optimize batchPush on small lists
fb43a0a ve.batchPush: add unit test to exercise long-array path
d6c7d24 Factor out RESTBase ID regular expression
ffcbf4b IndentationCommand: Use hasMatchingAncestor
d447023 Allow ommission of range from ve.dm.Document cloneFromRange
cfbc344 Don't strip empty paragraphs on paste if they are generated
01c918b Localisation updates from https://translatewiki.net.
1467947 Fix documentation of getMetadataIdRegExp
Local changes:
* Define RESTBase ID pattern in platform and fix slightly
* Bring in paste test from core, which requires platform switching.
Bug: T147607
Depends-On: Ifc1c15872a50f915e5ef8d561b3a363dc5f4d28f
Change-Id: I3eb21e115de92a67afa85b5675fcbca5b111adb6
Use history.replaceState if available to get rid of the venotify query
parameter to avoid polluting URLs.
Ideally this would just use a cookie like the core post-edit
notification.
Change-Id: I6ce142012053e2fc18dd44fd0f7b82914acea076
Some older browsers may fail with >1024 arguments. This
does not have a noticeable effect on performance.
Change-Id: I8c85f43425997735bbbe08d27374b79502e02ecf
Get rid of the 504 Gateway Timeout handling while we're here, in preparation
for bug T135748 where that kind of thing will be made normal.
Change-Id: Ia4abb1a68ff7ab7ff365c7348bf4d2ad35c43a27
Converting a document we know contains just plain text paragraphs
is slower than it needs to be. The speeds up the conversion of
[[Barack Obama]] from ~2000ms to <100ms.
Change-Id: I2081858d835286b48db0627696a9eb5294317c2e
Aligning instances of `progressive` color to WCAG 2.0 level AA compliant
color palette similar to changes in
I6fdb90af8b9dc5e5e026eb0c1bd13138c73da4cd
Change-Id: I2eda190f0a68de6dc8aa33724f2c8975327a061f
transformPage() makes significant changes to the DOM, so measuring the
scroll position synchronously right after that results in a slow forced reflow.
Instead, measure the scroll position before reorganizing half the DOM.
Change-Id: I3baee5c11ca228696ddbfb30789745f5f0faa20a
These aren't in the Parsoid HTML spec., so there's no valid way that they would
be in the original document from upstream, and we don't—at least intentionally—
allow users to insert them, so we can safely assume that they're resulting from
browser extensions and other items inserting content into anything that sort-of
looks like an HTML page.
Bug: T144891
Change-Id: I330ae05cd53eee5c18b18ad744ea0ec7b2eb09cc
Instead of getting wikitext from the HTML, which is probably
slower and leads to issues with the whitespace stripping hack,
override getDocToSave and get text from the linmod directly.
Bug: T144621
Change-Id: I6b6cf16ee8f3720398ba8f5c85e7715c2e68329f
So we ensure we send the actual revision ID, not potentially undefined, to the
method. If we send undefined, it'll give us an etag for revision number 0...
And that will cause issues when we later attempt (in a future editor switch) to
pass an etag for revision 0 along with the correct revision.
Bug: T143920
Change-Id: I0c27956abdd26ae4f5f1b91010a5eab8ee0354ab
Perhaps in the future we could enhance this so that clicking a different edit
link queues that up for after the current activation finishes / aborts the
current activation cleanly.
Also, error-checking on setting an invalid progress state when loading.
Bug: T143160
Change-Id: I6c78cb19953df6fb564c06bac807e6897b63df19
To align with the linked patch in MediaWiki core. Taking advantage of
the opportunity to use core's messages for these, and remove some dead
wood old messages that were never used like "restore" items in mobile.
Bug: T139033
Depends-On: Ie81b5edd275963a965cd44d0fd325cae9ee2f1a6
Change-Id: Ie00e94cc77cb750a7e8d1104366bb3dad65af8a4
Pretty much fix everything on the insert menu... RB doesn't like it when you
try to specify both title and revision ID, but don't provide an ETag.
Change-Id: Ib25d023309d984ed8848f67b349b23231f27a957
Was previously written to work on initialise when the surface
isn't focused. If the surface is focused, run immediately.
Change-Id: Ie7accd63a4ca3e18448914d34609fe0418f15b4e
New changes:
e7cb202 Mark context wrappers as wrappers
20b75af Localisation updates from https://translatewiki.net.
a4dde9f Annotate pasted external text
8148301 Always preserve leading whitespace when converting for clipboard
82a35b7 TransactionProcessor: Apply annotations to ranges at the highest uniform offset
21fc1eb Restore previous selection when annotation inspector is dismissed
358181c Preserve prior valid DOM selections in showModelSelection
a0f7dba build: Bump various devDependencies to latest
0ae0f7e Follow-up Iabec6a6: Fix typo in mousemove selection update code
d69a4df Provide tools to make text bigger or smaller
Local changes for big/small tools
Change-Id: If418a1a47276cc1e1530c4a3ad6784136d8d14f8
Follows-up 843620632a in ConfirmEdit which now expects a specific class
on one of the image parent elements.
Without this the refresh link is broken as fancyCapatcha.js is
unable to find the image otherwise.
Change-Id: Iad7c8e8c77f58092ca4dbb5cbb3527cacff10f03
If you viewed a page with an ?oldid= query parameter set to the ID
of the current revision, some parts of VE would believe we were
in oldid mode (because there's an oldid present), but others
wouldn't (because the revid we're editing equals the newest revid).
This caused bugs when opening the editor a second time after saving
(which is normally impossible to do after an oldid-mode edit, because
we navigate to a new page after an oldid save, but we don't do that
in this case).
Ensure that:
* The internal state of DesktopArticleTarget is updated correctly
after saving in this case
* The ?oldid= parameter is removed from the URL after saving
* DesktopArticleTarget.init doesn't preload the article HTML
on a second/subsequent editor load: this causes issues because
it caches the oldid, and generally speaking the Target's internal
state is not considered
Bug: T141330
Change-Id: I74034328797c59f7249f1f6f4f53a92ee1c26334
Ideally we would get an exception when trying to load
a non-existent module, but there is no difference between
a genuinely missing modules, and one which just doesn't exist
on this target (e.g. a desktop-only module on mobile or vice-versa).
This stops mobile VE from crashing every time a desktop-only
module is added to VE plugins.
Change-Id: Ia9ac0dd21b26c54ad779c6f499e68786c34ec873
Fixing `z-index` issue of floating toolbar dialog not overlapping when
Special Character dialog is active.
Bug: T140237
Change-Id: I24e9ed5b1f65c6ea4cffbd408953623540542bca
When our remember-last preference changes work, alongside changing the
label of the edit tab, also change the label of the edit section links.
I seriously have no idea WTF I was thinking back in December when I
put some of this code into #activatePageTarget.
Bug: T137424
Change-Id: I581c0acf0a3ad11ad3bcf4e2e46242907ca9166f
If you deactivate without saving (e.g. using the back button), the page
contents aren't replaced and so adding the page click handlers is pointless
and harmful because they will run twice.
This was my fault in Iad1713e1
Bug: T135387
Change-Id: I3c83009bfc0f42125cdcde7f7a51de9bc2f72abf
So if the user supplies a summary in VE, WTE with the "Prompt me when entering
a blank edit summary" preference won't moan.
Bug: T135979
Change-Id: I0e2d2b6f8fb03bb56d600f1118daf82fb3715b66
In case we were switching to source.
Normally MWWikitextSwitchConfirmDialog#getActionProcess would do this for us,
but this closeWindow call doesn't trigger that, we can't get it by overriding
MWWikitextSwitchConfirmDialog#close either.
Bug: T134333
Change-Id: I66a12ff6d13601250b9d470e1be54fe38a1ef06c
Instead of going straight to ArticleTarget's one.
This causes ve.init.mw.DesktopArticleTarget.prototype.serializeFail
to be called when using that target.
Bug: T134333
Change-Id: I6ec259830178439bc80ea162ba4ad035226022a7
* Ensure ve-loading isn't removed early
* Quickly detach then reattach the loading bar during
activation so it doesn't get moved and marked as original content
Change-Id: I263c9627348953a11966f8bcc435d0d89b0b6084
T52720 (link corruption in FF13/14) appears to be fixed.
T52780 (editor not loading in FF11/12) appears to be fixed.
FF11 has a new issue where templates are normalised even
when not touched (T136607)
Change-Id: I34358e3d90b8186e6b89c04c038ab79c908fc81b
New changes:
4a5aa37 Clean up debug bar buttons
15f016c Undo sequence input stripping if window is dismissed
e874734 Localisation updates from https://translatewiki.net.
8db33b4 Follow-up e874734: Fix build for added languages 'gom-latn' and 'gor'
79c5d51 build: Update stylelint config version and make it pass
3804f5e build: Remove grunt-cli
cea7b63 Update OOjs UI to v0.17.3
9f648f4 [BREAKING CHANGE] Always get registries/factories via surface
1252814 Add cloneWithData() utility
5ccdef3 [BREAKING CHANGE] Fix debug bar encapsulation
Local changes:
* Fix debug bar encapsulation
Change-Id: I2c5d722278c5f71b59ee2f8849d9babb5aff6af2
Define $editableContent on target construction, and mark
all non-ancestor nodes between that at the target container
as uneditable (50% opacity, no pointer events).
Bug: T58289
Change-Id: I7fe51104bd5aa1bd53ffc604e5f02752c7553578
New changes:
c54a48a build: Fix watch list (csslint -> stylelint)
58ba3d9 Add stylelint rules for @-rules
3f8c75a Stylelint: Add rule for unsupported browser features
3b96ff3 Fix minimum Opera version (15 -> 12)
9a1110b Stylelint: No ID selectors
9800bb8 build: Remove remaining references to csslint
b6ab14a stylelint: Re-enable features by names
6cc1f3c Move stylelint to npm
1d15fa0 build: Bump stylelint version to v0.2.0
ccc1724 stylelint: Use the preset rather than extending
Change-Id: I22fa8098592338a5e912aba9ad21131b21d9c0ea
For now just use the rules file in lib/ve, but eventually
this will be a preset.
Change-Id: I7fd79d3e1dce37aef066d416cd969e5fff1e962f
Depends-On: I17e0d23ddfedf64985495ab35d113ea08c03b1df
Now that we always generate mw link types in the converter,
blacklist mwExternal links, not plain links (which won't exist).
Change-Id: I2ab9fbb9ec50c2e36e8a870d48b6aa06c7e69f8c
The SupportCheck method asserts that the method is available so use it
instead of the confusingly named jQuery version.
Change-Id: I2105384cc4f6f2ec1cdb24a7bf3b0f4cce7672d3
New changes:
c48d7cc Add support for placing a toolbar dialog in the side margin
ee7e14b FindAndReplaceDialog#renderFragments: Protect against null surface
fc61463 Fix dm.Surface#getHistory to not return undone items
f1dff2f Introduce ve.Range#overlapsRange method
f608958 Introduce dm.Surface#getModifiedRanges
db114ed Move debugging data-url GIFs to a debug only file
1dd8194 Update RangeFix to 0.2.0
706ff4e Add 'Support: [browser]' to browser hack comments
4f52afc Inline slugs: Limit Firefox hack to versions <38
bf73326 Add classList polyfill for IE9
59d78aa Fix access of iframe-created document in IE9
a886ae1 Hide borders on linked images in IE9
5293974 Fix double-click to edit table cells in IE9
a49a02f Add some more Support: comments
Depends-On: I9c5cea3e8df1fae001d4d98c0782a04dec803776
Change-Id: I460368f509a213464e57bb95f2d726305ef608de
You can still open VE with prefer-wt mode by going to veaction=edit, and
T116406 proposes making it accessible with a keyboard shortcut as well.
Change-Id: Ifc25b5147a96a200ac3a7de465d5cdf67e2e255b
transitionend events seem like a neater solution, but we should
migrate all of our code at once, and provide a polyfill for
browsers which don't support it (IE9).
Change-Id: If6ae030856f8e69cc8bb26f21bfed30d5d22775c
On the client: getLastEditor in ve.init.mw.DesktopArticleTarget.init.js
On the server: VisualEditorHooks::getUserEditor in VisualEditorHooks.php
Change-Id: I9cc0f367aee2dda43cffc6918bfb042ac8ae3bb2
Place things like the page title and redirect link inside a new
container $originalContent, which is appended to the surface
when ready. Replace margins with padding in various places.
This will allow us to surface-height-matching sidebar for dialogs.
Change-Id: I60d80fb303bdaf93e9d121f62d534ee3a3056e59
veswitched and wteswitched together cannot result in any sane behaviour.
To reproduce:
* Open VE (while having multi-tab pref?), switch into WTE
* Make a change
* Switch into VE
Change-Id: I90e19169e3fab60ab876c8e4d349801309db262f
How did this ever work?
Ensure action is passed through and not just undefined, wait for change to go
through before refreshing.
Bug: T131818
Change-Id: I83b5695906044299d338e62e6c980c596d291765
wgTitle is basically just $title->getText()
wgPageName is $title->getPrefixedDBkey()
So we need to take wgPageName and run getPrefixedText (difference is underscores
get replaced by spaces)
Change-Id: Ib99f0d20f1ba99338f80bbbf39cffd544887c3fa
New changes:
6cf8864 Follow-up eb97c1f: Fix build for added language 'inh'
d1ce123 SpecialCharacterDialog: Use getReadyProcess promise to wait for char list
Local changes:
* SpecialCharacterDialog: Defer loading of character list.
Saves ~40k for most users who never use it.
Change-Id: I74b30fee96e1ae4463ed28c19bef4b515330220e
Depends-On: I45dc9f788aa5bd702b91ffd9f63b05b1f4760691
* Don't just fail to load, action=visualeditor itself should not write to the DB
(we have action=visualeditoredit for that)
* Send notice to the client in the usual way
* Handle read only errors on save, log as unknown
This won't let you review changes because that uses visualeditoredit
Bug: T129501
Change-Id: Id78c06b031423e47a7ddf94ec615b6d6975309d3
Regression from 863a2c2974.
Sometimes when clicking "Switch to source mode" in the toolbar this
error is thrown and the interface freezes because setEditorPreference()
only returns a promise if the value is different.
> Uncaught TypeError: Cannot read property 'done' of undefined
> - ve.init.mw.DesktopArticleTarget.switchToWikitextEditor
Change-Id: Ie59f06a8ed9af9c4fb8199b013c06992d0c4f700
action=query&prop=info was being used because it can be combined
with action=query&meta=userinfo, while action=tokens cannot.
However, since MediaWiki 1.24 the 'intoken' parameter of
action=query&prop=info is deprecated, while the preferred way of
retrieving tokens is action=query&meta=tokens which not only can
be combined with action=query&meta=userinfo but also spares the
need of dealing with page ids.
Change-Id: I5ded3c303ede20514eeb2840715fe240b3b2c7e1
This can happen when the user gets logged out on a private wiki.
We get a badtoken error, so we try to refetch the token, which
itself returns an error. Token refetches didn't have error handling
at all and got the save dialog stuck in the pending state.
We can't offer the user to proceed with a different identity here,
because we encountered an error while trying to figure out what their
current identity is. The best we can do is encourage them to
log back in in a different tab.
Bug: T128934
Change-Id: I17d4452f688ec22631dbd12af223731635004d66
Trim the cached image data from the media dialog down so that it only caches
the same information that would have been fetched for a non-uploaded image.
Consistency!
Bug: T126081
Change-Id: I0f057c111b66f29c6360e27f97256384f5320b75
New changes:
0371bbe [BREAKING CHANGE] Refine VisualEditorSupportCheck call and document pattern
Local changes: Use new VisualEditorSupportCheck pattern
Change-Id: I7dc0c360b54a93397180b18d88d72532e439da5c
If the surface is display:none then $.width always
returns 0, which breaks features like FocusableNode's
invisible icon.
Bug: T127319
Change-Id: Ib157ffaeb56fca2bdc26868d830c4bf8feafa2a8
Warn the user about an empty edit summary when the "edit section"
link is used to trigger VE.
Re-does Ic7b456ca a different way.
Bug: T114857
Change-Id: I319c9c5bed47140a81eb409d490c9f82b89a49fe
New changes:
c02ea46 Clarify documentation of directionality methods
43c9b6f Move initialisation browser support checking from downstream
c89be66 Localisation updates from https://translatewiki.net.
5fb7907 Follow-up c89be66: Fix build for added language 'nan'
fc74fab dm.ElementLinearData.compareElements: Add a few missed test cases
Local changes:
Use initialisation browser support checking from upstream
Depends-On: I27a8e7b4376647f01cee648de987dc3ca6a060d5
Change-Id: I3fc79422ee5e487cf5fae3929fe492f21cd2840a
hideLoading always gets called after activating, not just failing
Follows-up: I13058ae1
Bug: T127184
Change-Id: I47d1892feacbfcf832aa32f689f173601b76c4ba
* Try to hide loading bar on failure
* Don't set wgAction back to 'view' if we're dropping the user back to the
wikitext editor
Bug: T125580
Change-Id: I13058ae131a1dda3b172e78d9b143d70831c47f1
* grunt-contrib-jshint: 0.11.3 -> 0.12.0
This version of the linter cleans up a number of options. 'es5' is now assumed to be
true by default, and replaced as 'esversion'; 'latedef' is extended to also cover
functions' defintions, disabled for us for now; 'futurehostile' is introduced to aid
future-incompatible names for ES6+ support.
I adjusted ve.init.mw.DesktopArticleTarget.init.js based on this, as this file is
meant to be loaded by all JS-capable clients to determine if it is (amongst other
things) capable of ES5, so now we assert ES3 compatibility via jshint.
* grunt-jscs: 2.5.0 -> 2.7.0
Minor version bump that doesn't affect us.
* grunt-jsonlint: 1.0.6 -> 1.0.7
Trivial version bump that doesn't affect us.
Change-Id: Ieb7b6748b0cecf275cfc284fc66617189372461f
The cited reasons were that the the logo and search bar
have a z-index of 3, but that doesn't matter as they are
nested in other elements with z-indexes.
Change-Id: I7ff279efe7c01ba1ffb1fa0d460d59a493ccc47a
New changes:
242ab45 DesktopContext: Float the context when it goes beyond the viewport
405c44d Rename TableContext to TableLineContext
6c564be Sort messages alphabetically
70ff8cc Introduce table and table cell context
Change-Id: I4357162bc192c90f99ca0aec12eb67bf848e5504
This prevents tables from getting sanitized even on
VE to VE copy. Also by calling ClassAttributeNode sanitize
extra CSS classes are removed.
Bug: T97462
Bug: T125220
Depends-On: Ia3ce386b2a03bc227818b10423bca72c736c0656
Change-Id: Ifd91e00b40665b446bbdcdf8859d2bb641bc0e67
* Ensure activating classes are removed by rejecting activatedDeferred
as soon as teardown starts.
* Try to teardown surfaces is surfaces exist, not just if the target is active.
* Remove noop teardownDebugBar. The debugbar lives inside the surface now.
* Ensure progress bar is always reset, even if target setup is aborted.
Bug: T99139
Change-Id: I16a071c0d4bc8bbc6af2e03e63ee0ffc18d55c75
Usually. Unless you load VE, because then you might be loading on
`action=edit` in remember-last mode and therefore the tab text needs to
be updated from "Edit source" to "Edit". Or "Create source" to "Create".
Or the equivalent with 'local description' in the case of pages from
foreign file repos, etc.
Bug: T120970
Change-Id: I8f07be6c8e415b40ad134ee82d0bda1d63cc4f96
Seems we need to make sure this returns before navigating to the target page.
This reverts commit 40807a0743.
Bug: T121122
Change-Id: I4edf03bc0d57b03897d9f1802eabd8f0dd9962b9
To use
.then( function ( opened ) { return opened; } )
.then( function ( closing ) { return closing; } )
.then( function ( data ) {
etc. instead of nesting them in .done functions
Change-Id: Ic8cee9639b90cb378ce0b7e58dc04eab0ff4cbc7
Move over logic which isn't specific to the article
implementation of VE (e.g. nothing related to loading/saving).
Refactors setupSurface to use an abstract tracking method (which
does nothing by default), and moves surface CSS classes to #createSurface.
Breaking change:
* Rename onSurfaceReady to surfaceReady. We shouldn't need to listen
to our own events.
* Rename onReady to documentReady. onReady is not a listener.
Bug: T97166
Change-Id: I7242b1bb5501b7755a18a13d13e166c30cac9cdd
We can't handle these yet. There's also 'preview' but I think we probably
qualify as supporting that.
Bug: T121126
Change-Id: I4602992a77f460b9bfcbad0eac1bdd79d67df04d
This makes way for a base mw.Target class which is
not specific to articles (e.g. Flow boards).
Bug: T97166
Change-Id: If72650bdf87aa9f195b004da0a4d815f1a8063a3
Currently we assume that any document state from WE is modified
but that is not necessarily the case.
Change-Id: I085825152528ae5a5e973e8b44f68cb07ee92416
In addition to the couple of TODOs inline, we should do the following in
follow-up commits:
* Prevent FOUC due to changing things only on the client
* Make section link behaviour sensible
Bug: T58337
Change-Id: I65d966270491ffe017cb11a0daa915628fadf65c
VisualEditor is usually not enabled in talk namespaces... but
sometimes it is. And when users see the button to edit with VE,
they're going to click it and expect to be able to sign their posts.
This tool is only loaded on talk pages and pages in additional
namespaces defined in $wgExtraSignatureNamespaces.
Code adapted with small tweaks from my own gadget
<https://meta.wikimedia.org/wiki/User:Matma_Rex/visualeditor-signature.js?oldid=13461327>,
which is already available under the MIT license.
Changes include:
* The tool is now always visible if the wiki allows signatures in any
VE namespaces, but disabled when not allowed in the current namespace.
* Register '~~~~' sequence to insert the signature.
* Code style tweaks for stricter lint checks in this repository.
* Documentation corrections.
Swedish translation provided by André Costa (already credited
as a translator as Lokal_Profil).
Depends on changes in VisualEditor core:
* I89fe53890ab59d12260ea6b41de802c38c24e8b9
* I14cd7efac521687ea38580341ae08ddc522edeeb
Bug: T53154
Change-Id: I6be5fb2118cf3eef5098d4c5320228aa81411ccb
Ensures that these styles are loaded *after* OOUI by making
them dependent on it, unlike DesktopArticleTarget.init
which isn't.
Change-Id: Ia1fff16432d20fb56707c5e21c6a930d2478e311
No point showing the icon if we don't have the functionality to
make it do anything. Also this reduces the number of RL requests
made as we never fetch OOUI separately.
Change-Id: Iac9aa6f34c485223e73981b3377c7d0cfd31dae9
Work around RESTBase problem that causes errors if we try to switch to
VE when the wikitext is empty. This would prevent non-power-users from
opening VE entirely.
This only solves the issue for new empty pages, and not when the user
intentionally empties the edit box. In that case, though, they get a
dialog where they can choose to "keep" or "discard" changes, and
discarding lets you open the editor.
Bug: T118152
Change-Id: Ie808bcaa9826deacac392dd6cbc90a9446602b79
This wasn't as bad as T112401 (that was blocking render), but we
still shouldn't be loading the module on page views.
Bug: T118088
Change-Id: If86701ed7ff4e8d6defb1c682aa9a38c211be0fa
The error code has changed after T115258 and is now consistently
'titleblacklist-forbidden' for all TitleBlacklist errors.
The API now also provides information about the exact error message to
display (error.message) and the TitleBlacklist rule that matched
(error.line), but we probably don't have that message client-side, so
we're not trying to display it. Maybe when we can load it (T40280).
Bug: T116198
Change-Id: I32fccc7d0b2b66c739d59db05c568a56d9f07eec
VE already has a a switch icon in the options menu, so bring that
up to the main toolbar.
Append an OOUI button to the WikiEditor toolbar if present, and bind
to the same functon as the edit tab.
Bug: T49779
Change-Id: Ic1e83ea7b13c4fef68024bf05ffc244060666103
siteSub and contentSub are both children of bodyContent so
no need to give them opacity directly.
Bonus: Make them user-select:none to avoid confusion as they
are in the edit area.
Bug: T116755
Change-Id: Iea4c35abc1eedb892e02c54b61e40726fa2b096e
Follows-up 28f3a02e56.
* Use mw.loader#getState() instead of private 'moduleRegistry'.
This property is not a supported API and may change at any time.
* Use plain push() instead of splice(). The order of modules
is insignificant as dependencies are enforced by module registry
only. Besides, the order is additionally normalised both
client-side and server-side by ResourceLoader.
Change-Id: Id9291c97c3bfc01c4cf203aa7b15629fb8412f5b
Mobile target, for example, has events logged in the MobileFrontend extension instead
(which covers both the wikitext editor there and the VE integration)
Bug: T110272
Bug: T109525
Change-Id: I521f1825dc9c0a135db54cd005cda723908f14bc
We want to flip the default of visualeditor-enable to true, but don't
necessarily want to turn it on for users who already have contributions but who
haven't already enabled it. Therefore we're considering adding such users to
this autodisable preference which they can self-remove (by explicitly enabling
VE) or we can target later, separate from betatempdisable users.
Bug: T112352
Change-Id: I1ce5e6c92055e30fdc82bc912a767e913b190ef6
Disambiguator extension adds the .mw-disambig CSS class to internal
disambiguation links since 8cc16d021410f49fa12a2f35c97cdac51adf4380.
Change-Id: If32bcb8867a874ee4127593f58619d059fe691b0
It's just as usable as the alien extension inspector which
is currently shown, and has better messages.
Change-Id: Ifbce9df4aff77cf76a8445158987be716ba45302
If VE is enabled for consistency edit section links become edit source in all NS.
This patch fixes it to be done on the backend for namespaces where VE is not enabled
(instead of user side) to avoid noticeable flickers on page load.
Bug: T112366
Change-Id: Iba090bfc1b2ff4886fb0cf2b37db7870b6be792d
Drop beta-ness as users don't care and it confuses them. Leaving the preference
alone for now.
Bug: T99963
Bug: T112354
Change-Id: I0e039dec54d528fce24226e76b931b593dd13a9e
The loading progress would not be reset upon failure, causing issues
when you tried to start loading again.
Bug: T96437
Change-Id: I7ec4be82304c101fa1bd634f60bc6b0047e2d53d
Right now .initialize() doesn't do anything other than enable
the window resize handler for toggling the "narrow" styling,
but as a matter of principle we should call .initialize()
on toolbars after attaching them.
Change-Id: I419c943d1d20af2105b84b8f5fbccc7070af601b
* Remove page.length
* Add action.abort.type = switchnochange
Needs to be deployed at the same time as Ib99700ac
Bug: T111420
Change-Id: I7ee245157d4de6c220d7cdf54cd1dd69ff836f15
Collapsible relates to the Vector menu behaviour where an item
is moved into the dropdown menu if the window is narrow.
This should only apply to the secondary tab when there are two tabs.
If there is only one tab (non-VE, e.g. in a non-VE namespace) then
this tab should not be collapsible.
Server-side code handled this correctly, but client-side was
adding the class unconditionally.
Change-Id: Iecd195e92f43fe9f11b3938a1a24caed7b331e5f
Anything with type=checkbox is coverted, and its label is found,
either by for=id or by finding a wrapping label.
All other inputs are stored in $otherFields for form building.
Bug: T86617
Bug: T70572
Change-Id: I94376fef18d02d2058bb548c11ae17f3dec7268c
* Rename the actions toolbar the 'pageToolbar', and place the save button in
its actions section.
* Inject the title amongst the pageToolbar tools, so we can have tools either
side of it.
* Don't use the hamburger icon, as this has a (different) expected behaviour
in MF. Replace it with a back button, and move the edit switch action over
to the right in an 'advanced' group.
The toolbar is back to being laid out like the source editing toolbar in MF.
Change-Id: I4e00a8cdf603968ee32872323c88e587c1e1a487
New changes:
61d20a1 Hide on-screen keyboard when selecting nodes on all mobile platforms
e5aff79 Localisation updates from https://translatewiki.net.
a99a897 Update OOjs UI to v0.12.3
3c01a14 Make DM nodes sensibly hashable
a611eb9 Make ve.dm.example.postprocessAnnotations fluent
496c895 Update ve.dm.ElementLinearData#hasContent documentation
fcaa035 Support RegExp sequences; trigger sequence matcher after newline
edda1d4 Add a mechanism to wait until ve.init.platform has been created
e174155 Autolink URLs when typing
ac9248f Allow drag and drop of links (and subsequent autolinking)
c88fad6 Localisation updates from https://translatewiki.net.
Local changes:
* Define `ve.init.platform.getUnanchoredExternalLinkUrlProtocolsRegexp`.
* Make `ve.ui.MWLinkAction` extend `ve.ui.LinkAction`.
* Override `ve.ui.LinkAction.getLinkAnnotation` so auto-links use the proper
`ve.ui.MWExternalLinkAnnotation` type.
Change-Id: I934f76158512e2e89b614ed92fef6481f70728e7
We were setting the edit summary box to the contents of the 'summary' parameter
every time the save dialog opened, but actually we only want to pay attention
to that the first time the save dialog opens.
Bug: T108329
Change-Id: Ic7b456ca8d7dd7cef8bc27629e3655ce9b97e755
Loading [[en:Sweden]] in VisualEditor requires making 24 API requests for
pageimages / pageprops info, all of which contain the following unnecessary
bloat:
{"warnings":{"main":{"*":"Unrecognized parameter: 'gpslimit'"},
"query":{"*":"Formatting of continuation data has changed. To
receive raw query-continue data, use the 'rawcontinue' parameter.
To silence this warning, pass an empty string for 'continue' in the
initial query."}}
That's 276 bytes * 24 requests = 6,624 bytes we could shave without losing
anything at all.
Change-Id: I0e88ebdc47c4d304b71c3c34fde24f82f5abadfc
Popup tool requires special attention to make it work
and keep the tool list left aligned.
Bug: T92027
Change-Id: I77a0dcbba382dce1669a30d48471b0c501c3d851
New changes:
2464397 Move toolbar floating code up to the target
11bdc21 Separate SA target into Mobile and Desktop
7ab3389 AlignableContextItem: Fix styling in mobile
758619f CONTRIBUTING.md: Update file paths and build instructions
Local changes to mw.Target to handle toolbar floating.
Change-Id: I0751817e3a6668b120134bfcb6c611b121a46501
Also use named classes for hiding toolbars, and move the
MobileFrontend overlay z-index hack out to that repo.
Depends on Ia46e6b4d7a in MobileFrontend.
Change-Id: I0e1f527446fd10fde5dd3107e6467fd2c8f621b2
Split the toolbar into two modes depending on if the surface is focused:
* When unfocused, show a hamburger containing back and source switch
* When focused, show editing tools, and a check button to unfocus
For the editing toolbar, space the tools out using table-cell layout
and hide labels below 480px.
Depends on I06813e3ff in core (surface blur method).
Bug: T93325
Change-Id: Ibf09cb29019d7a71e1e144b326710b1f6506cd0c
* On save, VE will now fetch and append modules and jsconfigvars to the save
event, which respectively contains necessary JS config module data and the
list of required modules to be added on the page.
* The jsconfigvars are now properly added to mw.config on edit save.
* If any new modules are now required by the page after an edit, they will be
loaded by ResourceLoader through mw.loader.load.
Change-Id: Ib3990078a22ad9e46debf3ce174e7cf27b86d944
When you bind to your own events you're probably using the wrong
design pattern.
The events are kept (without arguments) for the purpose of tracking.
Change-Id: I6983319f9e0ca179e609afb00c821e3eab2161c9
Allows us to rename onSaveEvent back to onSave.
Before this change,
* ve.init.mw.Target.prototype.save ->
* ve.init.mw.Target.prototype.onSave, emit save event ->
* ve.init.mw.DesktopArticleTarget.prototype.onSaveEvent (or MF equivalent)
With this change,
* ve.init.mw.Target.prototype.save ->
* ve.init.mw.Target.prototype.saveSuccess, emit save event ->
* ve.init.mw.DesktopArticleTarget.prototype.onSave (or MF equivalent)
Change-Id: I016262b38a941c93c0978391491baa6d5a32fe28
* Make save a FragmentDialog and open with WindowActions so
the selection is restored automatically.
* Pass in some information in setup data.
Change-Id: I254b71f252adce064b9c2d2bf2cb6c8d0018e31f
MW target has 'static' methods, some of which aren't attached
to the static property, the rest of which should be instance methods.
Rename success/fail functions to remove 'on' as that is reserved for
actual event listeners.
Change-Id: I63e68dbe1923906208b180abfc4a9a280b4d098e
* Use local edit source tool, and emit event to MF
* Bring in toolbar styles, bonus: remove old desktop style hacks
Bug: T96186
Change-Id: I89351e409aa4e9d626edd7151ae05bdcd58f1cee
New changes:
11953f7 Localisation updates from https://translatewiki.net.
0dbafb0 Update OOjs UI to v0.12.2
cbd0982 Replace placeholder color with opacity
087365c Support other types of 'empty' document placeholders
7692890 Make scrollIntoView a VE utility function
5a1a159 Localisation updates from https://translatewiki.net.
8edf71e [BREAKING CHANGE] Kill ve.indexOf and thus @until
bb02b02 build: Bump various devDependencies to latest
cb5b2cd Fix scrollIntoView util binding
8feab4e [BREAKING CHANGE] Use config object for Target constructors
Local changes:
* Use config object for Target constructors
Bonus:
* Add CSS classes to MW targets
* Use 'super' calls
Change-Id: Ieb4e4eb3663aab2706c0f3ecc8b82e00555df1d5
* Bring in back button & save button from MobileFrontend
so they are properly styled OOUI widgets
* Accordingly, move toolbar save button code up into base
MW target.
Bug: T96186
Change-Id: Ic89dd4efb831fc3b09980da16524276f6568619d
.set() should not overwrite existing deferreds; instead,
it should resolve the existing deferred if it's pending.
This is necessary because .set() is used by processResult().
Without this, passing .get() a title that no information
is known for results in a promise that is never resolved,
because the associated deferred is overwritten as soon
as the API response arrives.
Still make .set() a no-op if data has already been set,
by checking if the deferred is pending. For .resolve() this
doesn't matter, but for modifying this.cacheValues it does.
Bug: T107212
Change-Id: I70e8c5450f23062db214ccc5c585624d41de6509
Usage:
In a skin, that needs this offset, e.g. because it has a fixed header, it should add
this config var somewhere before the hook BeforeOutputPage is called:
$wgVisualEditorSkinToolbarScrollOffset['vector'] = 60;
(if 60px is the offset to use)
Depends on: I2e10c12df8277c84d948e48c6a132c03d6324693
Bug: T95528
Change-Id: Iaa86c2f68afa6403fcc4f5b7c655704512beead4