Commit graph

2772 commits

Author SHA1 Message Date
Thiemo Kreuz b10dd4ec27 Block de-facto empty <ref> as if it's empty
The use case we care about is this:
<ref extends="some_book"> </ref>

It doesn't make sense that works, but the following doesn't:
<ref extends="some_book"></ref>

We decided that both need to behave the same.

For consistency this patch is applying the same change to all references,
no matter if they use the extends attribute or not. This is an actual
change and might make existing wikitext render differently. However, I
would like to argue that all wikitext that was using this was broken. The
effect of a <ref> </ref> with some whitespace is that the <references>
section at the end of the article will contain – well – an empty footnote.

Bug: T237241
Change-Id: Iaee35583eabcb416b0a06849b89ebbfb0fb7fef9
2019-11-20 15:07:54 +00:00
Thiemo Kreuz 8e800a8988 Merge two <references> related properties into one
Change-Id: Idb6c220870e8d76a7d011f5d0b3e8b8054f2d867
2019-11-20 10:31:03 +01:00
jenkins-bot 32e1f8e7c3 Merge "Don't pass a Title object around that's not needed" 2019-11-19 16:09:13 +00:00
jenkins-bot 7018e82352 Merge "Extract all error reporting to a CiteErrorReporter" 2019-11-19 15:53:29 +00:00
jenkins-bot 6f8b7311d9 Merge "Fix bad settings name CiteCacheReferencesDataOnParse" 2019-11-19 15:53:00 +00:00
jenkins-bot c5bbed5928 Merge "Get rid of obsolete method_exists() checks" 2019-11-19 15:49:40 +00:00
Thiemo Kreuz 9d2d61ff09 Don't pass a Title object around that's not needed
Change-Id: Iea9c366c4b45ba4cd9171c8b4fffc307c852b6e2
2019-11-19 16:48:36 +01:00
Thiemo Kreuz 7c1e098b7c Fix bad settings name CiteCacheReferencesDataOnParse
* CiteCacheReferencesDataOnParse doesn't exist in any code.
* CiteCacheRawReferencesOnParse does.

Change-Id: Idc65d483cf5b7a7b25fd0aed7915c9c0958611f0
2019-11-19 16:13:07 +01:00
jenkins-bot e389e3c1bb Merge "Make two Cite properties private" 2019-11-19 14:54:11 +00:00
Thiemo Kreuz deca410d59 Get rid of obsolete method_exists() checks
Change-Id: Ic3396537a8bf5dc39fd3bea089ebd2292e1c6be5
2019-11-19 15:31:28 +01:00
Thiemo Kreuz e32a921f63 Make two Cite properties private
Change-Id: I20995504b54c663d8c4c22e0addbbcf0d7b4f19f
2019-11-19 14:16:19 +00:00
Thiemo Kreuz 342e231a22 Extract all error reporting to a CiteErrorReporter
Change-Id: Icf61c9a27fd03266c98caf443bb9f00a421e31f6
2019-11-19 14:53:31 +01:00
Thiemo Kreuz 7157c7f494 Add @license to all files
Note this codebase appears to be dual-licensed. Some files mention MIT,
but extension.json and some other files mention GPL.

Since WMDE typically uses GPL, I will continue to mark the files we
created as such.

Change-Id: I126da10f7fb13a6d4c99e96e72d024b2e5ecee06
2019-11-19 11:31:08 +01:00
Thiemo Kreuz c4c6eaa8df Collapse duplicate code in Cite::referencesFormatEntry()
Bug: T237241
Change-Id: Id4d9b453244f9c1d1577497439e39d3d7b58b5ff
2019-11-19 09:44:09 +01:00
Thiemo Kreuz 97ba23aae9 Fix indention and add comments to referencesFormatEntry()
Bug: T237241
Change-Id: I8aaef716dcc0c1c7a5d6bac9e90f779dbf86c795
2019-11-19 09:44:09 +01:00
Thiemo Kreuz e1519911d8 Avoid intermediate array when rendering a <references> list
I suspect this might save a bit of memory. Also makes the code easier
to read.

Bug: T237241
Change-Id: Id877834800780b3b8fe697b020e06be7e71daa14
2019-11-19 09:44:09 +01:00
jenkins-bot d4928c86e6 Merge "Remove deprecated TargetWidget APIs" 2019-11-19 08:21:48 +00:00
jenkins-bot d306b9480f Merge "Reduce duplicate code in Cite::stack()" 2019-11-19 08:12:37 +00:00
Thiemo Kreuz 508f7a0564 Remove dead code from Cite::referencesFormatEntry()
Note how this code was broken since 2018 (Iff480bc). In this execution
path, $val is a string. There is no $val['dir'].

Luckily, this was dead code since 2008 already. See
https://phabricator.wikimedia.org/rECIT448a99da5108c26ce88d3df7cf5df2b5b5b1d1d3
line 283 on the right.

Bug: T237241
Change-Id: I671f3379a124a2644a9b0eac38d46c59106980a7
2019-11-18 16:44:11 +01:00
Thiemo Kreuz 19eefa5d71 Reduce duplicate code in Cite::stack()
Bug: T237241
Change-Id: If808d9f7f0b0c7f9ea07a1bcb295e8ca9647e96c
2019-11-18 16:34:42 +01:00
Translation updater bot db46093f88 Localisation updates from https://translatewiki.net.
Change-Id: Iddb4f2159e29a6cc860569dc80df1285d11d21b8
2019-11-18 09:21:11 +01:00
Ed Sanders 2a222b61d0 Remove deprecated TargetWidget APIs
Change-Id: Ib7feb57ce19f2db47a41561281d51aebd063f408
2019-11-15 16:30:27 +00:00
Ed Sanders 26c78a2b90 build: Update linters
Change-Id: I1bbd7b567152e2ed19d40f113b329064e6a67b09
2019-11-15 16:27:21 +00:00
jenkins-bot edfad273a4 Merge "Track pageviews only on content page views, not edits" 2019-11-14 15:18:11 +00:00
Thiemo Kreuz d50c169612 Minor test updates for more complete test coverage
The main motivation here is to cover the fallback code that was moved
in I20c814d. At some point we might touch this code again.

Bug: T238194
Change-Id: I0ab8a34b09790f42b10376eb3730c3b3c4ef53d2
2019-11-14 14:42:22 +00:00
Thiemo Kreuz 4619cb24f6 Track pageviews only on content page views, not edits
This code is typically not executed on special pages and such, so we
assume the isArticle check doesn't make much of a difference. The main
difference we are aware of is that this will exclude previews.

Bug: T214493
Change-Id: I5155329b8a549adbd3b17c1f1014bb8bbc6768f4
2019-11-14 11:15:34 +00:00
jenkins-bot 668ad80c58 Merge "Pass ParserOutput as parameter to Cite::checkRefsNoReferences" 2019-11-13 08:48:30 +00:00
jenkins-bot f82d70412c Merge "Add more basic tests for API and RL modules" 2019-11-13 08:48:30 +00:00
Translation updater bot 7df32512b2 Localisation updates from https://translatewiki.net.
Change-Id: Ie174f7904ac7f9c88d5b73369ac0e4f6563129e9
2019-11-13 09:25:57 +01:00
Thiemo Kreuz 7920ec3150 Pass ParserOutput as parameter to Cite::checkRefsNoReferences
Change-Id: Ibc4455dfde9f60bb27eac0d71064796878994bc5
2019-11-12 16:33:52 +01:00
Thiemo Kreuz e68b96f75c Add more basic tests for API and RL modules
Change-Id: I5e54fae041ec8431c170be468c12f0622e355b9b
2019-11-12 16:32:15 +01:00
jenkins-bot 0782f24d31 Merge "Make most existing Cite tests pure unit tests" 2019-11-12 14:44:24 +00:00
Thiemo Kreuz f94b400474 Make most existing Cite tests pure unit tests
1. Most existing CiteTests can be unit tests. They run so much faster
this way.

2. I modified some test cases to cover all trim() in the code.

3. The strict type hint in CiteHooks is removed because the parameter
is not used. Having a hard type hint for what is effectively dead code
makes the code more brittle for changes done outside of this codebase.

Change-Id: I1bff1d6e02d9ef17d5e6b66aeec3ee42bba99cf4
2019-11-12 14:56:40 +01:00
Thiemo Kreuz d8fbbd0037 Remove dependency on PPFrame from Cite class
This fixes a series of issues:
* There is nothing about a "frame" in the Cite class any more.
* There is no addModules() call in the Cite class any more.

Change-Id: I20c814d46c26825c5c07eab0a5586de3a531eee7
2019-11-12 13:06:39 +01:00
jenkins-bot f36be06996 Merge "Add basic unit tests for all 3 hook classes" 2019-11-12 11:38:13 +00:00
jenkins-bot 47e642fa27 Merge "Use __CLASS__ instead of repeating the class name" 2019-11-12 11:21:00 +00:00
jenkins-bot 59dba7e184 Merge "Remove lazy registration of Parser related hooks" 2019-11-12 11:20:57 +00:00
Thiemo Kreuz 042a4ecf7a Add basic unit tests for all 3 hook classes
Change-Id: Ib444717465f8dda96c89afd8b2d60336e8bcdeec
2019-11-12 11:11:45 +00:00
Thiemo Kreuz c9310ff7b4 Use __CLASS__ instead of repeating the class name
Change-Id: I97e9d973accd1d3467ed1f04af37e021e55783b3
2019-11-12 10:55:35 +00:00
Thiemo Kreuz 7ce10d7539 Remove lazy registration of Parser related hooks
To be honest I don't get why this lazy registration was done in the
first place. None of the 4 other hooks should ever be called before
the ParserFirstCallInit hook got called.

Also, under which circumstances can the ParserFirstCallInit hook be
called more than once?

Both scenarios would be wrong, as far as I'm concerned. Either I'm
missing something, or this code can indeed be simplified. Maybe it was
something to make it more compatible with older MediaWiki versions?

The only reason I can think of is: in all situations that do not
involve a parser, having the 4 extra hooks registered is pointless.
Does this waste space and/or runtime in the $wgHooks registry?

Change-Id: I5ef1495f4ce7bce940fa5f8e700af3d2c4851a01
2019-11-12 11:47:55 +01:00
jenkins-bot 9de8876ecf Merge "Remove an unused private variable" 2019-11-12 10:45:41 +00:00
Adam Wight 9d706047f3 Rename refines -> extends
Bug: T171581
Change-Id: I42b2d8859f2958357024cbba089715c10712f370
2019-11-12 10:19:17 +00:00
Adam Wight 8963536278 Remove an unused private variable
Change-Id: If52cc90bacee96afce4528f98d7f07f869d2acde
2019-11-12 11:15:47 +01:00
jenkins-bot c75fe5dccd Merge "Move $this->mParser setters up one level" 2019-11-12 09:58:02 +00:00
jenkins-bot 5ae75353e4 Merge "Don't use $this->mParser in Cite::saveReferencesData()" 2019-11-12 09:48:52 +00:00
Thiemo Kreuz 818e869b0b More narrow method signatures involving Parser
Change-Id: I2da717b9a8d104644c59a62b49090605c95323d6
2019-11-12 10:24:58 +01:00
jenkins-bot 657b81abd2 Merge "Add basic test coverage for all CiteHooks code" 2019-11-11 19:24:06 +00:00
Thiemo Kreuz bd72636b95 Move $this->mParser setters up one level
Two motivations:

1. I want the two deeper nested functions guardedRef() and
guardedReferences() to have less side effects.

2. In guardedReferences() guardedRef() is called. Both set the
property. That's redundant. The new code avoids this.

Change-Id: I48146f8b6d91122a904be0a552ffe3b03bc0481f
2019-11-11 20:16:05 +01:00
Thiemo Kreuz 960b6ed17f Don't use $this->mParser in Cite::saveReferencesData()
Main motivation is to make the code easier to test, and easier to
extract to smaller services.

Does this make sense? I'm not sure any more. One can argue that
everything Cite does happens in the context of a specific Parser. Why
shouldn't the code have access to this Parser?

Change-Id: I9d0cb44d96ec70a56af57f86aeb1f264f52c8bc4
2019-11-11 20:12:05 +01:00
Translation updater bot d2cc18d38a Localisation updates from https://translatewiki.net.
Change-Id: I6288c824496adde97027640db0c192e07b169bb0
2019-11-11 14:47:10 +01:00