less4j-javascript

Less4j-javascript adds embedded/escaped JavaScript support to less4j https://github.com/SomMeri/less4j#readme compiler. It is supposed to be close enough to less.js to compile LessHat the same way.

License

License

Categories

Categories

JavaScript Languages
GroupId

GroupId

com.github.sommeri
ArtifactId

ArtifactId

less4j-javascript
Last Version

Last Version

0.0.1
Release Date

Release Date

Type

Type

jar
Description

Description

less4j-javascript
Less4j-javascript adds embedded/escaped JavaScript support to less4j https://github.com/SomMeri/less4j#readme compiler. It is supposed to be close enough to less.js to compile LessHat the same way.
Project URL

Project URL

https://github.com/SomMeri/less4j-javascript
Source Code Management

Source Code Management

https://github.com/SomMeri/less4j-javascript

Download less4j-javascript

How to add to project

<!-- https://jarcasting.com/artifacts/com.github.sommeri/less4j-javascript/ -->
<dependency>
    <groupId>com.github.sommeri</groupId>
    <artifactId>less4j-javascript</artifactId>
    <version>0.0.1</version>
</dependency>
// https://jarcasting.com/artifacts/com.github.sommeri/less4j-javascript/
implementation 'com.github.sommeri:less4j-javascript:0.0.1'
// https://jarcasting.com/artifacts/com.github.sommeri/less4j-javascript/
implementation ("com.github.sommeri:less4j-javascript:0.0.1")
'com.github.sommeri:less4j-javascript:jar:0.0.1'
<dependency org="com.github.sommeri" name="less4j-javascript" rev="0.0.1">
  <artifact name="less4j-javascript" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.github.sommeri', module='less4j-javascript', version='0.0.1')
)
libraryDependencies += "com.github.sommeri" % "less4j-javascript" % "0.0.1"
[com.github.sommeri/less4j-javascript "0.0.1"]

Dependencies

compile (3)

Group / Artifact Type Version
junit : junit jar 4.11
com.github.sommeri : less4j jar 1.5.2
ro.isdc.wro4j : rhino jar 1.7R5-20130223-1

Project Modules

There are no modules declared in this project.

Less4j JavaScript

Less4j-javascript adds embedded/escaped JavaScript support to less4j. Embedded/escaped javascript is javascript placed inside less file and allows otherwise impossible calculations and logic. Embedded javascript is closed inside ticks `JavaScript` and escaped JavaScript is the same preceded by tilde ~ e.g. ~`JavaScript`.

Example less:

@number: 100;
@content: "less symbol is < and more symbol is >";
.logaritmic-thing {
  // escaped JavaScript - calculate logarithm
  margin: ~`Math.round(Math.log(@{number})*100)/100`; 
  // embedded JavaScript - escape < and > characters
  content: `@{content}.replace(/</g, '&lt;').replace(/>/g, '&gt;')`; 
}

compiles into:

.logaritmic-thing {
  margin: 4.61;
  content: "less symbol is &lt; and more symbol is &gt;";
}

Usage

Add maven dependency into pom.xml:

<dependency>
    <groupId>com.github.sommeri</groupId>
    <artifactId>less4j-javascript</artifactId>
    <version>0.0.1</version>
</dependency>

The configure method of Less4jJavascript configures less4j to use embedded JavaScript:

//create new less4j configuration object
Configuration configuration = new Configuration()
//add embedded javascript support into it
Less4jJavascript.configure(configuration);

//compile files with embedded javascript
LessCompiler compiler = new DefaultLessCompiler();
CompilationResult result = compiler.compile(new File(less), configuration);

Compatibility

Less4j-javascript is supposed to be close enough to less.js to compile LessHat the same way. However, it does not have to behave exactly the same way in all circumstances. Most important differences are:

  • environment,
  • less scope accessibility.

Environment: Less.js runs either on node.js or inside a browser while less4j JavaScript runs in Rhino. Global variables and functions available only in node.js or browser are not available in Rhino. Following will not work:

title: `typeof process.title`; // accessing node.js global variable

Scope: Less.js allows access to local scope using this.variablename trick. Less4j JavaScript does not support the same. Following will NOT work:

.scope {
    @foo: 42;
    var: `parseInt(this.foo.toJS())`;
}

Use interpolation instead:

.scope {
    @foo: 42;
    var: `parseInt(@{foo})`;
}

compiles into:

.scope {
  var: 42;
}

In any case, it is supposed to compile LessHat the same way as less.js.

Embedded JavaScript

TODO

Versions

Version
0.0.1