changeset 1909:e62f1d2ead9e

merge in branch dev-pdf-generation
author Bernhard Reiter <bernhard@intevation.de>
date Fri, 18 Jan 2019 17:16:55 +0100
parents 32c56e6c089a (current diff) 0322bce42065 (diff)
children 146369b1c376
files
diffstat 11 files changed, 541 insertions(+), 112 deletions(-) [+]
line wrap: on
line diff
--- a/client/package.json	Fri Jan 18 17:13:12 2019 +0100
+++ b/client/package.json	Fri Jan 18 17:16:55 2019 +0100
@@ -32,6 +32,7 @@
     "debounce": "^1.2.0",
     "font-awesome": "^4.7.0",
     "glob-all": "^3.1.0",
+    "jspdf": "^1.5.3",
     "locale2": "^2.2.0",
     "ol": "^5.3.0",
     "path": "^0.12.7",
--- a/client/src/components/Pdftool.vue	Fri Jan 18 17:13:12 2019 +0100
+++ b/client/src/components/Pdftool.vue	Fri Jan 18 17:16:55 2019 +0100
@@ -7,8 +7,8 @@
   >
     <div style="width: 20rem">
       <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center">
-        <font-awesome-icon icon="file-pdf" class="mr-2"></font-awesome-icon
-        ><translate>Generate PDF</translate>
+        <font-awesome-icon icon="file-pdf" class="mr-2"></font-awesome-icon>
+        <translate>Generate PDF</translate>
         <font-awesome-icon
           icon="times"
           class="ml-auto text-muted"
@@ -16,15 +16,21 @@
         ></font-awesome-icon>
       </h6>
       <div class="p-3">
-        <b><translate>Chose format:</translate></b>
+        <b><translate>Choose format:</translate></b>
         <select v-model="form.format" class="form-control d-block w-100">
           <option value="landscape"><translate>landscape</translate></option>
           <option value="portrait"><translate>portrait</translate></option>
         </select>
+        <select v-model="form.resolution" class="form-control d-block w-100">
+          <option value="80">80 dpi</option>
+          <option value="120">120 dpi</option>
+          <option value="200">200 dpi</option>
+        </select>
         <select v-model="form.paperSize" class="form-control d-block w-100">
           <option value="a3"><translate>ISO A3</translate></option>
           <option value="a4"><translate>ISO A4</translate></option>
         </select>
+        <!--
         <small class="d-block my-2">
           <input
             type="radio"
@@ -33,19 +39,20 @@
             v-model="form.downloadType"
             selected
           />
-          <label for="pdfexport-downloadtype-download" class="ml-1 mr-2"
-            ><translate>Download</translate></label
-          >
+          <label for="pdfexport-downloadtype-download" class="ml-1 mr-2">
+            <translate>Download</translate>
+          </label>
           <input
             type="radio"
             id="pdfexport-downloadtype-open"
             value="open"
             v-model="form.downloadType"
           />
-          <label for="pdfexport-downloadtype-open" class="ml-1"
-            ><translate>Open in new window</translate></label
-          >
+          <label for="pdfexport-downloadtype-open" class="ml-1">
+            <translate>Open in new window</translate>
+          </label>
         </small>
+        -->
         <button
           @click="download"
           type="button"
@@ -65,15 +72,19 @@
  * SPDX-License-Identifier: AGPL-3.0-or-later
  * License-Filename: LICENSES/AGPL-3.0.txt
  *
- * Copyright (C) 2018 by via donau
+ * Copyright (C) 2018, 2019 by via donau
  *   – Österreichische Wasserstraßen-Gesellschaft mbH
  * Software engineering by Intevation GmbH
  *
  * Author(s):
  * * Markus Kottländer <markus.kottlaender@intevation.de>
  * * Bernhard E. Reiter <bernhard@intevation.de>
+ * * Fadi Abbud <fadi.abbud@intevation.de>
  */
 import { mapState } from "vuex";
+import jsPDF from "jspdf";
+import { getPointResolution } from "ol/proj.js";
+import locale2 from "locale2";
 
 var paperSizes = {
   // in millimeter, landscape [width, height]
@@ -88,31 +99,141 @@
       form: {
         format: "landscape",
         paperSize: "a4",
-        downloadType: "download"
+        downloadType: "download",
+        resolution: "120"
       }
     };
   },
   computed: {
-    ...mapState("application", ["showPdfTool"]),
-    ...mapState("bottlenecks", ["selectedSurvey"])
+    ...mapState("application", ["showPdfTool", "secondaryLogo"]),
+    ...mapState("bottlenecks", ["selectedSurvey"]),
+    ...mapState("map", ["openLayersMap"]),
+    ...mapState("user", ["user"])
   },
   methods: {
-    isLandscape() {
-      return this.form.format !== "portrait";
-    },
     download() {
-      /* eslint-disable no-unused-vars */
-      const width = this.isLandscape()
-        ? paperSizes[this.form.paperSize][0]
-        : paperSizes[this.form.paperSize][1];
-      const height = this.isLandscape()
-        ? paperSizes[this.form.paperSize][1]
-        : paperSizes[this.form.paperSize][0];
+      // FUTURE: disable button while working on it
+      console.log(
+        "will generate pdf with",
+        this.form.paperSize,
+        this.form.format,
+        this.form.resolution
+      );
+      var width, height;
+
+      if (this.form.format !== "portrait") {
+        // landscape, default
+        width = paperSizes[this.form.paperSize][0];
+        height = paperSizes[this.form.paperSize][1];
+      } else {
+        // switch width and height
+        width = paperSizes[this.form.paperSize][1];
+        height = paperSizes[this.form.paperSize][0];
+      }
+
+      // FUTURE: consider margins
+
+      // dots per mm = dots per inch / (25.4 mm/inch)
+      var pixelsPerMapMillimeter = this.form.resolution / 25.4;
+      var mapSizeForPrint = [
+        // in pixel
+        Math.round(width * pixelsPerMapMillimeter),
+        Math.round(height * pixelsPerMapMillimeter)
+      ];
+
+      // generate PDF and open it
+      // our units are milimeters; width 0 x height 0 is left upper corner
+
+      // Step 1 prepare and save current map extend
+      // Then add callback "rendercomplete" for Step 3
+      //    which will generate the pdf and resets the map view
+      // Step 2 which starts rendering a map with the necessary image size
+
+      var map = this.openLayersMap;
+      var mapSize = map.getSize(); // size in pixels of the map in the DOM
+      // Calculate the extent for the current view state and the passed size.
+      // The size is the pixel dimensions of the box into which the calculated
+      // extent should fit.
+      var mapExtent = map.getView().calculateExtent(mapSize);
+
+      var pdf = new jsPDF(this.form.format, "mm", this.form.paperSize);
+      var scalebarSize =
+        this.form.format === "portrait" && this.form.paperSize === "a4"
+          ? 10
+          : 15;
+      var northarrowSize = 3;
+      var self = this;
+
+      // set a callback for after the next complete rendering of the map
+      map.once("rendercomplete", function(event) {
+        let canvas = event.context.canvas;
+
+        // because we are using Web Mercator, a pixel represents
+        // a differently sizes spot depending on the place of the map.
+        // So we use a value calculated from the center of the current view.
+        let view = map.getView();
+        let proj = view.getProjection();
+        let metersPerPixel = // average meters (reality) per pixel (map)
+          getPointResolution(proj, view.getResolution(), view.getCenter()) *
+          proj.getMetersPerUnit();
+        // DEBUG console.log("metersPerPixel = ", metersPerPixel);
+
+        let scaleNominator = Math.round(
+          // the x in 1:x map scale
+          1000 * pixelsPerMapMillimeter * metersPerPixel
+        );
+        console.log("scaleNominator = ", scaleNominator);
+
+        var data = canvas.toDataURL("image/jpeg");
+        pdf.addImage(data, "JPEG", 0, 0, width, height);
+        self.addRoundedBox(
+          pdf,
+          width - scalebarSize * 5.2,
+          height - scalebarSize,
+          scalebarSize * 5,
+          scalebarSize
+        );
+        self.addScalebar(
+          pdf,
+          width - scalebarSize * 5,
+          height - scalebarSize / 2,
+          scalebarSize * 4,
+          scaleNominator
+        );
+        /*
+        self.addText(
+          pdf,
+          width - scalebarSize * 5,
+          height - scalebarSize * 0.6,
+          10,
+          "black",
+          50,
+          "Scale 1:" + scaleNominator
+        );
+        */
+        //self.addText(pdf, 150, 20, 10, "black", 70, "some text");
+        self.addNorthArrow(pdf, 15, 9, northarrowSize);
+        self.addPageInfo(pdf);
+        self.addAboutBox(pdf, width, height);
+
+        pdf.save("map.pdf");
+        // reset to original size
+        map.setSize(mapSize);
+        map.getView().fit(mapExtent, { size: mapSize });
+
+        // FUTURE: re-enable button when done
+      });
+
+      // trigger rendering
+      map.setSize(mapSizeForPrint);
+      map.getView().fit(mapExtent, { size: mapSizeForPrint });
 
       // TODO: replace this src with an API reponse after actually generating PDFs
-      let src = !this.isLandscape()
-        ? "/img/PrintTemplate-Var2-Landscape.pdf"
-        : "/img/PrintTemplate-Var2-Portrait.pdf";
+      /*
+      let src =
+        this.form.format === "landscape"
+          ? "/img/PrintTemplate-Var2-Landscape.pdf"
+          : "/img/PrintTemplate-Var2-Portrait.pdf";
 
       let a = document.createElement("a");
       a.href = src;
@@ -124,6 +245,180 @@
       document.body.appendChild(a);
       a.click();
       document.body.removeChild(a);
+      */
+    },
+    addRoundedBox(doc, x, y, w, h) {
+      // draws a rounded background box at (x,y) width x height
+      // using jsPDF units
+      doc.setDrawColor(255, 255, 255);
+      doc.setFillColor(255, 255, 255);
+      doc.roundedRect(x, y, w, h, 3, 3, "FD");
+    },
+    addScalebar(doc, x, y, maxWidth, scaleNominator) {
+      // maxWidth in mm
+      // scaleNominator is the x in 1:x of the map scale
+
+      // reduce width until we'll find a nice number for printing
+      // strategy:
+      //           1. check which unit prefix we shall use to get [10:10000[
+      //           2. using a mapping for the leading digit to get [1:10[
+      //           3. select a smaller number which is nicely dividable
+      //           4. scale up again to get length in paper mm and to be shown
+
+      // from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10#Polyfill
+      let log10 =
+        Math.log10 || // more precise, but unsupported by IE
+        function(x) {
+          return Math.log(x) * Math.LOG10E;
+        };
+
+      let maxLength = maxWidth * scaleNominator;
+
+      let unit = "mm";
+      let unitConversionFactor = 0;
+      if (maxLength > 10e7) {
+        // >10 km
+        unit = "km";
+        unitConversionFactor = 10e6;
+      } else if (maxLength > 10e4) {
+        // >10m
+        unit = "m";
+        unitConversionFactor = 10e3;
+      }
+
+      maxLength /= unitConversionFactor;
+
+      // DEBUG console.log(maxLength, unit);
+      let unroundedLength = maxLength;
+      let numberOfDigits = Math.floor(log10(unroundedLength));
+      let factor = Math.pow(10, numberOfDigits);
+      let mapped = unroundedLength / factor;
+      // DEBUG console.log(mapped);
+
+      var length = Math.floor(maxLength); // just to have an upper limit
+
+      // manually only use numbers that are very nice to devide by 4
+      // note that this is taken into account for rounding later
+      if (mapped > 8) {
+        length = 8 * factor;
+      } else if (mapped > 4) {
+        length = 4 * factor;
+      } else if (mapped > 2) {
+        length = 2 * factor;
+      } else {
+        length = factor;
+      }
+
+      let size = (length * unitConversionFactor) / scaleNominator / 4;
+      // DEBUG console.log(length, size);
+
+      doc.setDrawColor(0, 0, 0);
+      doc.setFillColor(0, 0, 0);
+      doc.rect(x, y, size, 1, "FD");
+      doc.setFillColor(255, 255, 255);
+      doc.setDrawColor(0, 0, 0);
+      doc.rect(x + size, y, size, 1, "FD");
+      doc.setFillColor(0, 0, 0);
+      doc.setDrawColor(0, 0, 0);
+      doc.rect(x + size * 2, y, size * 2, 1, "FD");
+      doc.setFontSize(5);
+      doc.text(x, y + 3, "0");
+      // /4 and could give 2.5. We still round, because of floating point arith
+      doc.text(
+        x + size,
+        y + 3,
+        (Math.round((length * 10) / 4) / 10).toString()
+      );
+      doc.text(x + size * 2, y + 3, Math.round(length / 2).toString());
+      doc.text(x + size * 4, y + 3, Math.round(length).toString() + " " + unit);
+    },
+
+    addNorthArrow(doc, x1, y1, size) {
+      var y2 = y1 + size * 3;
+      var x3 = x1 - size * 2;
+      var y3 = y1 + size * 5;
+      var x4 = x1 + size * 2;
+      //white triangle
+      doc.setFillColor(255, 255, 255);
+      doc.setDrawColor(255, 255, 255);
+      doc.triangle(x3 - 0.8, y3 + 1.2, x1, y1 - 1.2, x1, y2 + 0.6, "F");
+      doc.triangle(x1, y1 - 1.2, x1, y2 + 0.6, x4 + 0.8, y3 + 1.2, "F");
+      //north arrow
+      doc.setDrawColor(0, 0, 0);
+      doc.setFillColor(255, 255, 255);
+      doc.triangle(x3, y3, x1, y1, x1, y2, "FD");
+      doc.setFillColor(0, 0, 0);
+      doc.triangle(x1, y1, x1, y2, x4, y3, "FD");
+      doc.setFontSize(size * 3.1);
+      doc.setTextColor(255, 255, 255);
+      doc.setFontStyle("bold");
+      doc.text(size < 3 ? x1 - 0.5 : x1 - 1.3, y3 + 1, "N");
+      doc.setFontSize(size * 3);
+      doc.setTextColor(0, 0, 0);
+      doc.setFontStyle("normal");
+      doc.text(size < 3 ? x1 - 0.5 : x1 - 1.3, y3 + 1, "N");
+    },
+    // add some text at specific coordinates and determine how many wrolds in single line
+    addText(doc, postitionX, positionY, size, color, lineWidth, text) {
+      // split the incoming string to an array, each element is a string of words in a single line
+      var textLines = doc.splitTextToSize(text, lineWidth);
+      // get the longest line to fit the white backround to it
+      var longestString = "";
+      textLines.forEach(function(element) {
+        if (element.length > longestString.length) longestString = element;
+      });
+      var indexOfMaxString = textLines.indexOf(longestString);
+      // white background (rectangular) around the text
+      doc.setFillColor(255, 255, 255);
+      doc.setDrawColor(255, 255, 255);
+      doc.rect(
+        postitionX - doc.getStringUnitWidth(textLines[indexOfMaxString]) / size,
+        size > 10 ? positionY - size / 1.8 : positionY - size / 2.4,
+        doc.getStringUnitWidth(textLines[indexOfMaxString]) * (size / 2.6),
+        textLines.length * (size / 2),
+        "FD"
+      );
+      //rounded rectangular
+      /* doc.roundedRect(
+        postitionX - doc.getStringUnitWidth(textLines[indexOfMaxString]) / size,
+        size > 10 ? positionY - size / 1.8 : positionY - size / 2.6,
+        doc.getStringUnitWidth(textLines[indexOfMaxString]) * (size / 2.6),
+        textLines.length * (size / 2),
+        3,
+        3,
+        "FD"
+      ); */
+      doc.setTextColor(color);
+      doc.setFontSize(size);
+      doc.text(postitionX, positionY, textLines);
+    },
+    addPageInfo(doc) {
+      this.addRoundedBox(doc, 0, 0, 110, 8);
+      let str =
+        this.$gettext("Date of publication:") +
+        " " +
+        new Date().toLocaleString(locale2) +
+        " " +
+        this.$gettext("– printed by:") +
+        " " +
+        this.user;
+      this.addText(doc, 5, 5, 9, "black", 100, str);
+    },
+    addAboutBox(doc, docWidth, docHeight) {
+      let top = docHeight - 20;
+      this.addRoundedBox(doc, 0, top, 120, 20);
+      console.log("this.secondaryLogo", this.secondaryLogo);
+      let imageData =
+        "data:image/png;base64,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";
+      doc.addImage(imageData, "PNG", 5, docHeight - 19, 110, 10);
+      /*
+      if ("") {
+        doc.addImage(this.secondaryLogo, "PNG", 5, docHeight - 19, 50);
+      };
+      */
+      let str =
+        "Dislaimer: Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua.";
+      this.addText(doc, 5, docHeight - 6, 8, "black", 115, str);
     }
   }
 };
--- a/client/src/locale/bg_BG/LC_MESSAGES/app.po	Fri Jan 18 17:13:12 2019 +0100
+++ b/client/src/locale/bg_BG/LC_MESSAGES/app.po	Fri Jan 18 17:16:55 2019 +0100
@@ -18,7 +18,11 @@
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 "X-Generator: Weblate 3.4-dev\n"
 
-#: src/components/importschedule/Importscheduledetail.vue:565
+#: src/components/Pdftool.vue:402
+msgid "– printed by:"
+msgstr ""
+
+#: src/components/importschedule/Importscheduledetail.vue:452
 msgid "15 minutes"
 msgstr ""
 
@@ -91,7 +95,7 @@
 #: src/components/ImportSoundingresults.vue:16
 #, fuzzy
 msgid "Bottleneck"
-msgstr "Критични участъци"
+msgstr ""
 
 #: src/components/Systemconfiguration.vue:19
 msgid "Bottleneck Areas fill-color"
@@ -149,12 +153,7 @@
 #: src/components/usermanagement/Userdetail.vue:33
 #, fuzzy
 msgid "Country"
-msgstr "Държава"
-
-#: src/components/ImportStretches.vue:166
-#, fuzzy
-msgid "Countrycode"
-msgstr "Държава"
+msgstr ""
 
 #: src/components/importschedule/Importscheduledetail.vue:495
 msgid "Cronstring"
@@ -198,11 +197,7 @@
 msgid "Depthreference"
 msgstr ""
 
-#: src/components/importschedule/Importscheduledetail.vue:46
-msgid "Distance Marks Virtual"
-msgstr ""
-
-#: src/components/Pdftool.vue:36
+#: src/components/Pdftool.vue:10
 msgid "Download"
 msgstr ""
 
@@ -410,7 +405,7 @@
 #: src/components/layers/Layers.vue:10
 #, fuzzy
 msgid "Layers"
-msgstr "Слоеве"
+msgstr ""
 
 #: src/components/Login.vue:58
 msgid "Login"
@@ -488,7 +483,7 @@
 #: src/components/Bottlenecks.vue:9 src/components/staging/Staging.vue:11
 #, fuzzy
 msgid "Name"
-msgstr "име"
+msgstr ""
 
 #: src/components/ImportStretches.vue:110
 msgid "National Object name"
@@ -576,7 +571,7 @@
 #: src/components/usermanagement/Userdetail.vue:331
 #, fuzzy
 msgid "Please choose a country"
-msgstr "Моля, изберете държава"
+msgstr ""
 
 #: src/components/usermanagement/Userdetail.vue:336
 msgid "Please choose a role"
@@ -632,10 +627,6 @@
 #: src/components/ImportStretches.vue:156
 #, fuzzy
 msgid "Please enter a source"
-msgstr "Моля, изберете държава"
-
-#: src/components/importschedule/Importscheduledetail.vue:297
-msgid "Please enter a source orgranization"
 msgstr ""
 
 #: src/components/ImportStretches.vue:61
@@ -892,7 +883,7 @@
 #: src/components/staging/Staging.vue:12
 #, fuzzy
 msgid "Type"
-msgstr "Тип"
+msgstr ""
 
 #: src/components/ImportWaterwayProfiles.vue:89
 msgid "under construction"
--- a/client/src/locale/de_AT/LC_MESSAGES/app.po	Fri Jan 18 17:13:12 2019 +0100
+++ b/client/src/locale/de_AT/LC_MESSAGES/app.po	Fri Jan 18 17:16:55 2019 +0100
@@ -196,11 +196,7 @@
 msgid "Depthreference"
 msgstr "Tiefenreferenz"
 
-#: src/components/importschedule/Importscheduledetail.vue:46
-msgid "Distance Marks Virtual"
-msgstr ""
-
-#: src/components/Pdftool.vue:36
+#: src/components/Pdftool.vue:10
 msgid "Download"
 msgstr "Herunterladen"
 
@@ -265,7 +261,7 @@
 msgid "Fairwaydimension"
 msgstr "Waterway-Admin"
 
-#: src/components/importschedule/Importscheduledetail.vue:158
+#: src/components/importschedule/Importscheduledetail.vue:155
 msgid "Featuretype"
 msgstr ""
 
--- a/client/src/locale/en_GB/LC_MESSAGES/app.po	Fri Jan 18 17:13:12 2019 +0100
+++ b/client/src/locale/en_GB/LC_MESSAGES/app.po	Fri Jan 18 17:16:55 2019 +0100
@@ -194,11 +194,7 @@
 msgid "Depthreference"
 msgstr ""
 
-#: src/components/importschedule/Importscheduledetail.vue:46
-msgid "Distance Marks Virtual"
-msgstr ""
-
-#: src/components/Pdftool.vue:36
+#: src/components/Pdftool.vue:10
 msgid "Download"
 msgstr ""
 
--- a/client/src/locale/hr_HR/LC_MESSAGES/app.po	Fri Jan 18 17:13:12 2019 +0100
+++ b/client/src/locale/hr_HR/LC_MESSAGES/app.po	Fri Jan 18 17:16:55 2019 +0100
@@ -18,7 +18,11 @@
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
 "X-Generator: Weblate 3.4-dev\n"
 
-#: src/components/importschedule/Importscheduledetail.vue:565
+#: src/components/Pdftool.vue:402
+msgid "– printed by:"
+msgstr ""
+
+#: src/components/importschedule/Importscheduledetail.vue:452
 msgid "15 minutes"
 msgstr ""
 
@@ -91,7 +95,7 @@
 #: src/components/ImportSoundingresults.vue:16
 #, fuzzy
 msgid "Bottleneck"
-msgstr "Kritični sektor"
+msgstr ""
 
 #: src/components/Systemconfiguration.vue:19
 msgid "Bottleneck Areas fill-color"
@@ -197,11 +201,7 @@
 msgid "Depthreference"
 msgstr ""
 
-#: src/components/importschedule/Importscheduledetail.vue:46
-msgid "Distance Marks Virtual"
-msgstr ""
-
-#: src/components/Pdftool.vue:36
+#: src/components/Pdftool.vue:10
 msgid "Download"
 msgstr ""
 
@@ -220,7 +220,7 @@
 #: src/components/importschedule/Importscheduledetail.vue:53
 #, fuzzy
 msgid "Email Notification"
-msgstr "E-mail Obavijest"
+msgstr ""
 
 #: src/components/ImportStretches.vue:66
 msgid "End rhm"
@@ -630,10 +630,6 @@
 #: src/components/ImportStretches.vue:156
 #, fuzzy
 msgid "Please enter a source"
-msgstr "Odaberite zemlju"
-
-#: src/components/importschedule/Importscheduledetail.vue:297
-msgid "Please enter a source orgranization"
 msgstr ""
 
 #: src/components/ImportStretches.vue:61
--- a/client/src/locale/hu_HU/LC_MESSAGES/app.po	Fri Jan 18 17:13:12 2019 +0100
+++ b/client/src/locale/hu_HU/LC_MESSAGES/app.po	Fri Jan 18 17:16:55 2019 +0100
@@ -194,11 +194,7 @@
 msgid "Depthreference"
 msgstr ""
 
-#: src/components/importschedule/Importscheduledetail.vue:46
-msgid "Distance Marks Virtual"
-msgstr ""
-
-#: src/components/Pdftool.vue:36
+#: src/components/Pdftool.vue:10
 msgid "Download"
 msgstr ""
 
--- a/client/src/locale/ro_RO/LC_MESSAGES/app.po	Fri Jan 18 17:13:12 2019 +0100
+++ b/client/src/locale/ro_RO/LC_MESSAGES/app.po	Fri Jan 18 17:16:55 2019 +0100
@@ -18,7 +18,11 @@
 "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n"
 "X-Generator: Weblate 3.4-dev\n"
 
-#: src/components/importschedule/Importscheduledetail.vue:565
+#: src/components/Pdftool.vue:402
+msgid "– printed by:"
+msgstr ""
+
+#: src/components/importschedule/Importscheduledetail.vue:452
 msgid "15 minutes"
 msgstr ""
 
@@ -196,11 +200,7 @@
 msgid "Depthreference"
 msgstr ""
 
-#: src/components/importschedule/Importscheduledetail.vue:46
-msgid "Distance Marks Virtual"
-msgstr ""
-
-#: src/components/Pdftool.vue:36
+#: src/components/Pdftool.vue:10
 msgid "Download"
 msgstr ""
 
@@ -219,7 +219,7 @@
 #: src/components/importschedule/Importscheduledetail.vue:53
 #, fuzzy
 msgid "Email Notification"
-msgstr "E-mail Notificare"
+msgstr ""
 
 #: src/components/ImportStretches.vue:66
 msgid "End rhm"
@@ -628,10 +628,6 @@
 #: src/components/ImportStretches.vue:156
 #, fuzzy
 msgid "Please enter a source"
-msgstr "Selectați o țară"
-
-#: src/components/importschedule/Importscheduledetail.vue:297
-msgid "Please enter a source orgranization"
 msgstr ""
 
 #: src/components/ImportStretches.vue:61
--- a/client/src/locale/sk_SK/LC_MESSAGES/app.po	Fri Jan 18 17:13:12 2019 +0100
+++ b/client/src/locale/sk_SK/LC_MESSAGES/app.po	Fri Jan 18 17:16:55 2019 +0100
@@ -13,7 +13,11 @@
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Weblate 3.4-dev\n"
 
-#: src/components/importschedule/Importscheduledetail.vue:565
+#: src/components/Pdftool.vue:402
+msgid "– printed by:"
+msgstr ""
+
+#: src/components/importschedule/Importscheduledetail.vue:452
 msgid "15 minutes"
 msgstr ""
 
@@ -191,11 +195,7 @@
 msgid "Depthreference"
 msgstr ""
 
-#: src/components/importschedule/Importscheduledetail.vue:46
-msgid "Distance Marks Virtual"
-msgstr ""
-
-#: src/components/Pdftool.vue:36
+#: src/components/Pdftool.vue:10
 msgid "Download"
 msgstr ""
 
@@ -214,7 +214,7 @@
 #: src/components/importschedule/Importscheduledetail.vue:53
 #, fuzzy
 msgid "Email Notification"
-msgstr "Email Oznámenia"
+msgstr ""
 
 #: src/components/ImportStretches.vue:66
 msgid "End rhm"
@@ -437,7 +437,7 @@
 #: src/components/Sidebar.vue:15
 #, fuzzy
 msgid "Map"
-msgstr "Mapa"
+msgstr ""
 
 #: src/components/importschedule/Importscheduledetail.vue:584
 msgid "March"
@@ -625,10 +625,6 @@
 #: src/components/ImportStretches.vue:156
 #, fuzzy
 msgid "Please enter a source"
-msgstr "Vyberte krajinu"
-
-#: src/components/importschedule/Importscheduledetail.vue:297
-msgid "Please enter a source orgranization"
 msgstr ""
 
 #: src/components/ImportStretches.vue:61
--- a/client/src/store/map.js	Fri Jan 18 17:13:12 2019 +0100
+++ b/client/src/store/map.js	Fri Jan 18 17:16:55 2019 +0100
@@ -60,6 +60,7 @@
           source: new TileWMS({
             preload: 1,
             url: "https://service.d4d-portal.info/wms/",
+            crossOrigin: "anonymous",
             params: { LAYERS: "d4d", VERSION: "1.1.1", TILED: true }
           })
         }),
--- a/client/yarn.lock	Fri Jan 18 17:13:12 2019 +0100
+++ b/client/yarn.lock	Fri Jan 18 17:16:55 2019 +0100
@@ -1157,6 +1157,11 @@
   resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8"
   integrity sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==
 
+abab@^1.0.0:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"
+  integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=
+
 abab@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f"
@@ -1196,6 +1201,13 @@
   dependencies:
     acorn "^5.0.0"
 
+acorn-globals@^1.0.4:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf"
+  integrity sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=
+  dependencies:
+    acorn "^2.1.0"
+
 acorn-globals@^3.0.0:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
@@ -1273,6 +1285,11 @@
   resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913"
   integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==
 
+acorn@^2.1.0, acorn@^2.4.0:
+  version "2.7.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7"
+  integrity sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=
+
 acorn@^3.0.4, acorn@^3.1.0:
   version "3.3.0"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
@@ -1331,7 +1348,7 @@
     fast-json-stable-stringify "^2.0.0"
     json-schema-traverse "^0.3.0"
 
-ajv@^6.1.0, ajv@^6.5.5:
+ajv@^6.1.0:
   version "6.6.1"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.1.tgz#6360f5ed0d80f232cc2b294c362d5dc2e538dd61"
   integrity sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==
@@ -1341,6 +1358,16 @@
     json-schema-traverse "^0.4.1"
     uri-js "^4.2.2"
 
+ajv@^6.5.5:
+  version "6.7.0"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.7.0.tgz#e3ce7bb372d6577bb1839f1dfdfcbf5ad2948d96"
+  integrity sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==
+  dependencies:
+    fast-deep-equal "^2.0.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
+
 align-text@^0.1.1, align-text@^0.1.3:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
@@ -1876,6 +1903,11 @@
   resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
   integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
 
+base64-arraybuffer@^0.1.5:
+  version "0.1.5"
+  resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
+  integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
+
 base64-js@^1.0.2:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
@@ -2314,6 +2346,16 @@
   resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000913.tgz#560311ecf242eaf12159b720e64b11ebd759b5e4"
   integrity sha512-PP7Ypc35XY1mNduHqweGNOp0qfNUCmaQauGOYDByvirlFjrzRyY72pBRx7jnBidOB8zclg00DAzsy2H475BouQ==
 
+canvg@1.5.3:
+  version "1.5.3"
+  resolved "https://registry.yarnpkg.com/canvg/-/canvg-1.5.3.tgz#aad17915f33368bf8eb80b25d129e3ae922ddc5f"
+  integrity sha512-7Gn2IuQzvUQWPIuZuFHrzsTM0gkPz2RRT9OcbdmA03jeKk8kltrD8gqUzNX15ghY/4PV5bbe5lmD6yDLDY6Ybg==
+  dependencies:
+    jsdom "^8.1.0"
+    rgbcolor "^1.0.1"
+    stackblur-canvas "^1.4.1"
+    xmldom "^0.1.22"
+
 capture-exit@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f"
@@ -2945,6 +2987,13 @@
     postcss "^7.0.1"
     timsort "^0.3.0"
 
+css-line-break@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/css-line-break/-/css-line-break-1.0.1.tgz#19f2063a33e95fb2831b86446c0b80c188af450a"
+  integrity sha1-GfIGOjPpX7KDG4ZEbAuAwYivRQo=
+  dependencies:
+    base64-arraybuffer "^0.1.5"
+
 css-loader@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe"
@@ -3123,11 +3172,18 @@
   dependencies:
     css-tree "1.0.0-alpha.29"
 
-cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
+cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0", "cssom@>= 0.3.2 < 0.4.0":
   version "0.3.4"
   resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797"
   integrity sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==
 
+"cssstyle@>= 0.2.34 < 0.3.0":
+  version "0.2.37"
+  resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
+  integrity sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=
+  dependencies:
+    cssom "0.3.x"
+
 cssstyle@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb"
@@ -3966,7 +4022,7 @@
   resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
   integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
 
-escodegen@1.x.x, escodegen@^1.9.1:
+escodegen@1.x.x, escodegen@^1.6.1, escodegen@^1.9.1:
   version "1.11.0"
   resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589"
   integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==
@@ -4474,6 +4530,10 @@
     loader-utils "^1.0.2"
     schema-utils "^1.0.0"
 
+"file-saver@github:eligrey/FileSaver.js#1.3.8":
+  version "1.3.8"
+  resolved "https://codeload.github.com/eligrey/FileSaver.js/tar.gz/e865e37af9f9947ddcced76b549e27dc45c1cb2e"
+
 file-uri-to-path@1:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
@@ -5229,6 +5289,13 @@
     toposort "^1.0.0"
     util.promisify "1.0.0"
 
+html2canvas@1.0.0-alpha.12:
+  version "1.0.0-alpha.12"
+  resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.0.0-alpha.12.tgz#3b1992e3c9b3f56063c35fd620494f37eba88513"
+  integrity sha1-OxmS48mz9WBjw1/WIElPN+uohRM=
+  dependencies:
+    css-line-break "1.0.1"
+
 htmlparser2@^3.9.1:
   version "3.10.0"
   resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464"
@@ -5322,7 +5389,7 @@
     debug "2"
     extend "3"
 
-iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4:
+iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.13, iconv-lite@^0.4.17, iconv-lite@^0.4.4:
   version "0.4.24"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
   integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -6413,6 +6480,29 @@
     ws "^5.2.0"
     xml-name-validator "^3.0.0"
 
+jsdom@^8.1.0:
+  version "8.5.0"
+  resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-8.5.0.tgz#d4d8f5dbf2768635b62a62823b947cf7071ebc98"
+  integrity sha1-1Nj12/J2hjW2KmKCO5R89wcevJg=
+  dependencies:
+    abab "^1.0.0"
+    acorn "^2.4.0"
+    acorn-globals "^1.0.4"
+    array-equal "^1.0.0"
+    cssom ">= 0.3.0 < 0.4.0"
+    cssstyle ">= 0.2.34 < 0.3.0"
+    escodegen "^1.6.1"
+    iconv-lite "^0.4.13"
+    nwmatcher ">= 1.3.7 < 2.0.0"
+    parse5 "^1.5.1"
+    request "^2.55.0"
+    sax "^1.1.4"
+    symbol-tree ">= 3.1.0 < 4.0.0"
+    tough-cookie "^2.2.0"
+    webidl-conversions "^3.0.1"
+    whatwg-url "^2.0.1"
+    xml-name-validator ">= 2.0.1 < 3.0.0"
+
 jsesc@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
@@ -6487,6 +6577,18 @@
   resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
   integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
 
+jspdf@^1.5.3:
+  version "1.5.3"
+  resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-1.5.3.tgz#5a12c011479defabef5735de55c913060ed219f2"
+  integrity sha512-J9X76xnncMw+wIqb15HeWfPMqPwYxSpPY8yWPJ7rAZN/ZDzFkjCSZObryCyUe8zbrVRNiuCnIeQteCzMn7GnWw==
+  dependencies:
+    canvg "1.5.3"
+    file-saver eligrey/FileSaver.js#1.3.8
+    html2canvas "1.0.0-alpha.12"
+    omggif "1.0.7"
+    promise-polyfill "8.1.0"
+    stackblur-canvas "2.2.0"
+
 jsprim@^1.2.2:
   version "1.4.1"
   resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -7623,6 +7725,11 @@
   resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
   integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
 
+"nwmatcher@>= 1.3.7 < 2.0.0":
+  version "1.4.4"
+  resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e"
+  integrity sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==
+
 nwsapi@^2.0.7:
   version "2.0.9"
   resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016"
@@ -7721,6 +7828,11 @@
     pixelworks "1.1.0"
     rbush "2.0.2"
 
+omggif@1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.7.tgz#59d2eecb0263de84635b3feb887c0c9973f1e49d"
+  integrity sha1-WdLuywJj3oRjWz/riHwMmXPx5J0=
+
 on-finished@~2.3.0:
   version "2.3.0"
   resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
@@ -8004,6 +8116,11 @@
   resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608"
   integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==
 
+parse5@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
+  integrity sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=
+
 parse5@^3.0.1:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
@@ -8629,6 +8746,11 @@
   resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
   integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
 
+promise-polyfill@8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.0.tgz#30059da54d1358ce905ac581f287e184aedf995d"
+  integrity sha512-OzSf6gcCUQ01byV4BgwyUCswlaQQ6gzXc23aLQWhicvfX9kfsUiUhgt3CCQej8jDnl8/PhGF31JdHX2/MzF3WA==
+
 promise@^7.0.1:
   version "7.3.1"
   resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
@@ -8687,9 +8809,9 @@
   integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
 
 psl@^1.1.24, psl@^1.1.28:
-  version "1.1.29"
-  resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67"
-  integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==
+  version "1.1.31"
+  resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184"
+  integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==
 
 public-encrypt@^4.0.0:
   version "4.0.3"
@@ -9197,7 +9319,7 @@
     stealthy-require "^1.1.0"
     tough-cookie ">=2.3.3"
 
-request@^2.87.0, request@^2.88.0:
+request@^2.55.0, request@^2.87.0, request@^2.88.0:
   version "2.88.0"
   resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
   integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
@@ -9315,6 +9437,11 @@
   resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
   integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=
 
+rgbcolor@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/rgbcolor/-/rgbcolor-1.0.1.tgz#d6505ecdb304a6595da26fa4b43307306775945d"
+  integrity sha1-1lBezbMEplldom+ktDMHMGd1lF0=
+
 right-align@^0.1.1:
   version "0.1.3"
   resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
@@ -9435,7 +9562,7 @@
     pify "^3.0.0"
     semver "^5.5.0"
 
-sax@^1.2.4, sax@~1.2.4:
+sax@^1.1.4, sax@^1.2.4, sax@~1.2.4:
   version "1.2.4"
   resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
   integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
@@ -9861,9 +9988,9 @@
   integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
 
 sshpk@^1.7.0:
-  version "1.15.2"
-  resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629"
-  integrity sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==
+  version "1.16.0"
+  resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.0.tgz#1d4963a2fbffe58050aa9084ca20be81741c07de"
+  integrity sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==
   dependencies:
     asn1 "~0.2.3"
     assert-plus "^1.0.0"
@@ -9899,6 +10026,16 @@
   resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8"
   integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==
 
+stackblur-canvas@2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.2.0.tgz#cacc5924a0744b3e183eb2e6c1d8559c1a17c26e"
+  integrity sha512-5Gf8dtlf8k6NbLzuly2NkGrkS/Ahh+I5VUjO7TnFizdJtgpfpLLEdQlLe9umbcnZlitU84kfYjXE67xlSXfhfQ==
+
+stackblur-canvas@^1.4.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-1.4.1.tgz#849aa6f94b272ff26f6471fa4130ed1f7e47955b"
+  integrity sha1-hJqm+UsnL/JvZHH6QTDtH35HlVs=
+
 stackframe@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b"
@@ -10138,7 +10275,7 @@
     unquote "~1.1.1"
     util.promisify "~1.0.0"
 
-symbol-tree@^3.2.2:
+"symbol-tree@>= 3.1.0 < 4.0.0", symbol-tree@^3.2.2:
   version "3.2.2"
   resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
   integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=
@@ -10357,7 +10494,7 @@
   resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029"
   integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk=
 
-tough-cookie@>=2.3.3, tough-cookie@^2.3.4:
+tough-cookie@>=2.3.3, tough-cookie@^2.2.0, tough-cookie@^2.3.4:
   version "2.5.0"
   resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
   integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
@@ -10380,6 +10517,11 @@
   dependencies:
     punycode "^2.1.0"
 
+tr46@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+  integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
+
 tree-kill@^1.1.0:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a"
@@ -10883,6 +11025,11 @@
   dependencies:
     defaults "^1.0.3"
 
+webidl-conversions@^3.0.0, webidl-conversions@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+  integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
+
 webidl-conversions@^4.0.2:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
@@ -11052,6 +11199,14 @@
   resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
   integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
 
+whatwg-url@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-2.0.1.tgz#5396b2043f020ee6f704d9c45ea8519e724de659"
+  integrity sha1-U5ayBD8CDub3BNnEXqhRnnJN5lk=
+  dependencies:
+    tr46 "~0.0.3"
+    webidl-conversions "^3.0.0"
+
 whatwg-url@^6.4.1:
   version "6.5.0"
   resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
@@ -11172,11 +11327,21 @@
   dependencies:
     async-limiter "~1.0.0"
 
+"xml-name-validator@>= 2.0.1 < 3.0.0":
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
+  integrity sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=
+
 xml-name-validator@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
   integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
 
+xmldom@^0.1.22:
+  version "0.1.27"
+  resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9"
+  integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk=
+
 xregexp@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"