2012-04-20 3 views
4

В настоящее время я использую Jawr для сжатия и связывания файлов css, javascript и изображений.Как остановить обработку Jawr некоторыми частями файлов CSS?

Jawr в настоящее время преобразовывает все ссылки url() в мои файлы css, независимо от того, являются ли они изображениями или нет. Например:

@font-face { 
    font-family: 'NothingYouCouldSay'; 
    src: url('../fonts/NothingYouCouldSay.eot') format('eot'); 
    src: local("☺"), url('../fonts/NothingYouCouldSay.woff') format('woff'), url("../fonts/NothingYouCouldSay.otf") format("opentype"), url('../fonts/NothingYouCouldSay.ttf') format('truetype'), url('../fonts/NothingYouCouldSay.svg') format('svg'); 
    font-weight: normal; 
    font-style: normal; 
} 

Jawr преобразовывает все URL() значения, но ресурсы не могут быть найдены, когда веб-сервер работает, как я настроил сервлет изображение, чтобы слушать только * .png & * .jpg.

@font-face { 
    font-family: 'NothingYouCouldSay'; 
    src: url('../../../cb1130234589/resources/fonts/NothingYouCouldSay.eot') format('eot'); 
    src: local("☺"), url('../../../cb1130234589/resources/fonts/NothingYouCouldSay.woff') format('woff'), url("../../../cb1130234589/resources/fonts/NothingYouCouldSay.otf") format("opentype"), url('../../../cb1130234589/resources/fonts/NothingYouCouldSay.ttf') format('truetype'), url('../../../cb1130234589/resources/fonts/NothingYouCouldSay.svg') format('svg'); 
    font-weight: normal; 
    font-style: normal; 
} 

Если добавить * .woff к отображению изображений сервлета, то сервлет жалуется, что тип MIME файла не понял.

Есть ли способ заставить Jawr не обрабатывать эти конкретные URL-адреса?

ответ

2

Итак, попробовав несколько разных идей, я закончил писать свой собственный почтовый процессор, чтобы справиться с этим. Я использую как можно больше кода Jawr, что означает, что он может быть довольно хрупким, если Jawr изменит его базовый код.

Во всяком случае, вот что я писал:

package com.bullethq.jawr.postprocessor; 

import net.jawr.web.resource.FileNameUtils; 
import net.jawr.web.resource.bundle.factory.util.PathNormalizer; 
import net.jawr.web.resource.bundle.postprocess.BundleProcessingStatus; 
import net.jawr.web.resource.bundle.postprocess.impl.CSSURLPathRewriterPostProcessor; 
import net.jawr.web.resource.bundle.postprocess.impl.PostProcessorCssImageUrlRewriter; 

import java.io.IOException; 

public class CustomCssUrlPathRewriterPostProcessor extends CSSURLPathRewriterPostProcessor { 

    public static final String CUSTOM_URL_PATH_REWRITER = "customcsspathrewriter"; 

    public CustomCssUrlPathRewriterPostProcessor() { 
     super(CUSTOM_URL_PATH_REWRITER); 
    } 

    // ======================================================================== 
    // ======================================================================== 
    // ======================================================================== 
    @Override 
    protected PostProcessorCssImageUrlRewriter createImageUrlRewriter(BundleProcessingStatus status) { 
     return new CustomPostProcessorCssImageUrlRewriter(status); 
    } 

    // ======================================================================== 
    // ======================================================================== 
    // ======================================================================== 
    public class CustomPostProcessorCssImageUrlRewriter extends PostProcessorCssImageUrlRewriter { 

     public CustomPostProcessorCssImageUrlRewriter(BundleProcessingStatus status) { 
      super(status); 
     } 

     // ======================================================================== 
     // ======================================================================== 
     // ======================================================================== 
     @Override 
     protected String getUrlPath(String match, String originalPath, String newCssPath) throws IOException { 
      String url = match.substring(match.indexOf('(') + 1, match.lastIndexOf(')')).trim(); 

      // Remove any quotes if necessary. 
      String quoteStr = ""; 
      if (url.startsWith("'") || url.startsWith("\"")) { 
       quoteStr = String.valueOf(url.charAt(0)); 
       url = url.substring(1, url.length() - 1); 
      } 

      // We now check if the url ends in a known image file extension 
      // If not, the url is ignored. 
      if (FileNameUtils.hasImageExtension(url)) { 
       return super.getUrlPath(match, originalPath, newCssPath); 
      } else { 
       // We need to rewrite the path, as any relative URLs will 
       // not resolve correctly if Jawr has changed the CSS path. 
       url = PathNormalizer.concatWebPath(originalPath, url); 
       url = PathNormalizer.getRelativeWebPath(PathNormalizer.getParentPath(newCssPath), url); 
       return "url(" + quoteStr + url + quoteStr + ")"; 
      } 
     } 
    } 
} 

И потом, вам нужно настроить Jawr использовать этот пользовательский процессор пост в jawr.properties:

jawr.custom.postprocessors.customcsspathrewriter.class=com.bullethq.jawr.postprocessor.CustomCssUrlPathRewriterPostProcessor 
jawr.css.bundle.factory.filepostprocessors=customcsspathrewriter 
+0

Я чувствую себя очень самовлюбленный ответить на мой собственный вопрос! –

+0

спасибо, вы спасли меня некоторое время :) – uthomas

+0

Привет, как полностью ограничить обработку изображений в jawr ...? –

Смежные вопросы