Commit graph

80 commits

Author SHA1 Message Date
MusikAnimal 75fa1ec8c7 Bump Node dependencies and fix deprecations and linting failures
Bumps the following, which will be needed by subsequent patches:

* stylelint-config-wikimedia = 0.16.1
* webpack = 5.89.0
* webpack-cli = 5.1.4
* @babel/preset-env = 7.3.0

Change-Id: Icd44ad126f11365ee1215672cee66868e79c8978
2023-12-06 00:43:15 -05:00
thiemowmde 4c92345e6f Don't detect additional { as part of the template name
It's impossible to have a template that has the character { as part
of the name. The real-world example explained in T292967 is the
sequence {{{!}}. The old code detected this as:
* A template that starts with {{
* The template name is {!
* Template ends with }}

New behavior as proposed in this patch:
* A single { with no special meaning
* The parser function {{!}}

Note this is only a very small improvement, but doesn't fully solve
T292967.

Bug: T292967
Change-Id: Ica3fb110cebb5650f66be321b533ed030e2c9698
2023-11-21 12:47:15 +01:00
thiemowmde aa391c1c77 Much more robust detection of template {{{variables}}}
Variables like {{{foo}}} with 3 brackets typically only appear in
templates. But odd combinations of other features that also start
with 3 brackets are much more common. These should not be detected
as variables.

1. When something starts with 4 or more brackets it's not a variable
but something else. E.g. the start of a template where the template
name is a variable (2 + 3 = 5 brackets).

2. Tables can start with {{{!}}.

Note this doesn't fully solve T292967 but already improves the
situation a lot.

Bug: T108450
Bug: T292967
Change-Id: Id5e50c2bafb35a211d4b63609126c40b32f06a64
2023-11-21 12:30:13 +01:00
MusikAnimal 46b7208d13 Convert applicable ResourceLoader modules to use packageFiles
Move WikiEditor-specific code to ext.CodeMirror.WikiEditor, leaivng only
CodeMirror-specific things in ext.CodeMirror, including the logUsage
method which was duplicated in the VE plugin and now refactored.

Add .env to .gitignore so that selenium tests can be ran more easily

This patch leaves the other non-mediawiki modes still using the
'scripts' system instead of 'packageFiles'. These are not used in
MediaWiki directly but by some extensions (i.e. PhpTags) and using
packageFiles will break that integration.

Bug: T272035
Change-Id: I3bafef196c1f713443d7b8e9cb7dc2891b379f5d
2023-08-24 11:55:13 -04:00
jenkins-bot cbec99c8c4 Merge "Add tags from CodeMirrorPluginModules to extension tags list" 2022-10-05 14:27:22 +00:00
Thiemo Kreuz 7404a9f2a0 Minor optimizations to some patterns in mediawiki mode
Note that this .match() method is not the one you think it is.
This is StringStream.match() from the CodeMirror lib, not ES
String.match().

Change-Id: Ief5048ff78bcd035482e7a68044e24592d28cb6c
2022-08-04 10:36:52 +02:00
jenkins-bot 80278f0758 Merge "Fix inconsistent parsing of quoted tag attributes" 2022-06-17 12:13:03 +00:00
bhsd 44c31c9122 Fix special characters in section headers
When there are standalone special characters '<', '[', '{', and '~' in the section header, the ending '=' will not be highlighted while the ending characters in the next line are incorrectly highlighted. This is because the ending '=' is eaten as plain text at the end of function eatWikiText(). A less aggressive plain text matching does not hurt.

Bug: T309143
Depends-On: I47dad71df97f38c55550f71baf6dae67dbe0a2ba
Change-Id: I4a9c6c6cb2f7fbc212808e386124a56676fdbfb1
2022-05-24 23:09:09 +00:00
Thiemo Kreuz f1aa4c71f6 Fix inconsistent parsing of quoted tag attributes
Turns out the MediaWiki parser behaves odd when confronted with syntax
like this:

  <ref name="a>b"> … </ref>

XML and HTML parsers are usually expected to respect the pair of double
quotes. But our parser doesn't. What it actually does is this:

  <ref name="a"> b"> … </ref>

This change makes the syntax highlighter behave the same. This makes it
easier to spot this issue when editing wikitext.

Bug: T270880
Change-Id: I14bdf6630889fb6d0dea53890a693f00d9356f54
2022-04-06 15:32:56 +00:00
jenkins-bot bec93b7b5a Merge "build: Update devDependencies" 2022-03-16 20:35:03 +00:00
jenkins-bot fa9462342d Merge "Highlight headings with trailing comments" 2022-03-16 20:16:20 +00:00
Ed Sanders 80336b322a build: Update devDependencies
Change-Id: Ia0f3481cb4e153338ef68c1d44951d897ddc7195
2022-03-13 22:56:14 +00:00
AntiCompositeNumber a84828c08c
Highlight headings with trailing comments
Bug: T171074
Change-Id: I1c8399b839a9be5e5aa0ece36dc86a5848936b5f
2022-03-11 17:13:14 -05:00
jenkins-bot c22868121e Merge "Highlight multi-line tags" 2022-03-04 21:09:42 +00:00
bhsd d23dc77d16 Highlight multi-line tags
CodeMirror is already able to highlight multi-line tags if the tag name is followed by any non-whitespace characters in the same line. This commit fixes the other condition where the tag name is followed by whitespace only in the same line.

Bug: T201684
Change-Id: I8cb4a53ee0fe7fc8612a58331a1a3e57d00d7630
2022-02-23 17:02:22 -08:00
AntiCompositeNumber b136622875
Add tags from CodeMirrorPluginModules to extension tags list
Currently, only registered parser tags are included in the list of
extension tags to be highlighted. This patch allows extensions that do
not register their tags as parser tags (Extension:Translate) to still
define them for highlighting using the existing CodeMirrorPluginModules
annotation.
This patch also removes the special-casing for <translate>, as it can be
defined in Translate instead.

Bug: T284883
Co-Authored-by: Tacsipacsi <tacsipacsi@jnet.hu>
Depends-On: I860c944eaeeb7771629a1ed2352c05cfd8d7ca80
Change-Id: Iba2b0b874ebbace7a892af9e1d9896e8b17ade78
2022-02-19 18:36:51 -05:00
bhsd ca0e8f20a4 Highlight tags in link text
HTML and extension tags should be highlighted as the text of internal or external links.

Bug: T184341
Change-Id: Ib1f2047936b395afd86720e2a7c921e382229cdd
2022-02-19 06:11:34 +00:00
Derk-Jan Hartman 73441687ae Add q to list of allowed html elements to syntax highlighting
Bug: T289289
Change-Id: I2ab550c9e992a9daae76287313c596db67182d09
2021-12-04 22:17:26 +01:00
jenkins-bot 6fd33d774f Merge "Fix MediaWiki highlighter partly failing on quoted attributes" 2021-04-30 12:43:30 +00:00
Thiemo Kreuz 032bed3c61 Fix MediaWiki highlighter partly failing on quoted attributes
In T270880 an example with a slash in <ref name="a/b"> is
described. The same issue happens with several other characters
including the closing bracket, e.g. <ref name="a>b">. This patch
fixes all of this by accepting _all_ characters between double
and single quotes.

Bug: T270880
Change-Id: I03a1e1a25af692dc703b44a57b2d23d6fc15c8c9
2021-04-23 20:43:33 +02:00
Thiemo Kreuz 26a05d1dd0 Allow HTML comments and newlines in template names
Bug: T277767
Change-Id: I0a82af178d768e5f4d3dd81b1759c0ce72310397
2021-04-23 15:34:20 +02:00
Thiemo Kreuz cfecfbc099 Fix remaining bottleneck in wikitext syntax highlighter
I was wondering why the performance when editing wikitext is
still so bad, and profiled it again. Turns out
StringStream.match() is still the bottleneck (even if already
100 times better than before Icbb1122).

The method is called with many different patterns from
mode/mediawiki/mediawiki.js. I profiled them individually and
found a single outlier. The idea is the same as in Icbb1122.
A pattern that is able to find something *in* a string is
doing nothing but wasting time, as StringStream.match() ignores
every result that is not at the start of the string.

The change adds the missing ^ anchor and wraps the regex pattern
from mw.config.get( 'wgUrlProtocols' ) (that is something like
"ftp:\/\/|http:\/\/|https:\/\/|…") in (?:…), which is a
non-matching group. This is necessary because of the | in the
pattern. The result is a pattern that looks like /^(?:…|…|…)/i.

I remember looking at this code while working on Icbb1122, but
didn't include it in the patch, and then forgot about it.

Bug: T270237
Bug: T270317
Change-Id: Iea2fd116b68704c3186b0edf965006cc7c6eda82
2021-02-05 16:07:40 +01:00
Thiemo Kreuz f1cf1a534c Fix performance bottleneck in mediawiki syntax highlighter
I continued profiling the matchbrackets addon for T270237 and run into
performance issues that turned out to be unrelated to the addon. The
flame graph highlighted a "match" function. Note this is not the
String.match() from JavaScript, but something in the CodeMirror lib:

StringStream.prototype.match = function (pattern) {
  var match = this.string.match(pattern);
  if (match && match.index > 0) {
    return null;
  }
  return match;
}

(Note: I simplified this code so we can focus on the bug.)

When the pattern is a regular expression, it's executed via
JavaScript's String.match(). The function then checks if there was a
match and if it's at the start of the string. If not, it's not a
match and doesn't return one.

In other words: Even if there is a match somewhere in the string, the
function acts as if there was no match.

When we change all patterns to be anchored via ^, they don't scan the
entire string any more but return much ealier when there is no match
at the start of the string. We are effectively replacing nested loops
(hidden in the patterns) with single calls.

This bug exists since 2014.

The disabled line in the matchbrackets addon is just dead code. I
don't remove it to document the fact that we disabled it.

Bug: T270237
Bug: T270317
Change-Id: Icbb1122e6a3b26c0606726ff405e108931d185be
2021-01-13 16:58:57 +01:00
Derk-Jan Hartman d1a3e49265 Highlight match end tag with different capitalization
This recoginizes <ref></Ref>

Bug: T179321
Change-Id: Ib1e501f97654a019281eddd6cc69ea3b979daec7
2019-04-14 01:25:40 +02:00
Ed Sanders 37b49bfdc4 build: Update eslint-config-wikimedia to 0.11.0
Change-Id: I7ca5276791d9add0709387422016d7193e8d9945
2019-03-06 12:10:29 +00:00
jenkins-bot 0e4bb8feb6 Merge "Don't match // as protocol unless used in a link" 2018-03-15 23:51:21 +00:00
MusikAnimal 5c8eb20c33 Don't match // as protocol unless used in a link
Bug: https://phabricator.wikimedia.org/T185069
Change-Id: I2111e7c7ae599c5aed2f5ae779bc3d7b2d8ce82a
2018-03-13 22:51:35 -04:00
MusikAnimal ccbce0e69d Highlight void tags and invalid self-closing tags correctly
Bug: T170238
Change-Id: Ice1bdae3d16cf365da14c6df0e8d91d2b914e074
2018-03-13 22:18:59 -04:00
jenkins-bot b7a201e2f0 Merge "Fix highlighting of table headers on single text row" 2018-03-13 22:39:01 +00:00
MusikAnimal 62a53c5905 Fix highlighting of table headers on single text row
Bug: https://phabricator.wikimedia.org/T179534
Change-Id: I6e353d52af849678da63624e456ec2a82c680df4
2018-03-13 18:23:16 -04:00
MusikAnimal 980f3d2848 Add <translate> as a permitted tag
Bug: T172456
Change-Id: I2315053b79bfd2dd009a98c0fe824ccdbcaf431c
2018-03-05 15:01:45 -05:00
Pavel Astakhov cd4bdebe8b Add highlighting of double underscore Magic Words as __TOC__
For testing:
__NOTOC__
___NOTOC___
____NOTOC____
_____NOTOC_____
______NO!TOC__NOTOC____
______NO{{TOC}}_____
______NO[[TOC]]_____
______NO'''TOC'''_____
__nOtOc__
FFFFF___NOtoc______
'''____________NOTOC______'''
__TOC___TOC__
__TOC____TOC__
___TOC_____TOC___
__TOC___TOC__
___NOTOC___
____NOTOC____
_____NOTOC_____
______NO!TOC__NOTOC____
______NO{{TOC}}_____
______NO[[TOC]]_____
______NO'''TOC'''_____
__nOtOc__
FFFFF___NOtoc______
{{__TOC__|__TOC__}}

Wrong, but not a big problem:
[[__TOC__|__TOC__]]

Bug: T170041
Change-Id: I0b2cfd02550c2685d241bdf3596507c5972878d5
2017-09-13 10:43:41 +06:00
Max Semenik 54c032d732 Fix exception on some combination of quotes
Bug: T174060
Change-Id: Ie53b7260a98519f45d38d2a705b900142c77c801
2017-08-25 16:05:55 -07:00
Reedy 5cd288b203 Don't use tab indenting between array items
Change-Id: Ifbc293c5075c6518edbefd5d7c4b6ce2cd71ace3
2017-08-21 19:53:52 +01:00
Ed Sanders 410e442fd1 build: Update eslint, stylelint
Whitespace and regex escaping fixes

Change-Id: Ic706dfd3ed7efb16db104b054091bec0ba0cb5ed
2017-07-20 15:58:31 +00:00
Pavel Astakhov c9b4aa65fd Refactor the Integration with other extensions (v 4.0.0)
This patch makes initialization easier and cheaper.

Since only the PhpTags extension uses the CodeMirrorGetAdditionalResources
  hook it was removed. Instead, the CodeMirrorPluginModules and
  CodeMirrorTagModes properties are used in extension.json file.

This patch adds ext.CodeMirror.lib.mode.php module for the PhpTags
  extension (with dependences). In CodeMirror there are a lot of modes
  they will be registered on request (if they will be requered for
  extensions).

Examples of integration:
* Cite: I1bf156fa813af4d5f891619f692047bbdb8a1a86
* PhpTags: Ie339f0475e63885e603defaee2cdcccd6a95fafc

Bug: T163238
Change-Id: Idb7a1a5769a1047ef2f7cd25a7152f73a6613225
2017-05-04 21:20:21 +01:00
Pavel Astakhov 6ce71b3667 Add additional classes cm-mw-ext-{tag name} to extensions tags
They can be used to create specific color themes (T163533)
See also bug T161694

Change-Id: I499e1e4b2e1e4fa972e28fc05a65047ecadc204c
2017-04-23 13:51:24 +06:00
Ed Sanders 66ba217ba2 build: Replace jshint/jscs with eslint, introduce stylelint
Change-Id: I9b5afb39f5a0d32e722b2a1f56c219b8c85b451c
2017-03-21 16:45:56 +00:00
Pavel Astakhov 339e677bee Remove usage of mod function
Change-Id: Id84d85318ef498b4aa8fcbe073b8bc8a8c8c7ed7
2016-07-19 16:31:35 +06:00
Paladox 45ebd2d55d Update Jenkins tests
Test jshint and jscs through npm using latest version of jscs and jshint.

Add support for composer.json running phplint and in the future php code
sniffer.

Change-Id: Id8f11f9414fae8313dc18a857a07e11694354dcb
2016-03-03 13:29:48 +00:00
Pavel Astakhov 991be29500 fix highlighting parameters inside a template transclusion (v 3.2.1)
Bug: T108450
Change-Id: Ic686fe6aa211988d8458037c275779f512d03563
2015-08-20 10:32:11 +06:00
Pavel Astakhov 9acce89672 fix bold and italic apostrophes (v 3.2)
Bug: T108455
Change-Id: Ie9e0d734004d062e4c347f7940eb34bdc231d026
2015-08-19 21:10:31 +06:00
Pavel Astakhov 66b518d8dd fix highlighting of external links, multiple apostrophes end link (3.1.14)
Change-Id: Ibbb4850edc04ed6b184fa59c51e1978d60cd1269
2015-08-14 13:22:47 +06:00
Pavel Astakhov 491f186e14 fix matching hr ---- (v 3.1.13)
Change-Id: I7ea6fa891d2c53da4ac9bd62319dad702a11b8d7
2015-08-14 12:03:41 +06:00
Pavel Astakhov 443ccff873 fix function eatFreeExternalLink (v 3.1.10)
allow one '{' in free external link

Change-Id: Ieaa157b79cff9d05d8bed3ae536cfe45e7e4ae42
2015-08-10 23:30:05 +06:00
Pavel Astakhov 00f668e32c add highlighting of free external links (v 3.1.9)
Bug: T108448
Change-Id: I1311be98e346b9d85350eeb9a6dffaf08f344d56
2015-08-10 23:14:18 +06:00
Pavel Astakhov 545d21ce61 add highlighting of indented tables (v 3.1.8)
Bug: T108454
Change-Id: Ib5344fa870954da166314c8ace916861bd71acf9
2015-08-10 13:48:48 +06:00
Pavel Astakhov 27a7499906 skip leading spaces in table syntax (v 3.1.7)
Bug: T108453
Change-Id: I348855b9ae8a4f571bb765df2b0819ebe3fda75d
2015-08-10 11:07:55 +06:00
Pavel Astakhov 19bced27dc add highlighting of table caption (v 3.1.6)
Bug: T108452
Change-Id: I543db4c26c1a0ed7314ae826ddd2876de7539bf2
2015-08-10 10:34:11 +06:00
Florian Schmidt 3253edba8b Rework extensions setup (v 3.1.0)
* Cleanup the init process of this extension (PHP & JS setup)
* Make it useable for other extensions like MobileFrontend.
* Call new hook CodeMirrorGetAdditionalResources instead of CodeMirrorGetExtensionMode

Bug: T91796
Change-Id: I9763c40835c2edddafb0dcbacdf53a86f663b8cd
2015-03-16 16:45:18 +01:00