[wp-trac] [WordPress Trac] #31332: RTL CSS generation: Switch from CSSJanus to RTLCSS

WordPress Trac noreply at wordpress.org
Sat Feb 14 17:54:14 UTC 2015


#31332: RTL CSS generation: Switch from CSSJanus to RTLCSS
------------------------------+-----------------------
 Reporter:  ocean90           |      Owner:
     Type:  defect (bug)      |     Status:  new
 Priority:  normal            |  Milestone:  4.2
Component:  Build/Test Tools  |    Version:
 Severity:  normal            |   Keywords:  has-patch
  Focuses:                    |
------------------------------+-----------------------
 == Prologue

 Three days ago we were finally able to switch back from a ''temporarily''
 fork of grunt-cssjanus and CSSJanus to the official ones, see [31425]. The
 ''temporary'' fork was created 6 months ago by me to fix an issue related
 to `border-radius`, see #29038.
 This wasn't the first pin to a patched fork, the first one was 15 months
 ago, see [26610].

 After [31425] ([https://build.trac.wordpress.org/changeset/31406 build
 changeset r31406]), I had noticed that there is something wrong with text
 shadows. And I was right, it switches the y-coordinate instead of the
 x-coordinate. I've reported the
 [https://github.com/cssjanus/cssjanus/pull/32 issue upstream]. But I don't
 want to patch CSSJanus anymore.



 == RTLCSS

 So I did some research and found [RTLCSS by Mohammad Younes
 https://github.com/MohammadYounes/rtlcss]. Same as CSSJanus is RTLCSS a
 framework for converting LTR CSS to RTL. It supports the following CSS
 properties:

 `background`, `background-image`, `background-position`, `background-
 position-x`, `border-bottom-left-radius`, `border-bottom-right-radius`,
 `border-color`, `border-left`, `border-left-color`, `border-left-style`,
 `border-left-width`, `border-radius`, `border-right`, `border-right-
 color`, `border-right-style`, `border-right-width`, `border-style`,
 `border-top-left-radius`, `border-top-right-radius`, `border-width`, `box-
 shadow`, `clear`, `cursor`, `direction`, `float`, `left`, `margin`,
 `margin-left`, `margin-right`, `padding`, `padding-left`, `padding-right`,
 `right`, `text-align`, `text-shadow`, `transform`, `transform-origin`,
 `transition`, `transition-property`

 `transform`, `transform-origin`, `transition` and `transition-property`
 are not supported by CSSJanus. RTLCSS supports also multiple values for
 `box-shadow` and `text-shadow`.

 I also did a look at the source code of RTLCSS and it looks much better
 than CSSJanus, it benefits of using [https://github.com/postcss/postcss
 PostCSS] for parsing CSS. (PostCSS is also used by Autoprefixer. \o/)

 And coincidentally, I've found an issue related to parsing text shadows,
 sigh. But hey, it got [https://github.com/MohammadYounes/rtlcss/pull/20
 merged] in under 24 hours!



 == Can i haz a grunt task?

 Sure, there is [https://github.com/MohammadYounes/grunt-rtlcss grunt-
 rtlcss], also maintained by Mohammad. It supports everything what grunt-
 cssjanus does. (I only had to ask for a `generateExactDuplicates:false`
 option, see merged [https://github.com/MohammadYounes/grunt-rtlcss/pull/1
 pull request].)

 CSSJanus has a `processContent` option which I've replaced with a
 [https://github.com/MohammadYounes/rtlcss#stringmap-array stringMap] in
 RTLCSS:

 {{{
 {
         name: 'import-rtl-stylesheet',
         search: [ '.css' ],
         replace: [ '-rtl.css' ],
         options: {
                 scope: 'url',
                 ignoreCase: false
         }
 }
 }}}

 Other options we should use:

 {{{
 swapLeftRightInUrl: false,
 swapLtrRtlInUrl: false,
 autoRename: false, // Don't rename left/right in selectors
 preserveDirectives: true, // Don't remove the directives (optional,
 CSSJanus does this default)
 }}}

 Speaking of directives, CSSJanus has `/* @noflip */` while RTLCSS uses `/*
 rtl:ignore */` ([https://github.com/MohammadYounes/rtlcss#supported-
 processing-directives and others]).



 == The patch

 The attached patch adds `"grunt-rtlcss": "~1.5.1",` to our
 devDependencies, changes the RTL grunt task per above, and updates our
 stylesheets to use the new directive. Since RTLCSS supports `transform`
 too, we have to add some additional directives, like `about.css`. But we
 can also remove some, see `media-view.css`.

 I set this as a bug, since RTL text shadows are broken currently.

--
Ticket URL: <https://core.trac.wordpress.org/ticket/31332>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list