diff --git a/Gruntfile.js b/Gruntfile.js
index 9711b557..2cb48a53 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -213,6 +213,22 @@ module.exports = function(grunt) {
dest: 'test/preload/fixtures/library-same-dest'
},
libraries: '**'
+ },
+
+ 'library_custom_uglify_params': {
+ options: {
+ resources: 'test/preload/fixtures/library-custom-uglify-params',
+ dest: 'tmp/preload/library_custom_uglify_params',
+ compress: {
+ uglifyjs: {
+ mangle: false,
+ output: {
+ ascii_only: true
+ }
+ }
+ }
+ },
+ libraries: '**'
}
},
diff --git a/tasks/preload.js b/tasks/preload.js
index 1cf30cd3..a9da8e31 100644
--- a/tasks/preload.js
+++ b/tasks/preload.js
@@ -207,16 +207,28 @@ module.exports = function (grunt) {
iOriginalSize = fileContent.length;
iPreloadOriginalSize += iOriginalSize;
+ // Convert default compression to empty configuration object
+ if (options.compress === true) {
+ options.compress = {};
+ }
+
+ // Make sure to have an object
+ options.compress.uglifyjs = options.compress.uglifyjs || {};
+
+ // Always override given options, override shouldn't be possible
+ options.compress.uglifyjs.fromString = true;
+ options.compress.uglifyjs.warnings = grunt.option('verbose') === true;
+
+ // Set default "comments" option if not given already
+ options.compress.uglifyjs.output = options.compress.uglifyjs.output || {};
+ if (!options.compress.uglifyjs.output.hasOwnProperty("comments")) {
+ options.compress.uglifyjs.output.comments = copyrightCommentsPattern;
+ }
+
switch (fileExtension) {
case '.js':
// Javascript files are processed by Uglify
- fileContent = uglify.minify(fileContent, {
- fromString: true,
- warnings: grunt.option('verbose') === true,
- output: {
- comments: copyrightCommentsPattern
- }
- }).code;
+ fileContent = uglify.minify(fileContent, options.compress.uglifyjs).code;
break;
case '.json':
// JSON is parsed and written to string again to remove unwanted white space
diff --git a/test/preload/expected/library_custom_uglify_params/my/ui/lib/library-preload.json b/test/preload/expected/library_custom_uglify_params/my/ui/lib/library-preload.json
new file mode 100644
index 00000000..9b1040d1
--- /dev/null
+++ b/test/preload/expected/library_custom_uglify_params/my/ui/lib/library-preload.json
@@ -0,0 +1,11 @@
+{
+ "version": "2.0",
+ "name": "my.ui.lib.library-preload",
+ "modules": {
+ "my/ui/lib/library.js": "jQuery.sap.require(\"sap.ui.core.library\"),jQuery.sap.declare(\"my.ui.lib.library\"),sap.ui.getCore().initLibrary({name:\"my.ui.lib\",version:\"0.0.0\",dependencies:[\"sap.ui.core\"]});",
+ "my/ui/lib/myJS.js": "/* © */\n\"use strict\";function myFunction(longVariableName,longerVariableName){var sample=\"\\u518d\\u6309\\u4e00\\u6b21\\u9000\\u51fa\\u4f19\\u62fc\";return longVariableName+longerVariableName+sample}/**\n* This is a copyright comment\n*/\n/* (c) */\n/* released under */\n/* license */\nconsole.log(\"myJS\");",
+ "my/ui/lib/my.view.xml": "XML\n",
+ "my/ui/lib/myHtmlPre.view.xml": "XML\n\n ",
+ "my/ui/lib/foo.properties": "FOO=BAR\n"
+ }
+}
diff --git a/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/foo.properties b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/foo.properties
new file mode 100644
index 00000000..6ac867af
--- /dev/null
+++ b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/foo.properties
@@ -0,0 +1 @@
+FOO=BAR
diff --git a/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/library.js b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/library.js
new file mode 100644
index 00000000..ddc3b34c
--- /dev/null
+++ b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/library.js
@@ -0,0 +1,8 @@
+jQuery.sap.require("sap.ui.core.library");
+jQuery.sap.declare("my.ui.lib.library");
+
+sap.ui.getCore().initLibrary({
+ name : "my.ui.lib",
+ version: "0.0.0",
+ dependencies : ["sap.ui.core"]
+});
diff --git a/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/my.view.xml b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/my.view.xml
new file mode 100644
index 00000000..ac389a3b
--- /dev/null
+++ b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/my.view.xml
@@ -0,0 +1,2 @@
+XML
+
\ No newline at end of file
diff --git a/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myHtmlPre.view.xml b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myHtmlPre.view.xml
new file mode 100644
index 00000000..baa83f00
--- /dev/null
+++ b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myHtmlPre.view.xml
@@ -0,0 +1,3 @@
+XML
+
+
\ No newline at end of file
diff --git a/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJS.js b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJS.js
new file mode 100644
index 00000000..eccd6606
--- /dev/null
+++ b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJS.js
@@ -0,0 +1,23 @@
+/* © */
+'use strict';
+
+/**
+* This is a copyright comment
+*/
+
+/* (c) */
+
+/* released under */
+/* normal comment */
+/* license */
+
+
+console.log('myJS');
+
+/**
+ * This is a little comment
+ */
+function myFunction(longVariableName, longerVariableName) {
+ var sample = '\u518d\u6309\u4e00\u6b21\u9000\u51fa\u4f19\u62fc';
+ return longVariableName + longerVariableName + sample;
+}
diff --git a/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJSON.json b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJSON.json
new file mode 100644
index 00000000..bffd0ff5
--- /dev/null
+++ b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJSON.json
@@ -0,0 +1,3 @@
+{
+ "my": "json"
+}
diff --git a/test/preload_test.js b/test/preload_test.js
index 4f541ad1..5fd47517 100644
--- a/test/preload_test.js
+++ b/test/preload_test.js
@@ -45,6 +45,14 @@ describe('openui5_preload', function() {
});
});
+ it('custom_uglify_params', function() {
+ fileContent.equal({
+ sActualFileSource: 'tmp/preload/library_custom_uglify_params/my/ui/lib/library-preload.json',
+ sExpectedFileSource: 'test/preload/expected/library_custom_uglify_params/my/ui/lib/library-preload.json',
+ sMessage: 'library preload JSON should be correctly created.'
+ });
+ })
+
it('library_same_dest', function() {
fileContent.equal({
sActualFileSource: 'test/preload/fixtures/library-same-dest/my/ui/lib/library-preload.json',