[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.
#
"""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
if not SRC_FILE_LIST:
print 'No js files found'
sys.exit(1)
# 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')
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 source_files_list(source_dir):
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()))
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))
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)