Преглед на файлове

Bugfixed / Print element on the new page if can not fit

master
Safet Purkovic преди 4 години
родител
ревизия
ccb2cd0022
променени са 1 файла, в които са добавени 158 реда и са изтрити 99 реда
  1. 158
    99
      src/transformations/root-transformation.js

+ 158
- 99
src/transformations/root-transformation.js Целия файл

@@ -1,113 +1,172 @@
import { Transform } from "./transform";
import $ from 'jquery';
import $, { param } from 'jquery';

export class RootTransformation extends Transform
{
constructor(param){
export class RootTransformation extends Transform {
constructor(param) {
super(param);
this.before = {};
}
execute(){
execute() {
let array = [];
this.before = $('#root');
// const v = $(':eq(0)'); // za root element
const va = $('div.fade').children().toArray(); // gledamo div-fade kao root
let i = 1, temp = 0;
const divRootElement = document.createElement('div');
divRootElement.className = 'root';
const divElementPageBreak = document.createElement('div');
divElementPageBreak.style.pageBreakBefore = "always";
va.forEach(element => {
// 59.338582677165356 is sum of default top and bottom print margins
// 842 is height in pixels for A4 format
if(!element.hasAttribute('code') || (element.hasAttribute('code') && element.getAttribute('code') != 'br-hide'))
{
const razlika = element.clientHeight + temp - (i * 842 - 59.338582677165356);
if (razlika < 0) {
temp += element.clientHeight;
divRootElement.append(element);
console.log(temp);
}
else if (razlika === 0) {
i++;
temp = 0;
divRootElement.append(divElementPageBreak);
console.log(temp);
}
else {
if (element.hasChildNodes && element.childNodes.length === 1) {
const node = element.childNodes[0];
if (node.hasChildNodes && node.childNodes.length === 1) {
const subNode = node.childNodes[0];
if (subNode.hasChildNodes) {
const nodes = subNode.childNodes;
for (let j = 0; j < nodes.length; j++) {
const razlikaNodes = nodes[j].clientHeight + temp - (i * 842 - 59.338582677165356);
if (razlikaNodes < 0) {
temp += nodes[j].clientHeight;
console.log("bez apenda" + temp);
console.log(nodes[j]);
// divRootElement.append(nodes[j]);
array.push(nodes[j]);
}
else if (razlikaNodes === 0) {
i++;
temp = 0;
divRootElement.append(nodes[j]);
console.log(temp);
}
else {
if (nodes[j].hasChildNodes && nodes[j].childNodes.length > 1) {
const subNodes = nodes[j].childNodes;
for (let k = 0; k < subNodes.length; k++) {
const razlikaSubNodes = subNodes[k].clientHeight + temp - (i * 842 - 59.338582677165356);
if (razlikaSubNodes < 0) {
temp += subNodes[k].clientHeight;
divRootElement.append(subNodes[k]);
console.log(temp);
}
else {
i++;
temp = 0;
divRootElement.append(divElementPageBreak);
console.log(temp);
}
}
}
}
}
}
let arrayHeights = [];
this.before = $('#root');
// const v = $(':eq(0)'); // za root element
const va = $('div.fade').children().toArray(); // gledamo div-fade kao root
let i = 1, temp = 0;
const divRootElement = document.createElement('div');
divRootElement.className = 'root';
const divElementPageBreak = document.createElement('div');
divElementPageBreak.style.pageBreakBefore = "always";
va.forEach(element => {
// 59.338582677165356 is sum of default top and bottom print margins
// 842 is height in pixels for A4 format
if (!element.hasAttribute('code') || (element.hasAttribute('code') && element.getAttribute('code') != 'br-hide')) {
const razlika = element.clientHeight + temp - (i * 842 - 59.338582677165356);
if (razlika < 0) {
temp += element.clientHeight;
// divRootElement.append(element);
array.push(element);
arrayHeights.push(temp);
}
}
else if (element.hasChildNodes && element.childNodes.length > 1) {
const nodes = element.childNodes;
for (let i = 0; i < nodes.length; i++) {
if (nodes[i].clientHeight + temp < (i * 842 - 59.338582677165356)) {
temp += nodes[i].clientHeight;
divRootElement.append(nodes[i]);
console.log(temp);
}
else {
i++;
temp = 0;
console.log("bez apenda" + temp);
}
else if (razlika === 0) {
i++;
temp = 0;
//divRootElement.append(divElementPageBreak);
array.push(element);
arrayHeights.push(temp);
}
else {
i++;
temp = 0;
array.push(divElementPageBreak);
array.push(element);
}

}
}
});
array.forEach(element => {
divRootElement.append(element);
});
$('#root').empty();
$('#root').append(divRootElement);
// let array = [];
// let arrayHeights = [];
// this.before = $('#root');
// // const v = $(':eq(0)'); // za root element
// const va = $('div.fade').children().toArray(); // gledamo div-fade kao root
// let i = 1, temp = 0;
// const divRootElement = document.createElement('div');
// divRootElement.className = 'root';
// const divElementPageBreak = document.createElement('div');
// divElementPageBreak.style.pageBreakBefore = "always";
// va.forEach(element => {
// // 59.338582677165356 is sum of default top and bottom print margins
// // 842 is height in pixels for A4 format
// if(!element.hasAttribute('code') || (element.hasAttribute('code') && element.getAttribute('code') != 'br-hide'))
// {
// const razlika = element.clientHeight + temp - (i * 842 - 59.338582677165356);
// if (razlika < 0) {
// temp += element.clientHeight;
// // divRootElement.append(element);
// console.log(temp);
// array.push(element);
// arrayHeights.push(temp);
// }
// else if (razlika === 0) {
// i++;
// temp = 0;
// //divRootElement.append(divElementPageBreak);
// array.push(element);
// arrayHeights.push(temp);
// console.log(temp);
// }
// else {
// if (element.hasChildNodes && element.childNodes.length === 1) {
// const node = element.childNodes[0];
// if (node.hasChildNodes && node.childNodes.length === 1) {
// const subNode = node.childNodes[0];
// if (subNode.hasChildNodes) {
// const nodes = subNode.childNodes;
// for (let j = 0; j < nodes.length; j++) {
// const razlikaNodes = nodes[j].clientHeight + temp - (i * 842 - 59.338582677165356);
// if (razlikaNodes < 0) {
// temp += nodes[j].clientHeight;
// console.log("bez apenda" + temp);
// console.log(nodes[j]);
// // divRootElement.append(nodes[j]);
// array.push(nodes[j]);
// arrayHeights.push(temp);
// }
// else if (razlikaNodes === 0) {
// i++;
// temp = 0;
// //divRootElement.append(nodes[j]);
// array.push(nodes[j]);
// arrayHeights.push(temp);
// console.log(temp);
// }
// else {
// if (nodes[j].hasChildNodes && nodes[j].childNodes.length > 1) {
// const subNodes = nodes[j].childNodes;
// for (let k = 0; k < subNodes.length; k++) {
// const razlikaSubNodes = subNodes[k].clientHeight + temp - (i * 842 - 59.338582677165356);
// if (razlikaSubNodes < 0) {
// temp += subNodes[k].clientHeight;
// // divRootElement.append(subNodes[k]);
// console.log(temp);
// array.push(subNodes[k]);
// arrayHeights.push(temp);
// }
// else {
// i++;
// temp = 0;
// // divRootElement.append(divElementPageBreak);
// console.log(temp);
// array.push(divElementPageBreak);
// arrayHeights.push(temp);
// }
// }
// }
// }
// }
// }
// }
// }
// else if (element.hasChildNodes && element.childNodes.length > 1) {
// const nodes = element.childNodes;
// for (let i = 0; i < nodes.length; i++) {
// if (nodes[i].clientHeight + temp < (i * 842 - 59.338582677165356)) {
// temp += nodes[i].clientHeight;
// // divRootElement.append(nodes[i]);
// array.push(nodes[i]);
// arrayHeights.push(temp);
// console.log(temp);
// }
// else {
// i++;
// temp = 0;
// console.log("bez apenda nisam nista uradio" + temp);

// }
// }

// }
// }

}});
$('#root').empty();
$('#root').append(divRootElement);
array.forEach(element => {
console.log(element);
});
console.log(divRootElement);
// }});
// temp = 0;
// array.forEach(element => {
// divRootElement.append(element);
// let param = document.createElement('p');
// param.innerHTML = arrayHeights[temp++];
// divRootElement.append(param);
// });
// $('#root').empty();
// $('#root').append(divRootElement);
// console.log(divRootElement);
}
rolback(){
rolback() {
$('#root').empty();
$('#root').append(this.before);
}

Loading…
Отказ
Запис