Files
piskel/dev/js/controller/settings/exportimage/ZipExportController.js
Julian Descottes dbf8072343 deploy dev version
2017-05-22 09:56:42 +02:00

75 lines
3.0 KiB
JavaScript

(function () {
var ns = $.namespace('pskl.controller.settings.exportimage');
ns.ZipExportController = function (piskelController, exportController) {
this.piskelController = piskelController;
this.exportController = exportController;
};
pskl.utils.inherit(ns.ZipExportController, pskl.controller.settings.AbstractSettingController);
ns.ZipExportController.prototype.init = function () {
this.pngFilePrefixInput = document.querySelector('.zip-prefix-name');
this.pngFilePrefixInput.value = 'sprite_';
this.splitByLayersCheckbox = document.querySelector('.zip-split-layers-checkbox');
var zipButton = document.querySelector('.zip-generate-button');
this.addEventListener(zipButton, 'click', this.onZipButtonClick_);
};
ns.ZipExportController.prototype.onZipButtonClick_ = function () {
var zip = new window.JSZip();
if (this.splitByLayersCheckbox.checked) {
this.splittedExport_(zip);
} else {
this.mergedExport_(zip);
}
var fileName = this.getPiskelName_() + '.zip';
var blob = zip.generate({
type : 'blob'
});
pskl.utils.FileUtils.downloadAsFile(blob, fileName);
};
ns.ZipExportController.prototype.mergedExport_ = function (zip) {
var paddingLength = ('' + this.piskelController.getFrameCount()).length;
var zoom = this.exportController.getExportZoom();
for (var i = 0; i < this.piskelController.getFrameCount(); i++) {
var render = this.piskelController.renderFrameAt(i, true);
var canvas = pskl.utils.ImageResizer.scale(render, zoom);
var basename = this.pngFilePrefixInput.value;
var id = pskl.utils.StringUtils.leftPad(i, paddingLength, '0');
var filename = basename + id + '.png';
zip.file(filename, pskl.utils.CanvasUtils.getBase64FromCanvas(canvas) + '\n', {base64: true});
}
};
ns.ZipExportController.prototype.splittedExport_ = function (zip) {
var layers = this.piskelController.getLayers();
var framePaddingLength = ('' + this.piskelController.getFrameCount()).length;
var layerPaddingLength = ('' + layers.length).length;
var zoom = this.exportController.getExportZoom();
for (var j = 0; this.piskelController.hasLayerAt(j); j++) {
var layer = this.piskelController.getLayerAt(j);
var layerid = pskl.utils.StringUtils.leftPad(j, layerPaddingLength, '0');
for (var i = 0; i < this.piskelController.getFrameCount(); i++) {
var render = pskl.utils.LayerUtils.renderFrameAt(layer, i, true);
var canvas = pskl.utils.ImageResizer.scale(render, zoom);
var basename = this.pngFilePrefixInput.value;
var frameid = pskl.utils.StringUtils.leftPad(i + 1, framePaddingLength, '0');
var filename = 'l' + layerid + '_' + basename + frameid + '.png';
zip.file(filename, pskl.utils.CanvasUtils.getBase64FromCanvas(canvas) + '\n', {base64: true});
}
}
};
ns.ZipExportController.prototype.getPiskelName_ = function () {
return this.piskelController.getPiskel().getDescriptor().name;
};
})();