Commit graph

90 commits

Author SHA1 Message Date
jenkins-bot 50f293019c Merge "Rewrite MWTransclusionNode.isSingleTemplate for readability" 2021-07-01 11:21:44 +00:00
jenkins-bot 3709dfbee2 Merge "Update documentation for all getWikitext()/serialize() methods" 2021-07-01 11:18:08 +00:00
Thiemo Kreuz 4b62bc5bf1 Rewrite MWTransclusionNode.isSingleTemplate for readability
* Introduce variable names that explain better what's going on.
* Add comments.

Bug: T284895
Change-Id: Id5e8be9e52342ce049bdceec71f0f7cd01a6e2e9
2021-06-25 16:51:53 +02:00
Thiemo Kreuz 4367235dcc Inline many var declarations in the code below
This makes the code more readable and easier to reason about.
The ESLint rule responsible for this code style was removed
just recently.

Notes:
* I focus on classes that are relevant for what the WMDE team
  does right now.
* I merge multiple `var` keywords only when the variables are
  strongly connected.
* Caching the length in a for loop makes the code hard to
  read, but not really faster when it's a trivial property
  access anyway.

Bug: T284895
Change-Id: I621fed61d894a83dc95f58129bbe679d82b0f5f5
2021-06-23 09:02:24 +00:00
Thiemo Kreuz 58ec3006ba Update documentation for all getWikitext()/serialize() methods
There are at least 3 different methods that are all named
getWikitext, not counting subclasses. They behave rather
different, most notably in terms of whitespace preservation.

Bug: T284895
Change-Id: I8b47f5bd21675a431ba2bc2d4a8cb0c55dd50f76
2021-06-18 17:30:29 +02:00
Thiemo Kreuz 858f0d51c0 Make use of Array.some() in a few places
some() is IE9+, so fine to use with our current compatibily
matrix.

Change-Id: I8d4a1b5326417bb4d23b47d72e5548f5def5784e
2021-06-09 07:34:50 +00:00
Ed Sanders 4545f53245 build: Update eslint-config-wikimedia to 0.17.0
Fix instances of variable shadowing.

Change-Id: I6e2befb020d7d4b506c7b46131eafacd951aa6d1
2020-08-18 13:16:49 +01:00
Ed Sanders de47496b19 Move MWutils to preinit and rename to parsoid utils
Bring in ve.dm.MWInternalLinkAnnotation.static.getTargetDataFromHref
and ve.resolveUrl, so that the file has no dependencies on VE.

Change-Id: I03bc455d5484a6c51f3fa2397c64936b829fe7e3
2020-03-24 23:13:16 +01:00
Esanders c9b2e8b4d2 Only preserve data-parsoid/RESTBase ID on transclusion nodes
The previous attempt to fix this didn't preserve any attributes
but removing data-parsoid can result in a loss of wikitext formatting.

This reverts commit bdfd4b6d8f.

Bug: T207325
Change-Id: I2a38e651d17262889eddb149c72c9e08b4e56ed0
2020-02-12 22:51:43 +00:00
James D. Forrester 2c77e88d2c doc: Bump copyright year for 2020
Change-Id: I30539877543dc2a57bd1428a00d10ac46d8fc294
2020-01-08 09:13:24 -08:00
Bartosz Dziewoński 84d548e7b1 Remove redundant @method annotations
A @method annotation is only necessary when the docblock is not
directly followed by a function declaration (in which case JSDuck
assumes it documents a property), e.g. when defining an abstract
function or referencing a function from another library.

I verified that JSDuck generates exactly the same output before and
after this change (docs/data-<hash>.js files are identical).

Change-Id: I7edf51a8560ab9978b42800ab1026f0b5555c3bf
2019-08-21 23:33:15 +02:00
Bartosz Dziewoński 3ca8319dfc ve.dm.MWTransclusionNode: Protect <style> nodes too when copying
Bug: T226374
Change-Id: Ie7853382642336638e0a1de9ca506d750ce054ce
2019-07-16 22:51:28 +02:00
Ed Sanders 0db4ae6e00 eslint: Enable valid-jsdoc
Change-Id: Ia0d1e57246a1c567d73022ceca9b8c02850f9bc8
2019-04-17 17:13:39 +01:00
jenkins-bot ca03c085a2 Merge "Revert "Don't preserveHtmlAttributes on transclusion nodes"" 2019-01-17 12:54:58 +00:00
Bartosz Dziewoński bdfd4b6d8f Revert "Don't preserveHtmlAttributes on transclusion nodes"
This reverts commit 48db45df76.

Bug: T213922
Change-Id: I7b0bf081fd5a9ab71db1ede3ce6e149cfb4b675a
2019-01-17 01:42:15 +00:00
jenkins-bot bebbff8bab Merge "Don't preserveHtmlAttributes on transclusion nodes" 2019-01-02 18:58:13 +00:00
Ed Sanders 48db45df76 Don't preserveHtmlAttributes on transclusion nodes
Bug: T207325
Change-Id: I9c92f18c58c044e7f2257aa6993db227896a1468
2019-01-02 17:11:31 +00:00
James D. Forrester 3c293ea00c doc: Bump copyright year for 2019
Change-Id: I8991b97c980d4149f53eb5601036220ef3c0c440
2019-01-01 13:24:23 +00:00
Ed Sanders 66972356cf MWTransclusionNode: Change HTML messages to plain DOM
Bug: T208732
Change-Id: I61a958292984586dc90262989ebb6c181f28a605
2018-11-05 16:28:11 +00:00
Thalia bbed4307d7 Separate node classes into individual files
Bug: T205231
Change-Id: I84a6f2f7a842ab44e1f7103c0f288deda0451e79
2018-09-24 12:44:45 +01:00
Ed Sanders 9386d54be9 Fix template param diff when value is empty string
Bug: T195764
Change-Id: I0bd5fe71996a2ffeaa201e549f8515439c07996d
2018-05-28 14:56:53 +01:00
Ed Sanders d7d4eb3126 Use ve.ce.nodeFactory.createFromModel
Change-Id: I1a826c3c0985ef0d8ad0b669886e29aa021c90c1
Depends-On: I259face33154b795143c8820abdfb6b4a495f141
2018-05-11 17:05:09 +00:00
Ed Sanders c2e16186a0 Use CE rendering for invisible templates
Bug: T170107
Change-Id: I7bce9e7b77ce22953bb0141d81871b53a4f005db
2018-05-11 17:05:03 +00:00
Ed Sanders 1bd430c9d1 Convert most uses of isForClipboard to doesModeNeedRendering
Depends-On: I0f1b90056e9d1a4fa0e188700604709297593924
Change-Id: I6fa1cde51ffc859b57ab557e3ddf8a76d92bf94f
2018-04-30 16:10:27 +00:00
Ed Sanders bcf3783c1c Refactor ve.dm.MWTransclusionNode.static.describeChanges
Removes some duplication.

Change-Id: If68401617cde60cf151bf132f33e5d9dc42bbf72
2018-04-12 17:46:47 +01:00
David Lynch a228991181 MWTransclusionNode: describe parameter changes for Visual Diffs
Currently limited to single-template transclusions.

Bug: T188389
Depends-On: Id03d6a9866b56c00e11a030ed60b3c6fb7ead3d1
Change-Id: I332b5f5aa789fdc00510e9f03ea96e4058a28961
2018-03-20 10:35:03 -05:00
James D. Forrester d144599cea Update VE core submodule to master (ca771b8bc)
New changes:
7551f6c66 [BREAKING CHANGE] Rename class ve.dm.IndexValueStore->ve.dm.HashValueStore

Local changes:
Follow-through rename of IndexValueStore->HashValueStore

Bug: T188900
Change-Id: If60d0c637fe92f0e7afe916c064fafb17980d063
2018-03-06 12:55:30 +00:00
Bartosz Dziewoński 98a1bb09c0 Centralize Parsoid resource name parsing logic
Let's keep the ugly regexp and the comments about why we do this in a
single place.

This is mostly without behavior changes, with three exceptions:
* ve.dm.MWImageModel#attachScalable now passes a title with spaces
  instead of underscores to the Scalable (this doesn't matter because
  it's normalized to use spaces later anyway).
* ve.dm.MWImageNode#getFilename now returns a title with spaces
  instead of underscores. This is used in some API queries and when
  rendering thumbnails for missing files, and this format is actually
  more correct for both of these.
* ve.dm.MWTemplateModel now URI-decodes the template title. This
  actually fixes a bug where trying to edit a template transclusion
  whose title contains a '?' would throw an exception about invalid
  title.

Also, clarify that the return value of ve.dm.MWImageModel#getFilename
and ve.dm.MWImageNode#getFilename is different :(

Change-Id: I8e09015cea82308017ed925ec755b7231518126e
2018-02-28 03:01:05 +01:00
James D. Forrester 0a7a845a42 doc: Bump copyright year
Change-Id: I0b299c840ede1a1b8552cecfc70c5760ab036181
2018-01-03 17:45:07 +00:00
Bartosz Dziewoński 98351fbcf3 Do not "resolve attributes" in toDomElements() overrides
Resolving attributes means turning 'href' and 'src' URLs from possibly
relative to absolute, so that they don't depend on the base URI of the
document.

This is necessary when rendering for clipboard (and in some other
cases), but at the point when toDomElements() is called, the document
these elements are in does not necessary have a sane base URI set,
giving us hrefs pointing to nonexistent pages.

Don't do it here; it will happen later when we know what the right
document (and right base URI) is, e.g. in ve.ce.Surface#onCopy or
ve.ui.PreviewElement#replaceWithModelDom.

Bug: T169675
Bug: T175157
Change-Id: Ie0a5d6e1c57b8efdbbfba0c24f31ca91d156e200
2017-09-07 14:06:24 +02:00
Roan Kattouw 448944de3b Standardize on /^(\.\.?\/)*/ for interpreting Parsoid hrefs
We used (\.+\/)* instead of (\.\.?\/)* in some places,
but that doesn't make much sense since we won't and shouldn't
ever see stuff like '.../'

Change-Id: I9efcff2d2a34499ca57321dfbae29392ecb422d7
2017-08-02 21:30:31 +00:00
Ed Sanders 539a1cab43 Compare template names when diffing, not just type
As type is always 'mwTransclusionInline/Block'.

Bug: T166801
Change-Id: I76cdf0add780d556206c439797cfcca19133d94d
Depends-On: I0f24d9d81b5491a8f09bc59e5f544f99751fd506
2017-07-28 21:32:32 +01:00
Ed Sanders b3d44c1ccd Normalize to template namespace when comparing
Bug: T169307
Change-Id: Ic3524819fb026713b27b193e4a03338fffd97229
2017-07-03 16:41:08 +00:00
Bartosz Dziewoński 624211a60f Use Parsoid data for template names rather than detect from wikitext
We were incorrectly handling transclusions with trailing
newlines after the template name.

This also improves handling of non-template transclusions,
e.g. parser functions like `{{int:mainpage}}`, which are
no longer mangled as if they were page names.

ve.dm.MWTransclusionNode#isSingleTemplate will now match
a template even if it's name is itself template-generated.

Logic for turning Parsoid's hrefs into page names stolen
from ve.dm.MWImageNode.prototype.getFilename.

Bug: T167613
Change-Id: Ibecf71338eb37bb3da81a7372e4ed41140a9af57
2017-06-14 23:15:18 +00:00
Ed Sanders 9ccdf15695 dm.MWTransclusionNode: Move mixin comment, remove duplicated static property
Change-Id: Id8f8205db92a70dde7ba22b39e90e37590efb3d1
2017-06-06 16:28:01 +01:00
David Lynch 07e4d5fd17 dm.MWTransclusionNode: remove TableCellableNode mixin
Change-Id: Ic08c7ba03ad2bee35a96a750377450475d0efeed
2017-05-19 20:55:14 +02:00
David Lynch 0eb6b94b4c MWTransclusionNode: Implement MWTransclusionTableCell
Back in de98382a55, references to MWTransclusionTableCell were introduced,
but weren't followed through on. So, actually add it. Have cellable
Transclusions use it as their type.

Bug: T144122
Depends-On: I054f12f4218102a12d7a9ea843f9c61e8825c52c
Change-Id: I367f878bfd1c58e20b62368cb78120604b48d791
2017-05-15 12:09:11 -05:00
Ed Sanders 9cd8faea8b VisualDiff: Add custom messages for change descriptions
Bug: T151403
Change-Id: I469a3c7897f2417c1850364f65da51c0deca2386
2017-03-16 14:36:09 -07:00
James D. Forrester 122f49b2dd build: Bump file copyright notices for 2017
Change-Id: I3c20809e71cc0da58123e1b5f29c4f3aac945496
2017-01-03 08:58:33 -08:00
jenkins-bot b656f3d5f1 Merge "Use super property to call parent methods" 2016-09-01 17:04:39 +00:00
Ed Sanders 5788340b49 Update VE core submodule to master (632f0a9)
New changes:
14b5fbc [BREAKING CHANGE] Move originalDomElements to the IV store and use MD5
c5d21f0 Provide methods to (de)serialize transactions

Local changes to move originalDomElements to IV store

Depends-On: I8a71c1a40ec35108d0a9a388da6f75632f8dc53c
Depends-On: I32c9b5f984fcf96e3354841ecfcd444149e8f159
Change-Id: I0fbb6324eede94558426178cbdad6b5daf0f8318
2016-08-24 18:14:14 +00:00
Ed Sanders 62bdaac13b Use super property to call parent methods
Change-Id: I76982b844cf2871d7583463def4393e5bdc33aa2
2016-08-23 11:56:47 -07:00
Ed Sanders 236e3d1241 [BREAKING CHANGE] Evalute block/inline state when inserting a transclusion node
Make some of the methods we currently use to render the node
static so we can re-use them before inserting. We do the evaluation
without inserting the node so as not to dirty the document and
transcation history.

In the unlikely case the request fails, just fallback to inline.

This only handles insertions for now as type changes on edit will be
very rare.

This changes the signature of insertTransclusionNode, which is used
in Cite and Citoid extensions.

Bug: T51784
Change-Id: Ibc2fc66e6866084b0a4deeb082c8a1ca412febb2
2016-05-16 09:19:13 +01:00
Ed Sanders b25fbd3b7b Remove redundant about attribute stripping code
Change-Id: I2d330c074075734d50d6bf3e0f67e55bade6c072
Depends-On: I8be0a362338ba12d5569e315725386142a66da24
2016-05-04 12:55:36 -04:00
Ed Sanders 25be46a57d Fix transclusion node cloneElement method
* Override the static cloneElement. getClonedElement shouldn't
  be overridden as doing so misses static invocations.
* Apply the same fix to extension nodes
* Fix DOM loop to reference clone.originalDomElements[ i ]

Logically depends on Id8024c171c to work.

Bug: T126169
Bug: T126114
Change-Id: Icf4d3115db5b12b97a6c805ff3d0b71d9e88b804
2016-02-08 15:29:19 +00:00
James D. Forrester ada58df361 build: Bump file copyright notices for 2016
Change-Id: I3c618c196e504a80ca297a4132a17f1977a24fb7
2016-01-03 14:57:25 -08:00
Ed Sanders 9fb6977e52 Update VE core submodule to master (363adf2)
New changes:
63c5f67 [BREAKING CHANGE] GeneratedContentNode: Introduce new hash for rendering
6dd1cb2 Add ve.dm.Surface#selectLastContentOffset

Local changes:
* Use new getHashForRendering in GeneratedContentNode users

  As we no longer have a model hash, remove the originalIndex check
  and just rely on the deep comparison of mwData (trading a deep copy
  for a hash computation should result in similar performance).

Bug: T114689
Change-Id: Ida0ee0234418408b735232c633d41908a424a9ff
2015-10-07 15:00:32 +00:00
Ed Sanders 0fdf3cbb93 Update VE core submodule to master (9dcfbdb)
New changes:
184f952 [BREAKING CHANGE] ve.dm.Converter: Put static things in .static
a4c1e1e Localisation updates from https://translatewiki.net.

Local changes:
* Switch to using Converter's newly-static methods

Change-Id: If30f7b2a0de92c4c7f4d5ca57663251c132eeed2
2015-09-15 17:36:27 -07:00
Ed Sanders 830718ce22 Use ve.resolveAttributes instead of resolveUrl in clipboard conversion
This method does the tree traversal for us, and resolves src as well
as href.

Change-Id: Ic3ea47fb9acde9a1dad5caac3ee9c9b63c86d900
2015-09-15 13:44:52 +01:00
Ed Sanders 036b6c9edf Resolve image paths when writing to clipboard
Bug: T111927
Change-Id: Idf3b761481454197eecbc0f6cd5cf6199419ca6c
2015-09-09 16:19:18 +00:00