Blame | Letzte Änderung | Log anzeigen | RSS feed
#! /usr/bin/pythondef default(context):minifyfiles(context)def minifyfiles(context):src = context.Node('jspdf.js')dst = src.parent + 'dist/' + src.name - '.js' + '.source.js'dst.text = src.text.replace("${buildDate}", timeUTC()).replace("${commitID}", getCommitIDstring()) + \(src - '.js' + '.plugin.addimage.js').text + \(src - '.js' + '.plugin.from_html.js').text + \(src - '.js' + '.plugin.sillysvgrenderer.js').text + \(src - '.js' + '.plugin.split_text_to_size.js').text + \(src - '.js' + '.plugin.standard_fonts_metrics.js').text + \(src - 'jspdf.js' + 'libs/Blob.js/BlobBuilder.js').text + \(src - 'jspdf.js' + 'libs/FileSaver.js/FileSaver.js').text + \(src - 'jspdf.js' + 'libs/Deflate/deflate.js').text + \(src - 'jspdf.js' + 'libs/Deflate/adler32cs.js').text# (src - '.js' + '.plugin.from_html.js').text + \#minified = dst - '.source.js' + '.min.js'print("=== Compressing jsPDF and select plugins into " + minified.name)minified.text = compress_with_closure_compiler( dst.text )# AMD-compatible version:(minified - '.min.js' + '.amd.min.js').text = """;(function(){%s;define(function(){return jsPDF})})();""" % minified.text# jQuery "NoConflict" version:# only needed if some of the modules compiled into jsPDF need $# one such module is fromHTML# (minified - '.min.js' + '.noconflict.min.js').text = """;(function($){# %s# })(jQuery);# """ % minified.textdef docs(context):'''java -jar %jsdocbindir%\jsrun.jar %jsdocbindir%\app\run.js -v %rootdir%\jspdf.js -d=%rootdir%\doc -t=%rootdir%\tools\jsdoc_template'''jsdocBinDir = context.Node('~/bin/jsdoc-toolkit/')codefile = context.Node('jspdf.js')destinationFolder = context.Node('doc/')templateFolder = context.Node('tools/jsdoc_template/')import subprocesssubprocess.call(['java', '-jar', (jsdocBinDir + 'jsrun.jar').absolutepath, (jsdocBinDir + 'app/run.js').absolutepath, '-v', codefile.absolutepath, '-d='+destinationFolder.absolutepath, '-t='+templateFolder.absolutepath])def timeUTC():import datetimereturn datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M")def getCommitIDstring():import subprocessif not hasattr( subprocess, "check_output"):# let's not bother emulating it. Not importantreturn ""else:return "commit ID " + subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip()def compress_with_closure_compiler(code, compression_level = None):'''Sends text of JavaScript code to Google's Closure Compiler APIReturns text of compressed code.'''# script (with some modifications) from# https://developers.google.com/closure/compiler/docs/api-tutorial1import httplib, urllib, syscompression_levels = ['WHITESPACE_ONLY', 'SIMPLE_OPTIMIZATIONS', 'ADVANCED_OPTIMIZATIONS']if compression_level not in compression_levels:compression_level = compression_levels[1] # simple optimizations# Define the parameters for the POST request and encode them in# a URL-safe format.params = urllib.urlencode([('js_code', code), ('compilation_level', compression_level), ('output_format', 'json'), ('output_info', 'compiled_code'), ('output_info', 'warnings'), ('output_info', 'errors'), ('output_info', 'statistics')# , ('output_file_name', 'default.js')# , ('js_externs', 'javascript with externs') # only used on Advanced.])# Always use the following value for the Content-type header.headers = { "Content-type": "application/x-www-form-urlencoded" }conn = httplib.HTTPConnection('closure-compiler.appspot.com')conn.request('POST', '/compile', params, headers)response = conn.getresponse()if response.status != 200:raise Exception("Compilation server responded with non-OK status of " + str(response.status))compressedcode = response.read()conn.close()import json # needs python 2.6+ or simplejson module for earlierparts = json.loads(compressedcode)if 'errors' in parts:prettyerrors = ['\nCompilation Error:']for error in parts['errors']:prettyerrors.append("\nln %s, ch %s, '%s' - %s" % (error['lineno'], error['charno'], error['line'], error['error']))raise Exception(''.join(prettyerrors))return parts['compiledCode']if __name__ == '__main__':print("This is a Wak build automation tool script. Please, get Wak on GitHub and run it against the folder containing this automation script.")