Select Git revision
-
Andrej Ramašeuski authoredAndrej Ramašeuski authored
print.js 5.78 KiB
(function () {
function Print(ysy) {
this.printReady = false;
this.$area = null;
this.ysy = ysy;
this.patch(ysy);
}
Print.prototype.margins = {
left: 10,
right: 10,
top: 20,
bottom: 10
};
Print.prototype.patch = function (ysy) {
var self = this;
var mediaQueryList = window.matchMedia('print');
mediaQueryList.addListener(function (mql) {
if (mql.matches) {
self.beforePrint();
} else {
self.afterPrint();
}
});
window.onbeforeprint = $.proxy(this.beforePrint, this);
window.onafterprint = $.proxy(this.afterPrint, this);
};
Print.prototype.directPrint = function () {
this.beforePrint();
window.print();
this.afterPrint();
};
Print.prototype.beforePrint = function (isCompact) {
if (this.printReady) return;
this.ysy.mapModel.resetView();
this.$area = isCompact? this.createCompactArea():this.createPrintArea();
$("body").append(this.$area);
$("#wrapper").hide();
this.printReady = true;
};
Print.prototype.afterPrint = function () {
if (!this.printReady) return;
this.$area.remove();
$("#wrapper").show();
this.ysy.mapModel.resetView();
this.printReady = false;
};
Print.prototype.createPrintArea = function () {
var $stage = this.ysy.$container.children();
// var width = $stage.width();
// var height = $stage.height();
var stripWidth = 330;
var children = $stage.children(":not(:hidden)");
var dims = this.getStageDims(children);
var $area = $('<div class="mindmup-print-area scheme-by-' + this.ysy.styles.setting + '" \
style="height:' + (dims.bottom - dims.top + this.margins.top + this.margins.bottom) + 'px"></div>');
for (var p = dims.left - this.margins.left; p < dims.right + this.margins.right; p += stripWidth) {
$area.append(this.createStrip(children, dims, p, p + stripWidth));
//p -= 2;
}
return $area;
};
Print.prototype.createStrip = function (children, dims, start, end) {
/* start can be negative*/
if (end <= start) return null;
// var stageOffset = $stage.height();
var $strip = $('<div class="mindmup-print-strip" style="height:' + (dims.bottom - dims.top + this.margins.top + this.margins.bottom) + 'px;width:' + (end - start) + 'px"></div>');
// var children = $stage.children(":not(:hidden)");
var added = 0;
for (var i = 0; i < children.length; i++) {
var child = children[i];
var left = parseInt(child.style.left);
var width = child.offsetWidth;
var top = parseInt(child.style.top) - dims.top + this.margins.top;
var height = child.offsetHeight;
if (left > end) continue;
if (left + width < start) continue;
added++;
var $child = $(child);
var transform = $child.css("transform");
if (transform === "none") transform = "";
transform = "translate(" + (left - start) + "px," + top + "px) " + transform;
$strip.append(
$child
.clone()
.css({left: 0, top: 0, transform: transform})
);
}
if (!added) return null;
return $strip;
};
Print.prototype.getStageDims = function (children) {
var dims = {
left: Infinity,
top: Infinity,
right: -Infinity,
bottom: -Infinity
};
for (var i = 0; i < children.length; i++) {
var child = children[i];
var left = parseInt(child.style.left);
var top = parseInt(child.style.top);
var width = child.offsetWidth;
var height = child.offsetHeight;
if (left < dims.left) dims.left = left;
if (top < dims.top) dims.top = top;
if (left + width > dims.right) dims.right = left + width;
if (top + height > dims.bottom) dims.bottom = top + height;
}
return dims;
};
Print.prototype.createCompactArea = function () {
var $stage = this.ysy.$container.children();
var children = $stage.children(":not(:hidden)");
var dims = this.getStageDims(children);
var leftEdge = dims.left - this.margins.left;
var $area = $('<div class="mindmup-pdf-print-area scheme-by-' + this.ysy.styles.setting + '" style="'
+ 'height:' + (dims.bottom - dims.top + this.margins.top + this.margins.bottom) + 'px;'
+ 'width:' + (dims.right - leftEdge + this.margins.right) + 'px"></div>');
for (var i = 0; i < children.length; i++) {
var child = children[i];
var left = parseInt(child.style.left);
var width = child.offsetWidth;
var top = parseInt(child.style.top) - dims.top + this.margins.top;
var height = child.offsetHeight;
var $child = $(child);
var transform = $child.css("transform");
if (transform === "none") transform = "";
transform = "translate(" + (left - leftEdge) + "px," + top + "px) " + transform;
$area.append(
$child
.clone()
.css({left: 0, top: 0, transform: transform})
);
}
return $area;
};
window.easyMindMupClasses.Print = Print;
//####################################################################################################################
/**
* Button, which prepare Mind Map into printable version
* @param {MindMup} ysy
* @param {jQuery} $parent
* @constructor
*/
function PrintButton(ysy, $parent) {
this.$element = null;
this.ysy = ysy;
this.init(ysy, $parent);
}
PrintButton.prototype.id = "PrintButton";
/**
*
* @param {MindMup} ysy
* @param {jQuery} $parent
* @return {PrintButton}
*/
PrintButton.prototype.init = function (ysy, $parent) {
this.$element = $parent.find(".mindmup-button-print");
var self = this;
this.$element.click(function () {
self.ysy.print.directPrint();
});
return this;
};
PrintButton.prototype._render = function () {
};
window.easyMindMupClasses.PrintButton = PrintButton;
})();