<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><div class=""></div><div class=""><br class=""></div><div class="">Your custom widget has to be registered in the configuration file opencms-vfs.xml in the widgets node like that:</div><div class=""><pre style="background-color: rgb(255, 255, 255); font-family: Menlo-Regular; font-size: 8.3pt;" class=""><span style="background-color:#efefef;" class=""><</span><span style="color:#000080;background-color:#efefef;font-weight:bold;" class="">widget </span><span style="color:#0000ff;background-color:#efefef;font-weight:bold;" class="">class</span><span style="color:#008000;background-color:#efefef;font-weight:bold;" class="">="com.mediaworx.opencms.base.widgets.SingleSelectWidget" </span><span style="color:#0000ff;background-color:#efefef;font-weight:bold;" class="">alias</span><span style="color:#008000;background-color:#efefef;font-weight:bold;" class="">="MwxSingleSelectWidget"</span><span style="background-color:#efefef;" class="">/></span><br class=""></pre><div class=""><br class=""></div></div><div class="">Further below you’ll also find an old mail with attached samples for plain JavaScript custom widgets I sent to a fellow OpenCms developer. The widgets were developed in 2014 on OpenCms 8.5, but we got similar stuff still running on OpenCms 10.5.</div><div class=""><br class=""></div><div class=""><div class="">There’s also a documentation by Alkacon on the matter, but I don’t know it, so I can’t say if it’s helpful for you.</div><div class=""><a href="https://documentation.opencms.org/opencms-documentation/extending-opencms/extending-the-content-editor/writing-native-editor-widgets/index.html" class="">https://documentation.opencms.org/opencms-documentation/extending-opencms/extending-the-content-editor/writing-native-editor-widgets/index.html</a></div><div class=""><br class=""></div><div class="">I hope that helps, if not feel free to get back to me</div><div class=""><br class=""></div><div class="">Kai</div><div class=""><br class=""><div><br class=""></div><div><br class=""><blockquote type="cite" class=""><div class="">Anfang der weitergeleiteten Nachricht:</div><br class="Apple-interchange-newline"><div style="margin: 0px;" class=""><span style="font-family: -webkit-system-font, "Helvetica Neue", Helvetica, sans-serif;" class=""><b class="">Von: </b></span><span style="font-family: -webkit-system-font, "Helvetica Neue", Helvetica, sans-serif;" class="">Kai Widmann <<a href="mailto:Widmann@mediaworx.de" class="">Widmann@mediaworx.de</a>><br class=""></span></div><div style="margin: 0px;" class=""><span style="font-family: -webkit-system-font, "Helvetica Neue", Helvetica, sans-serif;" class=""><b class="">Betreff: </b></span><span style="font-family: -webkit-system-font, "Helvetica Neue", Helvetica, sans-serif;" class=""><b class="">AW: OpenCms 9 custom widgets</b><br class=""></span></div><div style="margin: 0px;" class=""><span style="font-family: -webkit-system-font, "Helvetica Neue", Helvetica, sans-serif;" class=""><b class="">Datum: </b></span><span style="font-family: -webkit-system-font, "Helvetica Neue", Helvetica, sans-serif;" class="">24. Oktober 2014 um 15:12:35 MESZ<br class=""></span></div><div style="margin: 0px;" class=""><span style="font-family: -webkit-system-font, "Helvetica Neue", Helvetica, sans-serif;" class=""><b class="">An: </b></span><span style="font-family: -webkit-system-font, "Helvetica Neue", Helvetica, sans-serif;" class="">Paul-Inge Flakstad <<a href="mailto:flakstad@npolar.no" class="">flakstad@npolar.no</a>><br class=""></span></div><br class=""><div class=""><div class="WordSection1" style="page: WordSection1;"><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">Hey Paul-Inge, <o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">so here are the original Alkacon sample (it was contained in OpenCms 8.5) and my two sample widgets.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">General remarks:<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">Even though I developed the widgets (except for the Alkacon sample), the source code is not our property (that’s why I didn’t send it through the mailing list). So it’s confidential, use it in any way you want, but don’t publish my original files anywhere.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">I would have loved to make the widgets a little more generic and to explain in depth what I’ve learnt, but I’ll be holding a session at the OpenCms Days (will you be there?) that I have to prepare right now. <o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">It’s important to notice that everything I’ve developed was targeted at Firefox only, so I never tested any of it in any other browser.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">Remarks for the Alkacon sample (org.opencms.dev.demo.customwidget_8.5.1.zip):<o:p class=""></o:p></span></div><pre class="" style="margin: 0cm 0cm 0.0001pt; font-size: 10pt; font-family: "Courier New";"><span lang="EN-US" class=""> </span></pre><pre class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10pt; font-family: "Courier New";"><span lang="EN-US" class="">With OpenCms 8.5 you get a module named org.opencms.dev.demo.customwidget that contains the source code for a Java Class (CustomWidget.java, it doesn’t do much) and a sample JavaScript widget (mywidget.js).<o:p class=""></o:p></span></pre><pre class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10pt; font-family: "Courier New";"><span lang="EN-US" class="">Using this sample you can create custom widgets in Plain JavaScript, no GWT required (that’s why I chose this method).<o:p class=""></o:p></span></pre><pre class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10pt; font-family: "Courier New";"><span lang="EN-US" class=""> </span></pre><pre class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10pt; font-family: "Courier New";"><span lang="EN-US" class="">The JavaScript contains two functions:<o:p class=""></o:p></span></pre><pre class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10pt; font-family: "Courier New";"><span lang="EN-US" class=""> createNativeWidget: creates the widget for the form based XML editor<o:p class=""></o:p></span></pre><pre class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10pt; font-family: "Courier New";"><span lang="EN-US" class=""> createNativeWrapedElement: creates the widget for the inline editor<o:p class=""></o:p></span></pre><pre class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10pt; font-family: "Courier New";"><span lang="EN-US" class=""> </span></pre><pre class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10pt; font-family: "Courier New";"><span lang="EN-US" class="">Besides others there are two notable functions for each of the widgets:<o:p class=""></o:p></span></pre><pre class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10pt; font-family: "Courier New";"><span lang="EN-US" class=""> getElement: returns a DOM element that is or contains your widget, this might be a simple editable DIV or a complex multi-select widget.<o:p class=""></o:p></span></pre><pre class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10pt; font-family: "Courier New";"><span lang="EN-US" class=""> setValue: must be called whenever the value of your widget changes, (e.g. if the value of a select box changes)<o:p class=""></o:p></span></pre><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">----<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">Remarks for my sample 1 (CustomWidgetExample.zip), roughly translated from my mail to Tobias Karrer:<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class="">This sample contains a simple text field that supports the browser’s native spell check functionality.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10.5pt; font-family: Consolas;">Structure: <o:p class=""></o:p></div><div class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class="">- in the folder "java" you’ll find - beneath the package structure - two classes, one abstract (B4FWidget, that’s the base class for all our custom widgets), and another one implementing a B4FWidget (SpellcheckedTextInputWidget)<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class="">- in the folder "vfs" you’ll find the module resources<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class="">With the OpenCms module containing the widgets we created an Export Point that maps the VFS folder"/system/modules/com.mediaworx.b4f.opencms.contenttypes/resources/" to "b4f/" in the webapp. That way the widget can be accessed under "/b4f/spellcheckedtextinput/SpellcheckedTextInputWidget.js"<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class="">The most important things in the Java class are the definition of the JavaScript and CSS files that are to be provided for the widget and the method getInitCall() that returns the name of the JavaScript method that is to be called to initialize the widget. In addition the widget configuration from the XSD file is handled. Much of the code in B4FWidget has its origins in the sample widget provided by Alkacon.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10.5pt; font-family: Consolas;"><o:p class=""> </o:p></div><div class="" style="margin: 0cm 0cm 0.0001pt 35.4pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class="">The methods in the JavaScript widget also have their origins in the Alkacon sample widget, but I’ve stripped "createNativeWidget" and "createNativeWrapedElement" of their logic and created a unified method since both did about the same and I only needed a Boolean flag telling me if I’m in the inline editor or in the xml editor. Besides that the method “getElement” is the most important since it creates the DOM element for the widget that’s integrated by OpenCms.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">----<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">Remarks for my sample 2 (CustomWidgetExample2.zip) , roughly translated from my mail to Tobias Karrer:<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class="">This sample conatains a double selectbox. Selecting a value in the first selectbox fills the second selectbox with values depending on the what was selected.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class="">Same structure as in the previous zip.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class="">List options are loaded from the server using an AJAX request. The request is handled by the JSP vfs/system/modules/com.mediaworx.b4f.opencms.contenttypes/connectors/ManagedListConnector.jsp that. The JSP uses the tag "b4fContentAccess:listSelectorOptions" that’s defined in the tld file vfs/system/modules/com.mediaworx.b4f.opencms.contenttypes/taglib/b4fContentAccess.tld that’s copied to the webapp using an export point.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 10.5pt; font-family: Consolas;"><span lang="EN-US" class="">The list options are determined in the tag class com.mediaworx.b4f.opencms.contenttypes.tags.ListSelectorOptionsTagHandler.java.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span class="" style="color: rgb(31, 73, 125);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">----<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">I hope that helps.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">Cheers<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);">Kai<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="color: rgb(31, 73, 125);"> </span></div><div class=""><div class="" style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(181, 196, 223); padding: 3pt 0cm 0cm;"><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><b class=""><span class="" style="font-size: 10pt; font-family: Tahoma, sans-serif;">Von:</span></b><span class="" style="font-size: 10pt; font-family: Tahoma, sans-serif;"> Paul-Inge Flakstad [<a href="mailto:flakstad@npolar.no" class="">mailto:flakstad@npolar.no</a>] <br class=""><b class="">Gesendet:</b> Freitag, 24. Oktober 2014 09:55<br class=""><b class="">An:</b> Kai Widmann<br class=""><b class="">Betreff:</b> OpenCms 9 custom widgets<o:p class=""></o:p></span></div></div></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><o:p class=""> </o:p></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="">Hi Kai,<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="">Found your reply on “OpenCms 9 custom widgets” in the mailing list archive.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="">I’m currently struggling with a custom widget for an OpenCms 9 site – as you know, there’s no documentation on how to go about this. I’ve tried looking at the core widgets source etc., even made a few implementation attempts, but no luck so far.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="">Would you be willing to share with me any of your custom widgets, to help me along? (No need to strip down, unless you have to.)<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="">In fact, *any* help would be greatly appreciated.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="">PS: <o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="">If it’s of any interest, I’m trying to create a “Search and select” widget.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="">To illustrate, think of a “search and select books” widget. It should have 2 input fields; A “Book title” input field which provides suggestions as the editor enters letters (by matching against a list of available book titles), and a “Book ID” field, which is not editable directly, but rather automatically updated when the editor selects a book from suggestions. The “Book ID” is what I want to store in OpenCms.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="">My specific use-case isn’t actually about books, but still fully equivalent to the example above.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="">I’m aiming to create the widget as generic as possible. If I succeed, it should prove very handy. I’m also aiming to make it freely available as open source.<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class=""> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="font-size: 10pt; color: rgb(54, 95, 145);">Best regards,<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="font-size: 8pt; color: rgb(54, 95, 145);"> </span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="EN-US" class="" style="font-size: 10pt; color: rgb(54, 95, 145);">Paul-Inge Flakstad<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><i class=""><span lang="EN-US" class="" style="font-size: 8pt; color: rgb(54, 95, 145);">Web developer, Norwegian Polar Institute<o:p class=""></o:p></span></i></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="NO-BOK" class="" style="font-size: 8pt; color: rgb(54, 95, 145);"><a href="mailto:flakstad@npolar.no" class="" style="color: purple;"><span lang="EN-US" class="" style="color: rgb(54, 95, 145);">flakstad@</span><span class="" style="color: rgb(54, 95, 145);">npolar.no</span></a> | +47 777 50 639<o:p class=""></o:p></span></div><div class="" style="margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;"><span lang="NO-BOK" class=""> </span></div></div></div></blockquote></div></div></div></body></html>