Commit graph

139 commits

Author SHA1 Message Date
Gergő Tisza
6c0afc3cc9 Introduce ContentAlterParserOutput hook
This hook is the counterpart of ContentGetParserOutput: it gives
high-level access to the parsing of a content object (as opposed
to lower-level parser hooks like ParserBefore*/ParserAfter* which
are called for all kinds of non-content input like interface
messages and don't have the necessary context to know what kind of
input is being parsed), but it is called when the parsing has
already finished.

The intention is to provide a convenient location for ParserOutput
modifications which depend on some global property of the parsed
content, but need to happen before LinksUpdate. Currently there are
no hooks between parsing (initiated by WikiPage::doEditUpdates()
calling WikiPage::prepareContentForEdit()) and updating the link
tables (initiated by the same method calling
Content::getSecondaryDataUpdates()), so any hook an extension would
try to use would face one of the following problems:
* the parsing output is not available yet
* LinksUpdate has run already, modifying list properties is unsafe
* there is not enough context to tell what's being parsed

A typical use of this hook would be to add tracking categories when
something is missing from the text (e.g. there are no references).
For the concrete use case, see I43ed79b6a54cd31820ecae8139e29c5880f5dd1b

Alternative approaches that have been suggested and do not require
a new hook but are not robust / do not rely on a clear contract:
* use ParserAfterTidy or a similar hook, assume that the input
  being parsed is the main page content iff limit reporting is
  enabled
* use ParserAfterTidy or a similar hook, assume that the input
  being parsed is the main page content iff
  ParserOptions::getInterfaceMessage() is false (this would yield
  some false positives, but in those cases adding a tracking
  category would probably have no effect)

Change-Id: I685b285fcc772382993116f7822a832eeecc0681
2014-09-29 18:44:39 +00:00
Brad Jorsch
bba2bc6ca0 Record redirect target in ParserOptions
Since Id44d566a, the text passed to the parser when parsing a
&redirect=no page no longer contains the #REDIRECT directive. For the
benefit of extensions that want to know the redirect target from various
parser hooks, record the target on the ParserOptions object associated
with the parse.

Bug: 62856
Change-Id: Icd1da9911a43eabacbd9e9a369a8326f67f270ff
2014-09-18 06:19:31 +00:00
Yuri Astrakhan
2beb4fc172 When cloning TextContent, include model
The model id should be preserved when cloning values
on save.

Change-Id: I397d36af30cf1401023b761e8c41f0dc83e76c12
2014-09-16 02:58:36 -04:00
Yuri Astrakhan
3a28ee5acb CSS/JSON/JavaScript ContentHandler refactoring
* All content handlers that deal with code/data tend to have
English as their page language & pageview language, so moved common
code to the abstract CodeContentHandler class.

* Renamed JSONContent & JSONContentHandler into JsonContent*

Change-Id: I46819a0572ef5becc211d0d82471ff7102edaa3c
2014-09-15 08:24:15 +00:00
Brian Wolff
29545b4074 Mark ParserOutput of MessageContent as varying by userlanguage
Hopefully this will stop cache pollution when a MessageContent
ends up in parser cache. MessageContent objects just do
wfMessage()->parse(), which uses user language.

Bug: 41065
Change-Id: I75e8256a61b828cb9fc93227eb517a34ac6b9d15
2014-09-15 01:09:27 +00:00
Kunal Mehta
87cddceefe Fix subclassing of CssContent and JavaScriptContent
We need to be able to set a different content model via the
constructor, so make it an optional parameter.

Change-Id: I8b31084e0cfbcca1b3785176eac492d837e0cb0f
2014-09-13 15:31:18 -07:00
jenkins-bot
a886aa3d9d Merge "Remove JSONContentHandler::$contentClass" 2014-09-10 17:53:22 +00:00
Kunal Mehta
cbd954f011 Remove JSONContentHandler::$contentClass
Was deprecated in I70f1a3291.

Change-Id: I92d0fae344e158b9c46f2297c78a2e65fc3516db
2014-09-06 22:06:19 -07:00
Bartosz Dziewoński
7dc4b58615 Article: Don't hardcode <img> tags on redirect page
* Created a ResourceLoader module for redirect page styling.
* Fixed a couple of bugs in Article code.

Keeping two of the old files for a while because they might still be
referenced by something (bug 69277 comment 11).

Bug: 69277
Change-Id: I8fa565833545e41d0232101566da8c5ffa850e36
2014-09-05 22:00:57 +02:00
jenkins-bot
e0615b688d Merge "Make it easier to subclass Content and ContentHandler subclasses" 2014-08-29 17:58:04 +00:00
umherirrender
b0cfcd0fcb Add missing @return and @param to doc blocks
Change-Id: I9d99ba1968ed8f97624d957754c8847dfe1b41da
2014-08-27 21:57:45 +02:00
jenkins-bot
24499fca78 Merge "Remove wrong type from @param on ContentHandler::merge3" 2014-08-20 06:57:42 +00:00
Kunal Mehta
ccee80b8a6 Make it easier to subclass Content and ContentHandler subclasses
Currently the names of associated Content classes are hardcoded,
meaning that any extension that wishes to subclass these implementations
must also re-implement that function, usually copying it exactly
with just the class name changed. Using "static" avoids that issue.

For ContentHandlers, I added a TextContentHandler::getContentClass,
which should be used when creating new Content objects.

Change-Id: I70f1a3291aec3460120ec20121a23f4cb68e04d1
2014-08-16 23:04:08 -07:00
umherirrender
93a23bc256 Remove wrong null type from @param of Content::fillParserOutput
Change-Id: Iae152214c52c611e8c118d2537e92f551b1c7ab8
2014-08-15 18:29:04 +02:00
umherirrender
921979b0bc Remove wrong type from @param on ContentHandler::merge3
When the method has a type hint of Content, there is no way to pass a
string, so remove that type from @param

Change-Id: Ifbf89d52cfa3ea8801c94f2d1b336e784133cce9
2014-08-14 19:39:01 +00:00
umherirrender
3b2b6a2773 Add missing @param to function docs
Change-Id: I47fa96a976f55a1a93cb75397285edb8c7f4cd8a
2014-08-14 20:22:52 +02:00
umherirrender
f6e19c0afe Fixed some docs
- Added since to @deprecated
- Use lowercase array on @param
- Added missing type on @param
- Swapped type and variable on @param
- Fixed spelling of @return

Change-Id: Idbbc6b4c8aadb6d98c636f53024ac513346c912b
2014-08-13 20:01:46 +02:00
Kunal Mehta
58e9569b46 Use new static instead of new self
See code review on I957d6bda626b8e749a99717b5c89c4db38a36bf8

Change-Id: I79e4a987636509515df044da7a6951d3e4b4f824
2014-08-09 13:18:05 +00:00
Kunal Mehta
507f0c923c JSONContent: Use self() instead of explicit class name to support subclasses
Change-Id: I957d6bda626b8e749a99717b5c89c4db38a36bf8
2014-08-09 12:02:33 +01:00
Kunal Mehta
be2a2c681a Let subclasses specify their associated content class for JSONContentHandler
Also add @since tags and release notes

Change-Id: I515a51f40b7820a3d45b1219d21923467abe5ecd
2014-08-09 00:06:31 +00:00
Kunal Mehta
d2a82fcb60 Add JSONContent and handler from EventLogging
As was discussed at the architecture summit, a basic JSON content
class which handles validation and basic display. Not intended to
be used directly, but for extensions to subclass.

Co-Authored-By: addshore <addshorewiki@gmail.com>
Change-Id: Ifcde9bcd0efcf15a3ab692dd2a0a3038559e0254
2014-08-08 23:31:26 +00:00
florianschmidtwelzow
8012165a22 Fix getAutosummary for create blank page
Fixes for change to enable the creation of blank pages. Added test
for this case.

Follow up: I3457c36a909d1dbfaeed04a1f0568c69e0ef3386

Bug: 57238
Change-Id: Id52be6cbe22c6098d1c0824d7a7848579aa05a84
2014-07-27 12:22:07 +00:00
Étienne Beaulé
c3fcaba02f Enable the creation of empty pages
This change enables the direct creation of empty pages without needing
to use a work-around (such as "{{subst:ns:0}}"). A warning is added as
the message "blankarticle" to request confirmation that the empty page
was meant to be blank. A automatic edit summary has been added when
creating a blank page. The message is: "autosumm-newblank."

The API has been updated to permit the creation of empty pages, when
"text" is null, but not non-existant.

Unit tests have also been added to test these features.

Bug: 57238
Bug: 65206
Change-Id: I3457c36a909d1dbfaeed04a1f0568c69e0ef3386
2014-07-25 23:26:18 -04:00
umherirrender
02dc9da399 Cleanup some docs (includes/[a-d])
- Swap "$variable type" to "type $variable"
- Added missing types
- Fixed spacing inside docs
- Makes beginning of @param/@return/@var/@throws in capital
- Changed some types to match the more common spelling

Change-Id: I7b65fe04db431342cc58b469dc48f41a50c4e891
2014-07-24 19:42:45 +02:00
umherirrender
7ff005407e Remove colon after @deprecated/@param/@todo/@note
Change-Id: I4e66dad85eecf7e8e03ac760af900395e1bc11b6
2014-07-24 11:30:25 +02:00
umherirrender
abfa0d7854 Standardize @todo
Always use lowercase @todo
Changed some "@FIXME" to "@todo FIXME: "

Change-Id: I016d1f9511e6f3bbd22427f0fffeccd77ab5e0db
2014-07-23 22:27:20 +02:00
umherirrender
779eb6c16e @singe -> @since in doc
Change-Id: I25fcd1930bd719af2c46c3540f4a48ab44d47ded
2014-07-04 22:53:47 +02:00
Thiemo Mättig
f6cff5e392 Update documentation of what a "section" is
There are so many slightly different understandings of what a
"section" is or can be. I'm aware the documentation was improved
just a few weeks ago. I still find it incomplete and confusing.

1. I renamed it to $sectionId to make it more clear what it
really is.

2. Sections are usually numbers. 0, 1 and so on. There is no
reason to disallow the use of ints or even floats (this works
because the string representation of 0.0 is "0"). The code never
disallowed numbers.

3. 'T1' never was supported, as far as I can tell. 'T-1' is
supported. See Parser::extractSections().

4. null and false and '' all mean "the whole page" in
WikiPage::replaceSectionAtRev() but for some reason this meaning got
lost in WikitextContent::replaceSection(). I made it the same again.

Change-Id: Icc3997722d2ed742bf7703cd7c06d09199225720
2014-06-12 18:13:23 +02:00
jenkins-bot
e87a6ad62d Merge "Introduce ContentHandler::exportTransform()" 2014-05-27 18:31:05 +00:00
jenkins-bot
36e4a83640 Merge "Introduce ContentHandler::importTransform." 2014-05-27 18:26:19 +00:00
Stephan Muggli
7982cf183f Return value directly when using getter
It is not necessary to save the value in a variable

Change-Id: Ia58c94bb19e22476821451bddc2f66e556b773f6
2014-05-23 16:05:29 +02:00
daniel
ee0ff556d4 Introduce ContentHandler::exportTransform()
ContentHandler::exportTransform() allows content handlers to apply
transformations upon export, such as conversion of legacy formats or
filtering of internal data.

Note that the transformation is applied to serialized content, since
the exporter will generally not unserialize the content blob to an
intermediate form before writing it to the dump. Implementations
may choose to unserialy, then transform and re-serialize.

Bug: 65256
Change-Id: Ic55a8bd8bea13041000b176c7c02c7c5ced76f6d
2014-05-20 19:21:49 +02:00
daniel
5ca37ababd Introduce ContentHandler::importTransform.
ContentHandler::importTransform allows ContentHandler
implementations to apply transformations on page content
upon import. Such transformatiosn may by useful to update
from legacy formats, apply ID rewriting, etc.

Note that the transformation is done on the serialized content.
This allows for a "raw" import implementation that writes
improted blobs directly into a blob store without unserializing
them into an intermediary representation. Implementations may
choose to unserialize, transform, and then re-serialize.

Bug: 65256
Change-Id: I290fdf5589af43def8b3eddb68b5e1c23f6124e8
2014-05-20 19:12:35 +02:00
Brion Vibber
0decf94d10 tyop fxi
Change-Id: I05cd37b3dab7d0eeffb4df81f906fd1e881b7f9f
2014-05-11 21:39:23 +02:00
daniel
48d5e5b3c9 Introduce ContentGetParserOutput hook
This hooks allows extensions to override the normal model-specific
rendering of page content. A typical use would be to provide syntax
highlighting for pages that contain scripts. In that sense,
ContentGetParserOutput is a generalization of the old ShowRawCssJs
hook.

This, together with I76412f9d, is a (hopefully) fixed version of the
reverted Ibfb2cbefea44.

Change-Id: I979e2438689648ba4c959d8083197ef14ce524e8
2014-05-10 14:27:33 +02:00
Bartosz Dziewoński
5fea642f16 Content: Deprecate and stop using getHighlightHtml()
That function was clearly a bad idea, everyone should just use
getHtml() instead. It was supposed to allow extensions to extend
the content formatting process, but actually doesn't.

A better hook-based solution follows in separate commit I979e2438.

Split off from original I979e2438 and rebased with minor changes
(updated documentation comments, etc.).

Co-Authored-By: daniel <daniel.kinzler@wikimedia.de>
Co-Authored-By: Bartosz Dziewoński <matma.rex@gmail.com>
Change-Id: I76412f9d28bb145fb5975f59e538f6560e50472f
2014-05-09 10:18:00 +00:00
daniel
12f4689cc8 TextContent: Document parameters to convert()
Mostly extracted from I979e2438.

Change-Id: I764aae970a2ad90a54aa9816d81070d0899fd10a
2014-05-05 18:27:35 +02:00
Bartosz Dziewoński
c3f7f91705 Documentation cleanup in Content-related files
Mostly extracted from I979e2438.

Change-Id: I6562d111c15425957eaaad31ded175811d7abf1c
2014-05-05 17:04:10 +02:00
withoutaname
652fdc09b7 Fix typos in WikitextContent.php
Fix typos in documentation for
/core/includes/content/WikitextContent.php

Change-Id: Idc0d4d9101309cea858473c86a4b12cf6e5f5ee4
2014-05-04 22:17:52 -07:00
umherirrender
23bb3d1cb4 Follow-Ups to "Fixed some @params documentation"
Fix of inline comments of the following patch sets:
Follow-Up: I0056b4a8df243cfc0c5f25378de48f7a35170aca
Follow-Up: I7f605aa9e117b5fd80d9b1440864fe526d2b14a5
Follow-Up: I3622f216a2ca8ac1b5e51892be9f98665f65bc36
Follow-Up: I6627ba0e76d3577c40bf2473e0f78a5ad7368634
Follow-Up: Id75b5ecf648ca50f955b3bde3307c82c4366b102
Follow-Up: I4ca5231119f33039d91da3b57a41cd40719a576b

Change-Id: Id9bbe84b2820e9db44af5783411e955f55f643d4
2014-04-23 13:39:49 +02:00
umherirrender
829886b10a Fixed some @params documentation
Swapped some "$var type" to "type $var" or added missing types
before the $var. Changed some other types to match the more common
spelling. Makes beginning of some text in captial.

Change-Id: I64e8cfe478cb0ba438f40b0631d6e9049cdab567
2014-04-14 12:59:19 +00:00
Jackmcbarn
730c2c01a8 Allow passing parameters to preload
When pages are loaded in the edit box via preload, allow parameter
substitution. The interface-style $1 is used rather than the
template-style {{{1}}} to avoid conflicts with preloads that add template
parameters. Syntax is:
action=edit&preload=Foo&preloadparams[]=first&preloadparams[]=second

Bug: 12853
Change-Id: If02cf4b3dba9f9d22a956d8bfff224677cbce00d
2014-04-06 21:03:02 -04:00
Thiemo Mättig
6806400129 Added and updated Doxygen comments in content handler and diff namespaces
Reasons for touching this are:
* "@param type $var" were mixed in a lot of places. Both works but the
  MediaWiki coding conventions suggest that specific order.
* Things like String and Bool aren't objects and shouldn't be uppercase.
* Tried to fill missing types in "@param $var".
* Tried to fill missing descriptions in "@return type" when I could.
* Removed duplicate descriptions if a @see is sufficend.
* Removed useless descriptions ("isUsefull returns true if usefull").
* Removed useless @return void.
* Replaces mixed[] with array (does have the exact same meaning).
* Tried to find better replacements for "varargs", phpDocumentor
  suggest $var,...
* Order should be @since, @param, @throws, @return, @see. This is the
  order Doxygen renders this.

There is always more to do but I think this is already much better
than before. Please feel free to put more change sets on top of mine
or request more changes by adding comments.

Change-Id: I05262ce06caabf79f68772302524ac91bbead1c6
2014-03-06 11:17:41 +01:00
jenkins-bot
c131c00ea5 Merge "Document parser cache key control." 2014-02-08 19:40:57 +00:00
Siebrand Mazeland
f077c4b1d6 Update formatting
Change-Id: I18aff576262479c9bb1c56eb8e1d1aaae200e4b1
2014-02-06 09:27:05 +01:00
Marius Hoch
7d016b5e3e Minor documentation fix for ContentHandler::makeParserOptions
Change-Id: I752edbf2f68d4f11bb24ccbce40f0618b4ac5e48
2014-02-01 17:13:15 +01:00
jenkins-bot
70ae276db1 Merge "(bug 47070) check content model namespace on import." 2014-01-28 20:56:02 +00:00
Brad Jorsch
d8b1b79ea4 Move redirect rendering into WikitextContent
There's no good reason for everything that wants to render a page to
have to test whether the page is a redirect and then call
Article::viewRedirect to get the fancy rendering instead of using the
ParserOutput. This logic can easily be moved into
WikitextContent::getParserOutput so callers can just use the
returned ParserOutput.

At the same time, we can handle "#REDIRECT [[File:Foo]]" and
"#REDIRECT [[Category:Foo]]" the way people expect, by recording the
link in pagelinks rather than imagelinks/categorylinks (although this
means fixing ImagePage's bug about assuming anything in imagelinks that
is a redirect is a redirect to the image too).

And we can finally fix bug 14323, too.

Bug: 14323
Bug: 17259
Bug: 27621
Bug: 42642
Bug: 50488
Change-Id: Id44d566a7ca35a1b9579d0c0e947877c980b0686
Followup: I1c7582d1bf7ec4184a45b00154e3dd5b39dd444b
Followup: I3653b608941813a73281f4f0545bea2487d43964
2014-01-07 09:18:22 -05:00
Brian Wolff
7ebbd71744 Make the warning from TextContent::__construct show caller.
Having the warning point to itself isn't very useful.

Bug: 44898
Change-Id: Ia3e73477d323d17c9e97c2dd863255cc2e191f7f
2013-12-20 01:49:55 -07:00
daniel
4cc9407fe9 (bug 47070) check content model namespace on import.
When importing, we need to check that the kind of content we are about to
import is actually allowed in the specified location on the local wiki.


This change does two things:

* Introduce the ContentModelCanBeUsedOn hook which provides control over
which kind of content can be used where.

* Introduce a check against ContentHandler::canBeUsedOn in the importer,
along with an appropriate error message.

Change-Id: Ia2ff0b0474f4727c9ebbba3c0a2a111495055f61
2013-12-17 16:58:57 +00:00