<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:"Segoe UI";
        panose-1:2 11 5 2 4 2 4 2 2 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
h1
        {mso-style-priority:9;
        mso-style-link:"Otsikko 1 Char";
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:24.0pt;
        font-family:"Calibri",sans-serif;
        font-weight:bold;}
h2
        {mso-style-priority:9;
        mso-style-link:"Otsikko 2 Char";
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:18.0pt;
        font-family:"Calibri",sans-serif;
        font-weight:bold;}
h3
        {mso-style-priority:9;
        mso-style-link:"Otsikko 3 Char";
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:13.5pt;
        font-family:"Calibri",sans-serif;
        font-weight:bold;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
code
        {mso-style-priority:99;
        font-family:"Courier New";}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML-esimuotoiltu Char";
        margin:0cm;
        font-size:10.0pt;
        font-family:"Courier New";}
span.Shkpostityyli17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.Otsikko1Char
        {mso-style-name:"Otsikko 1 Char";
        mso-style-priority:9;
        mso-style-link:"Otsikko 1";
        font-family:"Calibri",sans-serif;
        mso-fareast-language:FI;
        font-weight:bold;}
span.Otsikko2Char
        {mso-style-name:"Otsikko 2 Char";
        mso-style-priority:9;
        mso-style-link:"Otsikko 2";
        font-family:"Calibri",sans-serif;
        mso-fareast-language:FI;
        font-weight:bold;}
span.Otsikko3Char
        {mso-style-name:"Otsikko 3 Char";
        mso-style-priority:9;
        mso-style-link:"Otsikko 3";
        font-family:"Calibri",sans-serif;
        mso-fareast-language:FI;
        font-weight:bold;}
span.HTML-esimuotoiltuChar
        {mso-style-name:"HTML-esimuotoiltu Char";
        mso-style-priority:99;
        mso-style-link:HTML-esimuotoiltu;
        font-family:"Courier New";
        mso-fareast-language:FI;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 2.0cm 70.85pt 2.0cm;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:442578929;
        mso-list-template-ids:-793734502;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1
        {mso-list-id:761485532;
        mso-list-template-ids:-2123970412;}
@list l1:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l1:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l1:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2
        {mso-list-id:1038555854;
        mso-list-template-ids:-198926716;}
@list l2:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l2:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l2:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l2:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l3
        {mso-list-id:1228109003;
        mso-list-template-ids:-1197682044;}
@list l3:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l3:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l3:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l3:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l3:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l3:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l3:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l3:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l3:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l4
        {mso-list-id:1395080316;
        mso-list-template-ids:1690101144;}
@list l4:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l4:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l4:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l4:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l4:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l4:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l4:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l4:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l4:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l5
        {mso-list-id:1807308688;
        mso-list-template-ids:-797669464;}
@list l5:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l5:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l5:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l5:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l5:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l5:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l5:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l5:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l5:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l6
        {mso-list-id:1930695287;
        mso-list-template-ids:750014984;}
@list l6:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l6:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l6:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l6:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l6:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l6:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l6:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l6:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l6:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="FI" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Good news everyone,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">We released Oskari 2.5.0 today and it is now available on GitHub (<a href="https://github.com/oskariorg">https://github.com/oskariorg</a>) and Oskari.org Maven
 repository. The sample application package has been updated on the download link in Oskari.org (<a href="https://oskari.org/download">https://oskari.org/download</a>) and
</span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="http://download.osgeo.org/oskari/"><span lang="EN-US">http://download.osgeo.org/oskari/</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">.
 As always you can take a peek at the latest release at <a href="https://demo.oskari.org/">
https://demo.oskari.org/</a>.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">We have a bunch of changes and fixes in the release including a lot of improvements related to performance and vector feature styling. While not mentioned on
 the release notes you can also find a completely rewritten version of the content-editor bundle in oskari-frontend-contrib repository. The bundle implementation was not compatible with the changes made in 2.4 but is now back and stronger than before.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<h1 style="margin-bottom:12.0pt;background:white"><span lang="EN-US" style="font-size:22.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">Release Notes<o:p></o:p></span></h1>
<h2 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;border-bottom:var(--color-border-muted);font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:16.5pt;font-family:"Segoe UI",sans-serif;color:#24292F">oskari-frontend<o:p></o:p></span></h2>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">For a full list of changes see: </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#24292F"><a href="https://github.com/oskariorg/oskari-frontend/milestone/33?closed=1"><span lang="EN-US">https://github.com/oskariorg/oskari-frontend/milestone/33?closed=1</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#24292F"><o:p></o:p></span></p>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:14.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">Improvements to visual vector style editor<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#24292F;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l6 level1 lfo1;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Added "empty fill" option for area/polygon type geometries.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l6 level1 lfo1;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Added "butt" option for line-ending options.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l6 level1 lfo1;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Added pre-defined color selection for easier color picking.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l6 level1 lfo1;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Area and stroke/line type geometries now have their own controls for line joins. Previously the settings was shared when editing with the React-based visual style editor.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l6 level1 lfo1;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">The new editor is now available for end-users on myplaces layer styling (in addition to layer admin functionality).<o:p></o:p></span></li></ul>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:14.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">Style handling for vector layers<o:p></o:p></span></h3>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">Various changes to style handling implementation like:<o:p></o:p></span></p>
<ul type="disc">
<li class="MsoNormal" style="color:#24292F;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l3 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Hover styling implementation changed to improve performance and clarify code.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;mso-margin-bottom-alt:auto;mso-list:l3 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Vector features styles definitions are now available through </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">AbstractLayer.getStyles()/getCurrentStyle()</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> with </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">style.getFeatureStyle()</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> instead
 of separate </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">AbstractLayer.getCurrentStyleDef()</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;mso-margin-bottom-alt:auto;mso-list:l3 level1 lfo2;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Moved end-user UI implementation for vector layer styling to new bundle </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">userstyle</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> instead
 of being built-in to "wfs-support for map" (</span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">mapwfs2</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> bundle). This enables smaller filesize
 for embedded maps since the UI is not available to end-users on embedded maps. To keep current functionality you should link </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">userstyle</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> bundle
 import to your geoportal apps: </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><a href="https://github.com/oskariorg/sample-application/pull/17/files"><span lang="EN-US">https://github.com/oskariorg/sample-application/pull/17/files</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"><o:p></o:p></span></li></ul>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:14.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">Selected vector features<o:p></o:p></span></h3>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">New service was added for tracking feature selection. Usage:<o:p></o:p></span></p>
<pre style="background:white;box-sizing: border-box;overflow-wrap: normal;background-color:var(--color-canvas-subtle);border-radius: 6px;overflow:auto"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">const service = Oskari.getSandbox().getService('Oskari.mapframework.service.VectorFeatureSelectionService');<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">// add a feature to current selection<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">service.addSelectedFeature(layerId, featureId);<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">// set feature selection for layer replacing current selection<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">service.setSelectedFeatureIds(layerId, [featureId1, ...featureIdN]);<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">// remove a feature from current selection<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">service.removeSelection(layerId, featureId);<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">// remove all selections from layer<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">service.removeSelection(layerId);<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">// remove all selections from all layers<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">service.removeSelection();<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">// toggle feature selection in current selection (if already selected -> unselect, otherwise mark as selected)<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">service.toggleFeatureSelection(layerId, featureId);<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm"><o:p> </o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">// get a list of ids for features that are selected<o:p></o:p></span></code></pre>
<pre style="background:white"><code><span lang="EN-US" style="font-family:Consolas;color:#24292F;border:none windowtext 1.0pt;padding:0cm">const selectedFeatureIds = service.getSelectedFeatureIdsByLayer (layerId);<o:p></o:p></span></code></pre>
<p style="margin:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">Changes to selection trigger </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas;color:#24292F">WFSFeaturesSelectedEvent</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#24292F"> like
 it did before and bundles can react to it like before.<o:p></o:p></span></p>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span style="font-size:14.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">Performance improvements<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#24292F;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo3;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Layer coverage data is no longer part of the layer listing. It is fetched separately when a layer is added to the map. This reduces the file size of layer listing by ~75% and improves
 performance.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo3;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">WMTS-layers tile matrix metadata is now provided by the server in JSON-based format and the full capabilities XML is no longer required to be loaded to the frontend. This reduces
 the amount of data clients need to load and optimizes startup-time and performance.<o:p></o:p></span></li></ul>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span style="font-size:14.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">Layer admin improvements<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#24292F;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo4;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">When adding layers from service the layers are now sorted alphabetically in addition to being grouped by "type". Where type is "existing" (already registered as layer), "problematic"
 (might have problems with layer/projection not supported), "available" (these are the ones you probably are most interested in adding).<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l2 level1 lfo4;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Fixed an issue with selecting default style when style name was very long (input was pushed out of view of the user).<o:p></o:p></span></li></ul>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span style="font-size:14.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">Other improvements<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#24292F;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo5;background:white;box-sizing: border-box">
<code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">MapModulePlugin.MapLayerUpdateRequest</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> can now be used to force vector layers to refetch the features
 from service (after for example editing a feature). </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Previously it was mostly usable for WMS-layers.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo5;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Map legends functionality for end-users on geoportal was rewritten with React (embedded maps version still uses jQuery)<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo5;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Fixed GetFeatureInfo displaying for XSLT formatted responses.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo5;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Fixed a visual issue on Firefox with layerlisting.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo5;background:white;box-sizing: border-box">
<code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">layerlist</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> bundle now closes its flyout on </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">UIChangeEvent</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> (when
 publisher etc functionality is opened by the user).<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo5;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Modal-component in oskariui now has styling to keep the window on browser viewport and scroll the modal-window content instead of having a page scrollbar for large contents.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo5;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">WMTS-layers can now be forced to use the wrapX boolean toggle for OpenLayers by having </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">{ wrapX: true
 }</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> in the layer options.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;mso-margin-bottom-alt:auto;mso-list:l5 level1 lfo5;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Changed when data is being sanitized for layers. Layer name is no longer sanitized in AbstractLayer.setName(). The UI components showing the name now sanitize the value instead. This
 might affect application specific extensions to functionalities that rely on the name being sanitized. For jQuery-based UIs this means that you need to call </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">Oskari.util.sanitize(layer.getName())</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> or
 use </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">jQuery.text(name)</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> instead of </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">jQuery.append(name)</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">.
 For React-based UI this means that you no longer need to use </span><code><span lang="EN-US" style="font-size:10.0pt;font-family:Consolas">dangerouslySetInnerHTML</span></code><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif"> to
 show the layer name properly but can use it as is.<o:p></o:p></span></li></ul>
<h3 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span style="font-size:14.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">Library updates<o:p></o:p></span></h3>
<ul type="disc">
<li class="MsoNormal" style="color:#24292F;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">@ant-design/icons 4.2.1 -> 4.6.3<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">@storybook/react 5.3.18 -> 6.3.7<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">antd 4.8.5 -> 4.16.13<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">cesium 1.77 -> 1.84<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">dompurify 2.0.10 -> 2.3.1<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">intl-messageformat 2.1.0 -> 9.9.1 (now loaded with npm instead of having a copy under libraries)<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Jest 26.0.1 -> 27.0.6<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">jQuery 3.5.1 -> 3.6.0<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">lodash 4.17.19 -> 4.17.21<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">node-sass 4.14.1 -> 6.0.1<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">moment 2.24.0 -> 2.29.1<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">OpenLayers 6.4.3 -> 6.6.1<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">ol-mapbox-style 6.3.1 -> 6.4.1<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">olcs 2.12 -> 2.13<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">React 16.13 -> 16.14<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l4 level1 lfo6;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Styled-components 5.0.1 -> 5.3.1<o:p></o:p></span></li></ul>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">Also tested a migration to Webpack 5, but there's some compatibility issues with Cesium and Webpack 5 that prevented the update for now. Also the testing library enzyme
 doesn't support React 17 yet so couldn't update React further for now.<o:p></o:p></span></p>
<h2 style="mso-margin-top-alt:18.0pt;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white">
<span lang="EN-US" style="font-size:16.5pt;font-family:"Segoe UI",sans-serif;color:#24292F">oskari-server<o:p></o:p></span></h2>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white;box-sizing: border-box;font-variant-ligatures: normal;font-variant-caps: normal;orphans: 2;text-align:start;widows: 2;-webkit-text-stroke-width: 0px;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;word-spacing:0px">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">For a full list of changes see: </span><span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#24292F"><a href="https://github.com/oskariorg/oskari-server/milestone/34?closed=1"><span lang="EN-US">https://github.com/oskariorg/oskari-server/milestone/34?closed=1</span></a></span><span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#24292F"><o:p></o:p></span></p>
<ul type="disc">
<li class="MsoNormal" style="color:#24292F;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo7;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Layerlisting response from server has been streamlined and some of the layer metadata has been removed like coverage geometry. The frontend handles this internally by fetching the
 data when needed instead of having it all in the listing response. This reduces the size of the listing response dramatically and improves performance.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo7;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">New action route DescribeLayer that is currently just used for returning coverage geometry for layer when available. There are plans for doing more with this endpoint. Possibly combining
 it responses from GetWFSLayerFields and GetLayerCapabilities to a single generic endpoint.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo7;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">WTMS capabilities are parsed and now stored in JSON format for layers. This enables giving frontend only the tile matrix information it needs for showing the layer for the current
 projection that is used on the browser. This reduces network traffic and can vastly improve performance for WMTS-services with large capabilities documents. Note! This requires all WMTS-layer capabilities to be refreshed from the server and this is done automatically
 with an upgrade script as a Flyway-migration.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo7;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">The common search functionality no longer overrides a zoom scale hint with generic config IF it has been set by a channel.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo7;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Default style options for printing vector features have been synced with defaults used on the frontend code.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo7;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">GetWFSLayerFields route now recognizes WFS attributes of types MultiLineStringPropertyType and MultiSurfacePropertyType as geometries instead of "unknown" type.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo7;background:white;box-sizing: border-box">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">New action route VectorFeatureWriter has been added as a replacement for combining existing routes: InsertFeature, SaveFeature and DeleteFeature. The previous ones have been deprecated
 for removal at a later version. The new endpoint takes GeoJSON as request payload for the feature to be inserted/updated. This route is used by the content-editor bundle under oskari-frontend-contrib repository.<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l0 level1 lfo7;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Libraries updated:<o:p></o:p></span>
<ul type="circle">
<li class="MsoNormal" style="color:#24292F;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l0 level2 lfo7;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">Jetty 9.4.39.v20210325 -> 9.4.42.v20210604<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l0 level2 lfo7;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">jsoup 1.13.1 -> 1.14.2<o:p></o:p></span></li><li class="MsoNormal" style="color:#24292F;margin-top:3.0pt;mso-margin-bottom-alt:auto;mso-list:l0 level2 lfo7;background:white;box-sizing: border-box">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif">pdfbox 2.0.16 -> 2.0.24<o:p></o:p></span></li></ul>
</li></ul>
<p class="MsoNormal" style="margin-top:3.0pt;mso-margin-bottom-alt:auto;background:white">
<span style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#24292F"><o:p> </o:p></span></p>
<p style="mso-margin-top-alt:0cm;margin-right:0cm;margin-bottom:12.0pt;margin-left:0cm;background:white">
<span lang="EN-US" style="font-size:12.0pt;font-family:"Segoe UI",sans-serif;color:#24292F">Happy updating,<br>
     Sami<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
</div>
</body>
</html>