Page MenuHomePhabricator

Migrate bare division math to parens-division in Less stylesheet files (in WMF-deployed extensions)
Closed, ResolvedPublic

Description

Change

In order to support native CSS features that utilize the slash operator, upstream Less.js has decided to deprecate use of slash in bare math mode. That is, math without parenthesis.

Demo: Try it yourself

input.less Example
.bare {
  @foo: 12px / 2;
  height: @foo;
  max-height: @foo * 2;
  width: @foo / 3;
}
.parens {
  @foo: (12px / 2);
  height: @foo;
  max-height: @foo * 2;
  width: (@foo / 3);
}
output.css Before Less.js 4.0 (and before Less.php 5.0 math: always)
.bare {
  height: 6px;
  max-height: 12px;
  width: 2px;
}
.parens {
  height: 6px;
  max-height: 12px;
  width: 2px;
}
output.css After Less.js 4.0 (and Less.php 5.0 math: parens-division)
.bare { /* Changed */
  height: 12px / 2;
  max-height: 12px / 2 * 2;
  width: 12px / 2 / 3;
}
.parens { /* Unchanged */
  height: 6px;
  max-height: 12px;
  width: 2px;
}

Background

These are examples of CSS browser features that (until now) required MediaWiki developers to use string evaluation workarounds, because Less.js and Less.php would try to compile them as math, even though they are not intended to be math. For example:

From T366445 task description:

Historically, upstream Less.js has had two math options:

  • "always" (default, aka "strictMath false"). This eagerly performs math almost everywhere.
  • "parens" (aka "strict" ot "strictMath true"). This restricts math to inside optional parenthesis only (i.e. parenthesis not relating to other CSS syntax).

As a compromise, to be the last disruptive to the ecosystem, Less.js 3.0 introduded a third mode: "parens-division". This continous to allow math without parenthesis, but in order to perform math with a slash for division, it needs to be wrapped in parenthesis. It also introduces ./ as a way to force math outside parenthesis. Documentation at: https://lesscss.org/usage/#less-options-math.

We have implemented thenew Less.js 3.0 behaviours and switched the default to "parens-division" as part of Less.php 5.0. Details at T366445: Add support for Maths(strictMath) option when it is set to parens-division and T288498: Update less.php port to support Less.js 3.13 behaviours.

Migration

Codesearch: Bare math slash in Less files.

There are approximately 50 files using the deprecated as of writing.

Before we can switch to math=parens-division we have to update these to use parenthesis.

  • Codex (unaffected, already prepared and Less.js 4-compatible)
  • MediaWiki core: HTMLForm
  • MediaWiki core: RCFilters, part of MediaWiki-Recent-changes
  • MediaWiki core: OOUI "mediawiki.widgets", part of MediaWiki-User-Interface
  • GrowthExperiments extension
  • MediaSearch extension, T371313
  • AdvancedSearch extension
  • CheckUser extension
  • ContentTranslation extension
  • DiscussionTools extension
  • Echo extension, Notifications (Echo)
  • Flow extension, StructuredDiscussions
  • Kartographer extension
  • MobileFrontend extension, T369669, T382931
  • Popups extension, T369669
  • TemplateData extension
  • TimedMediaHandler extension (unaffected)
  • UniversalLanguageSelector extension
  • UploadWizard extension, T371313
  • WikiLambda extension
  • WikibaseMediaInfo extension, T371313
  • services-mobileapps (unafffected, doesn't involve MediaWiki or Less.php)
  • Minerva skin, T369669, T382931
  • Vector skin, T369669

Details

Related Changes in Gerrit:
SubjectRepoBranchLines +/-
mediawiki/coreREL1_39+2 -0
mediawiki/coreREL1_42+1 -0
mediawiki/coremaster+1 -1
mediawiki/extensions/GuidedTourmaster+1 -1
mediawiki/extensions/WikibaseMediaInfomaster+1 -1
mediawiki/extensions/GrowthExperimentsmaster+1 -1
mediawiki/coremaster+4 -4
mediawiki/extensions/VisualEditormaster+1 -1
mediawiki/coremaster+5 -5
mediawiki/extensions/GrowthExperimentsmaster+4 -4
mediawiki/extensions/Flowmaster+1 -1
mediawiki/extensions/MediaSearchmaster+12 -12
mediawiki/extensions/GrowthExperimentsmaster+16 -16
mediawiki/extensions/Kartographermaster+1 -1
mediawiki/extensions/UniversalLanguageSelectormaster+3 -3
mediawiki/extensions/AdvancedSearchmaster+1 -1
mediawiki/extensions/DiscussionToolsmaster+2 -2
mediawiki/extensions/Echomaster+1 -1
mediawiki/extensions/ContentTranslationmaster+2 -2
mediawiki/extensions/CheckUsermaster+1 -1
mediawiki/coremaster+1 -0
mediawiki/coremaster+20 -20
mediawiki/coremaster+24 -24
mediawiki/coremaster+4 -3
mediawiki/extensions/Flowmaster+3 -2
mediawiki/extensions/WikiLambdamaster+1 -1
mediawiki/extensions/TemplateDatamaster+1 -1
Show related patches Customize query in gerrit

Related Objects

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

@Krinkle is there a timeline you are working towards here that I can communicate to our PM?

Sometime in the next 3 weeks would be great!

Krinkle updated the task description. (Show Details)

Change #1055259 had a related patch set uploaded (by Krinkle; author: Hokwelum):

[mediawiki/core@master] ResourceLoader: Hardcode the default math before Less.php 5.0 upgrade

https://gerrit.wikimedia.org/r/1055259

Change #1055259 merged by jenkins-bot:

[mediawiki/core@master] ResourceLoader: Hardcode the default math before Less.php 5.0 upgrade

https://gerrit.wikimedia.org/r/1055259

Change #1058655 had a related patch set uploaded (by Hokwelum; author: Hokwelum):

[mediawiki/extensions/CheckUser@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058655

Change #1058656 had a related patch set uploaded (by Hokwelum; author: Hokwelum):

[mediawiki/extensions/ContentTranslation@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058656

Change #1058665 had a related patch set uploaded (by Hokwelum; author: Hokwelum):

[mediawiki/extensions/GrowthExperiments@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058665

Change #1058666 had a related patch set uploaded (by Hokwelum; author: Hokwelum):

[mediawiki/extensions/MediaSearch@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058666

Change #1058667 had a related patch set uploaded (by Hokwelum; author: Hokwelum):

[mediawiki/extensions/AdvancedSearch@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058667

Change #1058668 had a related patch set uploaded (by Hokwelum; author: Hokwelum):

[mediawiki/extensions/DiscussionTools@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058668

Change #1058670 had a related patch set uploaded (by Hokwelum; author: Hokwelum):

[mediawiki/extensions/Echo@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058670

Change #1058671 had a related patch set uploaded (by Hokwelum; author: Hokwelum):

[mediawiki/extensions/Kartographer@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058671

Change #1058674 had a related patch set uploaded (by Hokwelum; author: Hokwelum):

[mediawiki/extensions/UniversalLanguageSelector@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058674

Change #1058655 merged by jenkins-bot:

[mediawiki/extensions/CheckUser@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058655

Change #1058676 had a related patch set uploaded (by Hokwelum; author: Hokwelum):

[mediawiki/extensions/UploadWizard@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058676

Change #1058656 merged by jenkins-bot:

[mediawiki/extensions/ContentTranslation@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058656

Change #1058668 merged by jenkins-bot:

[mediawiki/extensions/DiscussionTools@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058668

Change #1058670 merged by jenkins-bot:

[mediawiki/extensions/Echo@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058670

Change #1058667 merged by jenkins-bot:

[mediawiki/extensions/AdvancedSearch@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058667

Change #1058674 merged by jenkins-bot:

[mediawiki/extensions/UniversalLanguageSelector@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058674

Change #1058671 merged by jenkins-bot:

[mediawiki/extensions/Kartographer@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058671

Change #1058665 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058665

Change #1058666 merged by jenkins-bot:

[mediawiki/extensions/MediaSearch@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1058666

@Krinkle im working on this now, is it a problem to have slashes inside unit like so?

unit( 14 / @font-size-browser, em ); // Equals `0.875em`.

I recommend trying it on the demo to be sure.

This seems resolved, right ?

Change #1105993 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/extensions/Flow@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1105993

Change #1105993 merged by jenkins-bot:

[mediawiki/extensions/Flow@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1105993

Change #1119720 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/core@master] ResourceLoader: Enable Less.php math=parens-division

https://gerrit.wikimedia.org/r/1119720

Change #1119821 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/extensions/VisualEditor@master] ve.ui.MWTransclusionOutlineWidget: Fix invalid slash in rgba()

https://gerrit.wikimedia.org/r/1119821

Change #1119822 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/extensions/GrowthExperiments@master] styles: Add missing parens to slash division

https://gerrit.wikimedia.org/r/1119822

Change #1119823 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/core@master] jquery.spinner: Add missing parens to slash division

https://gerrit.wikimedia.org/r/1119823

Change #1119822 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] styles: Add missing parens to slash division

https://gerrit.wikimedia.org/r/1119822

Change #1119823 merged by jenkins-bot:

[mediawiki/core@master] resources: Add missing parens to slash division

https://gerrit.wikimedia.org/r/1119823

Change #1119821 merged by jenkins-bot:

[mediawiki/extensions/VisualEditor@master] ve.ui.MWTransclusionOutlineWidget: Fix invalid slash in rgba()

https://gerrit.wikimedia.org/r/1119821

Change #1123735 had a related patch set uploaded (by Krinkle; author: Krinkle):

[mediawiki/core@master] mediawiki.ui: Add missing parens to slash division

https://gerrit.wikimedia.org/r/1123735

Change #1123735 merged by jenkins-bot:

[mediawiki/core@master] mediawiki.ui: Add missing parens to slash division

https://gerrit.wikimedia.org/r/1123735

Change #1125219 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/GrowthExperiments@master] Add parenthesis for all division

https://gerrit.wikimedia.org/r/1125219

Change #1125222 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/WikibaseMediaInfo@master] Add parenthesis for all division

https://gerrit.wikimedia.org/r/1125222

Change #1125219 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Add parenthesis for all division

https://gerrit.wikimedia.org/r/1125219

Change #1125230 had a related patch set uploaded (by Jdlrobson; author: Jdlrobson):

[mediawiki/extensions/GuidedTour@master] Add parenthesis for all division

https://gerrit.wikimedia.org/r/1125230

Change #1125222 merged by jenkins-bot:

[mediawiki/extensions/WikibaseMediaInfo@master] Add parenthesis for all division

https://gerrit.wikimedia.org/r/1125222

Change #1125230 merged by jenkins-bot:

[mediawiki/extensions/GuidedTour@master] Add parenthesis for all division

https://gerrit.wikimedia.org/r/1125230

Change #1119720 merged by jenkins-bot:

[mediawiki/core@master] ResourceLoader: Enable Less.php math=parens-division

https://gerrit.wikimedia.org/r/1119720

Krinkle closed this task as Resolved.EditedMar 11 2025, 9:42 PM
Krinkle claimed this task.

On Monday, ahead of the 1.44.0-wmf.20 branch cut, we found three more violations by testing on Beta:

  1. Vector: This was missed in T382931: [REQUEST] Review unparenthesised slash division in MobileFrontend and Minerva and update if necessary, and separately reported at T388475.

Hannah fixed it. It was confirmed to not affect testwiki (that is, the branch cut hadn't happened yet), and reviewed, merged, and confirmed fixed on Beta Cluster by myself. A backlogged CI (due to a bad vendor patch earlier that day) meant that this patch did not actually land an hour before the branch cut, but instead 15min after the branch cut. This was realized during group0 testing, and a backport proposed.

  1. MediaViewer. This was spotted in Beta Logstash by Hannah before the branch cut, and fixed by Hannah. https://gerrit.wikimedia.org/r/c/mediawiki/extensions/MultimediaViewer/+/1126205 The same CI delay meant this patch too didn't actually make the cut. A duplicate was later filed based on group0 testing at T388526: MediaViewer broken in wmf.20 due to LESS change: Less_Exception_Compiler: error evaluating function `floor` math functions take numbers as parameters index: 1191 in mmv.ui.metadataPanel.less.
  1. MediaSearch. Spotted in Beta Logstash by Hannah before the branch cut, and fixed by Hannah. https://gerrit.wikimedia.org/r/c/mediawiki/extensions/MediaSearch/+/1126206 It was approved before the branch cut. However, it seems this extension has been abandoned for two months with CI failing its own master branch, thus preventing patches from landing (T384632). Gergo force-merged this the next morning.

According to Logstash, this is the last one:

Change #1126610 merged by jenkins-bot:

[mediawiki/extensions/SearchVue@master] Prepare Less styles for math=parens-division

https://gerrit.wikimedia.org/r/1126610

Should be smooth next week when it all rolls out together.

Feel free to tag this with any late findings, i.e. for extensions not covered by the CI gate, and haven't run their own CI in two weeks, and/or register code outside the scope of Core's structure tests.

Change #1131466 had a related patch set uploaded (by Krinkle; author: Hokwelum):

[mediawiki/core@REL1_42] ResourceLoader: Set "math=always" before Less.php 5.0 upgrade

https://gerrit.wikimedia.org/r/1131466

Change #1131467 had a related patch set uploaded (by Krinkle; author: Hokwelum):

[mediawiki/core@REL1_39] ResourceLoader: Set "math=always" before Less.php 5.0 upgrade

https://gerrit.wikimedia.org/r/1131467

Change #1131466 merged by jenkins-bot:

[mediawiki/core@REL1_42] ResourceLoader: Set "math=always" before Less.php 5.0 upgrade

https://gerrit.wikimedia.org/r/1131466

Change #1131467 merged by jenkins-bot:

[mediawiki/core@REL1_39] ResourceLoader: Set "math=always" before Less.php 5.0 upgrade

https://gerrit.wikimedia.org/r/1131467