@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); } }
@Override protected void send(final Request req, final Response rsp, final Asset asset) throws Exception { LessSource.URLSource src = new LessSource.URLSource(asset.resource(), req.charset().name()); CompilationResult result = compiler.compile(src); result.getWarnings().forEach(warning -> log.warn(warning.toString())); if (req.path().endsWith(".map")) { rsp.type(MediaType.json) .send(Results.ok(result.getSourceMap())); } else { rsp.type(MediaType.css) .send(Results.ok(result.getCss())); } } }
@Override public LessSource relativeSource(String filename) throws CannotReadFile, FileNotFound { if (filename.startsWith("/webjars/")) { URL webjarResource = ClassPaths.getResource("META-INF/resources" + filename); if (webjarResource == null) { throw new FileNotFound(); } return new LessSource.URLSource(webjarResource); } Path relativePath = Paths.get(filename); if (!resources.exists(relativePath)) { throw new FileNotFound(); } try { return new PathSource(resources, resources.sourceFile(relativePath)); } catch (IOException e) { throw new CannotReadFile(); } }
@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); } }
@Override public LessSource relativeSource(String filename) throws FileNotFound, CannotReadFile { return new URLSource(this, filename, charsetName); }
@Override public CompilationResult compile(URL lessURL, Configuration options) throws Less4jException { return compile(new LessSource.URLSource(lessURL), options); }
@Override public CompilationResult compile(URL lessURL, Configuration options) throws Less4jException { return compile(new LessSource.URLSource(lessURL), options); }
@Override public CompilationResult compile(URL lessURL) throws Less4jException { return compile(new LessSource.URLSource(lessURL)); }
@Override public CompilationResult compile(URL lessURL) throws Less4jException { return compile(new LessSource.URLSource(lessURL)); }