mirror of
https://github.com/codex-storage/deluge.git
synced 2025-01-10 03:25:57 +00:00
84802da29b
* Added `from __future__ import unicode_literals` to every file so now all strings in code are forced to be unicode strings unless marked as byte string `b'str'` or encoded to byte string `'str'.encode('utf-8')`. This is a large change but we have been working towards the goal of unicode strings passed in the code so decoding external input and encoding output as byte strings (where applicable). Note that in Python 2 the `str` type still refers to byte strings. * Replaced the use of `str` for `basestring` in isinstance comparison as this was the original intention but breaks code when encoutering unicode strings. * Marked byte strings in gtkui as the conversion to utf8 is not always handled, mostly related to gobject signal names.
117 lines
3.5 KiB
Python
Executable File
117 lines
3.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright (C) 2014 Calum Lind <calumlind@gmail.com>
|
|
# Copyright (C) 2010 Damien Churchill <damoxc@gmail.com>
|
|
#
|
|
# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with
|
|
# the additional special exception to link portions of this program with the OpenSSL library.
|
|
# See LICENSE for more details.
|
|
#
|
|
|
|
"""Minifies the WebUI JS files.
|
|
|
|
Usage: python minify_web_js.py deluge/ui/web/js/deluge-all
|
|
|
|
"""
|
|
|
|
from __future__ import print_function, unicode_literals
|
|
|
|
import fileinput
|
|
import fnmatch
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
def module_exists(module_name):
|
|
try:
|
|
__import__(module_name)
|
|
except ImportError:
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
|
|
# Imports sorted by resulting file size.
|
|
if module_exists('closure'):
|
|
def minify_closure(file_in, file_out):
|
|
try:
|
|
subprocess.check_call(['closure', '-W', 'QUIET',
|
|
'--js', file_in, '--js_output_file', file_out])
|
|
return True
|
|
except subprocess.CalledProcessError:
|
|
return False
|
|
elif module_exists('slimit'):
|
|
from slimit import minify
|
|
else:
|
|
raise ImportError('Requires "slimit" package for minifying WebUI files.')
|
|
|
|
|
|
def source_files_list(source_dir):
|
|
scripts = []
|
|
for root, dirnames, filenames in os.walk(source_dir):
|
|
dirnames.sort(reverse=True)
|
|
files = fnmatch.filter(filenames, '*.js')
|
|
files.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:
|
|
if line.startswith('+ '):
|
|
order_filename = line.split()[1]
|
|
files.pop(files.index(order_filename))
|
|
files.insert(0, order_filename)
|
|
|
|
# Ensure root directory files are bottom of list.
|
|
if dirnames:
|
|
scripts.extend([os.path.join(root, f) for f in files])
|
|
else:
|
|
for filename in reversed(files):
|
|
scripts.insert(0, os.path.join(root, filename))
|
|
return scripts
|
|
|
|
|
|
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):
|
|
try:
|
|
return minify_closure(file_debug, file_minified)
|
|
except NameError:
|
|
with open(file_minified, 'w') as file_out:
|
|
with open(file_debug, 'r') as file_in:
|
|
file_out.write(minify(file_in.read()))
|
|
return True
|
|
|
|
|
|
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)
|
|
print('Minifying %s' % source_dir)
|
|
if not minify_file(file_debug_js, file_minified_js):
|
|
print('Error minifying %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 js_source_dir in JS_SOURCE_DIRS:
|
|
minify_js_dir(js_source_dir)
|