Fix #130 — Allow to individually download files from zip
This commit is contained in:
parent
33f8707240
commit
0700ea7375
|
@ -3,6 +3,7 @@ Revision history for Lufi
|
||||||
0.04.0 2019-??-??
|
0.04.0 2019-??-??
|
||||||
- Allow to zip the files before upload
|
- Allow to zip the files before upload
|
||||||
- Allow to see what's in zip file on download page
|
- Allow to see what's in zip file on download page
|
||||||
|
- Allow to individually download files from zip file (only if zip created by Lufi)
|
||||||
|
|
||||||
0.03.7 2019-08-01
|
0.03.7 2019-08-01
|
||||||
- Fix missing default values for some settings (mildis)
|
- Fix missing default values for some settings (mildis)
|
||||||
|
|
|
@ -133,6 +133,7 @@ sub upload {
|
||||||
->nbslices($json->{total})
|
->nbslices($json->{total})
|
||||||
->mod_token($c->shortener($c->config('token_length')))
|
->mod_token($c->shortener($c->config('token_length')))
|
||||||
->passwd($salted_pwd)
|
->passwd($salted_pwd)
|
||||||
|
->zipped($json->{zipped})
|
||||||
->write;
|
->write;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ has 'slices' => sub {
|
||||||
};
|
};
|
||||||
has 'passwd';
|
has 'passwd';
|
||||||
has 'abuse';
|
has 'abuse';
|
||||||
|
has 'zipped' => 0;
|
||||||
has 'record' => 0;
|
has 'record' => 0;
|
||||||
has 'app';
|
has 'app';
|
||||||
|
|
||||||
|
@ -78,6 +79,8 @@ Have a look at Lufi::DB::File::SQLite's code: it's simple and may be more unders
|
||||||
|
|
||||||
=item B<abuse> : integer
|
=item B<abuse> : integer
|
||||||
|
|
||||||
|
=item B<zipped> : boolean
|
||||||
|
|
||||||
=item B<app> : a Mojolicious object
|
=item B<app> : a Mojolicious object
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
@ -175,9 +178,9 @@ sub write {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
|
||||||
if ($c->record) {
|
if ($c->record) {
|
||||||
$c->app->dbi->db->query('UPDATE files SET short = ?, deleted = ?, mediatype = ?, filename = ?, filesize = ?, counter = ?, delete_at_first_view = ?, delete_at_day = ?, created_at = ?, created_by = ?, last_access_at = ?, mod_token = ?, nbslices = ?, complete = ?, passwd = ?, abuse = ? WHERE short = ?', $c->short, $c->deleted, $c->mediatype, $c->filename, $c->filesize, $c->counter, $c->delete_at_first_view, $c->delete_at_day, $c->created_at, $c->created_by, $c->last_access_at, $c->mod_token, $c->nbslices, $c->complete, $c->passwd, $c->abuse, $c->short);
|
$c->app->dbi->db->query('UPDATE files SET short = ?, deleted = ?, mediatype = ?, filename = ?, filesize = ?, counter = ?, delete_at_first_view = ?, delete_at_day = ?, created_at = ?, created_by = ?, last_access_at = ?, mod_token = ?, nbslices = ?, complete = ?, passwd = ?, abuse = ?, zipped = ? WHERE short = ?', $c->short, $c->deleted, $c->mediatype, $c->filename, $c->filesize, $c->counter, $c->delete_at_first_view, $c->delete_at_day, $c->created_at, $c->created_by, $c->last_access_at, $c->mod_token, $c->nbslices, $c->complete, $c->passwd, $c->abuse, $c->zipped, $c->short);
|
||||||
} else {
|
} else {
|
||||||
$c->app->dbi->db->query('INSERT INTO files (short, deleted, mediatype, filename, filesize, counter, delete_at_first_view, delete_at_day, created_at, created_by, last_access_at, mod_token, nbslices, complete, passwd, abuse) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', $c->short, $c->deleted, $c->mediatype, $c->filename, $c->filesize, $c->counter, $c->delete_at_first_view, $c->delete_at_day, $c->created_at, $c->created_by, $c->last_access_at, $c->mod_token, $c->nbslices, $c->complete, $c->passwd, $c->abuse);
|
$c->app->dbi->db->query('INSERT INTO files (short, deleted, mediatype, filename, filesize, counter, delete_at_first_view, delete_at_day, created_at, created_by, last_access_at, mod_token, nbslices, complete, passwd, abuse, zipped) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', $c->short, $c->deleted, $c->mediatype, $c->filename, $c->filesize, $c->counter, $c->delete_at_first_view, $c->delete_at_day, $c->created_at, $c->created_by, $c->last_access_at, $c->mod_token, $c->nbslices, $c->complete, $c->passwd, $c->abuse, $c->zipped);
|
||||||
$c->record(1);
|
$c->record(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -505,6 +508,7 @@ sub _slurp {
|
||||||
$c->complete($file->{complete});
|
$c->complete($file->{complete});
|
||||||
$c->passwd($file->{passwd});
|
$c->passwd($file->{passwd});
|
||||||
$c->abuse($file->{abuse});
|
$c->abuse($file->{abuse});
|
||||||
|
$c->zipped($file->{zipped});
|
||||||
|
|
||||||
$c->record(1) unless $c->record;
|
$c->record(1) unless $c->record;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,9 @@ sub register {
|
||||||
# Database migration
|
# Database migration
|
||||||
my $migrations = Mojo::Pg::Migrations->new(pg => $app->dbi);
|
my $migrations = Mojo::Pg::Migrations->new(pg => $app->dbi);
|
||||||
if ($app->mode eq 'development' && $ENV{LUFI_DEV}) {
|
if ($app->mode eq 'development' && $ENV{LUFI_DEV}) {
|
||||||
$migrations->from_file('utilities/migrations/pg.sql')->migrate(0)->migrate(2);
|
$migrations->from_file('utilities/migrations/pg.sql')->migrate(0)->migrate(3);
|
||||||
} else {
|
} else {
|
||||||
$migrations->from_file('utilities/migrations/pg.sql')->migrate(2);
|
$migrations->from_file('utilities/migrations/pg.sql')->migrate(3);
|
||||||
}
|
}
|
||||||
} elsif ($app->config('dbtype') eq 'mysql') {
|
} elsif ($app->config('dbtype') eq 'mysql') {
|
||||||
require Mojo::mysql;
|
require Mojo::mysql;
|
||||||
|
@ -30,9 +30,9 @@ sub register {
|
||||||
# Database migration
|
# Database migration
|
||||||
my $migrations = Mojo::mysql::Migrations->new(mysql => $app->dbi);
|
my $migrations = Mojo::mysql::Migrations->new(mysql => $app->dbi);
|
||||||
if ($app->mode eq 'development' && $ENV{LUFI_DEV}) {
|
if ($app->mode eq 'development' && $ENV{LUFI_DEV}) {
|
||||||
$migrations->from_file('utilities/migrations/mysql.sql')->migrate(0)->migrate(1);
|
$migrations->from_file('utilities/migrations/mysql.sql')->migrate(0)->migrate(2);
|
||||||
} else {
|
} else {
|
||||||
$migrations->from_file('utilities/migrations/mysql.sql')->migrate(1);
|
$migrations->from_file('utilities/migrations/mysql.sql')->migrate(2);
|
||||||
}
|
}
|
||||||
} elsif ($app->config('dbtype') eq 'sqlite') {
|
} elsif ($app->config('dbtype') eq 'sqlite') {
|
||||||
require Mojo::SQLite;
|
require Mojo::SQLite;
|
||||||
|
@ -43,9 +43,9 @@ sub register {
|
||||||
my $sql = $app->dbi;
|
my $sql = $app->dbi;
|
||||||
my $migrations = $sql->migrations;
|
my $migrations = $sql->migrations;
|
||||||
if ($app->mode eq 'development' && $ENV{LUFI_DEV}) {
|
if ($app->mode eq 'development' && $ENV{LUFI_DEV}) {
|
||||||
$migrations->from_file('utilities/migrations/sqlite.sql')->migrate(0)->migrate(2);
|
$migrations->from_file('utilities/migrations/sqlite.sql')->migrate(0)->migrate(3);
|
||||||
} else {
|
} else {
|
||||||
$migrations->from_file('utilities/migrations/sqlite.sql')->migrate(2);
|
$migrations->from_file('utilities/migrations/sqlite.sql')->migrate(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if passwd column is missing
|
# Check if passwd column is missing
|
||||||
|
|
1
t/test.t
1
t/test.t
|
@ -22,6 +22,7 @@ my $msg = to_json {
|
||||||
"delay" => "0",
|
"delay" => "0",
|
||||||
"del_at_first_view" => 1,
|
"del_at_first_view" => 1,
|
||||||
"id" => undef,
|
"id" => undef,
|
||||||
|
"zipped" => 0,
|
||||||
"i" => 0
|
"i" => 0
|
||||||
};
|
};
|
||||||
my $encrypted = '"{\\"iv\\":\\"2RGAviAeYybBqcLCmnqlgA==\\",\\"v\\":1,\\"iter\\":10000,\\"ks\\":128,\\"ts\\":64,\\"mode\\":\\"ccm\\",\\"adata\\":\\"\\",\\"cipher\\":\\"aes\\",\\"salt\\":\\"1dvKtbZ8hxA=\\",\\"ct\\":\\"w9wDZCwNSyH/yL7q1GW5fPSdi+w=\\"}"';
|
my $encrypted = '"{\\"iv\\":\\"2RGAviAeYybBqcLCmnqlgA==\\",\\"v\\":1,\\"iter\\":10000,\\"ks\\":128,\\"ts\\":64,\\"mode\\":\\"ccm\\",\\"adata\\":\\"\\",\\"cipher\\":\\"aes\\",\\"salt\\":\\"1dvKtbZ8hxA=\\",\\"ct\\":\\"w9wDZCwNSyH/yL7q1GW5fPSdi+w=\\"}"';
|
||||||
|
|
|
@ -98,15 +98,15 @@ msgstr ""
|
||||||
msgid "Copy to clipboard"
|
msgid "Copy to clipboard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/Lufi/Controller/Files.pm:460
|
#: lib/Lufi/Controller/Files.pm:461
|
||||||
msgid "Could not delete the file. You are not authenticated."
|
msgid "Could not delete the file. You are not authenticated."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/Lufi/Controller/Files.pm:442
|
#: lib/Lufi/Controller/Files.pm:443
|
||||||
msgid "Could not find the file. Are you sure of the URL and the token?"
|
msgid "Could not find the file. Are you sure of the URL and the token?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/Lufi/Controller/Files.pm:353
|
#: lib/Lufi/Controller/Files.pm:354
|
||||||
msgid "Could not find the file. Are you sure of the URL?"
|
msgid "Could not find the file. Are you sure of the URL?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -170,15 +170,15 @@ msgstr ""
|
||||||
msgid "Encrypting part XX1 of XX2"
|
msgid "Encrypting part XX1 of XX2"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/Lufi/Controller/Files.pm:242
|
#: lib/Lufi/Controller/Files.pm:243
|
||||||
msgid "Error: the file existed but was deleted."
|
msgid "Error: the file existed but was deleted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/Lufi/Controller/Files.pm:322
|
#: lib/Lufi/Controller/Files.pm:323
|
||||||
msgid "Error: the file has not been sent entirely."
|
msgid "Error: the file has not been sent entirely."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/Lufi/Controller/Files.pm:332
|
#: lib/Lufi/Controller/Files.pm:333
|
||||||
msgid "Error: unable to find the file. Are you sure of your URL?"
|
msgid "Error: unable to find the file. Are you sure of your URL?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -194,7 +194,7 @@ msgstr ""
|
||||||
msgid "Export localStorage data"
|
msgid "Export localStorage data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/Lufi/Controller/Files.pm:424
|
#: lib/Lufi/Controller/Files.pm:425
|
||||||
msgid "File deleted"
|
msgid "File deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -397,7 +397,7 @@ msgstr ""
|
||||||
msgid "The email subject can't be empty."
|
msgid "The email subject can't be empty."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/Lufi/Controller/Files.pm:421
|
#: lib/Lufi/Controller/Files.pm:422
|
||||||
msgid "The file has already been deleted"
|
msgid "The file has already been deleted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -422,11 +422,11 @@ msgstr ""
|
||||||
msgid "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" class=\"classic\">Luc Didry</a>."
|
msgid "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" class=\"classic\">Luc Didry</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/Lufi/Controller/Files.pm:189
|
#: lib/Lufi/Controller/Files.pm:190
|
||||||
msgid "The server was unable to find the file record to add your file part to. Please, contact the administrator."
|
msgid "The server was unable to find the file record to add your file part to. Please, contact the administrator."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/Lufi/Controller/Files.pm:248
|
#: lib/Lufi/Controller/Files.pm:249
|
||||||
msgid "This file has been deactivated by the admins. Contact them to know why."
|
msgid "This file has been deactivated by the admins. Contact them to know why."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -439,17 +439,17 @@ msgid "Unable to copy the link(s) to your clipboard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. ($short)
|
#. ($short)
|
||||||
#: lib/Lufi/Controller/Files.pm:392
|
#: lib/Lufi/Controller/Files.pm:393
|
||||||
msgid "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage."
|
msgid "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. ($short)
|
#. ($short)
|
||||||
#: lib/Lufi/Controller/Files.pm:382
|
#: lib/Lufi/Controller/Files.pm:383
|
||||||
msgid "Unable to get counter for %1. The token is invalid."
|
msgid "Unable to get counter for %1. The token is invalid."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. ($short)
|
#. ($short)
|
||||||
#: lib/Lufi/Controller/Files.pm:402
|
#: lib/Lufi/Controller/Files.pm:403
|
||||||
msgid "Unable to get counter for %1. You are not authenticated."
|
msgid "Unable to get counter for %1. You are not authenticated."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -518,7 +518,7 @@ msgstr ""
|
||||||
msgid "Your file is too big: %1 (maximum size allowed: %2)"
|
msgid "Your file is too big: %1 (maximum size allowed: %2)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/Lufi/Controller/Files.pm:304
|
#: lib/Lufi/Controller/Files.pm:305
|
||||||
msgid "Your password is not valid. Please refresh the page to retry."
|
msgid "Your password is not valid. Please refresh the page to retry."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*!
|
/*!
|
||||||
|
|
||||||
JSZip v3.1.5 - A JavaScript class for generating and reading zip files
|
JSZip v3.2.1 - A JavaScript class for generating and reading zip files
|
||||||
<http://stuartk.com/jszip>
|
<http://stuartk.com/jszip>
|
||||||
|
|
||||||
(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
|
(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
|
||||||
|
@ -324,7 +324,7 @@ module.exports = {
|
||||||
Promise: ES6Promise
|
Promise: ES6Promise
|
||||||
};
|
};
|
||||||
|
|
||||||
},{"lie":58}],7:[function(require,module,exports){
|
},{"lie":37}],7:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined');
|
var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined');
|
||||||
|
|
||||||
|
@ -411,7 +411,7 @@ exports.uncompressWorker = function () {
|
||||||
return new FlateWorker("Inflate", {});
|
return new FlateWorker("Inflate", {});
|
||||||
};
|
};
|
||||||
|
|
||||||
},{"./stream/GenericWorker":28,"./utils":32,"pako":59}],8:[function(require,module,exports){
|
},{"./stream/GenericWorker":28,"./utils":32,"pako":38}],8:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var utils = require('../utils');
|
var utils = require('../utils');
|
||||||
|
@ -1057,7 +1057,7 @@ JSZip.defaults = require('./defaults');
|
||||||
|
|
||||||
// TODO find a better way to handle this version,
|
// TODO find a better way to handle this version,
|
||||||
// a require('package.json').version doesn't work with webpack, see #327
|
// a require('package.json').version doesn't work with webpack, see #327
|
||||||
JSZip.version = "3.1.5";
|
JSZip.version = "3.2.0";
|
||||||
|
|
||||||
JSZip.loadAsync = function (content, options) {
|
JSZip.loadAsync = function (content, options) {
|
||||||
return new JSZip().loadAsync(content, options);
|
return new JSZip().loadAsync(content, options);
|
||||||
|
@ -1287,13 +1287,16 @@ module.exports = {
|
||||||
* @return {Buffer} a new Buffer.
|
* @return {Buffer} a new Buffer.
|
||||||
*/
|
*/
|
||||||
newBufferFrom: function(data, encoding) {
|
newBufferFrom: function(data, encoding) {
|
||||||
// XXX We can't use `Buffer.from` which comes from `Uint8Array.from`
|
if (Buffer.from && Buffer.from !== Uint8Array.from) {
|
||||||
// in nodejs v4 (< v.4.5). It's not the expected implementation (and
|
return Buffer.from(data, encoding);
|
||||||
// has a different signature).
|
} else {
|
||||||
// see https://github.com/nodejs/node/issues/8053
|
if (typeof data === "number") {
|
||||||
// A condition on nodejs' version won't solve the issue as we don't
|
// Safeguard for old Node.js versions. On newer versions,
|
||||||
// control the Buffer polyfills that may or may not be used.
|
// Buffer.from(number) / Buffer(number, encoding) already throw.
|
||||||
return new Buffer(data, encoding);
|
throw new Error("The \"data\" argument must not be a number");
|
||||||
|
}
|
||||||
|
return new Buffer(data, encoding);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Create a new nodejs Buffer with the specified size.
|
* Create a new nodejs Buffer with the specified size.
|
||||||
|
@ -1304,7 +1307,9 @@ module.exports = {
|
||||||
if (Buffer.alloc) {
|
if (Buffer.alloc) {
|
||||||
return Buffer.alloc(size);
|
return Buffer.alloc(size);
|
||||||
} else {
|
} else {
|
||||||
return new Buffer(size);
|
var buf = new Buffer(size);
|
||||||
|
buf.fill(0);
|
||||||
|
return buf;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
|
@ -3032,7 +3037,7 @@ exports.Utf8EncodeWorker = Utf8EncodeWorker;
|
||||||
var support = require('./support');
|
var support = require('./support');
|
||||||
var base64 = require('./base64');
|
var base64 = require('./base64');
|
||||||
var nodejsUtils = require('./nodejsUtils');
|
var nodejsUtils = require('./nodejsUtils');
|
||||||
var setImmediate = require('core-js/library/fn/set-immediate');
|
var setImmediate = require('set-immediate-shim');
|
||||||
var external = require("./external");
|
var external = require("./external");
|
||||||
|
|
||||||
|
|
||||||
|
@ -3504,7 +3509,7 @@ exports.prepareContent = function(name, inputData, isBinary, isOptimizedBinarySt
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"core-js/library/fn/set-immediate":36}],33:[function(require,module,exports){
|
},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"set-immediate-shim":54}],33:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
var readerFor = require('./reader/readerFor');
|
var readerFor = require('./reader/readerFor');
|
||||||
var utils = require('./utils');
|
var utils = require('./utils');
|
||||||
|
@ -4198,296 +4203,6 @@ for(var i = 0; i < removedMethods.length; i++) {
|
||||||
module.exports = ZipObject;
|
module.exports = ZipObject;
|
||||||
|
|
||||||
},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(require,module,exports){
|
},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(require,module,exports){
|
||||||
require('../modules/web.immediate');
|
|
||||||
module.exports = require('../modules/_core').setImmediate;
|
|
||||||
},{"../modules/_core":40,"../modules/web.immediate":56}],37:[function(require,module,exports){
|
|
||||||
module.exports = function(it){
|
|
||||||
if(typeof it != 'function')throw TypeError(it + ' is not a function!');
|
|
||||||
return it;
|
|
||||||
};
|
|
||||||
},{}],38:[function(require,module,exports){
|
|
||||||
var isObject = require('./_is-object');
|
|
||||||
module.exports = function(it){
|
|
||||||
if(!isObject(it))throw TypeError(it + ' is not an object!');
|
|
||||||
return it;
|
|
||||||
};
|
|
||||||
},{"./_is-object":51}],39:[function(require,module,exports){
|
|
||||||
var toString = {}.toString;
|
|
||||||
|
|
||||||
module.exports = function(it){
|
|
||||||
return toString.call(it).slice(8, -1);
|
|
||||||
};
|
|
||||||
},{}],40:[function(require,module,exports){
|
|
||||||
var core = module.exports = {version: '2.3.0'};
|
|
||||||
if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
|
|
||||||
},{}],41:[function(require,module,exports){
|
|
||||||
// optional / simple context binding
|
|
||||||
var aFunction = require('./_a-function');
|
|
||||||
module.exports = function(fn, that, length){
|
|
||||||
aFunction(fn);
|
|
||||||
if(that === undefined)return fn;
|
|
||||||
switch(length){
|
|
||||||
case 1: return function(a){
|
|
||||||
return fn.call(that, a);
|
|
||||||
};
|
|
||||||
case 2: return function(a, b){
|
|
||||||
return fn.call(that, a, b);
|
|
||||||
};
|
|
||||||
case 3: return function(a, b, c){
|
|
||||||
return fn.call(that, a, b, c);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return function(/* ...args */){
|
|
||||||
return fn.apply(that, arguments);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
},{"./_a-function":37}],42:[function(require,module,exports){
|
|
||||||
// Thank's IE8 for his funny defineProperty
|
|
||||||
module.exports = !require('./_fails')(function(){
|
|
||||||
return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
|
|
||||||
});
|
|
||||||
},{"./_fails":45}],43:[function(require,module,exports){
|
|
||||||
var isObject = require('./_is-object')
|
|
||||||
, document = require('./_global').document
|
|
||||||
// in old IE typeof document.createElement is 'object'
|
|
||||||
, is = isObject(document) && isObject(document.createElement);
|
|
||||||
module.exports = function(it){
|
|
||||||
return is ? document.createElement(it) : {};
|
|
||||||
};
|
|
||||||
},{"./_global":46,"./_is-object":51}],44:[function(require,module,exports){
|
|
||||||
var global = require('./_global')
|
|
||||||
, core = require('./_core')
|
|
||||||
, ctx = require('./_ctx')
|
|
||||||
, hide = require('./_hide')
|
|
||||||
, PROTOTYPE = 'prototype';
|
|
||||||
|
|
||||||
var $export = function(type, name, source){
|
|
||||||
var IS_FORCED = type & $export.F
|
|
||||||
, IS_GLOBAL = type & $export.G
|
|
||||||
, IS_STATIC = type & $export.S
|
|
||||||
, IS_PROTO = type & $export.P
|
|
||||||
, IS_BIND = type & $export.B
|
|
||||||
, IS_WRAP = type & $export.W
|
|
||||||
, exports = IS_GLOBAL ? core : core[name] || (core[name] = {})
|
|
||||||
, expProto = exports[PROTOTYPE]
|
|
||||||
, target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
|
|
||||||
, key, own, out;
|
|
||||||
if(IS_GLOBAL)source = name;
|
|
||||||
for(key in source){
|
|
||||||
// contains in native
|
|
||||||
own = !IS_FORCED && target && target[key] !== undefined;
|
|
||||||
if(own && key in exports)continue;
|
|
||||||
// export native or passed
|
|
||||||
out = own ? target[key] : source[key];
|
|
||||||
// prevent global pollution for namespaces
|
|
||||||
exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
|
|
||||||
// bind timers to global for call from export context
|
|
||||||
: IS_BIND && own ? ctx(out, global)
|
|
||||||
// wrap global constructors for prevent change them in library
|
|
||||||
: IS_WRAP && target[key] == out ? (function(C){
|
|
||||||
var F = function(a, b, c){
|
|
||||||
if(this instanceof C){
|
|
||||||
switch(arguments.length){
|
|
||||||
case 0: return new C;
|
|
||||||
case 1: return new C(a);
|
|
||||||
case 2: return new C(a, b);
|
|
||||||
} return new C(a, b, c);
|
|
||||||
} return C.apply(this, arguments);
|
|
||||||
};
|
|
||||||
F[PROTOTYPE] = C[PROTOTYPE];
|
|
||||||
return F;
|
|
||||||
// make static versions for prototype methods
|
|
||||||
})(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
|
|
||||||
// export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
|
|
||||||
if(IS_PROTO){
|
|
||||||
(exports.virtual || (exports.virtual = {}))[key] = out;
|
|
||||||
// export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
|
|
||||||
if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
// type bitmap
|
|
||||||
$export.F = 1; // forced
|
|
||||||
$export.G = 2; // global
|
|
||||||
$export.S = 4; // static
|
|
||||||
$export.P = 8; // proto
|
|
||||||
$export.B = 16; // bind
|
|
||||||
$export.W = 32; // wrap
|
|
||||||
$export.U = 64; // safe
|
|
||||||
$export.R = 128; // real proto method for `library`
|
|
||||||
module.exports = $export;
|
|
||||||
},{"./_core":40,"./_ctx":41,"./_global":46,"./_hide":47}],45:[function(require,module,exports){
|
|
||||||
module.exports = function(exec){
|
|
||||||
try {
|
|
||||||
return !!exec();
|
|
||||||
} catch(e){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
},{}],46:[function(require,module,exports){
|
|
||||||
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
|
|
||||||
var global = module.exports = typeof window != 'undefined' && window.Math == Math
|
|
||||||
? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
|
|
||||||
if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
|
|
||||||
},{}],47:[function(require,module,exports){
|
|
||||||
var dP = require('./_object-dp')
|
|
||||||
, createDesc = require('./_property-desc');
|
|
||||||
module.exports = require('./_descriptors') ? function(object, key, value){
|
|
||||||
return dP.f(object, key, createDesc(1, value));
|
|
||||||
} : function(object, key, value){
|
|
||||||
object[key] = value;
|
|
||||||
return object;
|
|
||||||
};
|
|
||||||
},{"./_descriptors":42,"./_object-dp":52,"./_property-desc":53}],48:[function(require,module,exports){
|
|
||||||
module.exports = require('./_global').document && document.documentElement;
|
|
||||||
},{"./_global":46}],49:[function(require,module,exports){
|
|
||||||
module.exports = !require('./_descriptors') && !require('./_fails')(function(){
|
|
||||||
return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;
|
|
||||||
});
|
|
||||||
},{"./_descriptors":42,"./_dom-create":43,"./_fails":45}],50:[function(require,module,exports){
|
|
||||||
// fast apply, http://jsperf.lnkit.com/fast-apply/5
|
|
||||||
module.exports = function(fn, args, that){
|
|
||||||
var un = that === undefined;
|
|
||||||
switch(args.length){
|
|
||||||
case 0: return un ? fn()
|
|
||||||
: fn.call(that);
|
|
||||||
case 1: return un ? fn(args[0])
|
|
||||||
: fn.call(that, args[0]);
|
|
||||||
case 2: return un ? fn(args[0], args[1])
|
|
||||||
: fn.call(that, args[0], args[1]);
|
|
||||||
case 3: return un ? fn(args[0], args[1], args[2])
|
|
||||||
: fn.call(that, args[0], args[1], args[2]);
|
|
||||||
case 4: return un ? fn(args[0], args[1], args[2], args[3])
|
|
||||||
: fn.call(that, args[0], args[1], args[2], args[3]);
|
|
||||||
} return fn.apply(that, args);
|
|
||||||
};
|
|
||||||
},{}],51:[function(require,module,exports){
|
|
||||||
module.exports = function(it){
|
|
||||||
return typeof it === 'object' ? it !== null : typeof it === 'function';
|
|
||||||
};
|
|
||||||
},{}],52:[function(require,module,exports){
|
|
||||||
var anObject = require('./_an-object')
|
|
||||||
, IE8_DOM_DEFINE = require('./_ie8-dom-define')
|
|
||||||
, toPrimitive = require('./_to-primitive')
|
|
||||||
, dP = Object.defineProperty;
|
|
||||||
|
|
||||||
exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){
|
|
||||||
anObject(O);
|
|
||||||
P = toPrimitive(P, true);
|
|
||||||
anObject(Attributes);
|
|
||||||
if(IE8_DOM_DEFINE)try {
|
|
||||||
return dP(O, P, Attributes);
|
|
||||||
} catch(e){ /* empty */ }
|
|
||||||
if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
|
|
||||||
if('value' in Attributes)O[P] = Attributes.value;
|
|
||||||
return O;
|
|
||||||
};
|
|
||||||
},{"./_an-object":38,"./_descriptors":42,"./_ie8-dom-define":49,"./_to-primitive":55}],53:[function(require,module,exports){
|
|
||||||
module.exports = function(bitmap, value){
|
|
||||||
return {
|
|
||||||
enumerable : !(bitmap & 1),
|
|
||||||
configurable: !(bitmap & 2),
|
|
||||||
writable : !(bitmap & 4),
|
|
||||||
value : value
|
|
||||||
};
|
|
||||||
};
|
|
||||||
},{}],54:[function(require,module,exports){
|
|
||||||
var ctx = require('./_ctx')
|
|
||||||
, invoke = require('./_invoke')
|
|
||||||
, html = require('./_html')
|
|
||||||
, cel = require('./_dom-create')
|
|
||||||
, global = require('./_global')
|
|
||||||
, process = global.process
|
|
||||||
, setTask = global.setImmediate
|
|
||||||
, clearTask = global.clearImmediate
|
|
||||||
, MessageChannel = global.MessageChannel
|
|
||||||
, counter = 0
|
|
||||||
, queue = {}
|
|
||||||
, ONREADYSTATECHANGE = 'onreadystatechange'
|
|
||||||
, defer, channel, port;
|
|
||||||
var run = function(){
|
|
||||||
var id = +this;
|
|
||||||
if(queue.hasOwnProperty(id)){
|
|
||||||
var fn = queue[id];
|
|
||||||
delete queue[id];
|
|
||||||
fn();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var listener = function(event){
|
|
||||||
run.call(event.data);
|
|
||||||
};
|
|
||||||
// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
|
|
||||||
if(!setTask || !clearTask){
|
|
||||||
setTask = function setImmediate(fn){
|
|
||||||
var args = [], i = 1;
|
|
||||||
while(arguments.length > i)args.push(arguments[i++]);
|
|
||||||
queue[++counter] = function(){
|
|
||||||
invoke(typeof fn == 'function' ? fn : Function(fn), args);
|
|
||||||
};
|
|
||||||
defer(counter);
|
|
||||||
return counter;
|
|
||||||
};
|
|
||||||
clearTask = function clearImmediate(id){
|
|
||||||
delete queue[id];
|
|
||||||
};
|
|
||||||
// Node.js 0.8-
|
|
||||||
if(require('./_cof')(process) == 'process'){
|
|
||||||
defer = function(id){
|
|
||||||
process.nextTick(ctx(run, id, 1));
|
|
||||||
};
|
|
||||||
// Browsers with MessageChannel, includes WebWorkers
|
|
||||||
} else if(MessageChannel){
|
|
||||||
channel = new MessageChannel;
|
|
||||||
port = channel.port2;
|
|
||||||
channel.port1.onmessage = listener;
|
|
||||||
defer = ctx(port.postMessage, port, 1);
|
|
||||||
// Browsers with postMessage, skip WebWorkers
|
|
||||||
// IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
|
|
||||||
} else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){
|
|
||||||
defer = function(id){
|
|
||||||
global.postMessage(id + '', '*');
|
|
||||||
};
|
|
||||||
global.addEventListener('message', listener, false);
|
|
||||||
// IE8-
|
|
||||||
} else if(ONREADYSTATECHANGE in cel('script')){
|
|
||||||
defer = function(id){
|
|
||||||
html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){
|
|
||||||
html.removeChild(this);
|
|
||||||
run.call(id);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
// Rest old browsers
|
|
||||||
} else {
|
|
||||||
defer = function(id){
|
|
||||||
setTimeout(ctx(run, id, 1), 0);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
module.exports = {
|
|
||||||
set: setTask,
|
|
||||||
clear: clearTask
|
|
||||||
};
|
|
||||||
},{"./_cof":39,"./_ctx":41,"./_dom-create":43,"./_global":46,"./_html":48,"./_invoke":50}],55:[function(require,module,exports){
|
|
||||||
// 7.1.1 ToPrimitive(input [, PreferredType])
|
|
||||||
var isObject = require('./_is-object');
|
|
||||||
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
|
|
||||||
// and the second argument - flag - preferred type is a string
|
|
||||||
module.exports = function(it, S){
|
|
||||||
if(!isObject(it))return it;
|
|
||||||
var fn, val;
|
|
||||||
if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
|
|
||||||
if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
|
|
||||||
if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
|
|
||||||
throw TypeError("Can't convert object to primitive value");
|
|
||||||
};
|
|
||||||
},{"./_is-object":51}],56:[function(require,module,exports){
|
|
||||||
var $export = require('./_export')
|
|
||||||
, $task = require('./_task');
|
|
||||||
$export($export.G + $export.B, {
|
|
||||||
setImmediate: $task.set,
|
|
||||||
clearImmediate: $task.clear
|
|
||||||
});
|
|
||||||
},{"./_export":44,"./_task":54}],57:[function(require,module,exports){
|
|
||||||
(function (global){
|
(function (global){
|
||||||
'use strict';
|
'use strict';
|
||||||
var Mutation = global.MutationObserver || global.WebKitMutationObserver;
|
var Mutation = global.MutationObserver || global.WebKitMutationObserver;
|
||||||
|
@ -4560,7 +4275,7 @@ function immediate(task) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
|
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
|
||||||
},{}],58:[function(require,module,exports){
|
},{}],37:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
var immediate = require('immediate');
|
var immediate = require('immediate');
|
||||||
|
|
||||||
|
@ -4587,6 +4302,26 @@ function Promise(resolver) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Promise.prototype["finally"] = function (callback) {
|
||||||
|
if (typeof callback !== 'function') {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
var p = this.constructor;
|
||||||
|
return this.then(resolve, reject);
|
||||||
|
|
||||||
|
function resolve(value) {
|
||||||
|
function yes () {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return p.resolve(callback()).then(yes);
|
||||||
|
}
|
||||||
|
function reject(reason) {
|
||||||
|
function no () {
|
||||||
|
throw reason;
|
||||||
|
}
|
||||||
|
return p.resolve(callback()).then(no);
|
||||||
|
}
|
||||||
|
};
|
||||||
Promise.prototype["catch"] = function (onRejected) {
|
Promise.prototype["catch"] = function (onRejected) {
|
||||||
return this.then(null, onRejected);
|
return this.then(null, onRejected);
|
||||||
};
|
};
|
||||||
|
@ -4815,7 +4550,7 @@ function race(iterable) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
},{"immediate":57}],59:[function(require,module,exports){
|
},{"immediate":36}],38:[function(require,module,exports){
|
||||||
// Top level file is just a mixin of submodules & constants
|
// Top level file is just a mixin of submodules & constants
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
@ -4831,7 +4566,7 @@ assign(pako, deflate, inflate, constants);
|
||||||
|
|
||||||
module.exports = pako;
|
module.exports = pako;
|
||||||
|
|
||||||
},{"./lib/deflate":60,"./lib/inflate":61,"./lib/utils/common":62,"./lib/zlib/constants":65}],60:[function(require,module,exports){
|
},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
|
||||||
|
@ -5233,7 +4968,7 @@ exports.deflate = deflate;
|
||||||
exports.deflateRaw = deflateRaw;
|
exports.deflateRaw = deflateRaw;
|
||||||
exports.gzip = gzip;
|
exports.gzip = gzip;
|
||||||
|
|
||||||
},{"./utils/common":62,"./utils/strings":63,"./zlib/deflate":67,"./zlib/messages":72,"./zlib/zstream":74}],61:[function(require,module,exports){
|
},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
|
||||||
|
@ -5653,7 +5388,7 @@ exports.inflate = inflate;
|
||||||
exports.inflateRaw = inflateRaw;
|
exports.inflateRaw = inflateRaw;
|
||||||
exports.ungzip = inflate;
|
exports.ungzip = inflate;
|
||||||
|
|
||||||
},{"./utils/common":62,"./utils/strings":63,"./zlib/constants":65,"./zlib/gzheader":68,"./zlib/inflate":70,"./zlib/messages":72,"./zlib/zstream":74}],62:[function(require,module,exports){
|
},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
|
||||||
|
@ -5757,7 +5492,7 @@ exports.setTyped = function (on) {
|
||||||
|
|
||||||
exports.setTyped(TYPED_OK);
|
exports.setTyped(TYPED_OK);
|
||||||
|
|
||||||
},{}],63:[function(require,module,exports){
|
},{}],42:[function(require,module,exports){
|
||||||
// String encode/decode helpers
|
// String encode/decode helpers
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
@ -5944,7 +5679,7 @@ exports.utf8border = function (buf, max) {
|
||||||
return (pos + _utf8len[buf[pos]] > max) ? pos : max;
|
return (pos + _utf8len[buf[pos]] > max) ? pos : max;
|
||||||
};
|
};
|
||||||
|
|
||||||
},{"./common":62}],64:[function(require,module,exports){
|
},{"./common":41}],43:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// Note: adler32 takes 12% for level 0 and 2% for level 6.
|
// Note: adler32 takes 12% for level 0 and 2% for level 6.
|
||||||
|
@ -5997,7 +5732,7 @@ function adler32(adler, buf, len, pos) {
|
||||||
|
|
||||||
module.exports = adler32;
|
module.exports = adler32;
|
||||||
|
|
||||||
},{}],65:[function(require,module,exports){
|
},{}],44:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||||||
|
@ -6067,7 +5802,7 @@ module.exports = {
|
||||||
//Z_NULL: null // Use -1 or null inline, depending on var type
|
//Z_NULL: null // Use -1 or null inline, depending on var type
|
||||||
};
|
};
|
||||||
|
|
||||||
},{}],66:[function(require,module,exports){
|
},{}],45:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// Note: we can't get significant speed boost here.
|
// Note: we can't get significant speed boost here.
|
||||||
|
@ -6128,7 +5863,7 @@ function crc32(crc, buf, len, pos) {
|
||||||
|
|
||||||
module.exports = crc32;
|
module.exports = crc32;
|
||||||
|
|
||||||
},{}],67:[function(require,module,exports){
|
},{}],46:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||||||
|
@ -8004,7 +7739,7 @@ exports.deflatePrime = deflatePrime;
|
||||||
exports.deflateTune = deflateTune;
|
exports.deflateTune = deflateTune;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
},{"../utils/common":62,"./adler32":64,"./crc32":66,"./messages":72,"./trees":73}],68:[function(require,module,exports){
|
},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||||||
|
@ -8064,7 +7799,7 @@ function GZheader() {
|
||||||
|
|
||||||
module.exports = GZheader;
|
module.exports = GZheader;
|
||||||
|
|
||||||
},{}],69:[function(require,module,exports){
|
},{}],48:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||||||
|
@ -8411,7 +8146,7 @@ module.exports = function inflate_fast(strm, start) {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
},{}],70:[function(require,module,exports){
|
},{}],49:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||||||
|
@ -9969,7 +9704,7 @@ exports.inflateSyncPoint = inflateSyncPoint;
|
||||||
exports.inflateUndermine = inflateUndermine;
|
exports.inflateUndermine = inflateUndermine;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
},{"../utils/common":62,"./adler32":64,"./crc32":66,"./inffast":69,"./inftrees":71}],71:[function(require,module,exports){
|
},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||||||
|
@ -10314,7 +10049,7 @@ module.exports = function inflate_table(type, lens, lens_index, codes, table, ta
|
||||||
return 0;
|
return 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
},{"../utils/common":62}],72:[function(require,module,exports){
|
},{"../utils/common":41}],51:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||||||
|
@ -10348,7 +10083,7 @@ module.exports = {
|
||||||
'-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */
|
'-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */
|
||||||
};
|
};
|
||||||
|
|
||||||
},{}],73:[function(require,module,exports){
|
},{}],52:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||||||
|
@ -11570,7 +11305,7 @@ exports._tr_flush_block = _tr_flush_block;
|
||||||
exports._tr_tally = _tr_tally;
|
exports._tr_tally = _tr_tally;
|
||||||
exports._tr_align = _tr_align;
|
exports._tr_align = _tr_align;
|
||||||
|
|
||||||
},{"../utils/common":62}],74:[function(require,module,exports){
|
},{"../utils/common":41}],53:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
// (C) 1995-2013 Jean-loup Gailly and Mark Adler
|
||||||
|
@ -11619,5 +11354,14 @@ function ZStream() {
|
||||||
|
|
||||||
module.exports = ZStream;
|
module.exports = ZStream;
|
||||||
|
|
||||||
|
},{}],54:[function(require,module,exports){
|
||||||
|
'use strict';
|
||||||
|
module.exports = typeof setImmediate === 'function' ? setImmediate :
|
||||||
|
function setImmediate() {
|
||||||
|
var args = [].slice.apply(arguments);
|
||||||
|
args.splice(1, 0, 0);
|
||||||
|
setTimeout.apply(null, args);
|
||||||
|
};
|
||||||
|
|
||||||
},{}]},{},[10])(10)
|
},{}]},{},[10])(10)
|
||||||
});
|
});
|
File diff suppressed because one or more lines are too long
|
@ -106,7 +106,7 @@ function spawnWebsocket(pa) {
|
||||||
}
|
}
|
||||||
var innerHTML = ['<p><a href="', blobURL, '" class="btn btn-primary" download="', escapeHtml(data.name), '">', i18n.download, '</a></p>'];
|
var innerHTML = ['<p><a href="', blobURL, '" class="btn btn-primary" download="', escapeHtml(data.name), '">', i18n.download, '</a></p>'];
|
||||||
|
|
||||||
var isZip = false;
|
var isZip = ($('#filesize').attr('data-zipped') === 'true');
|
||||||
if (data.type.match(/^image\//) !== null) {
|
if (data.type.match(/^image\//) !== null) {
|
||||||
innerHTML.push('<img id="render-image" class="responsive-img" alt="', escapeHtml(data.name), '" src="', blobURL, '">');
|
innerHTML.push('<img id="render-image" class="responsive-img" alt="', escapeHtml(data.name), '" src="', blobURL, '">');
|
||||||
} else if (data.type.match(/^video\//) !== null) {
|
} else if (data.type.match(/^video\//) !== null) {
|
||||||
|
@ -117,9 +117,8 @@ function spawnWebsocket(pa) {
|
||||||
innerHTML.push('<audio class="responsive-video" controls>',
|
innerHTML.push('<audio class="responsive-video" controls>',
|
||||||
'<source src="', blobURL, '" type="', data.type, '">',
|
'<source src="', blobURL, '" type="', data.type, '">',
|
||||||
'</audio>');
|
'</audio>');
|
||||||
} else if (data.type.match(/^application\/zip/) !== null) {
|
} else if (isZip) {
|
||||||
innerHTML.push('<p><a class="btn btn-primary" id="showZipContent">', i18n.showZipContent, '</a></p>');
|
innerHTML.push('<p><a class="btn btn-primary" id="showZipContent">', i18n.showZipContent, '</a></p>');
|
||||||
isZip = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pbd.html(innerHTML.join(''));
|
pbd.html(innerHTML.join(''));
|
||||||
|
@ -130,10 +129,28 @@ function spawnWebsocket(pa) {
|
||||||
.then(function (zip) {
|
.then(function (zip) {
|
||||||
var innerHTML = ['<h3>Zip content:</h3><ul>'];
|
var innerHTML = ['<h3>Zip content:</h3><ul>'];
|
||||||
zip.forEach(function (relativePath, zipEntry) {
|
zip.forEach(function (relativePath, zipEntry) {
|
||||||
innerHTML.push('<li>', zipEntry.name, ' (', filesize(zipEntry._data.uncompressedSize, {base: 10}), ')</li>');
|
innerHTML.push(
|
||||||
|
'<li>',
|
||||||
|
zipEntry.name,
|
||||||
|
' (', filesize(zipEntry._data.uncompressedSize, {base: 10}), ') ',
|
||||||
|
'<a href="#" download="', zipEntry.name, '" class="download-zip-content" title="', i18n.download, '">',
|
||||||
|
'<i class="mdi-file-file-download"></i>',
|
||||||
|
'</a>',
|
||||||
|
'</li>'
|
||||||
|
);
|
||||||
});
|
});
|
||||||
innerHTML.push('</ul>');
|
innerHTML.push('</ul>');
|
||||||
pbd.append(innerHTML.join(''));
|
pbd.append(innerHTML.join(''));
|
||||||
|
$('.download-zip-content').click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var t = $(this);
|
||||||
|
var filename = t.attr('download');
|
||||||
|
zip.files[filename].async('blob').then(function(blob) {
|
||||||
|
t.unbind('click');
|
||||||
|
t.attr('href', URL.createObjectURL(blob));
|
||||||
|
t[0].click();
|
||||||
|
});
|
||||||
|
})
|
||||||
$('#showZipContent').hide();
|
$('#showZipContent').hide();
|
||||||
$('#showZipContent').unbind('click');
|
$('#showZipContent').unbind('click');
|
||||||
});
|
});
|
||||||
|
|
|
@ -113,7 +113,7 @@ function handleFiles(f) {
|
||||||
$('#zipping').show();
|
$('#zipping').show();
|
||||||
for (var i = 0; i < f.length; i++) {
|
for (var i = 0; i < f.length; i++) {
|
||||||
var element = f.item(i);
|
var element = f.item(i);
|
||||||
zip.file(element.name, new Blob([element]));
|
zip.file(element.name, element);
|
||||||
}
|
}
|
||||||
zip.generateAsync({type:"blob"})
|
zip.generateAsync({type:"blob"})
|
||||||
.then(function(zipFile) {
|
.then(function(zipFile) {
|
||||||
|
@ -222,6 +222,7 @@ function sliceAndUpload(randomkey, i, parts, j, delay, del_at_first_view, short)
|
||||||
type: file.type,
|
type: file.type,
|
||||||
delay: delay,
|
delay: delay,
|
||||||
del_at_first_view: del_at_first_view,
|
del_at_first_view: del_at_first_view,
|
||||||
|
zipped: $('#zip-files').is(':checked'),
|
||||||
id: short,
|
id: short,
|
||||||
// number of the sent file in the queue
|
// number of the sent file in the queue
|
||||||
i: i
|
i: i
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
</div>
|
</div>
|
||||||
% }
|
% }
|
||||||
<div class="file-progress col s12<%= (stash('file_pwd')) ? ' hide' : '' %>">
|
<div class="file-progress col s12<%= (stash('file_pwd')) ? ' hide' : '' %>">
|
||||||
<p id="filesize" data-filesize="<%= stash('f')->filesize %>"></p>
|
<p id="filesize" data-filesize="<%= stash('f')->filesize %>" data-zipped="<%= (stash('f')->zipped) ? 'true' : 'false' %>"></p>
|
||||||
<p id="please-wait"><%= l('Please wait while we are getting your file. We first need to download and decrypt all parts before you can get it.') %></p>
|
<p id="please-wait"><%= l('Please wait while we are getting your file. We first need to download and decrypt all parts before you can get it.') %></p>
|
||||||
<p id="loading"></p>
|
<p id="loading"></p>
|
||||||
<div class="progress" id="pbd">
|
<div class="progress" id="pbd">
|
||||||
|
|
|
@ -27,3 +27,7 @@ CREATE TABLE IF NOT EXISTS slices (
|
||||||
-- 1 down
|
-- 1 down
|
||||||
DROP TABLE slices;
|
DROP TABLE slices;
|
||||||
DROP TABLE files;
|
DROP TABLE files;
|
||||||
|
-- 2 up
|
||||||
|
ALTER TABLE files ADD COLUMN zipped boolean default false;
|
||||||
|
-- 2 down
|
||||||
|
ALTER TABLE files DROP COLUMN zipped;
|
||||||
|
|
|
@ -30,3 +30,7 @@ DROP TABLE files;
|
||||||
ALTER TABLE files ADD COLUMN abuse integer;
|
ALTER TABLE files ADD COLUMN abuse integer;
|
||||||
-- 2 down
|
-- 2 down
|
||||||
ALTER TABLE files DROP COLUMN abuse;
|
ALTER TABLE files DROP COLUMN abuse;
|
||||||
|
-- 3 up
|
||||||
|
ALTER TABLE files ADD COLUMN zipped boolean default false;
|
||||||
|
-- 3 down
|
||||||
|
ALTER TABLE files DROP COLUMN zipped;
|
||||||
|
|
|
@ -52,3 +52,29 @@ BEGIN TRANSACTION;
|
||||||
DROP TABLE files;
|
DROP TABLE files;
|
||||||
ALTER TABLE files_backup RENAME TO files;
|
ALTER TABLE files_backup RENAME TO files;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
-- 3 up
|
||||||
|
ALTER TABLE files ADD COLUMN zipped INTEGER;
|
||||||
|
-- 3 down
|
||||||
|
BEGIN TRANSACTION;
|
||||||
|
CREATE TABLE files_backup (
|
||||||
|
short TEXT PRIMARY KEY,
|
||||||
|
deleted INTEGER,
|
||||||
|
mediatype TEXT,
|
||||||
|
filename TEXT,
|
||||||
|
filesize INTEGER,
|
||||||
|
counter INTEGER,
|
||||||
|
delete_at_first_view INTEGER,
|
||||||
|
delete_at_day INTEGER,
|
||||||
|
created_at INTEGER,
|
||||||
|
created_by TEXT,
|
||||||
|
last_access_at INTEGER,
|
||||||
|
mod_token TEXT,
|
||||||
|
nbslices INTEGER,
|
||||||
|
complete INTEGER,
|
||||||
|
passwd TEXT,
|
||||||
|
abuse INTEGER
|
||||||
|
);
|
||||||
|
INSERT INTO files_backup SELECT short, deleted, mediatype, filename, filesize, counter, delete_at_first_view, delete_at_day, created_at, created_by, last_access_at, mod_token, nbslices, complete, passwd, abuse FROM files;
|
||||||
|
DROP TABLE files;
|
||||||
|
ALTER TABLE files_backup RENAME TO files;
|
||||||
|
COMMIT;
|
||||||
|
|
Loading…
Reference in New Issue