Coder Social home page Coder Social logo

isabella232 / less.php Goto Github PK

View Code? Open in Web Editor NEW

This project forked from siteorigin/less.php

0.0 0.0 0.0 2.78 MB

less.js ported to PHP.

Home Page: http://lessphp.typesettercms.com

License: Apache License 2.0

PHP 11.86% CSS 40.52% HTML 0.01% JavaScript 47.62%

less.php's Introduction

Less.php

This is a PHP port of the official LESS processor http://lesscss.org. Build Status

About

The code structure of less.php mirrors that of the official processor which helps us ensure compatibility and allows for easy maintenance.

Please note, there are a few unsupported LESS features:

  • Evaluation of JavaScript expressions within back-ticks (for obvious reasons).
  • Definition of custom functions.

Installation

You can install the library with composer or manually.

Composer

Step 1. Edit your composer.json:

{
    "require": {
        "oyejorge/less.php": "~1.7.0.9"
    }
}

Step 2. Install it:

$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar install

Manually From Release

Step 1. Download the latest release and upload the php files to your server.

Step 2. Include the library:

require_once '[path to less.php]/Less.php';

Manually From Source

Step 1. Download the source and upload the files in /lib/Less to a folder on your server.

Step 2. Include the library and register the Autoloader

require_once '[path to less.php]/Autoloader.php';
Less_Autoloader::register();

Basic Use

Parsing Strings

$parser = new Less_Parser();
$parser->parse( '@color: #4D926F; #header { color: @color; } h2 { color: @color; }' );
$css = $parser->getCss();

Parsing Less Files

The parseFile() function takes two arguments:

  1. The absolute path of the .less file to be parsed
  2. The url root to prepend to any relative image or @import urls in the .less file.
$parser = new Less_Parser();
$parser->parseFile( '/var/www/mysite/bootstrap.less', 'http://example.com/mysite/' );
$css = $parser->getCss();

Handling Invalid Less

An exception will be thrown if the compiler encounters invalid less

try{
	$parser = new Less_Parser();
	$parser->parseFile( '/var/www/mysite/bootstrap.less', 'http://example.com/mysite/' );
	$css = $parser->getCss();
}catch(Exception $e){
	$error_message = $e->getMessage();
}

Parsing Multiple Sources

less.php can parse multiple sources to generate a single css file

$parser = new Less_Parser();
$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' );
$parser->parse( '@color: #4D926F; #header { color: @color; } h2 { color: @color; }' );
$css = $parser->getCss();

Getting Info About The Parsed Files

less.php can tell you which .less files were imported and parsed.

$parser = new Less_Parser();
$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' );
$css = $parser->getCss();
$imported_files = $parser->allParsedFiles();

Compressing Output

You can tell less.php to remove comments and whitespace to generate minimized css files.

$options = array( 'compress'=>true );
$parser = new Less_Parser( $options );
$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' );
$css = $parser->getCss();

Getting Variables

You can use the getVariables() method to get an all variables defined and their value in a php associative array. Note than less have to be previously compiled

$parser = new Less_Parser;
$parser->parseFile( '/var/www/mysite/bootstrap.less');
$css = $parser->getCss();
$variables = $parser->getVariables();

Setting Variables

You can use the ModifyVars() method to customize your css if you have variables stored in php associative arrays

$parser = new Less_Parser();
$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' );
$parser->ModifyVars( array('font-size-base'=>'16px') );
$css = $parser->getCss();

Import Directories

By default, less.php will look for @imports in the directory of the file passed to parsefile(). If you're using parse() or if @imports reside in different directories, you can tell less.php where to look.

$directories = array( '/var/www/mysite/bootstrap/' => '/mysite/bootstrap/' );
$parser = new Less_Parser();
$parser->SetImportDirs( $directories );
$parser->parseFile( '/var/www/mysite/theme.less', '/mysite/' );
$css = $parser->getCss();

Caching

Compiling less code into css is a time consuming process, caching your results is highly recommended.

Caching CSS

Use the Less_Cache class to save and reuse the results of compiled less files. This method will check the modified time and size of each less file (including imported files) and regenerate a new css file when changes are found. Note: When changes are found, this method will return a different file name for the new cached content.

$less_files = array( '/var/www/mysite/bootstrap.less' => '/mysite/' );
$options = array( 'cache_dir' => '/var/www/writable_folder' );
$css_file_name = Less_Cache::Get( $less_files, $options );
$compiled = file_get_contents( '/var/www/writable_folder/'.$css_file_name );

Caching CSS With Variables

Passing options to Less_Cache::Get()

$less_files = array( '/var/www/mysite/bootstrap.less' => '/mysite/' );
$options = array( 'cache_dir' => '/var/www/writable_folder' );
$variables = array( 'width' => '100px' );
$css_file_name = Less_Cache::Get( $less_files, $options, $variables );
$compiled = file_get_contents( '/var/www/writable_folder/'.$css_file_name );

Parser Caching

less.php will save serialized parser data for each .less file if a writable folder is passed to the SetCacheDir() method. Note: This feature only caches intermediate parsing results to improve the performance of repeated css generation. Your application should cache any css generated by less.php.

$options = array('cache_dir'=>'/var/www/writable_folder');
$parser = new Less_Parser( $options );
$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' );
$css = $parser->getCss();

You can specify the caching technique used by changing the cache_method option. Supported methods are:

  • php: Creates valid PHP files which can be included without any changes (default method).
  • var_export: Like "php", but using PHPs var_export() function without any optimizations. It's recommended to use "php" instead.
  • serialize: Faster, but pretty memory-intense.
  • callback: Use custom callback functions to implement your own caching method. Give the "cache_callback_get" and "cache_callback_set" options with callables (see PHPs call_user_func() and is_callable() functions). less.php will pass the parser object (class Less_Parser), the path to the parsed .less file ("/some/path/to/file.less") and an identifier that will change every time the .less file is modified. The get callback must return the ruleset (an array with Less_Tree objects) provided as fourth parameter of the set callback. If something goes wrong, return NULL (cache doesn't exist) or FALSE.

Source Maps

Less.php supports v3 sourcemaps

Inline

The sourcemap will be appended to the generated css file.

$options = array( 'sourceMap' => true );
$parser = new Less_Parser($options);
$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' );
$css = $parser->getCss();

Saving to Map File

$options = array(
	'sourceMap'			=> true,
	'sourceMapWriteTo'	=> '/var/www/mysite/writable_folder/filename.map',
	'sourceMapURL'		=> '/mysite/writable_folder/filename.map',
	);
$parser = new Less_Parser($options);
$parser->parseFile( '/var/www/mysite/bootstrap.less', '/mysite/' );
$css = $parser->getCss();

Command line

An additional script has been included to use the compiler from the command line. In the simplest invocation, you specify an input file and the compiled css is written to standard out:

$ lessc input.less > output.css

By using the -w flag you can watch a specified input file and have it compile as needed to the output file:

$ lessc -w input.less output.css

Errors from watch mode are written to standard out.

For more help, run lessc --help

Integration with other projects

Drupal 7

This library can be used as drop-in replacement of lessphp to work with Drupal 7 less module.

How to install:

  1. Download the less.php source code and unzip it so that 'lessc.inc.php' is located at 'sites/all/libraries/lessphp/lessc.inc.php'.
  2. Download and install Drupal 7 less module as usual.
  3. That's it :)

JBST WordPress theme

JBST has a built-in LESS compiler based on lessphp. Customize your WordPress theme with LESS.

How to use / install:

  1. Download the latest release copy the files to your {wordpress/}wp-content/themes folder and activate it.
  2. Find the compiler under Appearance > LESS Compiler in your WordPress dashboard
  3. Enter your LESS code in the text area and press (re)compile

Use the built-in compiler to:

  • set any Bootstrap variable or use Bootstrap's mixins: -@navbar-default-color: blue; - create a custom button: .btn-custom { .button-variant(white; red; blue); }
  • set any built-in LESS variable: for example @footer_bg_color: black; sets the background color of the footer to black
  • use built-in mixins: - add a custom font: .include-custom-font(@family: arial,@font-path, @path: @custom-font-dir, @weight: normal, @style: normal);

The compiler can also be download as plugin

WordPress

This simple plugin will simply make the library available to other plugins and themes and can be used as a dependency using the TGM Library

How to install:

  1. Install the plugin from your WordPress Dashboard: http://wordpress.org/plugins/lessphp/
  2. That's it :)

Transitioning from Leafo/lessphp

Projects looking for an easy transition from leafo/lessphp can use the lessc.inc.php adapter. To use, Download the less.php source code and unzip the files into your project so that the new 'lessc.inc.php' replaces the existing 'lessc.inc.php'.

Note, the 'setPreserveComments' will no longer have any effect on the compiled less.

Credits

less.php was originally ported to php by Matt Agar and then updated by Martin Jantošovič.

less.php's People

Contributors

adrianbadarau avatar agar avatar asenar avatar barrydam avatar barryvdh avatar bassjobsen avatar braamgenis avatar bradcrumb avatar dkrnl avatar fabrizim avatar hason avatar lduer avatar mlocati avatar mordred avatar nicjansma avatar nodge avatar nyordanov avatar oyejorge avatar pafnuty avatar paladox avatar pavelthq avatar phrozenbyte avatar ravisorg avatar reedy avatar rummik avatar scrutinizer-auto-fixer avatar storeman avatar tomarrow avatar vburlak avatar zghosts avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.