Replace leafo/lessphp with oyejorge/less.php
authorOri Livneh <ori@wikimedia.org>
Thu, 10 Sep 2015 22:22:13 +0000 (15:22 -0700)
committerOri.livneh <ori@wikimedia.org>
Fri, 18 Sep 2015 16:49:58 +0000 (16:49 +0000)
Bug: T112035
Change-Id: I826adf981ac28c44f0915ceb059d699d6b23a254

composer.json
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderEditToolbarModule.php
includes/resourceloader/ResourceLoaderFileModule.php

index 1fe1e50..44d4ac6 100644 (file)
@@ -18,8 +18,8 @@
        "require": {
                "cssjanus/cssjanus": "1.1.1",
                "ext-iconv": "*",
-               "leafo/lessphp": "0.5.0",
                "liuggio/statsd-php-client": "1.0.16",
+               "oyejorge/less.php": "1.7.0.5",
                "mediawiki/at-ease": "1.0.0",
                "oojs/oojs-ui": "0.12.8",
                "php": ">=5.3.3",
index 945985a..1886436 100644 (file)
@@ -1608,24 +1608,23 @@ MESSAGE;
         * @param Config $config
         * @throws MWException
         * @since 1.22
-        * @return lessc
+        * @return Less_Parser
         */
        public static function getLessCompiler( Config $config ) {
                // When called from the installer, it is possible that a required PHP extension
                // is missing (at least for now; see bug 47564). If this is the case, throw an
                // exception (caught by the installer) to prevent a fatal error later on.
-               if ( !class_exists( 'lessc' ) ) {
-                       throw new MWException( 'MediaWiki requires the lessphp compiler' );
-               }
-               if ( !function_exists( 'ctype_digit' ) ) {
-                       throw new MWException( 'lessc requires the Ctype extension' );
+               if ( !class_exists( 'Less_Parser' ) ) {
+                       throw new MWException( 'MediaWiki requires the less.php parser' );
                }
 
-               $less = new lessc();
-               $less->setPreserveComments( true );
-               $less->setVariables( self::getLessVars( $config ) );
-               $less->setImportDir( $config->get( 'ResourceLoaderLESSImportPaths' ) );
-               return $less;
+               $parser = new Less_Parser;
+               $parser->ModifyVars( self::getLessVars( $config ) );
+               $parser->SetImportDirs( array_fill_keys( $config->get( 'ResourceLoaderLESSImportPaths' ), '' ) );
+               $parser->SetOption( 'relativeUrls', false );
+               $parser->SetCacheDir( $config->get( 'CacheDirectory' ) ?: wfTempDir() );
+
+               return $parser;
        }
 
        /**
index f3fae0e..da729fd 100644 (file)
@@ -56,7 +56,7 @@ class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule {
                // This is very conveniently formatted and we can pass it right through
                $vars = $language->getImageFiles();
 
-               // lessc tries to be helpful and parse our variables as LESS source code
+               // less.php tries to be helpful and parse our variables as LESS source code
                foreach ( $vars as $key => &$value ) {
                        $value = self::cssSerializeString( $value );
                }
@@ -78,11 +78,11 @@ class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule {
         *
         * @throws MWException
         * @param ResourceLoaderContext $context
-        * @return lessc
+        * @return Less_Parser
         */
        protected function getLessCompiler( ResourceLoaderContext $context = null ) {
-               $compiler = parent::getLessCompiler();
-               $compiler->setVariables( $this->getLessVars( $context ) );
-               return $compiler;
+               $parser = parent::getLessCompiler();
+               $parser->ModifyVars( $this->getLessVars( $context ) );
+               return $parser;
        }
 }
index 112ebc0..7fbc1cb 100644 (file)
@@ -960,17 +960,17 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * Keeps track of all used files and adds them to localFileRefs.
         *
         * @since 1.22
-        * @throws Exception If lessc encounters a parse error
+        * @throws Exception If less.php encounters a parse error
         * @param string $fileName File path of LESS source
-        * @param lessc $compiler Compiler to use, if not default
+        * @param Less_Parser $parser Compiler to use, if not default
         * @return string CSS source
         */
        protected function compileLessFile( $fileName, $compiler = null ) {
                if ( !$compiler ) {
                        $compiler = $this->getLessCompiler();
                }
-               $result = $compiler->compileFile( $fileName );
-               $this->localFileRefs += array_keys( $compiler->allParsedFiles() );
+               $result = $compiler->parseFile( $fileName )->getCss();
+               $this->localFileRefs += array_keys( $compiler->AllParsedFiles() );
                return $result;
        }
 
@@ -982,7 +982,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @param ResourceLoaderContext $context
         * @throws MWException
         * @since 1.24
-        * @return lessc
+        * @return Less_Parser
         */
        protected function getLessCompiler( ResourceLoaderContext $context = null ) {
                return ResourceLoader::getLessCompiler( $this->getConfig() );