From d717c2b8fbb113fceee1f434fd901f15a9600413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1ria=20Jur=C4=8Dovi=C4=8Dov=C3=A1?= Date: Wed, 22 Jan 2014 14:25:27 +0100 Subject: [PATCH 1/2] Update README.md --- README.md | 351 +----------------------------------------------------- 1 file changed, 1 insertion(+), 350 deletions(-) diff --git a/README.md b/README.md index a4c5d128..c9a78d46 100644 --- a/README.md +++ b/README.md @@ -1,351 +1,2 @@ -# [Less.js v1.6.1](http://lesscss.org) - -> The **dynamic** stylesheet language. [http://lesscss.org](http://lesscss.org). - -This is the JavaScript, and now official, stable version of LESS. - - -## Getting Started - -Options for adding Less.js to your project: - -* Install with [NPM](https://npmjs.org/): `npm install less` -* [Download the latest release][download] -* Clone the repo: `git clone git://github.com/less/less.js.git` - - - -## Feature Highlights -LESS extends CSS with dynamic features such as: - -* [nesting](#nesting) -* [variables](#variables) -* [operations](#operations) -* [mixins](#mixins) -* [extend](#extend) (selector inheritance) - -To learn about the many other features Less.js has to offer please visit [http://lesscss.org](http://lesscss.org) and [the Less.js wiki][wiki] - - -### Examples -#### nesting -Take advantage of nesting to make code more readable and maintainable. This: - -```less -.nav > li > a { - border: 1px solid #f5f5f5; - &:hover { - border-color: #ddd; - } -} -``` - -renders to: - -```css -.nav > li > a { - border: 1px solid #f5f5f5; -} -.nav > li > a:hover { - border-color: #ddd; -} -``` - - -#### variables -Updated commonly used values from a single location. - -```less -// Variables ("inline" comments like this can be used) -@link-color: #428bca; // appears as "sea blue" - -/* Or "block comments" that span - multiple lines, like this */ -a { - color: @link-color; // use the variable in styles -} -``` - -Variables can also be used in `@import` statements, URLs, selector names, and more. - - - -#### operations -Continuing with the same example above, we can use our variables even easier to maintain with _operations_, which enables the use of addition, subraction, multiplication and division in your styles: - -```less -// Variables -@link-color: #428bca; -@link-color-hover: darken(@link-color, 10%); - -// Styles -a { - color: @link-color; -} -a:hover { - color: @link-color-hover; -} -``` -renders to: - -```css -a { - color: #428bca; -} -a:hover { - color: #3071a9; -} -``` - -#### mixins -##### "implicit" mixins -Mixins enable you to apply the styles of one selector inside another selector like this: - -```less -// Variables -@link-color: #428bca; - -// Any "regular" class... -.link { - color: @link-color; -} -a { - font-weight: bold; - .link; // ...can be used as an "implicit" mixin -} -``` - -renders to: - -```css -.link { - color: #428bca; -} -a { - font-weight: bold; - color: #428bca; -} -``` - -So any selector can be an "implicit mixin". We'll show you a DRYer way to do this below. - - - -##### parametric mixins -Mixins can also accept parameters: - -```less -// Transition mixin -.transition(@transition) { - -webkit-transition: @transition; - -moz-transition: @transition; - -o-transition: @transition; - transition: @transition; -} -``` - -used like this: - -```less -// Variables -@link-color: #428bca; -@link-color-hover: darken(@link-color, 10%); - -//Transition mixin would be anywhere here - -a { - font-weight: bold; - color: @link-color; - .transition(color .2s ease-in-out); - // Hover state - &:hover { - color: @link-color-hover; - } -} -``` - -renders to: - -```css -a { - font-weight: bold; - color: #428bca; - -webkit-transition: color 0.2s ease-in-out; - -moz-transition: color 0.2s ease-in-out; - -o-transition: color 0.2s ease-in-out; - transition: color 0.2s ease-in-out; -} -a:hover { - color: #3071a9; -} -``` - - -#### extend -The `extend` feature can be thought of as the _inverse_ of mixins. It accomplishes the goal of "borrowing styles", but rather than copying all the rules of _Selector A_ over to _Selector B_, `extend` copies the name of the _inheriting selector_ (_Selector B_) over to the _extending selector_ (_Selector A_). So continuing with the example used for [mixins](#mixins) above, extend works like this: - -```less -// Variables -@link-color: #428bca; - -.link { - color: @link-color; -} -a:extend(.link) { - font-weight: bold; -} -// Can also be written as -a { - &:extend(.link); - font-weight: bold; -} -``` - -renders to: - -```css -.link, a { - color: #428bca; -} -a { - font-weight: bold; -} -``` - -## Usage - -### Compiling and Parsing -Invoke the compiler from node: - -```javascript -var less = require('less'); - -less.render('.class { width: (1 + 1) }', function (e, css) { - console.log(css); -}); -``` - -Outputs: - -```css -.class { - width: 2; -} -``` - -You may also manually invoke the parser and compiler: - -```javascript -var parser = new(less.Parser); - -parser.parse('.class { width: (1 + 1) }', function (err, tree) { - if (err) { return console.error(err) } - console.log(tree.toCSS()); -}); -``` - - -### Configuration -You may also pass options to the compiler: - -```javascript -var parser = new(less.Parser)({ - paths: ['.', './src/less'], // Specify search paths for @import directives - filename: 'style.less' // Specify a filename, for better error messages -}); - -parser.parse('.class { width: (1 + 1) }', function (e, tree) { - tree.toCSS({ compress: true }); // Minify CSS output -}); -``` - -## More information - -For general information on the language, configuration options or usage visit [lesscss.org](http://lesscss.org) or [the less wiki][wiki]. - -Here are other resources for using Less.js: - -* [stackoverflow.com][so] is a great place to get answers about Less. -* [node.js tools](https://github.com/less/less.js/wiki/Converting-LESS-to-CSS) for converting Less to CSS -* [GUI compilers for Less](https://github.com/less/less.js/wiki/GUI-compilers-that-use-LESS.js) -* [Less.js Issues][issues] for reporting bugs - - - -## Contributing -Please read [CONTRIBUTING.md](./CONTRIBUTING.md). Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/). - -### Reporting Issues - -Before opening any issue, please search for existing issues and read the [Issue Guidelines](https://github.com/necolas/issue-guidelines), written by [Nicolas Gallagher](https://github.com/necolas/). After that if you find a bug or would like to make feature request, [please open a new issue][issues]. - -Please report documentation issues in [the documentation project](https://github.com/less/less-docs). - -### Development - -#### Install Less.js - -Start by either [downloading this project][download] manually, or in the command line: - -```shell -git clone https://github.com/less/less.js.git "less" -``` -and then `cd less`. - - -#### Install dependencies - -To install all the dependencies for less development, run: - -```shell -npm install -``` - -If you haven't run grunt before, install grunt-cli globally so you can just run `grunt` - -```shell -npm install grunt-cli -g -``` - -You should now be able to build Less.js, run tests, benchmarking, and other tasks listed in the Gruntfile. - -## Using Less.js Grunt - -Tests, benchmarking and building is done using Grunt `~0.4.1`. If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to install and use Grunt plugins, which are necessary for development with Less.js. - -The Less.js [Gruntfile](Gruntfile.js) is configured with the following "convenience tasks" : - -#### test - `grunt` -Runs jshint, nodeunit and headless jasmine tests using [phantomjs](http://code.google.com/p/phantomjs/). You must have phantomjs installed for the jasmine tests to run. - -#### test - `grunt benchmark` -Runs the benchmark suite. - -#### build for testing browser - 'grunt browser' -This builds less.js and puts it in 'test/browser/less.js' - -#### build - `grunt stable | grunt beta | grunt alpha` -Builds Less.js from from the `/lib/less` source files. This is done by the developer releasing a new release, do not do this if you are creating a pull request. - -#### readme - `grunt readme` -Build the README file from [a template](build/README.md) to ensure that metadata is up-to-date and (more likely to be) correct. - -Please review the [Gruntfile](Gruntfile.js) to become acquainted with the other available tasks. - -**Please note** that if you have any issues installing dependencies or running any of the Gruntfile commands, please make sure to uninstall any previous versions, both in the local node_modules directory, and clear your global npm cache, and then try running `npm install` again. After that if you still have issues, please let us know about it so we can help. - - -## Release History -See the [changelog](CHANGELOG.md) - -## [License](LICENSE) - -Copyright (c) 2009-2014 [Alexis Sellier](http://cloudhead.io/) & The Core Less Team -Licensed under the [Apache License](LICENSE). - - -[so]: http://stackoverflow.com/questions/tagged/twitter-bootstrap+less "StackOverflow.com" -[issues]: https://github.com/less/less.js/issues "GitHub Issues for Less.js" -[wiki]: https://github.com/less/less.js/wiki "The official wiki for Less.js" -[download]: https://github.com/less/less.js/zipball/master "Download Less.js" +This branch has been merged into less.js and is not relevant anymore. From d44a524b92a462dec0e66c504fc89fc013082a84 Mon Sep 17 00:00:00 2001 From: jurcovicovam Date: Fri, 25 Jul 2014 22:35:51 +0200 Subject: [PATCH 2/2] Raise error in case of an empty selector inside :extend. --- lib/less/parser.js | 3 ++- test/sourcemaps/basic.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/less/parser.js b/lib/less/parser.js index d3c6ce66..3775b8fb 100644 --- a/lib/less/parser.js +++ b/lib/less/parser.js @@ -1066,7 +1066,8 @@ less.Parser = function Parser(env) { } option = option && option[1]; - + if (!elements) + error("Missing target selector for :extend()."); extend = new(tree.Extend)(new(tree.Selector)(elements), option, index); if (extendList) { extendList.push(extend); } else { extendList = [ extend ]; } diff --git a/test/sourcemaps/basic.json b/test/sourcemaps/basic.json index ab73305d..24d5ce21 100644 --- a/test/sourcemaps/basic.json +++ b/test/sourcemaps/basic.json @@ -1 +1 @@ -{"version":3,"file":"sourcemaps/basic.css","sources":["testweb/sourcemaps/imported.css","testweb/sourcemaps/basic.less"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;ACAA;EACE,YAAA;EAJA,UAAA;EAWA,iBAAA;EALA,WAAA;EACA,mBAAA;;AAJF,EASE;AATF,EASM;EACF,gBAAA;;AACA,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFA;AAEF,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFA;EAGA,UAAA;;AALN;AAAI;AAUJ;EATE,iBAAA;;AADF,EAEE;AAFE,EAEF;AAFF,EAEM;AAFF,EAEE;AAQN,OARE;AAQF,OARM;EACF,gBAAA;;AACA,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFA;AAEF,EAFF,GAEI,KAFA;AAEF,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFA;AAEF,EAFF,GAEI,KAFA;AAEF,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFA;AAEF,EAFE,GAEA,KAFA;AAEF,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFA;AAEF,EAFE,GAEA,KAFA;AAQN,OARE,GAQF,UARE;AAQF,OARE,GAEI,KAFJ;AAQF,OARE,GAQF,UARM;AAQN,OARE,GAEI,KAFA;AAEF,EAFF,GAQF,UARE;AAEE,EAFF,GAQF,UARM;AAQN,OARM,GAQN,UARE;AAQF,OARM,GAEA,KAFJ;AAQF,OARM,GAQN,UARM;AAQN,OARM,GAEA,KAFA;AAEF,EAFE,GAQN,UARE;AAEE,EAFE,GAQN,UARM;EAGA,UAAA;;AAKN;EACE,WAAA"} \ No newline at end of file +{"version":3,"sources":["testweb/sourcemaps/imported.css","testweb/sourcemaps/basic.less"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;ACAA;EACE,YAAA;EAJA,UAAA;EAWA,iBAAA;EALA,WAAA;EACA,mBAAA;;AAJF,EASE;AATF,EASM;EACF,gBAAA;;AACA,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFA;AAEF,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFA;EAGA,UAAA;;AALN;AAAI;AAUJ;EATE,iBAAA;;AADF,EAEE;AAFE,EAEF;AAFF,EAEM;AAFF,EAEE;AAQN,OARE;AAQF,OARM;EACF,gBAAA;;AACA,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFA;AAEF,EAFF,GAEI,KAFA;AAEF,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFJ;AAEE,EAFF,GAEI,KAFA;AAEF,EAFF,GAEI,KAFA;AAEF,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFA;AAEF,EAFE,GAEA,KAFA;AAEF,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFJ;AAEE,EAFE,GAEA,KAFA;AAEF,EAFE,GAEA,KAFA;AAQN,OARE,GAQF,UARE;AAQF,OARE,GAEI,KAFJ;AAQF,OARE,GAQF,UARM;AAQN,OARE,GAEI,KAFA;AAEF,EAFF,GAQF,UARE;AAEE,EAFF,GAQF,UARM;AAQN,OARM,GAQN,UARE;AAQF,OARM,GAEA,KAFJ;AAQF,OARM,GAQN,UARM;AAQN,OARM,GAEA,KAFA;AAEF,EAFE,GAQN,UARE;AAEE,EAFE,GAQN,UARM;EAGA,UAAA;;AAKN;EACE,WAAA","file":"sourcemaps/basic.css"} \ No newline at end of file