Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/everzet/sflessplugin
less.js in symfony
https://github.com/everzet/sflessplugin
Last synced: 24 days ago
JSON representation
less.js in symfony
- Host: GitHub
- URL: https://github.com/everzet/sflessplugin
- Owner: everzet
- License: mit
- Created: 2010-06-21T10:37:16.000Z (over 14 years ago)
- Default Branch: master
- Last Pushed: 2011-12-19T14:58:27.000Z (almost 13 years ago)
- Last Synced: 2023-10-20T19:44:59.548Z (about 1 year ago)
- Language: PHP
- Homepage:
- Size: 225 KB
- Stars: 27
- Watchers: 2
- Forks: 16
- Open Issues: 2
-
Metadata Files:
- Readme: README.markdown
- License: LICENSE
Awesome Lists containing this project
README
# sfLESSPlugin #
*less.js in symfony.*
sfLESSPlugin is a plugin for symfony applications. It's descendant of sfLessPhpPlugin, but with LESS2 compiler in mind.
It can do most of `less.js` can:
* Automatically parse your application `.less` files through LESS and outputs CSS files;
* Automatically include your application `.less` files into page source & enable browser-side LESS parsing.## LESS & less.js ##
LESS extends CSS with: variables, mixins, operations and nested rules. For more information, see [http://lesscss.org](http://lesscss.org).
less.js is LESS2. It's written on pure JavaScript & can be runned on both sides - in browser or in node.js.
## Installation ##
### Using symfony plugin:install ###
Use this to install sfLESSPlugin:
$ symfony plugin:install sfLESSPlugin
### Using git clone ###
Use this to install as a plugin in a symfony app:
$ cd plugins && git clone git://github.com/everzet/sfLESSPlugin.git
### Using git submodules ###
Use this if you prefer to use git submodules for plugins:
$ git submodule add git://github.com/everzet/sfLESSPlugin.git plugins/sfLESSPlugin
$ git submodule init
$ git submodule updateand enable plugin in your ProjectConfigurations class.
## Usage ##
### Prepare ###
After installation, you need to create directory `web/less`. Any LESS file placed in this directory, including subdirectories, will
automatically be parsed through LESS and saved as a corresponding CSS file in `web/css`. Example:web/less/clients/screen.less => web/css/clients/screen.css
### Style partials ###
If you prefix a file with an underscore, it is considered to be a partial, and will not be parsed unless included in another file. Example:
@text_dark: #222;
@import "partials/_form";
input { color: @text_dark; }The example above will result in a single CSS file in `web/css/clients/screen.css`.
## Setup ##
sfLESSPlugin can use 2 workflows to manage your *.less files:
1. Compile on browser side by `less.js`;
2. Compile on server side by `lessc`.### prepare: Update layout ###
For both flows, you need to update your layout files (at least the ones using less stylesheets):
* include the less css helper:
* update the way stylesheets are included by changing `` for ``
### 1st way: Compile on browser side ###
This is default plugin behaviour. In this behaviour, all stylesheets ending with `.less`, added in:
* your `view.yml` configs:
stylesheets: [header/main.less]
* a template view file:
In this case, it will be automatically changed from something like:
to link like:
and will add link to `less.js` into javascripts list.
This will cause browser to parse your linked less files on the fly through `less.js`.
### 2nd way: Compile on server side ###
In details, sfLESSPlugin server side compiler does the following:
* Recursively looks for LESS (`.less`) files in `web/less`
* Ignores partials (prefixed with underscore: `_partial.less`) - these can be included with `@import` in your LESS files
* Saves the resulting CSS files to `web/css` using the same directory structure as `web/less`You have to install 2 packages:
1. `node.js` - server side interp., based on Google V8 JS engine;
2. `less.js` - `LESS2`. You can install this with Node Package Manager (`npm install less`).After that, enable server behavior & disable browser behavior in `app.yml`:
sf_less_plugin:
compile: true
use_js: falseIn this case, sfLESSPlugin will try to find all your less files inside `web/less/*.less` & compile them into `web/css/*.css`, so you can link your less styles as default css stylesheets:
stylesheets: [main.css]
or (best way) with:
stylesheets: [main.less]
so `include_less_stylesheets` helper will automatically change `.less` extension to `.css`, but you still will have ability to change compiler type (server side <-> browser side) on the fly with single change in `app.yml`
## Configuration ##
sfLESSPlugin server side compiler rechecks `web/less/*.less` at every routes init. To prevent this, add this in your apps/APP/config/app.yml:
prod:
sf_less_plugin:
compile: falsesfLESSPlugin server side compiler checks the dates of LESS & CSS files, and will by default compile again only if LESS file have been changed since last parsing .
When you use `@import` statements in your LESS files to include partials (styles with `_` prefix), you should also turn on dependencies checking (because, less compiler will not rerun on partials change) in one of you app.yml:
dev:
sf_less_plugin:
check_dates: true
check_dependencies: true**warning:** Checking for the dependencies will affect performances and should not be turned on in production
The safest (but probably slowest) option is to enforce everytime compiling:
dev:
sf_less_plugin:
check_dates: falseAlso, sfLESSPlugin server side compiler has Web Debug Panel, from which you can view all styles to compile & can open them for edit in prefered editor. For that you need to configure `sf_file_link_format` in `settings.yml`.
Last but not least, you can enable CSS compression (remove of whitespaces, tabs & newlines) in server side compiler with:
all:
sf_less_plugin:
use_compression: trueIn order to workaround [a flaw in the less compiler](http://github.com/cloudhead/less.js/issues#issue/49) you can use the following option:
all:
sf_less_plugin:
fix_duplicate: true## Tasks ##
sfLESSPlugin server side compiler provides a set of CLI tasks to help compiling your LESS styles.
To parse all LESS files and save the resulting CSS files to the destination path, run:
$ symfony less:compile
To delete all compiled CSS (only files, that been compiled from LESS files) files before parsing LESS, run:
$ symfony less:compile --clean
If you want to compress CSS files after compilation, run:
$ symfony less:compile --compress
Also, by default tasks don't use settings from app.yml such as "path". But you can specify application option to tell compiler from which app to get config:
$ symfony less:compile --application=frontend
If you want to compile specific file, not all, just use argument & file name without ".less". To compile style.less into style.css, just run:
$ symfony less:compile style
## Contributors ##
* everzet (lead): [http://github.com/everzet](http://github.com/everzet)
* vicb (contributor): [http://github.com/vicb](http://github.com/vicb)less.js is maintained by Alexis Sellier [http://github.com/cloudhead](http://github.com/cloudhead)
## History ##
### github latest ###
* updated readme & some refactorings
* dependency check improvements
* [client side] less.js updated to version 1.0.33### v1.1.0 released on 2010-07-01 ###
* added an helper to include less stylesheets in layouts / templates
* [client side] less javascript updated to version 1.0.30
* [server side] added a visual feedback in the debug bar when some files have been compiled
* [server side] added an optional dependency check