IDEMPIERE-5225 - HTML Report minification (#1237)
* IDEMPIERE-5225 - HTML Report minification * IDEMPIERE-5225 - SysConfig added * IDEMPIERE-5225 - minification default set to true
This commit is contained in:
parent
38fd810122
commit
ccda5e4495
|
@ -0,0 +1,10 @@
|
|||
-- IDEMPIERE-5225
|
||||
SELECT register_migration_script('202203161513_IDEMPIERE-5225.sql') FROM dual;
|
||||
|
||||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Mar 16, 2022, 3:13:31 PM CET
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200197,0,0,TO_TIMESTAMP('2022-03-16 15:13:30','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2022-03-16 15:13:30','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','HTML_REPORT_MINIFY','Y','Enable/disable minification on HTML Reports','D','C','9f3e162c-653e-4f45-9b1c-8151caf0945e')
|
||||
;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
-- IDEMPIERE-5225
|
||||
SELECT register_migration_script('202203161513_IDEMPIERE-5225.sql') FROM dual;
|
||||
|
||||
-- Mar 16, 2022, 3:13:31 PM CET
|
||||
INSERT INTO AD_SysConfig (AD_SysConfig_ID,AD_Client_ID,AD_Org_ID,Created,Updated,CreatedBy,UpdatedBy,IsActive,Name,Value,Description,EntityType,ConfigurationLevel,AD_SysConfig_UU) VALUES (200197,0,0,TO_TIMESTAMP('2022-03-16 15:13:30','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2022-03-16 15:13:30','YYYY-MM-DD HH24:MI:SS'),100,100,'Y','HTML_REPORT_MINIFY','Y','Enable/disable minification on HTML Reports','D','C','9f3e162c-653e-4f45-9b1c-8151caf0945e')
|
||||
;
|
||||
|
|
@ -7,7 +7,9 @@ Bundle-ClassPath: .,
|
|||
lib/bsh.jar,
|
||||
lib/commons-validator.jar,
|
||||
lib/cron4j.jar,
|
||||
lib/avalon-framework-api.jar
|
||||
lib/avalon-framework-api.jar,
|
||||
lib/htmlcompressor.jar,
|
||||
lib/yuicompressor.jar
|
||||
Export-Package: bsh,
|
||||
bsh.classpath,
|
||||
bsh.collection,
|
||||
|
|
|
@ -6,7 +6,9 @@ bin.includes = plugin.xml,\
|
|||
lib/avalon-framework-api.jar,\
|
||||
lib/bsh.jar,\
|
||||
lib/commons-validator.jar,\
|
||||
lib/cron4j.jar
|
||||
lib/cron4j.jar,\
|
||||
lib/htmlcompressor.jar,\
|
||||
lib/yuicompressor.jar
|
||||
src.includes = schema/
|
||||
source.. = src/
|
||||
output.. = target/classes/
|
||||
|
|
|
@ -43,6 +43,16 @@
|
|||
<artifactId>avalon-framework-api</artifactId>
|
||||
<version>4.3.1</version>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>com.googlecode.htmlcompressor</groupId>
|
||||
<artifactId>htmlcompressor</artifactId>
|
||||
<version>1.5.2</version>
|
||||
</artifactItem>
|
||||
<artifactItem>
|
||||
<groupId>com.yahoo.platform.yui</groupId>
|
||||
<artifactId>yuicompressor</artifactId>
|
||||
<version>2.4.8</version>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
<outputDirectory>lib</outputDirectory>
|
||||
<stripVersion>true</stripVersion>
|
||||
|
|
|
@ -101,6 +101,7 @@ public class MSysConfig extends X_AD_SysConfig
|
|||
public static final String FEEDBACK_EMAIL_CC = "FEEDBACK_EMAIL_CC";
|
||||
public static final String FEEDBACK_EMAIL_TO = "FEEDBACK_EMAIL_TO";
|
||||
public static final String GRIDTABLE_LOAD_TIMEOUT_IN_SECONDS = "GRIDTABLE_LOAD_TIMEOUT_IN_SECONDS";
|
||||
public static final String HTML_REPORT_MINIFY = "HTML_REPORT_MINIFY";
|
||||
public static final String HTML_REPORT_THEME = "HTML_REPORT_THEME";
|
||||
public static final String IBAN_VALIDATION = "IBAN_VALIDATION";
|
||||
public static final String IDENTIFIER_SEPARATOR = "IDENTIFIER_SEPARATOR";
|
||||
|
|
|
@ -113,6 +113,8 @@ import org.compiere.util.Util;
|
|||
import org.eevolution.model.MDDOrder;
|
||||
import org.eevolution.model.X_PP_Order;
|
||||
|
||||
import com.googlecode.htmlcompressor.compressor.HtmlCompressor;
|
||||
|
||||
/**
|
||||
* Report Engine.
|
||||
* For a given PrintFormat,
|
||||
|
@ -695,9 +697,10 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
|
|||
table.setNeedClosingTag(false);
|
||||
PrintWriter w = new PrintWriter(writer);
|
||||
XhtmlDocument doc = null;
|
||||
|
||||
boolean minify = MSysConfig.getBooleanValue(MSysConfig.HTML_REPORT_MINIFY, true, Env.getAD_Client_ID(getCtx()));
|
||||
|
||||
if (onlyTable)
|
||||
table.output(w);
|
||||
w.print(compress(table.toString(), minify));
|
||||
else
|
||||
{
|
||||
doc = new XhtmlDocument();
|
||||
|
@ -784,15 +787,15 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
|
|||
|
||||
styleBuild = new StringBuilder(styleBuild.toString().replaceAll(";", "!important;"));
|
||||
appendInlineCss (doc, styleBuild);
|
||||
|
||||
doc.output(w);
|
||||
|
||||
w.println("<div class='"+cssPrefix+"-flex-container'>");
|
||||
w.print(compress(doc.toString(), minify));
|
||||
|
||||
w.print("<div class='"+cssPrefix+"-flex-container'>");
|
||||
String paraWrapId = null;
|
||||
if (parameterTable != null) {
|
||||
paraWrapId = cssPrefix + "-para-table-wrap";
|
||||
w.println("<div id='" + paraWrapId + "'>");
|
||||
parameterTable.output(w);
|
||||
w.print("<div id='" + paraWrapId + "'>");
|
||||
w.print(compress(parameterTable.toString(), minify));
|
||||
|
||||
tr tr = new tr();
|
||||
tr.setClass("tr-parameter");
|
||||
|
@ -825,12 +828,11 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
|
|||
tr.addElement(td);
|
||||
td.addElement(query.getInfoDisplayAll(r));
|
||||
|
||||
tr.output(w);
|
||||
w.print(compress(tr.toString(), minify));
|
||||
}
|
||||
|
||||
w.println();
|
||||
w.println("</table>");
|
||||
w.println("</div>");
|
||||
|
||||
w.print("</table>");
|
||||
w.print("</div>");
|
||||
}
|
||||
|
||||
StringBuilder tableWrapDiv = new StringBuilder();
|
||||
|
@ -842,8 +844,8 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
|
|||
}
|
||||
tableWrapDiv.append(" >");
|
||||
|
||||
w.println(tableWrapDiv.toString());
|
||||
table.output(w);
|
||||
w.print(compress(tableWrapDiv.toString(), minify));
|
||||
w.print(compress(table.toString(), minify));
|
||||
}
|
||||
|
||||
thead thead = new thead();
|
||||
|
@ -1089,19 +1091,18 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
|
|||
|
||||
/* output table header */
|
||||
if (row == -1){
|
||||
thead.output(w);
|
||||
w.print(compress(thead.toString(), minify));
|
||||
// output open of tbody
|
||||
tbody.output(w);
|
||||
w.print(compress(tbody.toString(), minify));
|
||||
}else{
|
||||
// output row by row
|
||||
tr.output(w);
|
||||
w.print(compress(tr.toString(), minify));
|
||||
}
|
||||
|
||||
} // for all rows
|
||||
|
||||
w.println();
|
||||
w.println("</tbody>");
|
||||
w.println("</table>");
|
||||
w.print("</tbody>");
|
||||
w.print("</table>");
|
||||
if (suppressMap.size() > 0)
|
||||
{
|
||||
StringBuilder st = new StringBuilder();
|
||||
|
@ -1114,15 +1115,14 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
|
|||
st.append(" {\n\t\tdisplay:none;\n\t}");
|
||||
style styleTag = new style();
|
||||
styleTag.addElement(st.toString());
|
||||
styleTag.output(w);
|
||||
w.println();
|
||||
w.print(compress(styleTag.toString(), minify));
|
||||
}
|
||||
if (!onlyTable)
|
||||
{
|
||||
w.println("</div>");
|
||||
w.println("</div>");
|
||||
w.println("</body>");
|
||||
w.println("</html>");
|
||||
w.print("</div>");
|
||||
w.print("</div>");
|
||||
w.print("</body>");
|
||||
w.print("</html>");
|
||||
}
|
||||
w.flush();
|
||||
w.close();
|
||||
|
@ -2577,4 +2577,34 @@ queued-job-count = 0 (class javax.print.attribute.standard.QueuedJobCount)
|
|||
return Evaluator.evaluateLogic(new PrintDataEvaluatee(null, m_printData), item.getDisplayLogic());
|
||||
}
|
||||
|
||||
public String compress(String src, boolean minify) {
|
||||
|
||||
if(minify) {
|
||||
HtmlCompressor compressor = new HtmlCompressor();
|
||||
compressor.setEnabled(true);
|
||||
compressor.setCompressCss(true);
|
||||
compressor.setCompressJavaScript(true);
|
||||
compressor.setRemoveComments(true);
|
||||
compressor.setRemoveMultiSpaces(true);
|
||||
compressor.setRemoveIntertagSpaces(true);
|
||||
// compressor.setGenerateStatistics(false);
|
||||
// compressor.setRemoveQuotes(false);
|
||||
// compressor.setSimpleDoctype(false);
|
||||
// compressor.setRemoveScriptAttributes(false);
|
||||
// compressor.setRemoveStyleAttributes(false);
|
||||
// compressor.setRemoveLinkAttributes(false);
|
||||
// compressor.setRemoveFormAttributes(false);
|
||||
// compressor.setRemoveInputAttributes(false);
|
||||
// compressor.setSimpleBooleanAttributes(false);
|
||||
// compressor.setRemoveJavaScriptProtocol(false);
|
||||
// compressor.setRemoveHttpProtocol(false);
|
||||
// compressor.setRemoveHttpsProtocol(false);
|
||||
// compressor.setPreserveLineBreaks(false);
|
||||
|
||||
return compressor.compress(src);
|
||||
}
|
||||
else {
|
||||
return src;
|
||||
}
|
||||
}
|
||||
} // ReportEngine
|
||||
|
|
Loading…
Reference in New Issue