[WebUI] Improve the minify script

This commit is contained in:
Calum Lind 2015-08-22 14:23:30 +01:00
parent 24b71a400f
commit d7029dcfc6
3 changed files with 1086 additions and 1227 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -9,7 +9,7 @@
# See LICENSE for more details. # 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 Usage: python minify_web_js.py deluge/ui/web/js/deluge-all
@ -20,55 +20,90 @@ import fnmatch
import os import os
import sys import sys
from slimit import minify
if len(sys.argv) != 2: def module_exists(module_name):
print 'Specify a source js directory, e.g. deluge/ui/web/js/deluge-all' try:
sys.exit(1) __import__(module_name)
except ImportError:
SOURCE_DIR = os.path.abspath(sys.argv[1]) return False
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))
else: else:
for filename in reversed(filenames_js): return True
SRC_FILE_LIST.insert(0, os.path.join(root, filename))
if not SRC_FILE_LIST: # slimit creates smallest file size
print 'No js files found' if module_exists('slimit'):
sys.exit(1) 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')
print 'Minifying %s ...' % BUILD_NAME
# Create the unminified debug file. def source_files_list(source_dir):
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)
file_minified_js = os.path.join(BUILD_DIR, BUILD_NAME + '.js') src_file_list = []
with open(file_minified_js, 'w') as file_out:
with open(file_debug_js, 'r') as file_in: for root, dirnames, filenames in os.walk(source_dir):
file_out.write(minify(file_in.read())) 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))
return src_file_list
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])]
for source_dir in JS_SOURCE_DIRS:
minify_js_dir(source_dir)