private Configuration lessConf(final Config conf) { Configuration configuration = new Configuration(); configuration.setCompressing(get("compressing")); SourceMapConfiguration sourceMap = configuration.getSourceMapConfiguration(); Map<String, Object> map = get("sourceMap"); if (map == null) { sourceMap.setLinkSourceMap(false); } else { sourceMap.setEncodingCharset( map.getOrDefault("encodingCharset", conf.getAnyRef("application.charset")).toString()); sourceMap.setIncludeSourcesContent((Boolean) map.getOrDefault("includeSourcesContent", true)); sourceMap.setInline((Boolean) map.getOrDefault("inline", true)); sourceMap.setRelativizePaths((Boolean) map.getOrDefault("relativizePaths", true)); sourceMap.setLinkSourceMap((Boolean) map.getOrDefault("linkSourceMap", true)); } return configuration; }
@Override protected void sendResource(URL resourceUrl, RouteContext routeContext) throws IOException { try { // compile less to css log.trace("Send css for '{}'", resourceUrl); LessSource.URLSource source = new LessSource.URLSource(resourceUrl); String content = source.getContent(); String result = sourceMap.get(content); if (result == null) { ThreadUnsafeLessCompiler compiler = new ThreadUnsafeLessCompiler(); LessCompiler.Configuration configuration = new LessCompiler.Configuration(); configuration.setCompressing(minify); LessCompiler.CompilationResult compilationResult = compiler.compile(resourceUrl, configuration); for (LessCompiler.Problem warning : compilationResult.getWarnings()) { log.warn("Line: {}, Character: {}, Message: {} ", warning.getLine(), warning.getCharacter(), warning.getMessage()); } result = compilationResult.getCss(); if (routeContext.getApplication().getPippoSettings().isProd()) { sourceMap.put(content, result); } } // send css routeContext.getResponse().contentType("text/css"); routeContext.getResponse().ok().send(result); } catch (Exception e) { throw new PippoRuntimeException(e); } }
/** * Compile the LESS code and get the included files from the skin templates. * @param lessCode code to compile * @param skin skin holding the templates * @param inlineSourceMap whether to create inline sourcemaps in the generated css * @return the results of the LESS compilation * @throws Less4jException if problems occur */ public String compile(String lessCode, String skin, boolean inlineSourceMap) throws Less4jException { LessCompiler lessCompiler = new DefaultLessCompiler(); LessCompiler.Configuration options = new LessCompiler.Configuration(); options.setCompressing(true); options.getSourceMapConfiguration().setInline(inlineSourceMap); options.getSourceMapConfiguration().setIncludeSourcesContent(true); LessSource lessSource = new CustomContentLESSSource(lessCode, templateManager, skinManager.getSkin(skin)); LessCompiler.CompilationResult lessResult = lessCompiler.compile(lessSource, options); return lessResult.getCss(); } }
private void handleSourceMapLink(ASTCssNode cssAst, StringBuilder css, Configuration options, LessSource source, String sourceMap) { String cssResultLocation = getCssResultLocationName(options, source); LessCompiler.SourceMapConfiguration sourceMapConfiguration = options.getSourceMapConfiguration(); if (!sourceMapConfiguration.shouldLinkSourceMap() && !sourceMapConfiguration.isInline()) return; if (!sourceMapConfiguration.isInline() && cssResultLocation == null) { problemsHandler.warnSourceMapLinkWithoutCssResultLocation(cssAst); return; } addNewLine(css); String commentText; String encodingCharset = sourceMapConfiguration.getEncodingCharset(); if (sourceMapConfiguration.isInline()) { String encodedSourceMap = PrintUtils.base64Encode(sourceMap, encodingCharset, problemsHandler, cssAst); commentText = "/*# sourceMappingURL=data:application/json;base64," + encodedSourceMap + " */"; } else { // compose linking comment String url = sourceMapConfiguration.getSourceMapNameGenerator().generateUrl(cssResultLocation); String encodedUrl = PrintUtils.urlEncode(url, encodingCharset, problemsHandler, cssAst); commentText = "/*# sourceMappingURL=" + encodedUrl + " */"; } css.append(commentText).append("\n"); }
private Configuration options(final boolean dev, final Config conf) { Configuration configuration = new Configuration(); boolean compressing = conf.hasPath("compressing") ? conf.getBoolean("compressing") : !dev; configuration.setCompressing(compressing); SourceMapConfiguration sourceMap = configuration.getSourceMapConfiguration(); sourceMap.setEncodingCharset(conf.getString("sourceMap.encodingCharset")); sourceMap.setIncludeSourcesContent(conf.getBoolean("sourceMap.includeSourcesContent")); sourceMap.setInline(conf.getBoolean("sourceMap.inline")); sourceMap.setRelativizePaths(conf.getBoolean("sourceMap.relativizePaths")); boolean linkSourceMap = conf.hasPath("sourceMap.linkSourceMap") ? conf.getBoolean("sourceMap.linkSourceMap") : dev; sourceMap.setLinkSourceMap(linkSourceMap); return configuration; }
private LessCompiler.SourceMapConfiguration getSourceMapConfiguration(LessCompiler.Configuration options) { return options != null ? options.getSourceMapConfiguration() : new LessCompiler.SourceMapConfiguration(); }
protected void initBootstrap() { LessCompilerConfigurationFactory lessConfigFactory = () -> { Configuration lessConfig = new Configuration(); lessConfig.setCompressing( RuntimeConfigurationType.DEPLOYMENT.equals(getConfigurationType())); return lessConfig; }; WicketWebjars.install(this); BootstrapLess.install(this, lessConfigFactory); Bootstrap.install(this); IBootstrapSettings settings = Bootstrap.getSettings(this); settings.setCssResourceReference(CustomBootstrapLessReference.get()); }
@Override public CompilationResult compile(LessSource source) throws Less4jException { return compile(source, new Configuration()); }
@Override public CompilationResult compile(LessSource source, Configuration options) throws Less4jException { if (options == null) options = new Configuration(); problemsHandler = new ProblemsHandler(); astBuilder = new ASTBuilder(problemsHandler); compiler = new LessToCssCompiler(problemsHandler, options); CompilationResult compilationResult = doCompile(source, options); if (problemsHandler.hasErrors()) { throw new Less4jException(problemsHandler.getErrors(), compilationResult); } return compilationResult; }
protected void initBootstrap() { LessCompilerConfigurationFactory lessConfigFactory = () -> { Configuration lessConfig = new Configuration(); lessConfig.setCompressing( RuntimeConfigurationType.DEPLOYMENT.equals(getConfigurationType())); return lessConfig; }; WicketWebjars.install(this); BootstrapLess.install(this, lessConfigFactory); Bootstrap.install(this); IBootstrapSettings settings = Bootstrap.getSettings(this); settings.setCssResourceReference(CustomBootstrapLessReference.get()); }
@Override public String compile(SourceFile sourceFile) { try { Configuration configuration = new Configuration(); configureSourceMap(configuration); return new ThreadUnsafeLessCompiler().compile(new PathSource(resources, sourceFile), configuration).getCss(); } catch (Less4jException e) { String message = cleanMessage(sourceFile, e.getMessage()); throw new CompilerException(message); } }
private LessCompiler.Configuration createConfiguration(File cssOutut) { LessCompiler.Configuration configuration = new LessCompiler.Configuration(); configuration.setCssResultLocation(new LessSource.FileSource(cssOutut)); configuration.setCompressing(compress); return configuration; }
private void configureSourceMap(Configuration configuration) { SourceMapConfiguration sourceMaps = configuration.getSourceMapConfiguration(); sourceMaps.setLinkSourceMap(false); sourceMaps.setInline(inline); }
@Override public CompilationResult compile(LessSource source) throws Less4jException { return compile(source, new Configuration()); }
private static void customCssLocationExample2() throws Less4jException { File cssFile = new File("dist/sampleInput.css").getAbsoluteFile(); Configuration configuration = new Configuration(); configuration.setCssResultLocation(cssFile); URI uri = (new File("src/sampleInput.less")).toURI(); StringSource lessSource = new StringSource(".class { margin: 1 1 1 1; }", "sampleInput.less", uri); LessCompiler compiler = new DefaultLessCompiler(); CompilationResult compilationResult = compiler.compile(lessSource, configuration); System.out.println(compilationResult.getCss()); System.out.println(compilationResult.getSourceMap()); }
private static void customFunctionExample() throws Less4jException { File inputLessFile = createFile("sampleInput.less", "div {\n" + " property: constant();\n" + "}"); Configuration configuration = new Configuration(); configuration.addCustomFunction(new ConstantFunction()); LessCompiler compiler = new DefaultLessCompiler(); CompilationResult compilationResult = compiler.compile(inputLessFile, configuration); System.out.println(compilationResult.getCss()); deleteFile(inputLessFile); }
private static void customCssLocationExample1() throws Less4jException { File inputLessFile = createFile("src/sampleInput.less", ".class { margin: 1 1 1 1; }"); File lessFile = new File("src/sampleInput.less").getAbsoluteFile(); File cssFile = new File("dist/sampleInput.css").getAbsoluteFile(); Configuration configuration = new Configuration(); configuration.setCssResultLocation(cssFile); LessCompiler compiler = new DefaultLessCompiler(); CompilationResult compilationResult = compiler.compile(lessFile, configuration); System.out.println(compilationResult.getCss()); System.out.println(compilationResult.getSourceMap()); deleteFile(inputLessFile); }
private CompilationResult compile(File lessFile, File cssFile, boolean generateSourceMap, boolean isCompressing, boolean ieCompatibility) throws Less4jException { Configuration configuration = new Configuration(); configuration.setCssResultLocation(cssFile); configuration.setCompressing(isCompressing); configuration.setIeCompatibility(ieCompatibility); configuration.getSourceMapConfiguration().setLinkSourceMap(generateSourceMap && cssFile != null); DefaultLessCompiler compiler = new DefaultLessCompiler(); return compiler.compile(lessFile, configuration); }
@Override protected void sendResource(URL resourceUrl, RouteContext routeContext) throws IOException { try { // compile less to css log.trace("Send css for '{}'", resourceUrl); LessSource.URLSource source = new LessSource.URLSource(resourceUrl); String content = source.getContent(); String result = sourceMap.get(content); if (result == null) { ThreadUnsafeLessCompiler compiler = new ThreadUnsafeLessCompiler(); LessCompiler.Configuration configuration = new LessCompiler.Configuration(); configuration.setCompressing(minify); LessCompiler.CompilationResult compilationResult = compiler.compile(resourceUrl, configuration); for (LessCompiler.Problem warning : compilationResult.getWarnings()) { log.warn("Line: {}, Character: {}, Message: {} ", warning.getLine(), warning.getCharacter(), warning.getMessage()); } result = compilationResult.getCss(); if (routeContext.getApplication().getPippoSettings().isProd()) { sourceMap.put(content, result); } } // send css routeContext.getResponse().contentType("text/css"); routeContext.getResponse().ok().send(result); } catch (Exception e) { throw new PippoRuntimeException(e); } }