[ https://issues.apache.org/jira/browse/WICKET-5827?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14358246#comment-14358246 ]
ASF GitHub Bot commented on WICKET-5827: ---------------------------------------- Github user martin-g commented on a diff in the pull request: https://github.com/apache/wicket/pull/97#discussion_r26283760 --- Diff: wicket-core/src/main/java/org/apache/wicket/resource/CssUrlReplacer.java --- @@ -71,21 +82,67 @@ else if (imageCandidateUrl.isContextAbsolute()) // relativize against the url for the containing CSS file Url cssUrlCopy = new Url(cssUrl); cssUrlCopy.resolveRelative(imageCandidateUrl); - PackageResourceReference imageReference = new PackageResourceReference(scope, - cssUrlCopy.toString()); - processedUrl = cycle.urlFor(imageReference, null); + + // if the image should be processed as URL or base64 embedded + if (cssUrlCopy.getQueryString() != null && + cssUrlCopy.getQueryString().contains(EMBED_BASE64)) + { + embedded = true; + PackageResourceReference imageReference = new PackageResourceReference(scope, + cssUrlCopy.toString().replace("?" + EMBED_BASE64, "")); + try + { + processedUrl = createBase64EncodedImage(imageReference); + } + catch (Exception e) + { + throw new WicketRuntimeException( + "Error while embedding an image into the css: " + + imageReference.toString(), e); + } + } + else + { + PackageResourceReference imageReference = new PackageResourceReference(scope, + cssUrlCopy.toString()); + processedUrl = cycle.urlFor(imageReference, null); + } } - matcher.appendReplacement(output, "url('" + processedUrl + "')"); + matcher.appendReplacement(output, embedded ? "url(" + processedUrl + ")" : "url('" + + processedUrl + "')"); } matcher.appendTail(output); return output.toString(); } + /** + * Creates a base64 encoded image string based on the given image reference + * + * @param imageReference + * the image reference to create the base64 encoded image string of + * @return the base64 encoded image string + * @throws ResourceStreamNotFoundException + * if the resource couldn't be found + * @throws IOException + * if the stream couldn't be read + */ + private CharSequence createBase64EncodedImage(PackageResourceReference imageReference) + throws ResourceStreamNotFoundException, IOException + { + IResourceStream resourceStream = imageReference.getResource().getResourceStream(); + byte[] bytes = new byte[(int)resourceStream.length().bytes()]; + DataInputStream dataInputStream = new DataInputStream(resourceStream.getInputStream()); + dataInputStream.readFully(bytes); --- End diff -- You can use org.apache.wicket.util.io.IOUtils#toByteArray(java.io.InputStream) instead. > Allow to apply multiple Javascript / CSS compressors > ---------------------------------------------------- > > Key: WICKET-5827 > URL: https://issues.apache.org/jira/browse/WICKET-5827 > Project: Wicket > Issue Type: New Feature > Components: wicket > Affects Versions: 6.20.0, 7.0.0-M6 > Reporter: Tobias Soloschenko > Assignee: Martin Grigorov > Priority: Minor > Labels: features > Fix For: 6.20.0, 7.0.0-M6 > > > It would be nice to be able to add several css and javascript compressions in > a chain. Example for CSS: > CssRemoveCommentsCompressor > CssUrlReplacementCompressor > > CssMinifyCompressor > The same would be nice for JavaScript files. > https://github.com/apache/wicket/pull/88 > https://github.com/apache/wicket/pull/87 -- This message was sent by Atlassian JIRA (v6.3.4#6332)