summaryrefslogtreecommitdiffstats
path: root/minify_web_js.py
diff options
context:
space:
mode:
authorCalum Lind <calumlind+deluge@gmail.com>2015-08-22 14:23:30 +0100
committerCalum Lind <calumlind+deluge@gmail.com>2015-08-22 14:27:17 +0100
commitd7029dcfc6291b368ecce02c82faa917e833c2e3 (patch)
tree32d87eed0055e53a6adf413aebf644b7dd0d99bb /minify_web_js.py
parent24b71a400f741229f0623d2cd4f81068d3809716 (diff)
downloaddeluge-d7029dcfc6291b368ecce02c82faa917e833c2e3.tar.gz
deluge-d7029dcfc6291b368ecce02c82faa917e833c2e3.tar.bz2
deluge-d7029dcfc6291b368ecce02c82faa917e833c2e3.zip
[WebUI] Improve the minify script
Diffstat (limited to 'minify_web_js.py')
-rwxr-xr-xminify_web_js.py131
1 files changed, 83 insertions, 48 deletions
diff --git a/minify_web_js.py b/minify_web_js.py
index 61a29f07a..a808d0765 100755
--- a/minify_web_js.py
+++ b/minify_web_js.py
@@ -9,7 +9,7 @@
# See LICENSE for more details.
#
-"""Minifies the Webui JS files.
+"""Minifies the WebUI JS files.
Usage: python minify_web_js.py deluge/ui/web/js/deluge-all
@@ -20,55 +20,90 @@ import fnmatch
import os
import sys
-from slimit import minify
-
-if len(sys.argv) != 2:
- print 'Specify a source js directory, e.g. deluge/ui/web/js/deluge-all'
- sys.exit(1)
-
-SOURCE_DIR = os.path.abspath(sys.argv[1])
-BUILD_NAME = os.path.basename(SOURCE_DIR)
-BUILD_DIR = os.path.dirname(SOURCE_DIR)
-SRC_FILE_LIST = []
-
-for root, dirnames, filenames in os.walk(SOURCE_DIR):
- dirnames.sort(reverse=True)
- filenames_js = fnmatch.filter(filenames, '*.js')
- filenames_js.sort()
-
- order_file = os.path.join(root, '.order')
- if os.path.isfile(order_file):
- with open(order_file, 'r') as _file:
- for line in _file:
- line = line.strip()
- if not line or line[0] == '#':
- continue
- order_pos, order_filename = line.split()
- filenames_js.pop(filenames_js.index(order_filename))
- if order_pos == '+':
- filenames_js.insert(0, order_filename)
-
- # Ensure root directory files are bottom of list.
- if dirnames:
- for filename in filenames_js:
- SRC_FILE_LIST.append(os.path.join(root, filename))
+
+def module_exists(module_name):
+ try:
+ __import__(module_name)
+ except ImportError:
+ return False
else:
- for filename in reversed(filenames_js):
- SRC_FILE_LIST.insert(0, os.path.join(root, filename))
+ return True
+
+# slimit creates smallest file size
+if module_exists('slimit'):
+ from slimit import minify
+elif module_exists('jsmin'):
+ from jsmin import jsmin as minify
+elif module_exists('rjsmin'):
+ from rjsmin import jsmin as minify
+else:
+ raise ImportError('Minifying WebUI JS requires slimit, jsmin or rjsmin')
+
+
+def source_files_list(source_dir):
+
+ src_file_list = []
+
+ for root, dirnames, filenames in os.walk(source_dir):
+ dirnames.sort(reverse=True)
+ filenames_js = fnmatch.filter(filenames, '*.js')
+ filenames_js.sort()
+
+ order_file = os.path.join(root, '.order')
+ if os.path.isfile(order_file):
+ with open(order_file, 'r') as _file:
+ for line in _file:
+ line = line.strip()
+ if not line or line[0] == '#':
+ continue
+ order_pos, order_filename = line.split()
+ filenames_js.pop(filenames_js.index(order_filename))
+ if order_pos == '+':
+ filenames_js.insert(0, order_filename)
+
+ # Ensure root directory files are bottom of list.
+ if dirnames:
+ for filename in filenames_js:
+ src_file_list.append(os.path.join(root, filename))
+ else:
+ for filename in reversed(filenames_js):
+ src_file_list.insert(0, os.path.join(root, filename))
-if not SRC_FILE_LIST:
- print 'No js files found'
- sys.exit(1)
+ return src_file_list
-print 'Minifying %s ...' % BUILD_NAME
-# Create the unminified debug file.
-file_debug_js = os.path.join(BUILD_DIR, BUILD_NAME + '-debug.js')
-with open(file_debug_js, 'w') as _file:
- input_lines = fileinput.input(SRC_FILE_LIST)
- _file.writelines(input_lines)
+def concat_src_files(file_list, fileout_path):
+ with open(fileout_path, 'w') as file_out:
+ file_in = fileinput.input(file_list)
+ file_out.writelines(file_in)
+
+
+def minify_file(file_debug, file_minified):
+ with open(file_minified, 'w') as file_out:
+ with open(file_debug, 'r') as file_in:
+ file_out.write(minify(file_in.read()))
+
+
+def minify_js_dir(source_dir):
+ build_name = os.path.basename(source_dir)
+ build_dir = os.path.dirname(source_dir)
+ file_debug_js = os.path.join(build_dir, build_name + '-debug.js')
+ file_minified_js = os.path.join(build_dir, build_name + '.js')
+ source_files = source_files_list(source_dir)
+
+ if not source_files:
+ print 'No js files found, skipping %s' % source_dir
+ return
+
+ concat_src_files(source_files, file_debug_js)
+ minify_file(file_debug_js, file_minified_js)
+ print 'Minified %s' % source_dir
+
+if __name__ == '__main__':
+ if len(sys.argv) != 2:
+ JS_SOURCE_DIRS = ['deluge/ui/web/js/deluge-all', 'deluge/ui/web/js/extjs/ext-extensions']
+ else:
+ JS_SOURCE_DIRS = [os.path.abspath(sys.argv[1])]
-file_minified_js = os.path.join(BUILD_DIR, BUILD_NAME + '.js')
-with open(file_minified_js, 'w') as file_out:
- with open(file_debug_js, 'r') as file_in:
- file_out.write(minify(file_in.read()))
+ for source_dir in JS_SOURCE_DIRS:
+ minify_js_dir(source_dir)