mirror of https://github.com/xwiki-labs/cryptpad
52 lines
1.7 KiB
JavaScript
52 lines
1.7 KiB
JavaScript
// SPDX-FileCopyrightText: 2023 XWiki CryptPad Team <contact@cryptpad.org> and contributors
|
|
//
|
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
// This file is used when a user tries to export the entire CryptDrive.
|
|
// Pads from the code app will be exported using this format instead of plain text.
|
|
define([
|
|
'/lib/fabric.min.js',
|
|
], function () {
|
|
var module = {};
|
|
|
|
var Fabric = window.fabric;
|
|
module.main = function (userDoc, cb) {
|
|
var canvas_node = document.createElement('canvas');
|
|
canvas_node.setAttribute('style', 'width:600px;height:600px;');
|
|
canvas_node.setAttribute('width', '600');
|
|
canvas_node.setAttribute('height', '600');
|
|
var canvas = new Fabric.Canvas(canvas_node);
|
|
var content = userDoc.content;
|
|
canvas.loadFromJSON(content, function () {
|
|
|
|
var w = 0;
|
|
var h = 0;
|
|
var MAX = 8192;
|
|
canvas.forEachObject(function (obj) {
|
|
var c = obj.getCoords();
|
|
Object.keys(c).forEach(function (k) {
|
|
if (c[k].x > w) { w = c[k].x + 1; }
|
|
if (c[k].y > h) { h = c[k].y + 1; }
|
|
});
|
|
});
|
|
// Empty documents are rendered as a 600x600 transparent PNG image
|
|
w = w === 0 ? 600 : Math.min(w, MAX);
|
|
h = h === 0 ? 600 : Math.min(h, MAX);
|
|
canvas.setWidth(w);
|
|
canvas.setHeight(h);
|
|
canvas.calcOffset();
|
|
canvas.renderAll();
|
|
|
|
module.ext = '.png';
|
|
canvas_node.toBlob(cb);
|
|
/*
|
|
module.ext = '.svg';
|
|
cb(new Blob([canvas.toSVG()], {type: 'image/svg+xml'}));
|
|
*/
|
|
});
|
|
};
|
|
|
|
return module;
|
|
});
|
|
|