Update to Closure Compiler of 2012-04-30.
[odfkit:webodf.git] / packwebodf.js
1 /**
2  * Copyright (C) 2011 KO GmbH <jos.van.den.oever@kogmbh.com>
3  * @licstart
4  * The JavaScript code in this page is free software: you can redistribute it
5  * and/or modify it under the terms of the GNU Affero General Public License
6  * (GNU AGPL) as published by the Free Software Foundation, either version 3 of
7  * the License, or (at your option) any later version.  The code is distributed
8  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
9  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU AGPL for more details.
10  *
11  * As additional permission under GNU AGPL version 3 section 7, you
12  * may distribute non-source (e.g., minimized or compacted) forms of
13  * that code without the copy of the GNU GPL normally required by
14  * section 4, provided you include this license notice and a URL
15  * through which recipients can access the Corresponding Source.
16  *
17  * As a special exception to the AGPL, any HTML file which merely makes function
18  * calls to this code, and for that purpose includes it by reference shall be
19  * deemed a separate work for copyright law purposes. In addition, the copyright
20  * holders of this code give you permission to combine this code with free
21  * software libraries that are released under the GNU LGPL. You may copy and
22  * distribute such a system following the terms of the GNU AGPL for this code
23  * and the LGPL for the libraries. If you modify this code, you may extend this
24  * exception to your version of the code, but you are not obligated to do so.
25  * If you do not wish to do so, delete this exception statement from your
26  * version.
27  *
28  * This license applies to this entire compilation.
29  * @licend
30  * @source: http://www.webodf.org/
31  * @source: http://gitorious.org/odfkit/webodf/
32  */
33 /*global runtime: true, core: true*/
34 runtime.loadClass("core.Zip");
35 runtime.loadClass("core.Base64");
36
37 function addFiles(zip, pos, inputfiles, zipfiles, callback) {
38     "use strict";
39     if (inputfiles.length !== zipfiles.length) {
40         return callback(
41                 "Arrays inputfiles and zipfiles should have the same length.");
42     }
43     if (pos >= inputfiles.length) {
44         zip.write(function (err) {
45             return callback(err);
46         });
47         return;
48     }
49     var inputfile = inputfiles[pos],
50         zipmemberpath = zipfiles[pos];
51     runtime.readFile(inputfile, "binary", function (err, data) {
52         var base64;
53         if (err) {
54             return callback(err);
55         }
56         zip.save(zipmemberpath, data, false, new Date());
57         addFiles(zip, pos + 1, inputfiles, zipfiles, callback);
58     });
59 }
60
61 function usage() {
62     "use strict";
63     runtime.log("Usage:");
64 }
65
66 /**
67  * This script takes 1+2n arguments
68  * First argument is the name of the target zip file.
69  * The next n arguments are the input files. The last n arguments are the
70  * names of the files in the zip file.
71  */
72 if (arguments.length % 2 !== 0) {
73     runtime.log("Wrong number of arguments.");
74     usage();
75     runtime.exit(1);
76 }
77 var args = arguments,
78     n = (args.length - 2) / 2,
79     zipfilename = args[1],
80     inputmembers = [],
81     zipmembers = [],
82     i,
83     zip = new core.Zip(zipfilename, null);
84 for (i = 0; i < n; i += 1) {
85     inputmembers[i] = args[2 + i];
86     zipmembers[i] = args[2 + n + i];
87 }
88 addFiles(zip, 0, inputmembers, zipmembers, function (err) {
89     "use strict";
90     if (err) {
91         runtime.log(err);
92     }
93 });