mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Use Uglify.js for JS optimization
Uglify.js library was included in ui/util folder. A wrapper script util/uglifyjs/uglify was created to run Uglify.js in Rhino enviroment. https://fedorahosted.org/freeipa/ticket/112
This commit is contained in:
@@ -30,6 +30,10 @@ Envjs core-env.1.2.13 - licensed under MIT license
|
|||||||
Overpass fonts - licensed under the SIL Open Font License, Version 1.1
|
Overpass fonts - licensed under the SIL Open Font License, Version 1.1
|
||||||
* overpass*
|
* overpass*
|
||||||
|
|
||||||
|
UglifyJS - licensed under BSD license
|
||||||
|
* util/uglifyjs/uglify-js.js
|
||||||
|
* utli/uglifyjs/lib/*
|
||||||
|
|
||||||
Full license texts and copyright notices are listed below.
|
Full license texts and copyright notices are listed below.
|
||||||
|
|
||||||
= jQuery copyright notice with MIT license =
|
= jQuery copyright notice with MIT license =
|
||||||
@@ -153,6 +157,37 @@ This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|||||||
This license is copied below, and is also available with a FAQ at:
|
This license is copied below, and is also available with a FAQ at:
|
||||||
http://scripts.sil.org/OFL
|
http://scripts.sil.org/OFL
|
||||||
|
|
||||||
|
= UglifyJS copyright notice with BSD license =
|
||||||
|
|
||||||
|
Copyright 2010 (c) Mihai Bazon <mihai.bazon@gmail.com>
|
||||||
|
Based on parse-js (http://marijn.haverbeke.nl/parse-js/).
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above
|
||||||
|
copyright notice, this list of conditions and the following
|
||||||
|
disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the following
|
||||||
|
disclaimer in the documentation and/or other materials
|
||||||
|
provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
|
||||||
|
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||||
|
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||||
|
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGE.
|
||||||
|
|
||||||
= MIT license template =
|
= MIT license template =
|
||||||
Copyright (C) <year> <copyright holders>
|
Copyright (C) <year> <copyright holders>
|
||||||
|
|
||||||
|
|||||||
1219
install/ui/util/uglifyjs/lib/consolidator.js
Normal file
1219
install/ui/util/uglifyjs/lib/consolidator.js
Normal file
File diff suppressed because it is too large
Load Diff
1369
install/ui/util/uglifyjs/lib/parse-js.js
Normal file
1369
install/ui/util/uglifyjs/lib/parse-js.js
Normal file
File diff suppressed because it is too large
Load Diff
2117
install/ui/util/uglifyjs/lib/process.js
Normal file
2117
install/ui/util/uglifyjs/lib/process.js
Normal file
File diff suppressed because it is too large
Load Diff
78
install/ui/util/uglifyjs/lib/squeeze-more.js
Normal file
78
install/ui/util/uglifyjs/lib/squeeze-more.js
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
var jsp = require("./parse-js"),
|
||||||
|
pro = require("./process"),
|
||||||
|
slice = jsp.slice,
|
||||||
|
member = jsp.member,
|
||||||
|
curry = jsp.curry,
|
||||||
|
MAP = pro.MAP,
|
||||||
|
PRECEDENCE = jsp.PRECEDENCE,
|
||||||
|
OPERATORS = jsp.OPERATORS;
|
||||||
|
|
||||||
|
function ast_squeeze_more(ast) {
|
||||||
|
var w = pro.ast_walker(), walk = w.walk, scope;
|
||||||
|
function with_scope(s, cont) {
|
||||||
|
var save = scope, ret;
|
||||||
|
scope = s;
|
||||||
|
ret = cont();
|
||||||
|
scope = save;
|
||||||
|
return ret;
|
||||||
|
};
|
||||||
|
function _lambda(name, args, body) {
|
||||||
|
return [ this[0], name, args, with_scope(body.scope, curry(MAP, body, walk)) ];
|
||||||
|
};
|
||||||
|
return w.with_walkers({
|
||||||
|
"toplevel": function(body) {
|
||||||
|
return [ this[0], with_scope(this.scope, curry(MAP, body, walk)) ];
|
||||||
|
},
|
||||||
|
"function": _lambda,
|
||||||
|
"defun": _lambda,
|
||||||
|
"new": function(ctor, args) {
|
||||||
|
if (ctor[0] == "name") {
|
||||||
|
if (ctor[1] == "Array" && !scope.has("Array")) {
|
||||||
|
if (args.length != 1) {
|
||||||
|
return [ "array", args ];
|
||||||
|
} else {
|
||||||
|
return walk([ "call", [ "name", "Array" ], args ]);
|
||||||
|
}
|
||||||
|
} else if (ctor[1] == "Object" && !scope.has("Object")) {
|
||||||
|
if (!args.length) {
|
||||||
|
return [ "object", [] ];
|
||||||
|
} else {
|
||||||
|
return walk([ "call", [ "name", "Object" ], args ]);
|
||||||
|
}
|
||||||
|
} else if ((ctor[1] == "RegExp" || ctor[1] == "Function" || ctor[1] == "Error") && !scope.has(ctor[1])) {
|
||||||
|
return walk([ "call", [ "name", ctor[1] ], args]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"call": function(expr, args) {
|
||||||
|
if (expr[0] == "dot" && expr[1][0] == "string" && args.length == 1
|
||||||
|
&& (args[0][1] > 0 && expr[2] == "substring" || expr[2] == "substr")) {
|
||||||
|
return [ "call", [ "dot", expr[1], "slice"], args];
|
||||||
|
}
|
||||||
|
if (expr[0] == "dot" && expr[2] == "toString" && args.length == 0) {
|
||||||
|
// foo.toString() ==> foo+""
|
||||||
|
if (expr[1][0] == "string") return expr[1];
|
||||||
|
return [ "binary", "+", expr[1], [ "string", "" ]];
|
||||||
|
}
|
||||||
|
if (expr[0] == "name") {
|
||||||
|
if (expr[1] == "Array" && args.length != 1 && !scope.has("Array")) {
|
||||||
|
return [ "array", args ];
|
||||||
|
}
|
||||||
|
if (expr[1] == "Object" && !args.length && !scope.has("Object")) {
|
||||||
|
return [ "object", [] ];
|
||||||
|
}
|
||||||
|
if (expr[1] == "String" && !scope.has("String")) {
|
||||||
|
return [ "binary", "+", args[0], [ "string", "" ]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, function() {
|
||||||
|
return walk(pro.ast_add_scope(ast));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.ast_squeeze_more = ast_squeeze_more;
|
||||||
|
|
||||||
|
// Local variables:
|
||||||
|
// js-indent-level: 4
|
||||||
|
// End:
|
||||||
1
install/ui/util/uglifyjs/ug.js
Normal file
1
install/ui/util/uglifyjs/ug.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
//just empty file to make rhino happy
|
||||||
26
install/ui/util/uglifyjs/uglify
Executable file
26
install/ui/util/uglifyjs/uglify
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2012 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# Wrapper for calling uglify.js under rhino
|
||||||
|
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
|
rhino -main $DIR/uglify-js.js $DIR/ug.js $1 $2 -v
|
||||||
86
install/ui/util/uglifyjs/uglify-js.js
Normal file
86
install/ui/util/uglifyjs/uglify-js.js
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
// Modified version of the orignal uglify-js.js. Modified to be runnable
|
||||||
|
// under rhino by Petr Vobornik, Red Hat
|
||||||
|
// writeFile(), read() code written by John Resig.
|
||||||
|
|
||||||
|
function uglify(orig_code, options){
|
||||||
|
options || (options = {});
|
||||||
|
var jsp = uglify.parser;
|
||||||
|
var pro = uglify.uglify;
|
||||||
|
|
||||||
|
var ast = jsp.parse(orig_code, options.strict_semicolons); // parse code and get the initial AST
|
||||||
|
ast = pro.ast_mangle(ast, options.mangle_options); // get a new AST with mangled names
|
||||||
|
ast = pro.ast_squeeze(ast, options.squeeze_options); // get an AST with compression optimizations
|
||||||
|
var final_code = pro.gen_code(ast, options.gen_options); // compressed code here
|
||||||
|
return final_code;
|
||||||
|
};
|
||||||
|
|
||||||
|
uglify.parser = require("./lib/parse-js");
|
||||||
|
uglify.uglify = require("./lib/process");
|
||||||
|
uglify.consolidator = require("./lib/consolidator");
|
||||||
|
|
||||||
|
module.exports = uglify
|
||||||
|
|
||||||
|
|
||||||
|
importPackage(java.io);
|
||||||
|
|
||||||
|
function writeFile( file, stream ) {
|
||||||
|
var buffer = new PrintWriter( new FileWriter( file ) );
|
||||||
|
buffer.print( stream );
|
||||||
|
buffer.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
function read( file ) {
|
||||||
|
var f = new File(file);
|
||||||
|
var reader = new BufferedReader(new FileReader(f));
|
||||||
|
var line = null;
|
||||||
|
var buffer = new java.lang.StringBuffer(f.length());
|
||||||
|
while( (line = reader.readLine()) != null) {
|
||||||
|
buffer.append(line);
|
||||||
|
buffer.append("\n");
|
||||||
|
}
|
||||||
|
return buffer.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
var options = {
|
||||||
|
ast: false,
|
||||||
|
consolidate: false,
|
||||||
|
mangle: true,
|
||||||
|
mangle_toplevel: false,
|
||||||
|
no_mangle_functions: false,
|
||||||
|
squeeze: true,
|
||||||
|
make_seqs: true,
|
||||||
|
dead_code: true,
|
||||||
|
verbose: false,
|
||||||
|
show_copyright: true,
|
||||||
|
out_same_file: false,
|
||||||
|
max_line_length: 32 * 1024,
|
||||||
|
unsafe: false,
|
||||||
|
reserved_names: null,
|
||||||
|
defines: { },
|
||||||
|
lift_vars: false,
|
||||||
|
codegen_options: {
|
||||||
|
ascii_only: false,
|
||||||
|
beautify: false,
|
||||||
|
indent_level: 4,
|
||||||
|
indent_start: 0,
|
||||||
|
quote_keys: false,
|
||||||
|
space_colon: false,
|
||||||
|
inline_script: false
|
||||||
|
},
|
||||||
|
make: false,
|
||||||
|
output: true // stdout
|
||||||
|
};
|
||||||
|
|
||||||
|
if (arguments.length < 2) {
|
||||||
|
print('Invalid input\nUsage: uglify inputFile outputFile');
|
||||||
|
quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arguments.indexOf('-v')) {
|
||||||
|
print('Uglifying '+arguments[0] +'\nOutput: '+arguments[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
//read input file
|
||||||
|
var input = read(arguments[0]) + '';
|
||||||
|
var output = uglify(input, options);
|
||||||
|
writeFile(arguments[1], output);
|
||||||
Reference in New Issue
Block a user