ve.dm.MWTransclusionNode
* Implement getClonedElement to remove originalDomElements
and originalMw. We don't want to put these in the clipboard
as there is no guarantee they are the rendering of the current
set of parameters (a refresh may be in progress) and they may
confuse the converter on the way back in.
Remove about attribute to prevent about grouping of duplicated
nodes.
* Set an extra attribute to flag that the outputted DOM doesn't
have any generated content attached to it that can be stored
on load.
* Check for said attribute in toDataElement and skip the
storeGeneratedContents step. This will trigger an async update
of the generated contents on paste.
ve.ce.Surface
* Call cloneElements before writing to pasteTarget so data in external
clipboard is stripped of generated contents.
ve.dm.Node
* Only strip data-parsoid as other attributes may be meaningful.
ve.dm.mwExample, ve.dm.Node.test
* Update tests
Bug: 58241
Change-Id: I3e15cc97e94747647078204a0b398e6ac3ec6382
Move all text styles, and the remove styles button, into a new 'list' toolbar
group, using the text-styles icon. Less-used text styles (strikethrough, code
and underline) are demoted, with remove styles at the end, and bold and italic
promoted.
Now re-label the "More" catch-all to now be "Insert", which is what's left.
Change-Id: I66a1bba347ea64e540106b1090995b3117a8b1b2
We already do this for removeHtmlAttributes mode.
Add tests in ElementLinearData and ce.Surface. Get rid of unused
clipboardHtml param in ce.Surface tests as it is unused and replace
with clipboardKey flag which tests the VE->VE paste path.
Change-Id: I0cd82a37d6e765ecab489dc22f642ebbcfbb5387
Make available only as a static method so you don't accidentally
change a node without using a transaction.
Change-Id: If27442b502ec176a58e75ef4f9afa5119d06dcc5
ve.ui.Context#updateDimensions does two things: it updates the position
of the popup by measuring where the selection is, and it updates the
width and height of the popup by measuring the contents of the inspector
or the context menu.
In some cases, measuring where the selection is fails, and
ve.ce.Surface#getSelectionRect returns null. This seems to only happen
1) in phantomjs while running the test suite and 2) when an inspector
is opened and doesn't adjust the selection while opening. I suspect
it has something to do with the selection not having been recently
set or the documentNode not having focus, but I haven't investigated
this in depth yet.
Prior to 5d7673eb, the editor would simply crash of the position
measurement failed. 5d7673eb changed this to just bail completely if
the position couldn't be measured, but that's also wrong. Without a
position measurement, we can't update the position of the popup, but
we can still adjust its width and height, and we should.
The failure to adjust the popup's width and height in this case was
causing a bug where opening the link inspector with the selection
set exactly to what the inspector would expand it to would cause the
popup's width and height to never be adjusted, and most of the inspector
to be invisible.
Bug: 58301
Change-Id: Ia6504e0a7b0cd1affbff2632e9f573684f1d5dcb
Captions were not in the allowed lists of children for tables.
This causes an exception to be thrown if you try to do fixUpInsertion
on a transaction containing captions.
Bug: 58318
Change-Id: I866e015c14e787830c45da93dfed9d2119fb0865
It appears that if the pasteTarget is given focus too close to the
range being set it may not take effect in time. Moving up to before
any of the selection setting logic seems to fix the issue.
Bug: 58283
Change-Id: I9bfb0ab6952863496fb3548e6804cb347d52cc57
Move containsElementData to FlatLinearData next to isElementData. Move
tests for both methods to FlatLinearData.test.js.
Change-Id: I07a192f5925da7cc763efe5e41427f1f47d85850
In Chrome you can paste the empty string which triggers
the paste events but doesn't change the paste target. This
results in the insertion of the context character on empty
lines. To avoid this we can detect if the selection we put
around the context character is still there and abort the
paste.
Bug: 58138
Change-Id: Ib73465a2376cd316dbac6ce2567ecb64bc500307
And other focus behavior fixes.
ve.ce.Surface.prototype.focus:
* Restore focus to the pasteTarget if a focusedNode was selected.
This function is invoked when a dialog is closed, and we were
always focusing the documentNode, which means the selection was
restored incorrectly when the selection was really in the pasteTarget.
ve.ce.Surface.prototype.documentOnFocus:
* Don't rerender the model selection if the documentNode was focused but
a focusedNode is selected. Otherwise the user can never deselect a
focusedNode.
ve.ce.Surface.prototype.onModelSelect:
* Rerender the selection even if prev === next. This function was
already called as a means to rerender a lost selection, and it didn't
work if it so happened that the selection was still the same and was
on a focusedNode.
* Clear the surfaceObserver state when moving focus from the
documentNode to the pasteTarget. If we don't do this, then placing
the selection back in the documentNode at the exact same place where
it was before will not be noticed by the observer.
ve.ui.Context.prototype.onSurfaceFocus:
* Hide the context only when an inspector is open, not just when the
context popup is visible. This ensures that the context is still
hidden when the user clicks out of an inspector, but fixes a bug
where the context was hidden when the selection was restored on
an inspectable focusedNode.
Bug: 58090
Change-Id: I0658f025a9c6005d769fd0291380fcb9c1ba4f32
This is a full export of the recently converteted i18n of
VisualEditor. The conversion script should generate output in
this format, so that future diffs for localisation updates
remain as small as possible.
Change-Id: I03c3223f51027b97d7962553e80afd741991c9af
Stripping all HTML atributes (to avoid CE-added styles such as
'font-size: 1em;') also strips data-parsoid which can cause
round trip errors. As an improvement only strip the style
attribute.
Bug: 58136
Change-Id: I34386bd847d1cf0583317a8b07916e43ff7af029
These were accidentally dropped when I rebased my commit
that imported all i18n messages into the JSON files.
Change-Id: I2f5611f3dbe1a31134426184a9d5648ffc751947
Split the i18n messages into four groups:
* oojs-ui (moved to the oojs-ui repo in a separate commit)
* VE core
* VE-MW (MediaWiki-specific things)
* VE-WMF (Wikimedia-specific things)
The VE-WMF group is new, and we'll split WMF-specific code out into
it later, for now it's just messages associated with that code.
Each language has its own JSON file at modules/MODULE/i18n/LANG.json
Kept messages in VisualEditor.i18n.php as the master copy, because
TranslateWiki can't deal with the JSON files just yet. Added a script
to rebuild the JSON files from the PHP file.
Change-Id: I94e084b2f10994f41324fd08a05ff7f8391ea2eb
Becuase big/small stack doesn't really mean anything.
Bonus: rename the transactions property of the stack item from
'stack' to 'transactions'.
Bug: 49754
Change-Id: I361dda49f4c1e58a541df5b9e478cf20957939a1
These aren't optional in SVG files. Browsers will display them without,
but dropping them breaks MIME type detection, which breaks data URI
embedding: the underline-u icon was being embedded as data:text/plain,...
Bug: 58119
Change-Id: Ia790877fcd536f2714626ccf47beadd09cb4fac9
Also...
* Update OOjs UI to v0.1.0-pre (5ffe63d088)
* Make template parameter text boxes shorter (3em down from 10em)
* Reorder extendObject calls to not modify incoming config objects
* Allow level option to default to 0, rather than specifically defining it
* Use icon button widgets with remove icons for parameter, placeholder,
template and content removal buttons
Change-Id: I29db9d814fab5cf4debd0fc7bab6f51475cb0f94
Let's experiment with this via our local Gruntfile. If it works
fine we can install it in Jenkins (similar to node-csslint).
Verify through $ npm install && npm test;
Fixed all outstanding violations.
Also:
* Added syntaxhighight to ignore.
* Added imetests (which contain unformatted JSON) to ignore.
* In ve.dm.ModelRegistry#matchTypeRegExps, removed redundant
!! cast from the [+!!withFunc] statement which was hitting
a bug in node-jscs. All callers to this local private function
pass a literal boolean true/false so no need to cast it.
* Removed "/* key .. , value */" from ve.setProp, though this
wasn't caught by node-jscs, found it when searching for " , ".
* Made npm.devDependencies fixed instead of using tilde-ranges.
This too often leads to strange bugs or sudden changes. Fixed
them at the version they were currently ranging to.
Bug: 54218
Change-Id: Ib2630806f3946874c8b01e58cf171df83a28da29
A tool to add special characters and diacritics to text.
Also added a new button type ve.ui.GroupButtonWidget that includes a
group of PushButtonWidget objects and returna the individual button's
value upon click
Wikis can edit <visualeditor-specialcharinspector-characterlist-insert>,
a JSON string, to include their own desird special characters to insert
through the tool.
Bug: 50296
Change-Id: I26d1f437feef1c8b61ed3be5f74ef524b33baf49
Now getDataFromDom is no longer called externally, we can merge these two
methods to provide one API endpoint. Also now we have deleted getDataFromDom
we can remove the 'Recursion' disambiguator from the internal function.
Also now that the whitespace info doesn't need to be passed around, implement
it as a simple return value get function.
Change-Id: I9c667e9b90443d12660b731347d7535ccb1a17cd
It's not much of an optimisation to combine these loops but
separating them gives us greater flexibility.
Move the building of the node tree to happen lazily when
getDocumentNode is called.
In the rich paste path we can now create the DM without building
the node tree and remove the metadata.
Change-Id: I10b4bc486ff8ff8037158aa6dfd45aac87557d42
The delete logic sees the caption inside the image as a valid place to
put a cursor and therefore a valid range to delete up to. This means
paragraphs can be merged into image captions by backspacing them in.
Add in a flag that keeps track of whether we are in a handlesOwnChildren
node so we can skip over them.
Bug: 57927
Change-Id: I19e91d2d3a871806d207cbd419f4a45e41d69dc0