2013-01-17 11 views
5

私はjavascriptとcssファイルを読み込むためにワイルドカードを使用していますが、これはうまくいきますが、開発段階では集約されたjavascriptファイルで作業するのは苦痛です。 wro4jにファイルを集約させる方法はありませんが、個々に含めるだけですか?wro4j - どのようにデバッグモードで集約機能を無効にしますか?

マイwro.xmlファイル

<groups xmlns="http://www.isdc.ro/wro"> 
<group name="external"> 
    <js>/app/lib/*.js</js> 
</group> 

<group name="application"> 
    <js>/js/*.js</js> 
    <css>/css/normalize.css</css> 
    <css>/css/*.css</css> 
</group> 
</groups> 

ありがとう!

答えて

4

開発モード(debug=true)でこれを達成するためのトリックがあります。エンドポイント(/wro/wroAPI/model - これは、WroFilterを/wro/*にマッピングする場合に有効です)は、モデルのJSON表現を返します。 このJSONを使用すると、グループエントリを反復することで、特定のグループのスクリプトやCSSリンクを簡単に挿入できます。デフォルトではこのようなウィジェットはまだ用意されていませんが、作成して貢献したい場合は、歓迎します:)。

2

入力いただきありがとうございます。

上記で提供した情報を使用するServletFilterを作成しました。私は後世のためにここに投稿します。注:これは理想的なコードではありません(キャッシュがあまりにも多いなど)。実装がどのように見えるかを人々に伝えるだけです。私の実装では、SpringのDelegatingFilterProxyを使用して、心配するグループをコードに伝えます。プラグインの作成に関しては、実装のためのドキュメントへの道を教えてもらえますか、私はその部分にぼんやりしていますか?

public class WroDebugFilter implements Filter 
{ 
    //http loader is shamelessly stolen from another project. 
    SimpleHttpLoader httpLoader = new SimpleHttpLoader(); 

    private List<String> jscriptFiles; 
    private List<String> debugGroups; 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     //To change body of implemented methods use File | Settings | File Templates. 
    } 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 

     request.setAttribute("jscriptFiles",getJavaScriptFiles((HttpServletRequest) request)); 

     chain.doFilter(request,response); 
    } 

    private List<String> getJavaScriptFiles(HttpServletRequest request) { 

     if (jscriptFiles == null) { 

      List<String> cssFiles = new ArrayList<String>(); 
      List<String> jsFiles = new ArrayList<String>(); 

      JsonParser jsonParser = new JsonParser(); 

      String url = httpLoader.httpGet(getApiUrl(request)); 

      JsonObject data = jsonParser.parse(url).getAsJsonObject(); 
      JsonArray groups = data.getAsJsonArray("groups"); 

      for (JsonElement group : groups) { 

       JsonObject groupObject = group.getAsJsonObject(); 

       String groupName = groupObject.get("name").getAsString(); 

       if (debugGroups.contains(groupName)) { 

        JsonArray resources = groupObject.getAsJsonArray("resources"); 

        for (JsonElement resource : resources) { 
         JsonObject resourceObject = resource.getAsJsonObject(); 
         String uri = resourceObject.get("uri").getAsString(); 

         if (uri.contains(".css")) { 
          cssFiles.add("\t<link rel=\"stylesheet\" href=\"" + request.getContextPath() + uri +"\">"); 
         } 
         else { 
          jsFiles.add("<script type=\"text/javascript\" src=\"" + request.getContextPath() + uri + "\"></script>"); 
         } 
        } 
       } 

      } 
      cssFiles.addAll(jsFiles); 
      jscriptFiles = cssFiles; 
     } 

     return jscriptFiles; 
    } 

    private String getApiUrl(HttpServletRequest request) { 

     String serverName = request.getServerName(); 
     String contextPath = request.getContextPath(); 
     int port = request.getServerPort(); 

     return String.format("http://%s:%s%s/%s",serverName,port,contextPath,"wro/wroAPI/model"); 
    } 

    @Override 
    public void destroy() { 
     //To change body of implemented methods use File | Settings | File Templates. 
    } 

    public List<String> getDebugGroups() { 
     return debugGroups; 
    } 

    public void setDebugGroups(List<String> debugGroups) { 
     this.debugGroups = debugGroups; 
    } 
} 

wro.xmlファイル

<groups xmlns="http://www.isdc.ro/wro"> 
    <group name="external"> 
     <js>/app/lib/*.js</js> 
    </group> 

    <group name="application"> 
     <js>/js/*.js</js> 
     <css>/css/normalize.css</css> 
     <css>/css/*.css</css> 
    </group> 
</groups> 

と....

Spring構成

<bean id="wroDebugFilter" class="gov.mystate.dhw.idalink.web.filter.WroDebugFilter"> 
     <property name="debugGroups"> 
       <list> 
        <value>application</value> 
       </list> 
      </property> 
    </bean> 
関連する問題