Mercurial > gemma
view client/src/lib/mixins.js @ 3141:42324626f9e2
client: add box element for pdf-template (waterlevel)
author | Fadi Abbud <fadi.abbud@intevation.de> |
---|---|
date | Thu, 02 May 2019 14:44:16 +0200 |
parents | 35c0da49eb89 |
children | d33a5c1522dc |
line wrap: on
line source
/* This is Free Software under GNU Affero General Public License v >= 3.0 * without warranty, see README.md and license for details. * * SPDX-License-Identifier: AGPL-3.0-or-later * License-Filename: LICENSES/AGPL-3.0.txt * * Copyright (C) 2018 by via donau * – Österreichische Wasserstraßen-Gesellschaft mbH * Software engineering by Intevation GmbH * * Author(s): * Markus Kottländer <markus.kottlaender@intevation.de> */ import locale2 from "locale2"; const sortTable = { data() { return { sortColumn: "", sortDirection: "ASC", pageSize: 20, page: 1 }; }, methods: { sortTable(sorting) { this.sortColumn = sorting.sortColumn; this.sortDirection = sorting.sortDirection; } } }; const pane = { props: { paneCreated: Function, paneMounted: Function, paneUpdated: Function, paneDestroyed: Function }, computed: { paneId() { return this.$parent.pane.id; } }, created() { if (this.paneCreated) this.paneCreated(); }, mounted() { if (this.paneMounted) this.paneMounted(); }, updated() { if (this.paneUpdated) this.paneUpdated(); }, destroyed() { if (this.paneDestroyed) this.paneDestroyed(); } }; const pdfgen = { methods: { addText(position, offset, width, fontSize, color, text) { text = this.replacePlaceholders(text); // split the incoming string to an array, each element is a string of // words in a single line this.pdf.doc.setTextColor(color); this.pdf.doc.setFontSize(fontSize); var textLines = this.pdf.doc.splitTextToSize(text, width); // x/y defaults to offset for topleft corner (normal x/y coordinates) let x = offset.x; let y = offset.y; // if position is on the right, x needs to be calculate with pdf width and // the size of the element if (["topright", "bottomright"].indexOf(position) !== -1) { x = this.pdf.width - offset.x - width; } if (["bottomright", "bottomleft"].indexOf(position) !== -1) { y = this.pdf.height - offset.y - this.getTextHeight(textLines.length); } this.pdf.doc.text(textLines, x, y, { baseline: "hanging" }); }, replacePlaceholders(text) { if (text.includes("{date}")) { text = text.replace("{date}", new Date().toLocaleString(locale2)); } //get only day,month and year from the Date object if (text.includes("{date-minor}")) { var date = new Date(); var dt = (date.getDate() < 10 ? "0" : "") + date.getDate() + "." + (date.getMonth() + 1 < 10 ? "0" : "") + (date.getMonth() + 1) + "." + date.getFullYear(); text = text.replace("{date-minor}", dt.toLocaleString(locale2)); } if (text.includes("{user}")) { text = text.replace("{user}", this.user); } return text; }, addImage(url, format, position, offset, width, height) { let x = offset.x; let y = offset.y; if (["topright", "bottomright"].indexOf(position) !== -1) { x = this.pdf.width - offset.x - width; } if (["bottomright", "bottomleft"].indexOf(position) !== -1) { y = this.pdf.height - offset.y - height; } let image = new Image(); if (url) { image.src = url; } else { if (this.logoForPDF) { image.src = this.logoForPDF; } else { image.src = "/img/gemma-logo-for-pdf.png"; } } this.pdf.doc.addImage(image, x, y, width, height); }, addBox(position, offset, width, height, rounding, color, brcolor) { // x/y defaults to offset for topleft corner (normal x/y coordinates) let x = offset.x; let y = offset.y; // if position is on the right, x needs to be calculate with pdf width and // the size of the element if (["topright", "bottomright"].indexOf(position) !== -1) { x = this.pdf.width - offset.x - width; } if (["bottomright", "bottomleft"].indexOf(position) !== -1) { y = this.pdf.height - offset.y - height; } this.addRoundedBox(x, y, width, height, color, rounding, brcolor); }, addRoundedBox(x, y, w, h, color, rounding, brcolor) { // draws a rounded background box at (x,y) width x height // using jsPDF units this.pdf.doc.setDrawColor(brcolor); this.pdf.doc.setFillColor(color); this.pdf.doc.roundedRect(x, y, w, h, rounding, rounding, "FD"); } } }; export { sortTable, pane, pdfgen };