UNPKG

@antv/x6

Version:

JavaScript diagramming library that uses SVG and HTML for rendering.

279 lines 11.9 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PrintManager = void 0; var geometry_1 = require("../geometry"); var util_1 = require("../util"); var base_1 = require("./base"); var PrintManager = /** @class */ (function (_super) { __extends(PrintManager, _super); function PrintManager() { return _super !== null && _super.apply(this, arguments) || this; } PrintManager.prototype.show = function (options) { var _this = this; if (options === void 0) { options = {}; } var localOptions = __assign(__assign({}, PrintManager.defaultOptions), options); var $pages = this.createPrintPages(localOptions); localOptions.ready($pages, function ($pages) { return _this.showPrintWindow($pages, localOptions); }, { sheetSize: this.getSheetSize(localOptions), }); }; Object.defineProperty(PrintManager.prototype, "className", { get: function () { return this.view.prefixClassName('graph-print'); }, enumerable: false, configurable: true }); PrintManager.prototype.showPrintWindow = function ($pages, options) { var _this = this; if ($pages) { var $body_1 = (0, util_1.JQuery)(document.body); var $container_1 = (0, util_1.JQuery)(this.view.container); var bodyClassName_1 = this.view.prefixClassName('graph-printing'); $body_1.addClass(bodyClassName_1); var $detached_1 = $container_1.children().detach(); $pages.forEach(function ($page) { $page .removeClass(_this.className + "-preview") .addClass(_this.className + "-ready") .appendTo($body_1); }); var ret_1 = false; var cb_1 = function () { if (!ret_1) { ret_1 = true; $body_1.removeClass(bodyClassName_1); $pages.forEach(function ($page) { return $page.remove(); }); $container_1.append($detached_1); (0, util_1.JQuery)("#" + _this.styleSheetId).remove(); _this.graph.trigger('after:print', options); (0, util_1.JQuery)(window).off('afterprint', cb_1); } }; (0, util_1.JQuery)(window).one('afterprint', cb_1); setTimeout(cb_1, 200); window.print(); } }; PrintManager.prototype.createPrintPage = function (pageArea, options) { this.graph.trigger('before:print', options); var $page = (0, util_1.JQuery)('<div/>').addClass(this.className); var $wrap = (0, util_1.JQuery)('<div/>') .addClass(this.view.prefixClassName('graph-print-inner')) .css('position', 'relative'); if (options.size) { $page.addClass(this.className + "-size-" + options.size); } var vSVG = util_1.Vector.create(this.view.svg).clone(); var vStage = vSVG.findOne("." + this.view.prefixClassName('graph-svg-stage')); $wrap.append(vSVG.node); var sheetSize = this.getSheetSize(options); var graphArea = this.graph.transform.getGraphArea(); var s = this.graph.transform.getScale(); var ts = this.graph.translate(); var matrix = util_1.Dom.createSVGMatrix().translate(ts.tx / s.sx, ts.ty / s.sy); var info = this.getPageInfo(graphArea, pageArea, sheetSize); var scale = info.scale; var bbox = info.bbox; $wrap.css({ left: 0, top: 0, }); vSVG.attr({ width: bbox.width * scale, height: bbox.height * scale, style: 'position:relative', viewBox: [bbox.x, bbox.y, bbox.width, bbox.height].join(' '), }); vStage.attr('transform', util_1.Dom.matrixToTransformString(matrix)); $page.append($wrap); $page.addClass(this.className + "-preview"); return { $page: $page, sheetSize: sheetSize, }; }; PrintManager.prototype.createPrintPages = function (options) { var _this = this; var ret; var area = this.getPrintArea(options); var $pages = []; if (options.page) { var pageSize = this.getPageSize(area, options.page); var pageAreas = this.getPageAreas(area, pageSize); pageAreas.forEach(function (pageArea) { ret = _this.createPrintPage(pageArea, options); $pages.push(ret.$page); }); } else { ret = this.createPrintPage(area, options); $pages.push(ret.$page); } if (ret) { var size = { width: ret.sheetSize.cssWidth, height: ret.sheetSize.cssHeight, }; this.updatePrintStyle(size, options); } return $pages; }; Object.defineProperty(PrintManager.prototype, "styleSheetId", { get: function () { return this.view.prefixClassName('graph-print-style'); }, enumerable: false, configurable: true }); PrintManager.prototype.updatePrintStyle = function (size, options) { var sizeCSS = Object.keys(size).reduce(function (memo, key) { return memo + " " + key + ":" + size[key] + ";"; }, ''); var margin = util_1.NumberExt.normalizeSides(options.margin); var marginUnit = options.marginUnit || ''; var sheetUnit = options.sheetUnit || ''; var css = "\n @media print {\n ." + this.className + "." + this.className + "-ready {\n " + sizeCSS + "\n }\n\n @page {\n margin:\n " + [ margin.top + marginUnit, margin.right + marginUnit, margin.bottom + marginUnit, margin.left + marginUnit, ].join(' ') + ";\n size: " + (options.sheet.width + sheetUnit) + " " + (options.sheet.height + sheetUnit) + ";\n\n ." + this.className + "." + this.className + "-preview {\n " + sizeCSS + "\n }\n }"; var id = this.styleSheetId; var $style = (0, util_1.JQuery)("#" + id); if ($style.length) { $style.html(css); } else { (0, util_1.JQuery)('head').append("'<style type=\"text/css\" id=\"" + id + "\">" + css + "</style>'"); } }; PrintManager.prototype.getPrintArea = function (options) { var area = options.area; if (!area) { var padding = util_1.NumberExt.normalizeSides(options.padding); area = this.graph.getContentArea().moveAndExpand({ x: -padding.left, y: -padding.top, width: padding.left + padding.right, height: padding.top + padding.bottom, }); } return area; }; PrintManager.prototype.getPageSize = function (area, poster) { if (typeof poster === 'object') { var raw = poster; var page = { width: raw.width, height: raw.height, }; if (page.width == null) { page.width = Math.ceil(area.width / (raw.columns || 1)); } if (page.height == null) { page.height = Math.ceil(area.height / (raw.rows || 1)); } return page; } return { width: area.width, height: area.height, }; }; PrintManager.prototype.getPageAreas = function (area, pageSize) { var pages = []; var width = pageSize.width; var height = pageSize.height; for (var w = 0, n = 0; w < area.height && n < 200; w += height, n += 1) { for (var h = 0, m = 0; h < area.width && m < 200; h += width, m += 1) { pages.push(new geometry_1.Rectangle(area.x + h, area.y + w, width, height)); } } return pages; }; PrintManager.prototype.getSheetSize = function (options) { var sheet = options.sheet; var margin = util_1.NumberExt.normalizeSides(options.margin); var marginUnit = options.marginUnit || ''; var sheetUnit = options.sheetUnit || ''; var cssWidth = // eslint-disable-next-line "calc(" + sheet.width + sheetUnit + " - " + (margin.left + margin.right) + marginUnit + ")"; var cssHeight = // eslint-disable-next-line "calc(" + sheet.height + sheetUnit + " - " + (margin.top + margin.bottom) + marginUnit + ")"; var ret = util_1.Unit.measure(cssWidth, cssHeight); return { cssWidth: cssWidth, cssHeight: cssHeight, width: ret.width, height: ret.height, }; }; PrintManager.prototype.getPageInfo = function (graphArea, pageArea, sheetSize) { var bbox = new geometry_1.Rectangle(pageArea.x - graphArea.x, pageArea.y - graphArea.y, pageArea.width, pageArea.height); var pageRatio = bbox.width / bbox.height; var graphRatio = sheetSize.width / sheetSize.height; return { bbox: bbox, scale: graphRatio < pageRatio ? sheetSize.width / bbox.width : sheetSize.height / bbox.height, fitHorizontal: graphRatio < pageRatio, }; }; PrintManager.prototype.dispose = function () { }; __decorate([ base_1.Base.dispose() ], PrintManager.prototype, "dispose", null); return PrintManager; }(base_1.Base)); exports.PrintManager = PrintManager; (function (PrintManager) { PrintManager.defaultOptions = { page: false, sheet: { width: 210, height: 297, }, sheetUnit: 'mm', margin: 0.4, marginUnit: 'in', padding: 5, ready: function ($pages, readyToPrint) { return readyToPrint($pages); }, }; })(PrintManager = exports.PrintManager || (exports.PrintManager = {})); exports.PrintManager = PrintManager; //# sourceMappingURL=print.js.map