diff --git a/.github/actions/setup-hugo/action.yaml b/.github/actions/setup-hugo/action.yaml
index a98e3ae..7c5b352 100644
--- a/.github/actions/setup-hugo/action.yaml
+++ b/.github/actions/setup-hugo/action.yaml
@@ -4,20 +4,16 @@ inputs:
hugo_version:
description: 'Version of Hugo to download'
required: false
- default: '0.123.4'
+ default: '0.135.0'
runs:
using: 'composite'
steps:
- name: Cache Hugo
- uses: actions/cache@v2
+ uses: actions/cache@v3
with:
- path: ~/hugo
+ path: ./hugo-bin
key: ${{ runner.os }}-hugo-${{ inputs.hugo_version }}
- name: Download and extract Hugo
run: |
- if [ ! -f ~/hugo ]; then
- wget https://github.com/gohugoio/hugo/releases/download/v${{ inputs.hugo_version }}/hugo_${{ inputs.hugo_version }}_Linux-64bit.tar.gz
- tar -zxvf hugo_${{ inputs.hugo_version }}_Linux-64bit.tar.gz
- mv hugo ~/hugo
- fi
+ make ./hugo-bin/.v${{ inputs.hugo_version }}
shell: bash
\ No newline at end of file
diff --git a/.github/actions/setup-pagefind/action.yaml b/.github/actions/setup-pagefind/action.yaml
new file mode 100644
index 0000000..cacc9fe
--- /dev/null
+++ b/.github/actions/setup-pagefind/action.yaml
@@ -0,0 +1,19 @@
+name: 'Download and extract PageFind'
+description: 'Downloads and extracts a specified version of PageFind'
+inputs:
+ pagefind_version:
+ description: 'Version of PageFind to download'
+ required: false
+ default: '1.1.1'
+runs:
+ using: 'composite'
+ steps:
+ - name: Cache PageFind
+ uses: actions/cache@v3
+ with:
+ path: ./pagefind-bin
+ key: ${{ runner.os }}-pagefind-${{ inputs.pagefind_version }}
+ - name: Download and extract PageFind
+ run: |
+ make ./pagefind-bin/.v${{ inputs.pagefind_version }}
+ shell: bash
\ No newline at end of file
diff --git a/.github/workflows/deploy_main.yaml b/.github/workflows/deploy_main.yaml
index 7d26d08..79df68d 100644
--- a/.github/workflows/deploy_main.yaml
+++ b/.github/workflows/deploy_main.yaml
@@ -11,13 +11,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
- uses: actions/checkout@v2
+ uses: actions/checkout@v4
- name: Setup Hugo
uses: ./.github/actions/setup-hugo
+ - name: Setup PageFind
+ uses: ./.github/actions/setup-pagefind
+
- name: Build the website
- run: ~/hugo
+ run: make html
- name: Deploy the website
uses: Dylan700/sftp-upload-action@latest
diff --git a/.github/workflows/deploy_version.yaml b/.github/workflows/deploy_version.yaml
index 529899f..e37c27c 100644
--- a/.github/workflows/deploy_version.yaml
+++ b/.github/workflows/deploy_version.yaml
@@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
- uses: actions/checkout@v2
+ uses: actions/checkout@v4
- name: Skip workflow for PRs from forks
shell: bash
@@ -29,8 +29,11 @@ jobs:
- name: Setup Hugo
uses: ./.github/actions/setup-hugo
+ - name: Setup PageFind
+ uses: ./.github/actions/setup-pagefind
+
- name: Build the website
- run: ~/hugo -b https://webtest.ivoa.info/v/${{ env.BRANCH_NAME }}
+ run: BASEURL="https://webtest.ivoa.info/v/${{ env.BRANCH_NAME }}" make html
- name: Upload the branch version of the website
uses: Dylan700/sftp-upload-action@latest
diff --git a/.gitignore b/.gitignore
index 7cac5e2..c9e1376 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,15 +1,23 @@
-# Generated files by hugo
+# Generated files by Hugo
/public/
/resources/_gen/
/assets/jsconfig.json
hugo_stats.json
-# tmp hugo file
+# tmp Hugo file
.hugo_build.lock
/preview/
-# ignore hugo in case you have installed it in the project directory
+# ignore Hugo in case you have installed it in the project directory
/hugo
/hugo*.tar.gz
/hugo-bin/
/hugo-bin_old/
+
+# Generated files by PageFind
+/static/pagefind/
+
+# ignore PageFind in case you have installed it in the project directory
+/pagefind-bin/
+/pagefind-bin_old/
+/pagefind*.tar.gz
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 9d743e9..1407ffb 100755
--- a/Makefile
+++ b/Makefile
@@ -3,31 +3,72 @@ BOLD=$(shell tput bold)
NORMAL=$(shell tput sgr0)
HUGO_URL=https://github.com/gohugoio/hugo/releases/download
-HUGO_VERSION=0.126.1
+HUGO_VERSION=0.135.0
HUGO_ARCHIVE=hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz
HUGO_DIR=hugo-bin
HUGO_DIR_OLD=hugo-bin_old
HUGO_VERSION_FILE=${HUGO_DIR}/.v${HUGO_VERSION}
+PAGEFIND_URL=https://github.com/CloudCannon/pagefind/releases/download
+PAGEFIND_VERSION=1.1.1
+PAGEFIND_ARCHIVE=pagefind-v${PAGEFIND_VERSION}-x86_64-unknown-linux-musl.tar.gz
+PAGEFIND_DIR=pagefind-bin
+PAGEFIND_DIR_OLD=pagefind-bin_old
+PAGEFIND_VERSION_FILE=${PAGEFIND_DIR}/.v${PAGEFIND_VERSION}
+PAGEFIND_INDEX_DIR=static/pagefind
+PAGEFIND_CMD=${PAGEFIND_DIR}/pagefind
+
+DIR_PUBLIC=public
+DIR_PUBLIC_TMP=.public_tmp
+
HUGO_CMD=${HUGO_DIR}/hugo
-.PHONY: help install list-draft uninstall uninstall-hugo preview
+.PHONY: help preview update-search-index clear-search-index list-draft html generate-public-pages clear-generated-public-pages index-public-pages clear-public-pages-index clear install uninstall uninstall-hugo uninstall-pagefind
#: Display this help (i.e. list all available targets). (DEFAULT TARGET)
help:
- @echo "Make targets for ivoa-web"
- @echo "make help - Display help (default target)."
- @echo "make preview - Start the preview service (on port 1313). All required tools are installed/upgraded automatically, when needed."
- @echo "make list-draft - List all draft pages (i.e. all pages only visible in preview mode)."
- @echo "make install - Install Hugo (or upgrade it if a different version is set in Makefile)."
- @echo "make uninstall - Uninstall Hugo."
+ @echo "\nMake targets for ivoa-web:\n"
+ @echo "* help Display help (default target).\n"
+ @echo "* preview Start the preview service (on port 1313). All required tools\n are installed/upgraded automatically, when needed.\n"
+ @echo "* html Generate the HTML version of the IVOA Website (with search\n index).\n"
+ @echo "* list-draft List all draft pages (i.e. all pages only visible in preview\n mode).\n"
+ @echo "* clear Delete local search index and generated public pages.\n"
+ @echo "* install Install Hugo and PageFind (or upgrade them if a different\n version is set in Makefile).\n"
+ @echo "* uninstall Uninstall Hugo and PageFind.\n"
#: Start the preview service (on port 1313). All required tools are installed/upgraded automatically, when needed.
-preview: install list-draft
- ./local_preview.bash "${HUGO_DIR}"
+preview: install update-search-index list-draft
+ ./local_preview.bash "${HUGO_DIR}" "${PAGEFIND_INDEX_DIR}"
+
+#: Update local search index (only for preview purpose). All pages (event draft) are generated with Hugo and then indexed by PageFind. The generated index is stored in the 'static/' directory in order to be available in preview mode.
+update-search-index: clear-search-index ${PAGEFIND_INDEX_DIR}
+${PAGEFIND_INDEX_DIR}:
+ @echo "- Generating search index..."
+
+ @if [ -d "${DIR_PUBLIC_TMP}" ]; then \
+ rm -rf "${DIR_PUBLIC_TMP}"; \
+ fi
+
+ @if [ -d "${PAGEFIND_INDEX_DIR}" ]; then \
+ rm -rf "${PAGEFIND_INDEX_DIR}"; \
+ fi
+
+ @mkdir "${DIR_PUBLIC_TMP}" \
+ && ${HUGO_CMD} -d "${DIR_PUBLIC_TMP}" -DEF \
+ && ${PAGEFIND_CMD} --site "${DIR_PUBLIC_TMP}" \
+ && cp -r "${DIR_PUBLIC_TMP}/pagefind" "${PAGEFIND_INDEX_DIR}" \
+ && rm -rf "${DIR_PUBLIC_TMP}"
+
+#: Delete the local search index.
+clear-search-index:
+ @if [ -d "${PAGEFIND_INDEX_DIR}" ]; then \
+ echo "- Clearing search index (${PAGEFIND_INDEX_DIR})..."; \
+ rm -rf "${PAGEFIND_INDEX_DIR}"; \
+ fi
+
#: List all draft pages (i.e. all pages only visible in preview mode).
list-draft: install
@echo
@@ -39,9 +80,41 @@ list-draft: install
@echo "################################################################################"
@echo
+#: Generate the HTML version of the IVOA Website (with search index).
+html: install generate-public-pages index-public-pages
+
+generate-public-pages: clear-generated-public-pages
+ @echo "- Generating the HTML pages..."
+ @echo "######################################################################"
+ @if [ -z "${BASEURL}" ]; then \
+ ${HUGO_CMD} -d "${DIR_PUBLIC}" --ignoreCache; \
+ else \
+ echo "(with base URL: ${BASEURL})"; \
+ ${HUGO_CMD} -b "${BASEURL}" -d "${DIR_PUBLIC}" --ignoreCache; \
+ fi
+ @echo "######################################################################\n"
+
+clear-generated-public-pages:
+ @echo "- Deleting all generated public pages..."
+ @rm -rf "${DIR_PUBLIC}"
+
+
+index-public-pages: clear-public-pages-index
+ @echo "- Indexing the generated public pages..."
+ @echo "######################################################################"
+ @${PAGEFIND_CMD} --site "${DIR_PUBLIC}"
+ @echo "######################################################################\n"
+
-#: Install Hugo (or upgrade it if a different version is set in Makefile).
-install: ${HUGO_VERSION_FILE}
+clear-public-pages-index:
+ @rm -rf "${DIR_PUBLIC}/pagefind"
+
+
+#: Delete local search index and generated public pages.
+clear: clear-search-index clear-generated-public-pages
+
+#: Install Hugo and PageFind (or upgrade them if a different version is set in Makefile).
+install: ${HUGO_VERSION_FILE} ${PAGEFIND_VERSION_FILE}
${HUGO_VERSION_FILE}:
@@ -77,8 +150,44 @@ ${HUGO_VERSION_FILE}:
@touch ${HUGO_VERSION_FILE}
+${PAGEFIND_VERSION_FILE}:
+ @if [ -d "${PAGEFIND_DIR}" ]; then \
+ echo "- Upgrading PageFind to v${PAGEFIND_VERSION}..."; \
+ else \
+ echo "- Installing PageFind..."; \
+ fi
+
+ @echo " - 1/6 - Downloading PageFind (version: ${PAGEFIND_VERSION})..."
+ @wget -q "${PAGEFIND_URL}/v${PAGEFIND_VERSION}/${PAGEFIND_ARCHIVE}"
+
+ @echo " - 2/6 - Deprecating existing PageFind version..."
+ @if [ -d "${PAGEFIND_DIR}" ]; then \
+ rm -rf "${PAGEFIND_DIR_OLD}"; \
+ mv "${PAGEFIND_DIR}" "${PAGEFIND_DIR_OLD}"; \
+ fi
+
+ @echo " - 3/6 - Installing PageFind in this directory (inside ${PAGEFIND_DIR})..."
+ @mkdir ${PAGEFIND_DIR} && tar -xzf ${PAGEFIND_ARCHIVE} -C ${PAGEFIND_DIR}/ && rm -f ${PAGEFIND_ARCHIVE}
+
+ @echo " - 4/6 - Giving execute permission..."
+ @chmod 775 ${PAGEFIND_CMD}
+
+ @echo " - 5/6 - Testing installation (and give version)...."
+ @${PAGEFIND_CMD} --version
+
+ @echo " - 6/6 - Removing deprecated Pagefind version..."
+ @if [ -d "${PAGEFIND_DIR_OLD}" ]; then \
+ rm -rf "${PAGEFIND_DIR_OLD}"; \
+ fi
+
+ @touch ${PAGEFIND_VERSION_FILE}
+
+
+#: Uninstall everything (Hugo and PageFind).
+uninstall: uninstall-hugo uninstall-pagefind
+
#: Uninstall Hugo.
-uninstall:
+uninstall-hugo:
@if [ -d "${HUGO_DIR}" ]; then \
if read -p "Uninstall Hugo? [Y/n] " confirm ; then \
if [ $${confirm:-'Y'} = 'n' ]; then \
@@ -92,3 +201,20 @@ uninstall:
else \
echo "INFO: Hugo is not installed. Nothing to do."; \
fi
+
+
+#: Uninstall PageFind.
+uninstall-pagefind:
+ @if [ -d "${PAGEFIND_DIR}" ]; then \
+ if read -p "Uninstall PageFind? [Y/n] " confirm ; then \
+ if [ $${confirm:-'Y'} = 'n' ]; then \
+ echo "=> Aborted"; \
+ else \
+ rm -rf ${PAGEFIND_DIR} \
+ && echo "=> OK. PageFind successfully uninstalled." \
+ || echo "=> ERROR: Failed to delete the directory '${PAGEFIND_DIR}'!"; \
+ fi \
+ fi \
+ else \
+ echo "INFO: PageFind is not installed. Nothing to do."; \
+ fi
diff --git a/content/deployers/intro_to_vo_concepts.md b/content/deployers/intro_to_vo_concepts.md
index b2b1983..043628f 100644
--- a/content/deployers/intro_to_vo_concepts.md
+++ b/content/deployers/intro_to_vo_concepts.md
@@ -1,6 +1,5 @@
---
title: "Introduction to VO concepts"
-date:
draft: false
tags:
- about
diff --git a/content/newsletter/005.md b/content/newsletter/005.md
index 423c921..056492f 100644
--- a/content/newsletter/005.md
+++ b/content/newsletter/005.md
@@ -120,7 +120,7 @@ collections of theoretical models.
{{ side-image >}}
-{{< side-image image="websampconnector_arch_big.png" thumbnail="websampconnector_arch.png" >}}
+{{< side-image image="websampconnector_arch.png" thumbnail="websampconnector_arch.png" >}}
### WebSampConnector - Stay tuned in to the VO!
@@ -253,4 +253,4 @@ Research Initiative [Fathi et al., MNRAS, 406, 1595, (2010)].
[Subscribe to email notifications of the IVOA Newsletter](http://www.eso.org/lists/listinfo/ivoa-news)
-[newsletter archives](http://www.ivoa.net/newsletter/archives.html)
\ No newline at end of file
+[newsletter archives](http://www.ivoa.net/newsletter/archives.html)
diff --git a/content/newsletter/019.md b/content/newsletter/019.md
index 87925b4..7bcb632 100644
--- a/content/newsletter/019.md
+++ b/content/newsletter/019.md
@@ -251,7 +251,7 @@ easily discoverable and explorable.
{{ side-image >}}
-{{< side-image image="Gaia-DR2-flux-map.png.1" thumbnail="Gaia-DR2-flux-map.png" position="right" floating="true" >}}
+{{< side-image image="Gaia-DR2-flux-map.png" thumbnail="Gaia-DR2-flux-map.png" position="right" floating="true" >}}
### Gaia DR2 in CDS Services
@@ -495,4 +495,4 @@ All [refereed publications](https://ui.adsabs.harvard.edu/#search/fq=%7B!type%3D
dedicated to hands-on exercises, which will allow participants to become fully
familiar with the VO capabilities on their own laptops.
-{{< newsletter-social-links >}}
\ No newline at end of file
+{{< newsletter-social-links >}}
diff --git a/content/search.md b/content/search.md
new file mode 100644
index 0000000..29d7fe2
--- /dev/null
+++ b/content/search.md
@@ -0,0 +1,7 @@
+---
+title: "Search IVOA pages"
+---
+
+Write keywords matching the IVOA website pages you are searching for.
+
+{{< search-pages >}}
\ No newline at end of file
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index 6120791..2427a96 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -1,9 +1,10 @@
-
+
{{- partial "head.html" . -}}
-
+ {{- .Scratch.Set "canBeIndexed" (or (or (eq .BundleType "branch") (hasPrefix .Type "_")) (or (eq .Kind "term") (eq .Kind "taxonomy"))) }}
+
{{- partial "header.html" . -}}
-
+
{{- block "main" . }}{{- end }}
{{- partial "sitemap.html" . -}}
diff --git a/layouts/index.html b/layouts/index.html
index 25f5fab..7827e77 100644
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -1,6 +1,6 @@
{{ define "main" }}
-
+
{{ range $elem_index, $elem_val := where .Site.Pages "Params.tags" "intersect" (slice "banner") }}
{{ if (eq $elem_index 0)}}
diff --git a/layouts/partials/header.html b/layouts/partials/header.html
index 39a4a9c..9767f25 100644
--- a/layouts/partials/header.html
+++ b/layouts/partials/header.html
@@ -9,5 +9,6 @@
Deployers
Members
About
+ Search
diff --git a/layouts/shortcodes/search-pages.html b/layouts/shortcodes/search-pages.html
new file mode 100644
index 0000000..6bcc880
--- /dev/null
+++ b/layouts/shortcodes/search-pages.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
Sorry, no match for
+
+
+
+
+
+
\ No newline at end of file
diff --git a/local_preview.bash b/local_preview.bash
index e7f8da7..bbd0c68 100755
--- a/local_preview.bash
+++ b/local_preview.bash
@@ -1,6 +1,7 @@
#!/bin/bash
HUGO_DIR="$1"
+PAGEFIND_INDEX_DIR="$2"
PORT=1313
TMP_PREVIEW_DIR=preview
@@ -55,8 +56,8 @@ else
fg %1 >/dev/null
# When preview is stopped, delete temporary files
- # (i.e. generated preview pages):
- rm -rf "$TMP_PREVIEW_DIR"
+ # (i.e. generated search index and generated preview pages):
+ rm -rf "$PAGEFIND_INDEX_DIR" "$TMP_PREVIEW_DIR"
else
echo " => ERROR: failed to start preview service! (see error above)"
fi
diff --git a/static/css/ivoa.css b/static/css/ivoa.css
index 69cdc73..3431811 100644
--- a/static/css/ivoa.css
+++ b/static/css/ivoa.css
@@ -210,6 +210,16 @@ body > header > nav > a:hover { text-decoration: underline }
body > header > nav > a + a { margin-left: 1em }
+/* Top bar's search menu item with a search magnifier on the left: */
+header > nav > a.search {
+ background-image : url('../images/search.png');
+ background-repeat : no-repeat;
+ background-position: left 1.5em;
+ background-size : .8em;
+
+ padding-left: 1.1em;
+}
+
/* =============================================================================
FOOTER
diff --git a/static/css/search-pages.css b/static/css/search-pages.css
new file mode 100644
index 0000000..da97ce1
--- /dev/null
+++ b/static/css/search-pages.css
@@ -0,0 +1,128 @@
+.search-container > .search-form > input {
+ font-size: 1.5em;
+ padding : .2em;
+ width : 100%;
+}
+
+.search-container > .search-result { display: block }
+.search-container > .search-result.hidden { display: none }
+
+.search-container > .search-result > .message {
+ position: relative;
+
+ display: none;
+ width : 100%;
+ padding: 2rem 1rem;
+
+ text-align : center;
+ font-size : 1.5em;
+ font-weight: bold;
+ color : black;
+}
+
+.search-container > .search-result.empty > .message { display: block }
+.search-container > .search-result.empty > .results { display: none }
+
+.search-container > .search-result > .filters { display: hidden } /* Unused until we decide to use tags! */
+
+/* RESULTS */
+
+.search-container > .search-result > .results {
+ /* No bullet in front of each match and no space around: */
+ list-style-type: none;
+ margin : 0;
+ padding : 0;
+
+ /* Vertical scroll if too many results: */
+ overflow-y: auto;
+
+ /* Black text: */
+ color: black;
+}
+
+/* Match item: */
+.search-container > .search-result > .results li {
+ position: relative;
+
+ display : flex;
+ flex-direction: row;
+ flex-wrap : nowrap;
+ align-items : center; /* left image vertically centered with the page description */
+
+ /* Small space around a page description: */
+ padding: 1em;
+
+ /* Discrete line between each match item: */
+ border-bottom: 1px solid #d3d3d3;
+}
+.search-container > .search-result > .results li:nth-child(odd){ background-color: #f5f5f5 }
+
+/* Page main image: */
+.search-container > .search-result > .results li .page-img {
+ position: relative;
+
+ display : block;
+ min-width : 10%;
+ max-width : 10%;
+ margin-right: 1em;
+}
+.search-container > .search-result > .results li .page-img img {
+ float: left;
+ width: 100%;
+}
+
+/* Page title - dark, a bit bigger than text and not
+ * underline unless the mouse moves over it: */
+.search-container > .search-result > .results li .page-desc a {
+ display: block;
+ text-decoration: none;
+ color : #333;
+ font-weight : bold;
+ font-size : 1.2em;
+}
+.search-container > .search-result > .results li .page-desc a:hover { text-decoration: underline }
+
+/* Excerpt of the page where the terms where found.
+ * Monospace and ligher text color. */
+.search-container > .search-result > .results li .page-desc .excerpt {
+ font-family: monospace;
+ padding: .5em 1em;
+ color: #555;
+}
+
+/* Highlight found terms: */
+.search-container > .search-result > .results li .page-desc .excerpt mark {
+ background-color: rgb(255, 255, 134);
+ padding: .1em .2em;
+}
+
+/* Tags: */
+.search-container > .search-result > .results li .page-desc .tags {
+ display : flex;
+ flex-direction: row;
+ flex-wrap : wrap;
+ column-gap : .4em;
+ row-gap : .4em;
+
+ margin-top: .5em;
+}
+
+/* A tag item.
+ * Smaller text with a light grey background and round
+ * corners. */
+.search-container > .search-result > .results li .page-desc .tags span {
+ display : inline-block;
+ padding : .2em .5em;
+ border : 1px solid transparent;
+ border-radius: .3em;
+
+ font-size: .9em;
+
+ background-color: #e9e9e9;
+}
+
+/* White background and grey border for dates: */
+.search-container > .search-result > .results li .page-desc .tags span.date {
+ background-color: white;
+ border: 1px solid #e9e9e9;
+}
\ No newline at end of file
diff --git a/static/images/search.png b/static/images/search.png
new file mode 100644
index 0000000..1121770
Binary files /dev/null and b/static/images/search.png differ
diff --git a/static/js/search.js b/static/js/search.js
new file mode 100644
index 0000000..25fb507
--- /dev/null
+++ b/static/js/search.js
@@ -0,0 +1,421 @@
+
+/**
+ * @typedef {{
+* label : string,
+* count : number,
+* selected: boolean
+* }} SearchFilter
+*
+* @typedef {{
+* results: Array,
+* filters: { FILTER_CATEGORY: SearchFilter[] }
+* }} SearchResult
+*/
+
+class SearchController {
+ #view = new SearchView(this);
+ #model = new SearchModel();
+
+ constructor(){
+ // Prepare the search API (if not already done):
+ this.initSearchAPI();
+ // Focus on the search field:
+ this.#view.focusOnSearchForm();
+ }
+
+ initSearchAPI(){
+ this.#model.loadPageFind();
+ }
+
+ search(terms){
+ // No terms => no result area:
+ if (this.#isEmptySearch(terms))
+ {
+ this.#view.clearSearchResults();
+ }
+ // If terms have changed, run the real search:
+ else if (this.#isDifferentSearch(terms))
+ {
+ this.#setSearchTerms(terms);
+ this.#runSearch();
+ }
+ }
+
+ #isEmptySearch(terms){
+ return (terms.trim().length == 0);
+ }
+
+ #isDifferentSearch(terms){
+ return (this.#model.terms != terms);
+ }
+
+ #setSearchTerms(terms){
+ this.#model.terms = terms;
+ }
+
+ #runSearch(){
+ this.#view.clearSearchResults();
+
+ this.#model.search()
+
+ .then(searchResults => {
+ this.#view.showResults(searchResults.results);
+ this.#view.showFilters(searchResults.filters, this.#model.getSearchResultFilters());
+ })
+
+ .catch(err => console.error(`ERROR: failed to search pages for '${this.#model.terms}'!`, err));
+ }
+
+ toggleFilter(filterCategory, filterLabel){
+ if (this.#model.isFilterSet(filterCategory, filterLabel))
+ this.#model.unsetFilter(filterCategory, filterLabel);
+ else
+ this.#model.setFilter(filterCategory, filterLabel);
+
+ this.#runSearch();
+ }
+
+ clearSearch(){
+ this.#model.clear();
+ }
+}
+
+class SearchModel {
+ /** @type {Object} */
+ #pagefind = null;
+
+ /** @type {string} */
+ #terms = null;
+
+ /**@type {{ "FILTER_CATEGORY": SearchFilter[] }} */
+ #filters = {};
+
+ static #SCORE_MIN = 0; // TODO Maybe no more needed!
+ static #MAX_RESULTS = 50;
+
+ loadPageFind(){
+ if (this.#pagefind == null) {
+ import("../pagefind/pagefind.js")
+ .then(pf => this.#initPageFind(pf));
+ }
+ }
+
+ #initPageFind(pf){
+ this.#pagefind = pf;
+ this.#pagefind.init()
+ .then(() => this.#pagefind.filters());
+ }
+
+ get terms(){ return this.#terms; }
+ set terms(terms){ this.#terms = terms; }
+
+ isFilterSet(filterCategory, filterLabel){
+ return this.#filters[filterCategory] && this.#filters[filterCategory].includes(filterLabel);
+ }
+
+ setFilter(filterCategory, filterLabel){
+ if (filterCategory && filterLabel && !this.isFilterSet(filterCategory, filterLabel)){
+ if (!this.#filters[filterCategory])
+ this.#filters[filterCategory] = [filterLabel];
+ else
+ this.#filters[filterCategory].push(filterLabel);
+ }
+ }
+
+ unsetFilter(filterCategory, filterLabel){
+ if (filterCategory && filterLabel && this.isFilterSet(filterCategory, filterLabel)){
+ this.#filters[filterCategory].splice(this.#filters[filterCategory].indexOf(filterLabel), 1);
+ if (this.#filters[filterCategory].length == 0)
+ delete this.#filters[filterCategory];
+ }
+ }
+
+ getSearchResultFilters(){
+ const resultFilters = {};
+ Object.keys(this.#filters)
+ .forEach(filterCategory => {
+ resultFilters[filterCategory] = this.#filters[filterCategory]
+ .map(filterLabel => {return {
+ "label" : filterLabel,
+ "selected": true,
+ "count" : 0
+ }});
+ });
+ return resultFilters;
+ }
+
+ /**
+ *
+ * @returns {Promise}
+ */
+ async search(){
+ return this.#pagefind.search(this.#terms, { 'filters': this.#filters })
+ .then(rawResults => this.#rewriteResults(rawResults))
+ .then(searchResults => this.#filterResults(searchResults));
+ }
+
+ /**
+ *
+ * @param {Object} rawResults
+ * @returns {SearchResult}
+ */
+ #rewriteResults(rawResults){
+ if (rawResults)
+ return {
+ "results": rawResults.results,
+ "filters": this.#rewriteFilters(rawResults.filters)
+ };
+ else
+ return { "results": [], "filters": {} };
+ }
+
+ /**
+ *
+ * @param {Object} rawFilters
+ * @returns {{"FILTER_CATEGORY": SearchFilter[]}}
+ */
+ #rewriteFilters(rawFilters){
+ const finalFilters = {};
+ Object.entries(rawFilters)
+ .forEach(([filterCategory, tags]) => {
+ finalFilters[filterCategory] = this.#rewriteTagArray(filterCategory, tags);
+ });
+ return finalFilters;
+ }
+
+ #rewriteTagArray(filterCategory, tags){
+ const sectionTags = [];
+ Object.entries(tags)
+ .filter(([_, value]) => (value > 0))
+ .forEach(([key, value]) => sectionTags.push({
+ "label" : key,
+ "count" : value,
+ "selected": this.isFilterSet(filterCategory, key)
+ }));
+ return sectionTags;
+ }
+
+ async #filterResults(searchResults){
+ return Promise.all(
+ searchResults.results.filter(r => (r.score >= SearchModel.#SCORE_MIN))
+ .slice(0, SearchModel.#MAX_RESULTS)
+ .map(r => r.data())
+ )
+ .then(filteredResults => {
+ searchResults.results = filteredResults.filter(result => result.meta && result.meta.date)
+ .map(result => { result.meta.date = this.#resolveDate(result.meta.date); return result })
+ .sort((r1, r2) => r2.meta.date - r1.meta.date);
+ return searchResults;
+ });
+ }
+
+ #resolveDate(dateStr){
+ if (dateStr && typeof(dateStr) == 'string')
+ return new Date(dateStr.replaceAll(' ', ' ').replaceAll('+', '+'));
+ else
+ return dateStr;
+ }
+
+ clear(){
+ this.#terms = null;
+ this.#filters = {};
+ }
+}
+
+class SearchView
+{
+ #controller;
+
+ #debounceSearchTimer = null;
+
+ static #DEBOUNCE_SEARCH_TIMEOUT = 300;
+
+ #elSearchParent = document.querySelector('.search-container');
+ #elSearchForm = this.#elSearchParent.querySelector('.search-form');
+ #elSearchField = this.#elSearchForm.querySelector('input[type=text]');
+ #elSearchResult = this.#elSearchParent.querySelector('.search-result');
+ #divMessageTerms = this.#elSearchResult.querySelector('.message > .terms');
+ #divFilters = this.#elSearchResult.querySelector('.filters');
+ #ulSearchResults = this.#elSearchResult.querySelector('.results');
+
+ constructor(searchController)
+ {
+ this.#controller = searchController;
+ this.#initSearchEvents();
+ }
+
+ #debounceSearch(){
+ clearTimeout(this.#debounceSearchTimer);
+ this.#debounceSearchTimer = setTimeout(() => this.#controller.search(this.getSearchTerms()),
+ SearchView.#DEBOUNCE_SEARCH_TIMEOUT);
+ }
+
+ #initSearchEvents(){
+ /*
+ * 'Esc' to hide the search form,
+ * otherwise, start searching at each hit key.
+ */
+ this.#elSearchField.addEventListener('keyup', ()=>{
+ this.#debounceSearch();
+ });
+ }
+
+ getSearchTerms(){
+ return this.#elSearchField.value;
+ }
+
+ focusOnSearchForm(){
+ // set the focus on the search field, just after the appearing animation has started:
+ setTimeout(() => this.#elSearchField.focus(), 100);
+ }
+
+ clearSearchResults(){
+ this.#ulSearchResults.innerHTML = '';
+ this.#elSearchResult.classList.remove('empty')
+ this.#elSearchResult.classList.add('hidden');
+ }
+
+ #clearSearchFilters(){
+ this.#divFilters.innerHTML = '';
+ }
+
+ showResults(results){
+ this.#elSearchResult.classList.remove('hidden');
+ if (results.length == 0){
+ this.#elSearchResult.classList.add('empty');
+ this.#divMessageTerms.innerText = this.getSearchTerms();
+ }
+ else
+ this.#elSearchResult.classList.remove('empty');
+ results.forEach(data => this.#appendResult(data));
+ }
+
+ #appendResult(result){
+ const elMatch = document.createElement('li');
+
+ const elImgContainer = document.createElement('div');
+ elImgContainer.classList.add('page-img');
+ const elImage = document.createElement('img');
+ if (result.meta.image){
+ let imgSrc = result.url+result.meta.image;
+ if (result.meta.image.match('^((https?|ftp)://|/).*'))
+ imgSrc = result.meta.image;
+ elImage.setAttribute("src", imgSrc);
+ }
+ else
+ elImage.setAttribute("src", `/images/ivoa_logo.png`);
+ elImgContainer.appendChild(elImage);
+ elMatch.appendChild(elImgContainer);
+
+ const elPageDescription = document.createElement('description');
+ elPageDescription.classList.add('page-desc')
+ elMatch.appendChild(elPageDescription);
+
+ const elTitle = document.createElement('a');
+ elTitle.setAttribute('href', result.url);
+ elTitle.setAttribute('target', '_blank');
+ if (result.filters.section)
+ elTitle.innerText = `[${result.filters.section}] `;
+ else
+ elTitle.innerText = '';
+ elTitle.innerText += result.meta.title;
+ elPageDescription.append(elTitle);
+
+ const elExcerpt = document.createElement('div')
+ elExcerpt.classList.add('excerpt');
+ elExcerpt.innerHTML = result.excerpt;
+ elPageDescription.appendChild(elExcerpt);
+
+ const elTags = document.createElement('div');
+ elTags.classList.add('tags');
+ elPageDescription.appendChild(elTags);
+
+ if (result.filters.tag){
+ result.filters.tag.forEach(tag => {
+ elTags.appendChild(this.#createTagElement(tag));
+ });
+ }
+
+ if (result.meta.date){
+ const elDate = document.createElement('span');
+ elDate.classList.add('date');
+ elDate.innerHTML = result.meta.date.toLocaleString();
+ elTags.appendChild(elDate);
+ }
+
+ this.#ulSearchResults.append(elMatch);
+ }
+
+ #createTagElement(tagLabel, classes){
+ const elTag = document.createElement('span');
+ if (classes)
+ elTag.setAttribute('class', classes);
+ elTag.innerText = tagLabel;
+ return elTag;
+ }
+
+ showFilters(filters, selectedFilters={}){
+ this.#clearSearchFilters();
+ if (this.#hasNoSelectedFilter(filters))
+ filters = selectedFilters;
+ Object.entries(filters).forEach(([section, tags]) => {
+ this.#showFilterSection(section, tags)
+ });
+ }
+
+ #hasNoSelectedFilter(filters){
+ if (filters){
+ const sumTags = Object.entries(filters)
+ .reduce((sum, [section, tags]) => sum + (tags ? tags.length : 0), 0);
+ return sumTags <= 0;
+ }else
+ return true;
+ }
+
+ #showFilterSection(sectionLabel, tags){
+ const divSection = document.createElement('div');
+ divSection.classList.add('filter-category');
+ divSection.setAttribute('data-category', sectionLabel);
+ const eltSectionTitle = document.createElement('h3');
+ eltSectionTitle.innerText = sectionLabel;
+ divSection.appendChild(eltSectionTitle);
+ const ulFilterValues = document.createElement('ul');
+ tags.sort((t1, t2) => t1.label.localeCompare(t2.label))
+ .forEach(tag => this.#appendFilterItems(sectionLabel, tag.label, tag.count, tag.selected, ulFilterValues));
+ divSection.appendChild(ulFilterValues);
+ this.#divFilters.appendChild(divSection);
+ }
+
+ #appendFilterItems(filterCategory, tagLabel, tagCount, tagSelected, ulFilterValues){
+ const filterId = `filter-tag-${tagLabel}`;
+ const liFilterValue = document.createElement('li');
+ const chkFilter = document.createElement('input');
+ chkFilter.setAttribute('id', filterId);
+ chkFilter.setAttribute('name', filterId);
+ chkFilter.setAttribute('type', 'checkbox');
+ if (tagSelected)
+ chkFilter.setAttribute('checked', 'checked')
+ chkFilter.setAttribute('data-tag', tagLabel);
+ chkFilter.addEventListener('click', ()=>this.#controller.toggleFilter(filterCategory, tagLabel));
+ liFilterValue.appendChild(chkFilter);
+ const lblFilter = document.createElement('label');
+ lblFilter.setAttribute('for', filterId);
+ lblFilter.innerHTML = `${tagLabel} (${tagCount})`;
+ liFilterValue.appendChild(lblFilter);
+ ulFilterValues.appendChild(liFilterValue);
+ }
+
+}
+
+/**
+* Public function to toggle the search form if any is available on the current
+* page. If no search trigger/form is found, this function has no effect.
+*/
+function showSearchFormIfAny(){
+ const searchTrigger = document.querySelector('.sitenavbar .search-trigger');
+ if (searchTrigger)
+ searchTrigger.click();
+}
+
+/* Initialize the Search feature: */
+new SearchController();
diff --git a/static/newsletter/001/VirGOLogo.png b/static/newsletter/001/VirGOLogo.png
index 423bcf1..55d46b1 100644
Binary files a/static/newsletter/001/VirGOLogo.png and b/static/newsletter/001/VirGOLogo.png differ
diff --git a/static/newsletter/001/aladin_small.jpg b/static/newsletter/001/aladin_small.jpg
index a41298d..ee10e7f 100644
Binary files a/static/newsletter/001/aladin_small.jpg and b/static/newsletter/001/aladin_small.jpg differ
diff --git a/static/newsletter/001/astrogrid_sh_thumb.jpg b/static/newsletter/001/astrogrid_sh_thumb.jpg
index c25444f..46db7f7 100644
Binary files a/static/newsletter/001/astrogrid_sh_thumb.jpg and b/static/newsletter/001/astrogrid_sh_thumb.jpg differ
diff --git a/static/newsletter/001/m33_vocli.png b/static/newsletter/001/m33_vocli.png
index e7fa0e9..c71cace 100644
Binary files a/static/newsletter/001/m33_vocli.png and b/static/newsletter/001/m33_vocli.png differ
diff --git a/static/newsletter/002/VOPlatform-1.png b/static/newsletter/002/VOPlatform-1.png
index 409772e..5127374 100644
Binary files a/static/newsletter/002/VOPlatform-1.png and b/static/newsletter/002/VOPlatform-1.png differ
diff --git a/static/newsletter/002/VOPlatform_thumb.png b/static/newsletter/002/VOPlatform_thumb.png
index 53e986f..6de50c6 100644
Binary files a/static/newsletter/002/VOPlatform_thumb.png and b/static/newsletter/002/VOPlatform_thumb.png differ
diff --git a/static/newsletter/002/VOSpecV5.0.jpg b/static/newsletter/002/VOSpecV5.0.jpg
index b0cc365..58b4e62 100644
Binary files a/static/newsletter/002/VOSpecV5.0.jpg and b/static/newsletter/002/VOSpecV5.0.jpg differ
diff --git a/static/newsletter/002/VOSpecV5.0_thumb.jpg b/static/newsletter/002/VOSpecV5.0_thumb.jpg
index 91d583e..cd0c4f9 100644
Binary files a/static/newsletter/002/VOSpecV5.0_thumb.jpg and b/static/newsletter/002/VOSpecV5.0_thumb.jpg differ
diff --git a/static/newsletter/002/jvo.png b/static/newsletter/002/jvo.png
index 40211c3..96be898 100644
Binary files a/static/newsletter/002/jvo.png and b/static/newsletter/002/jvo.png differ
diff --git a/static/newsletter/002/jvo_thumb.png b/static/newsletter/002/jvo_thumb.png
index 4b39c06..ddfa0cb 100644
Binary files a/static/newsletter/002/jvo_thumb.png and b/static/newsletter/002/jvo_thumb.png differ
diff --git a/static/newsletter/002/simVisiVO.jpg b/static/newsletter/002/simVisiVO.jpg
index a935bcb..d1e37ac 100644
Binary files a/static/newsletter/002/simVisiVO.jpg and b/static/newsletter/002/simVisiVO.jpg differ
diff --git a/static/newsletter/002/simVisiVO_thumb.jpg b/static/newsletter/002/simVisiVO_thumb.jpg
index 384f015..62162f7 100644
Binary files a/static/newsletter/002/simVisiVO_thumb.jpg and b/static/newsletter/002/simVisiVO_thumb.jpg differ
diff --git a/static/newsletter/002/usvo_newwebsite.jpg b/static/newsletter/002/usvo_newwebsite.jpg
index 03e42b2..b0990f9 100644
Binary files a/static/newsletter/002/usvo_newwebsite.jpg and b/static/newsletter/002/usvo_newwebsite.jpg differ
diff --git a/static/newsletter/003/atpy_logo_thumb.png b/static/newsletter/003/atpy_logo_thumb.png
index d2e1f26..29c35fa 100644
Binary files a/static/newsletter/003/atpy_logo_thumb.png and b/static/newsletter/003/atpy_logo_thumb.png differ
diff --git a/static/newsletter/003/saada_news.png b/static/newsletter/003/saada_news.png
index cc297b4..4466f41 100644
Binary files a/static/newsletter/003/saada_news.png and b/static/newsletter/003/saada_news.png differ
diff --git a/static/newsletter/003/saada_news_thumb.png b/static/newsletter/003/saada_news_thumb.png
index 652e65a..292637e 100644
Binary files a/static/newsletter/003/saada_news_thumb.png and b/static/newsletter/003/saada_news_thumb.png differ
diff --git a/static/newsletter/003/saoimage_thumb.jpg b/static/newsletter/003/saoimage_thumb.jpg
index 58fbdcc..5553711 100644
Binary files a/static/newsletter/003/saoimage_thumb.jpg and b/static/newsletter/003/saoimage_thumb.jpg differ
diff --git a/static/newsletter/003/splat_ivoa_news.png b/static/newsletter/003/splat_ivoa_news.png
index b71abd3..c7ab286 100644
Binary files a/static/newsletter/003/splat_ivoa_news.png and b/static/newsletter/003/splat_ivoa_news.png differ
diff --git a/static/newsletter/003/splat_ivoa_news_thumb.png b/static/newsletter/003/splat_ivoa_news_thumb.png
index 90675b3..9baf8dc 100644
Binary files a/static/newsletter/003/splat_ivoa_news_thumb.png and b/static/newsletter/003/splat_ivoa_news_thumb.png differ
diff --git a/static/newsletter/003/virgo144.png b/static/newsletter/003/virgo144.png
index 1e27cc5..4fd3710 100644
Binary files a/static/newsletter/003/virgo144.png and b/static/newsletter/003/virgo144.png differ
diff --git a/static/newsletter/003/virgo144_thumb.png b/static/newsletter/003/virgo144_thumb.png
index 34e9e2b..c967562 100644
Binary files a/static/newsletter/003/virgo144_thumb.png and b/static/newsletter/003/virgo144_thumb.png differ
diff --git a/static/newsletter/004/skyalert.png b/static/newsletter/004/skyalert.png
index e78c1a0..fd0ebc9 100644
Binary files a/static/newsletter/004/skyalert.png and b/static/newsletter/004/skyalert.png differ
diff --git a/static/newsletter/005/CenA_Xray_Opt_Radio.jpg b/static/newsletter/005/CenA_Xray_Opt_Radio.jpg
index 5ca3d21..ea9e383 100644
Binary files a/static/newsletter/005/CenA_Xray_Opt_Radio.jpg and b/static/newsletter/005/CenA_Xray_Opt_Radio.jpg differ
diff --git a/static/newsletter/005/aladin.png b/static/newsletter/005/aladin.png
index 1d1f183..1f272dc 100644
Binary files a/static/newsletter/005/aladin.png and b/static/newsletter/005/aladin.png differ
diff --git a/static/newsletter/005/aladin_small.png b/static/newsletter/005/aladin_small.png
index e3f9423..3ca447b 100644
Binary files a/static/newsletter/005/aladin_small.png and b/static/newsletter/005/aladin_small.png differ
diff --git a/static/newsletter/005/cdsportal-logo.png b/static/newsletter/005/cdsportal-logo.png
index 5c6026a..dc230a1 100644
Binary files a/static/newsletter/005/cdsportal-logo.png and b/static/newsletter/005/cdsportal-logo.png differ
diff --git a/static/newsletter/005/sampy-icon-big.png b/static/newsletter/005/sampy-icon-big.png
index 89953ae..6bed49c 100644
Binary files a/static/newsletter/005/sampy-icon-big.png and b/static/newsletter/005/sampy-icon-big.png differ
diff --git a/static/newsletter/005/websampconnector_arch.png b/static/newsletter/005/websampconnector_arch.png
index 90c05f5..10e6cc6 100644
Binary files a/static/newsletter/005/websampconnector_arch.png and b/static/newsletter/005/websampconnector_arch.png differ
diff --git a/static/newsletter/005/websampconnector_arch_big.png b/static/newsletter/005/websampconnector_arch_big.png
deleted file mode 100644
index 90c05f5..0000000
Binary files a/static/newsletter/005/websampconnector_arch_big.png and /dev/null differ
diff --git a/static/newsletter/006/NOVA_200.png b/static/newsletter/006/NOVA_200.png
index 6117444..344604c 100644
Binary files a/static/newsletter/006/NOVA_200.png and b/static/newsletter/006/NOVA_200.png differ
diff --git a/static/newsletter/006/TapWindow.png b/static/newsletter/006/TapWindow.png
index 39edaa5..1e47459 100644
Binary files a/static/newsletter/006/TapWindow.png and b/static/newsletter/006/TapWindow.png differ
diff --git a/static/newsletter/006/VODance.png b/static/newsletter/006/VODance.png
index 167cab4..6448d02 100644
Binary files a/static/newsletter/006/VODance.png and b/static/newsletter/006/VODance.png differ
diff --git a/static/newsletter/006/VODance_thumbnail.png b/static/newsletter/006/VODance_thumbnail.png
index 23b226c..db3899c 100644
Binary files a/static/newsletter/006/VODance_thumbnail.png and b/static/newsletter/006/VODance_thumbnail.png differ
diff --git a/static/newsletter/006/small_menu.png b/static/newsletter/006/small_menu.png
index 451c813..c7e5ce0 100644
Binary files a/static/newsletter/006/small_menu.png and b/static/newsletter/006/small_menu.png differ
diff --git a/static/newsletter/006/soft.png b/static/newsletter/006/soft.png
index 3b52703..1e55f65 100644
Binary files a/static/newsletter/006/soft.png and b/static/newsletter/006/soft.png differ
diff --git a/static/newsletter/006/soft_thumb.png b/static/newsletter/006/soft_thumb.png
index 6ce1cb4..6d2544b 100644
Binary files a/static/newsletter/006/soft_thumb.png and b/static/newsletter/006/soft_thumb.png differ
diff --git a/static/newsletter/007/CosmoCal-screenshot.jpg b/static/newsletter/007/CosmoCal-screenshot.jpg
index a5acdfe..f1e9bd7 100644
Binary files a/static/newsletter/007/CosmoCal-screenshot.jpg and b/static/newsletter/007/CosmoCal-screenshot.jpg differ
diff --git a/static/newsletter/007/CosmoCal-screenshot_thumb.jpg b/static/newsletter/007/CosmoCal-screenshot_thumb.jpg
index 8832af2..eedc635 100644
Binary files a/static/newsletter/007/CosmoCal-screenshot_thumb.jpg and b/static/newsletter/007/CosmoCal-screenshot_thumb.jpg differ
diff --git a/static/newsletter/007/adsarxivivoa.png b/static/newsletter/007/adsarxivivoa.png
index 7816bd2..0e74632 100644
Binary files a/static/newsletter/007/adsarxivivoa.png and b/static/newsletter/007/adsarxivivoa.png differ
diff --git a/static/newsletter/007/fitsmanager.png b/static/newsletter/007/fitsmanager.png
index 3576ba7..981e3bb 100644
Binary files a/static/newsletter/007/fitsmanager.png and b/static/newsletter/007/fitsmanager.png differ
diff --git a/static/newsletter/007/fitsmanager_thumb.png b/static/newsletter/007/fitsmanager_thumb.png
index 7e82dfd..3a25318 100644
Binary files a/static/newsletter/007/fitsmanager_thumb.png and b/static/newsletter/007/fitsmanager_thumb.png differ
diff --git a/static/newsletter/007/h-596-iris_final.png b/static/newsletter/007/h-596-iris_final.png
index 5a0811b..a769a1c 100644
Binary files a/static/newsletter/007/h-596-iris_final.png and b/static/newsletter/007/h-596-iris_final.png differ
diff --git a/static/newsletter/007/projection_overlay1.jpg b/static/newsletter/007/projection_overlay1.jpg
index 6a25135..04e9254 100644
Binary files a/static/newsletter/007/projection_overlay1.jpg and b/static/newsletter/007/projection_overlay1.jpg differ
diff --git a/static/newsletter/007/projection_overlay1_thumb.jpg b/static/newsletter/007/projection_overlay1_thumb.jpg
index fc25b99..eecfe9c 100644
Binary files a/static/newsletter/007/projection_overlay1_thumb.jpg and b/static/newsletter/007/projection_overlay1_thumb.jpg differ
diff --git a/static/newsletter/007/voiportal.png b/static/newsletter/007/voiportal.png
index 397d8c3..b212eeb 100644
Binary files a/static/newsletter/007/voiportal.png and b/static/newsletter/007/voiportal.png differ
diff --git a/static/newsletter/007/voiportal_thumb.png b/static/newsletter/007/voiportal_thumb.png
index 645f94d..c6fda32 100644
Binary files a/static/newsletter/007/voiportal_thumb.png and b/static/newsletter/007/voiportal_thumb.png differ
diff --git a/static/newsletter/008/CDSXMatchScreenshot.png b/static/newsletter/008/CDSXMatchScreenshot.png
index c0f45c0..7eb1350 100644
Binary files a/static/newsletter/008/CDSXMatchScreenshot.png and b/static/newsletter/008/CDSXMatchScreenshot.png differ
diff --git a/static/newsletter/008/CDSXMatchScreenshot_thumb.png b/static/newsletter/008/CDSXMatchScreenshot_thumb.png
index c7d0f18..4deccee 100644
Binary files a/static/newsletter/008/CDSXMatchScreenshot_thumb.png and b/static/newsletter/008/CDSXMatchScreenshot_thumb.png differ
diff --git a/static/newsletter/008/LogoSVO.png b/static/newsletter/008/LogoSVO.png
index 30463f1..40007fb 100644
Binary files a/static/newsletter/008/LogoSVO.png and b/static/newsletter/008/LogoSVO.png differ
diff --git a/static/newsletter/008/SCC_small.png b/static/newsletter/008/SCC_small.png
index a273312..3803516 100644
Binary files a/static/newsletter/008/SCC_small.png and b/static/newsletter/008/SCC_small.png differ
diff --git a/static/newsletter/008/vao_portal_icon.png b/static/newsletter/008/vao_portal_icon.png
index 554f2f0..04b6d49 100644
Binary files a/static/newsletter/008/vao_portal_icon.png and b/static/newsletter/008/vao_portal_icon.png differ
diff --git a/static/newsletter/008/vao_timeSeries_icon.png b/static/newsletter/008/vao_timeSeries_icon.png
index 79fcb1d..ac0829f 100644
Binary files a/static/newsletter/008/vao_timeSeries_icon.png and b/static/newsletter/008/vao_timeSeries_icon.png differ
diff --git a/static/newsletter/008/voplot_thumb.jpg b/static/newsletter/008/voplot_thumb.jpg
index b87f03a..e4be07c 100644
Binary files a/static/newsletter/008/voplot_thumb.jpg and b/static/newsletter/008/voplot_thumb.jpg differ
diff --git a/static/newsletter/009/AstroTaverna.png b/static/newsletter/009/AstroTaverna.png
index ad9cecb..65415ee 100644
Binary files a/static/newsletter/009/AstroTaverna.png and b/static/newsletter/009/AstroTaverna.png differ
diff --git a/static/newsletter/009/TapHandle.png b/static/newsletter/009/TapHandle.png
index f98a2af..81c6498 100644
Binary files a/static/newsletter/009/TapHandle.png and b/static/newsletter/009/TapHandle.png differ
diff --git a/static/newsletter/009/VOSpecv6.5.png b/static/newsletter/009/VOSpecv6.5.png
index 394c382..1675390 100644
Binary files a/static/newsletter/009/VOSpecv6.5.png and b/static/newsletter/009/VOSpecv6.5.png differ
diff --git a/static/newsletter/009/VOSpecv6.5_thumb.png b/static/newsletter/009/VOSpecv6.5_thumb.png
index aff52ff..d787a97 100644
Binary files a/static/newsletter/009/VOSpecv6.5_thumb.png and b/static/newsletter/009/VOSpecv6.5_thumb.png differ
diff --git a/static/newsletter/009/applauncher.png b/static/newsletter/009/applauncher.png
index 7acbbfb..4c304e0 100644
Binary files a/static/newsletter/009/applauncher.png and b/static/newsletter/009/applauncher.png differ
diff --git a/static/newsletter/009/tap64.png b/static/newsletter/009/tap64.png
index 03fbf05..33d65c1 100644
Binary files a/static/newsletter/009/tap64.png and b/static/newsletter/009/tap64.png differ
diff --git a/static/newsletter/009/visivo.png b/static/newsletter/009/visivo.png
index e486e42..ea7662e 100644
Binary files a/static/newsletter/009/visivo.png and b/static/newsletter/009/visivo.png differ
diff --git a/static/newsletter/009/xamin.jpeg b/static/newsletter/009/xamin.jpeg
index 9e4d230..9c66db2 100644
Binary files a/static/newsletter/009/xamin.jpeg and b/static/newsletter/009/xamin.jpeg differ
diff --git a/static/newsletter/009/xamin_thumb.jpeg b/static/newsletter/009/xamin_thumb.jpeg
index 635c4a0..7e1716c 100644
Binary files a/static/newsletter/009/xamin_thumb.jpeg and b/static/newsletter/009/xamin_thumb.jpeg differ
diff --git a/static/newsletter/010/AstroStat.jpg b/static/newsletter/010/AstroStat.jpg
index 135080b..c619f41 100644
Binary files a/static/newsletter/010/AstroStat.jpg and b/static/newsletter/010/AstroStat.jpg differ
diff --git a/static/newsletter/010/AstroStat_thumb.jpg b/static/newsletter/010/AstroStat_thumb.jpg
index 6ad0686..8b0f863 100644
Binary files a/static/newsletter/010/AstroStat_thumb.jpg and b/static/newsletter/010/AstroStat_thumb.jpg differ
diff --git a/static/newsletter/010/VOPlot.jpg b/static/newsletter/010/VOPlot.jpg
index aefe9fe..b6589fb 100644
Binary files a/static/newsletter/010/VOPlot.jpg and b/static/newsletter/010/VOPlot.jpg differ
diff --git a/static/newsletter/010/VOPlot_thumb.jpg b/static/newsletter/010/VOPlot_thumb.jpg
index 65d482b..3829436 100644
Binary files a/static/newsletter/010/VOPlot_thumb.jpg and b/static/newsletter/010/VOPlot_thumb.jpg differ
diff --git a/static/newsletter/010/aladin-lite-thumb.png b/static/newsletter/010/aladin-lite-thumb.png
index 7f8f417..9787ce0 100644
Binary files a/static/newsletter/010/aladin-lite-thumb.png and b/static/newsletter/010/aladin-lite-thumb.png differ
diff --git a/static/newsletter/010/aladin-lite.png b/static/newsletter/010/aladin-lite.png
index a23ee96..6e7eca9 100644
Binary files a/static/newsletter/010/aladin-lite.png and b/static/newsletter/010/aladin-lite.png differ
diff --git a/static/newsletter/010/asvo.jpg b/static/newsletter/010/asvo.jpg
index 3d82cf9..aa7ec8b 100644
Binary files a/static/newsletter/010/asvo.jpg and b/static/newsletter/010/asvo.jpg differ
diff --git a/static/newsletter/010/forest_demo_v2_2_thumb.png b/static/newsletter/010/forest_demo_v2_2_thumb.png
index 30e0ef3..36420d1 100644
Binary files a/static/newsletter/010/forest_demo_v2_2_thumb.png and b/static/newsletter/010/forest_demo_v2_2_thumb.png differ
diff --git a/static/newsletter/010/iris.png b/static/newsletter/010/iris.png
index 5a0811b..a769a1c 100644
Binary files a/static/newsletter/010/iris.png and b/static/newsletter/010/iris.png differ
diff --git a/static/newsletter/010/python-powered-vo.png b/static/newsletter/010/python-powered-vo.png
index 9001145..50be1b3 100644
Binary files a/static/newsletter/010/python-powered-vo.png and b/static/newsletter/010/python-powered-vo.png differ
diff --git a/static/newsletter/010/seleste.png b/static/newsletter/010/seleste.png
index 978f912..2633a58 100644
Binary files a/static/newsletter/010/seleste.png and b/static/newsletter/010/seleste.png differ
diff --git a/static/newsletter/011/SAcubed_logo.png b/static/newsletter/011/SAcubed_logo.png
index 53604df..5b0c06c 100644
Binary files a/static/newsletter/011/SAcubed_logo.png and b/static/newsletter/011/SAcubed_logo.png differ
diff --git a/static/newsletter/011/TIRO.png b/static/newsletter/011/TIRO.png
index 68f1e4d..71c57ab 100644
Binary files a/static/newsletter/011/TIRO.png and b/static/newsletter/011/TIRO.png differ
diff --git a/static/newsletter/011/TIRO_thumb.png b/static/newsletter/011/TIRO_thumb.png
index 61b7755..e77c0cc 100644
Binary files a/static/newsletter/011/TIRO_thumb.png and b/static/newsletter/011/TIRO_thumb.png differ
diff --git a/static/newsletter/011/TheoSSA.png b/static/newsletter/011/TheoSSA.png
index 5813160..ec1f0a6 100644
Binary files a/static/newsletter/011/TheoSSA.png and b/static/newsletter/011/TheoSSA.png differ
diff --git a/static/newsletter/011/TheoSSA_thumb.png b/static/newsletter/011/TheoSSA_thumb.png
index d68ae1c..4082f06 100644
Binary files a/static/newsletter/011/TheoSSA_thumb.png and b/static/newsletter/011/TheoSSA_thumb.png differ
diff --git a/static/newsletter/011/alma-vo-screenshot.png b/static/newsletter/011/alma-vo-screenshot.png
index fca7bfb..c2baccd 100644
Binary files a/static/newsletter/011/alma-vo-screenshot.png and b/static/newsletter/011/alma-vo-screenshot.png differ
diff --git a/static/newsletter/011/alma-vo-screenshot_thum.png b/static/newsletter/011/alma-vo-screenshot_thum.png
index 0f33e0a..282dadf 100644
Binary files a/static/newsletter/011/alma-vo-screenshot_thum.png and b/static/newsletter/011/alma-vo-screenshot_thum.png differ
diff --git a/static/newsletter/011/ivoaBlurbSciencePics.png b/static/newsletter/011/ivoaBlurbSciencePics.png
index c093269..baf427a 100644
Binary files a/static/newsletter/011/ivoaBlurbSciencePics.png and b/static/newsletter/011/ivoaBlurbSciencePics.png differ
diff --git a/static/newsletter/011/ivoaBlurbSciencePics_thumb.png b/static/newsletter/011/ivoaBlurbSciencePics_thumb.png
index 7ed839f..6288995 100644
Binary files a/static/newsletter/011/ivoaBlurbSciencePics_thumb.png and b/static/newsletter/011/ivoaBlurbSciencePics_thumb.png differ
diff --git a/static/newsletter/011/logo-euhoumw-transp.png b/static/newsletter/011/logo-euhoumw-transp.png
index c98e4f1..aec76fb 100644
Binary files a/static/newsletter/011/logo-euhoumw-transp.png and b/static/newsletter/011/logo-euhoumw-transp.png differ
diff --git a/static/newsletter/012/ChiVO.png b/static/newsletter/012/ChiVO.png
index eb2dea5..b5bed7f 100644
Binary files a/static/newsletter/012/ChiVO.png and b/static/newsletter/012/ChiVO.png differ
diff --git a/static/newsletter/012/ETC-Logo-125.png b/static/newsletter/012/ETC-Logo-125.png
index ed3c108..9c6c8eb 100644
Binary files a/static/newsletter/012/ETC-Logo-125.png and b/static/newsletter/012/ETC-Logo-125.png differ
diff --git a/static/newsletter/012/ProcessDiagram_crop2.png b/static/newsletter/012/ProcessDiagram_crop2.png
index f2e231c..8679e6a 100644
Binary files a/static/newsletter/012/ProcessDiagram_crop2.png and b/static/newsletter/012/ProcessDiagram_crop2.png differ
diff --git a/static/newsletter/012/TAO_illust.png b/static/newsletter/012/TAO_illust.png
index 723502d..814ed2c 100644
Binary files a/static/newsletter/012/TAO_illust.png and b/static/newsletter/012/TAO_illust.png differ
diff --git a/static/newsletter/012/TAO_illust.png.1 b/static/newsletter/012/TAO_illust.png.1
deleted file mode 100644
index 723502d..0000000
Binary files a/static/newsletter/012/TAO_illust.png.1 and /dev/null differ
diff --git a/static/newsletter/012/ssap_vamdc.jpg b/static/newsletter/012/ssap_vamdc.jpg
index 5d63fed..5ce1933 100644
Binary files a/static/newsletter/012/ssap_vamdc.jpg and b/static/newsletter/012/ssap_vamdc.jpg differ
diff --git a/static/newsletter/012/tcviz_news.png b/static/newsletter/012/tcviz_news.png
index 977eaf5..1649837 100644
Binary files a/static/newsletter/012/tcviz_news.png and b/static/newsletter/012/tcviz_news.png differ
diff --git a/static/newsletter/012/tcviz_news_thumb.png b/static/newsletter/012/tcviz_news_thumb.png
index 6ba4c2b..0586ccd 100644
Binary files a/static/newsletter/012/tcviz_news_thumb.png and b/static/newsletter/012/tcviz_news_thumb.png differ
diff --git a/static/newsletter/012/voclient.png b/static/newsletter/012/voclient.png
index 0a464d8..898d713 100644
Binary files a/static/newsletter/012/voclient.png and b/static/newsletter/012/voclient.png differ
diff --git a/static/newsletter/012/vtp.png b/static/newsletter/012/vtp.png
index 05beace..e906902 100644
Binary files a/static/newsletter/012/vtp.png and b/static/newsletter/012/vtp.png differ
diff --git a/static/newsletter/013/ProcessDiagram_crop2.png b/static/newsletter/013/ProcessDiagram_crop2.png
index f2e231c..8679e6a 100644
Binary files a/static/newsletter/013/ProcessDiagram_crop2.png and b/static/newsletter/013/ProcessDiagram_crop2.png differ
diff --git a/static/newsletter/013/SVO_school.JPG b/static/newsletter/013/SVO_school.JPG
index cd5d41c..879c60b 100644
Binary files a/static/newsletter/013/SVO_school.JPG and b/static/newsletter/013/SVO_school.JPG differ
diff --git a/static/newsletter/013/Stat_lite.png b/static/newsletter/013/Stat_lite.png
index bdeb9e1..d3140a0 100644
Binary files a/static/newsletter/013/Stat_lite.png and b/static/newsletter/013/Stat_lite.png differ
diff --git a/static/newsletter/013/about_vao.png b/static/newsletter/013/about_vao.png
index 0af2094..84e3299 100644
Binary files a/static/newsletter/013/about_vao.png and b/static/newsletter/013/about_vao.png differ
diff --git a/static/newsletter/013/data_discovery_tool.png b/static/newsletter/013/data_discovery_tool.png
index 0c6637a..f30515f 100644
Binary files a/static/newsletter/013/data_discovery_tool.png and b/static/newsletter/013/data_discovery_tool.png differ
diff --git a/static/newsletter/013/dcworkshop.png b/static/newsletter/013/dcworkshop.png
index fb2bc76..e9d3497 100644
Binary files a/static/newsletter/013/dcworkshop.png and b/static/newsletter/013/dcworkshop.png differ
diff --git a/static/newsletter/013/nova-at-ivoa.png b/static/newsletter/013/nova-at-ivoa.png
index 9533581..d2e87b8 100644
Binary files a/static/newsletter/013/nova-at-ivoa.png and b/static/newsletter/013/nova-at-ivoa.png differ
diff --git a/static/newsletter/013/s4n1.png b/static/newsletter/013/s4n1.png
index 1f1bb0f..e143625 100644
Binary files a/static/newsletter/013/s4n1.png and b/static/newsletter/013/s4n1.png differ
diff --git a/static/newsletter/013/searchresults.png b/static/newsletter/013/searchresults.png
index 6557e00..7d79062 100644
Binary files a/static/newsletter/013/searchresults.png and b/static/newsletter/013/searchresults.png differ
diff --git a/static/newsletter/013/tc-cdsx1.png b/static/newsletter/013/tc-cdsx1.png
index c910b4d..1ddd667 100644
Binary files a/static/newsletter/013/tc-cdsx1.png and b/static/newsletter/013/tc-cdsx1.png differ
diff --git a/static/newsletter/014/Iris_logo.png b/static/newsletter/014/Iris_logo.png
index 6548399..663d318 100644
Binary files a/static/newsletter/014/Iris_logo.png and b/static/newsletter/014/Iris_logo.png differ
diff --git a/static/newsletter/014/Iris_logo_sm.png b/static/newsletter/014/Iris_logo_sm.png
index 33617c3..83bdc85 100644
Binary files a/static/newsletter/014/Iris_logo_sm.png and b/static/newsletter/014/Iris_logo_sm.png differ
diff --git a/static/newsletter/014/chivo.png b/static/newsletter/014/chivo.png
index 701148b..e1f8e43 100644
Binary files a/static/newsletter/014/chivo.png and b/static/newsletter/014/chivo.png differ
diff --git a/static/newsletter/014/cropped-table-mountain.jpg b/static/newsletter/014/cropped-table-mountain.jpg
index c150902..fdab807 100644
Binary files a/static/newsletter/014/cropped-table-mountain.jpg and b/static/newsletter/014/cropped-table-mountain.jpg differ
diff --git a/static/newsletter/014/lamost_dr1_01.png b/static/newsletter/014/lamost_dr1_01.png
index ea867b9..50f47e3 100644
Binary files a/static/newsletter/014/lamost_dr1_01.png and b/static/newsletter/014/lamost_dr1_01.png differ
diff --git a/static/newsletter/014/vosalogo_9.png b/static/newsletter/014/vosalogo_9.png
index 85a9527..6b3437d 100644
Binary files a/static/newsletter/014/vosalogo_9.png and b/static/newsletter/014/vosalogo_9.png differ
diff --git a/static/newsletter/014/xmm_full_1.png b/static/newsletter/014/xmm_full_1.png
index 14027a8..9e1391e 100644
Binary files a/static/newsletter/014/xmm_full_1.png and b/static/newsletter/014/xmm_full_1.png differ
diff --git a/static/newsletter/015/MMI.png b/static/newsletter/015/MMI.png
index ba3be92..3f0aa65 100644
Binary files a/static/newsletter/015/MMI.png and b/static/newsletter/015/MMI.png differ
diff --git a/static/newsletter/015/MMI_small.png b/static/newsletter/015/MMI_small.png
index d4ce0f3..9c19349 100644
Binary files a/static/newsletter/015/MMI_small.png and b/static/newsletter/015/MMI_small.png differ
diff --git a/static/newsletter/015/asterics.png b/static/newsletter/015/asterics.png
index 21e2021..dd8d402 100644
Binary files a/static/newsletter/015/asterics.png and b/static/newsletter/015/asterics.png differ
diff --git a/static/newsletter/015/bcg_centred_2x1.png b/static/newsletter/015/bcg_centred_2x1.png
index 456a201..f36ed45 100644
Binary files a/static/newsletter/015/bcg_centred_2x1.png and b/static/newsletter/015/bcg_centred_2x1.png differ
diff --git a/static/newsletter/015/chivo_image1.jpg b/static/newsletter/015/chivo_image1.jpg
index dbde5df..3864098 100644
Binary files a/static/newsletter/015/chivo_image1.jpg and b/static/newsletter/015/chivo_image1.jpg differ
diff --git a/static/newsletter/015/chivo_image2.jpeg b/static/newsletter/015/chivo_image2.jpeg
index edc0b5f..47d53bf 100644
Binary files a/static/newsletter/015/chivo_image2.jpeg and b/static/newsletter/015/chivo_image2.jpeg differ
diff --git a/static/newsletter/015/koa.png b/static/newsletter/015/koa.png
index 3ce28ee..e5bef0a 100644
Binary files a/static/newsletter/015/koa.png and b/static/newsletter/015/koa.png differ
diff --git a/static/newsletter/016/Asterics_small.jpg b/static/newsletter/016/Asterics_small.jpg
index a062e01..de8646d 100644
Binary files a/static/newsletter/016/Asterics_small.jpg and b/static/newsletter/016/Asterics_small.jpg differ
diff --git a/static/newsletter/016/Cassis.png b/static/newsletter/016/Cassis.png
index bed0e4b..2f8f259 100644
Binary files a/static/newsletter/016/Cassis.png and b/static/newsletter/016/Cassis.png differ
diff --git a/static/newsletter/016/China-VO.jpg b/static/newsletter/016/China-VO.jpg
new file mode 100644
index 0000000..3ad3b49
Binary files /dev/null and b/static/newsletter/016/China-VO.jpg differ
diff --git a/static/newsletter/016/Gaia16aau_large.png b/static/newsletter/016/Gaia16aau_large.png
index 1f82e09..78f08f5 100644
Binary files a/static/newsletter/016/Gaia16aau_large.png and b/static/newsletter/016/Gaia16aau_large.png differ
diff --git a/static/newsletter/016/Gaia16aau_small.png b/static/newsletter/016/Gaia16aau_small.png
index 01cbf1b..e837962 100644
Binary files a/static/newsletter/016/Gaia16aau_small.png and b/static/newsletter/016/Gaia16aau_small.png differ
diff --git a/static/newsletter/016/VO-I.png b/static/newsletter/016/VO-I.png
index 3339f12..6ff99b3 100644
Binary files a/static/newsletter/016/VO-I.png and b/static/newsletter/016/VO-I.png differ
diff --git a/static/newsletter/016/apogeo-screenshot.jpg b/static/newsletter/016/apogeo-screenshot.jpg
index 9f74c82..7b062cf 100644
Binary files a/static/newsletter/016/apogeo-screenshot.jpg and b/static/newsletter/016/apogeo-screenshot.jpg differ
diff --git a/static/newsletter/016/ari_gaia_services_large.png b/static/newsletter/016/ari_gaia_services_large.png
index 8cbe990..34378ef 100644
Binary files a/static/newsletter/016/ari_gaia_services_large.png and b/static/newsletter/016/ari_gaia_services_large.png differ
diff --git a/static/newsletter/016/ari_gaia_services_small.png b/static/newsletter/016/ari_gaia_services_small.png
index 52e7755..8fd65d8 100644
Binary files a/static/newsletter/016/ari_gaia_services_small.png and b/static/newsletter/016/ari_gaia_services_small.png differ
diff --git a/static/newsletter/016/ari_workshop_small.jpg b/static/newsletter/016/ari_workshop_small.jpg
index cbafb16..b51ea8f 100644
Binary files a/static/newsletter/016/ari_workshop_small.jpg and b/static/newsletter/016/ari_workshop_small.jpg differ
diff --git a/static/newsletter/016/asterics_school.jpg b/static/newsletter/016/asterics_school.jpg
index fe26c44..7556dd7 100644
Binary files a/static/newsletter/016/asterics_school.jpg and b/static/newsletter/016/asterics_school.jpg differ
diff --git a/static/newsletter/016/gaia-at-CDS_large.png b/static/newsletter/016/gaia-at-CDS_large.png
index fbf982e..345a02a 100644
Binary files a/static/newsletter/016/gaia-at-CDS_large.png and b/static/newsletter/016/gaia-at-CDS_large.png differ
diff --git a/static/newsletter/016/gaia-at-CDS_small.png b/static/newsletter/016/gaia-at-CDS_small.png
index 305771d..f0c09bd 100644
Binary files a/static/newsletter/016/gaia-at-CDS_small.png and b/static/newsletter/016/gaia-at-CDS_small.png differ
diff --git a/static/newsletter/016/gaia_esasky_large.png b/static/newsletter/016/gaia_esasky_large.png
index 126321a..df508c9 100644
Binary files a/static/newsletter/016/gaia_esasky_large.png and b/static/newsletter/016/gaia_esasky_large.png differ
diff --git a/static/newsletter/016/gaia_esasky_small.png b/static/newsletter/016/gaia_esasky_small.png
index 3cd2d82..57aec25 100644
Binary files a/static/newsletter/016/gaia_esasky_small.png and b/static/newsletter/016/gaia_esasky_small.png differ
diff --git a/static/newsletter/016/iris_ivoa_newsletter_2016_large.png b/static/newsletter/016/iris_ivoa_newsletter_2016_large.png
index aefc25f..237da73 100644
Binary files a/static/newsletter/016/iris_ivoa_newsletter_2016_large.png and b/static/newsletter/016/iris_ivoa_newsletter_2016_large.png differ
diff --git a/static/newsletter/016/iris_ivoa_newsletter_2016_small.png b/static/newsletter/016/iris_ivoa_newsletter_2016_small.png
index 4262079..cee715b 100644
Binary files a/static/newsletter/016/iris_ivoa_newsletter_2016_small.png and b/static/newsletter/016/iris_ivoa_newsletter_2016_small.png differ
diff --git a/static/newsletter/016/vosa_large.png b/static/newsletter/016/vosa_large.png
index 86fd966..4efcdc2 100644
Binary files a/static/newsletter/016/vosa_large.png and b/static/newsletter/016/vosa_large.png differ
diff --git a/static/newsletter/016/vosa_small.png b/static/newsletter/016/vosa_small.png
index 1fceee4..0a6774f 100644
Binary files a/static/newsletter/016/vosa_small.png and b/static/newsletter/016/vosa_small.png differ
diff --git a/static/newsletter/017/CASAS.jpg b/static/newsletter/017/CASAS.jpg
index cc4da8e..ae407de 100644
Binary files a/static/newsletter/017/CASAS.jpg and b/static/newsletter/017/CASAS.jpg differ
diff --git a/static/newsletter/017/DAEPO.png b/static/newsletter/017/DAEPO.png
index cf39a08..3a5a92c 100644
Binary files a/static/newsletter/017/DAEPO.png and b/static/newsletter/017/DAEPO.png differ
diff --git a/static/newsletter/017/DAEPO_s.png b/static/newsletter/017/DAEPO_s.png
index 56fc808..89ae535 100644
Binary files a/static/newsletter/017/DAEPO_s.png and b/static/newsletter/017/DAEPO_s.png differ
diff --git a/static/newsletter/017/SolSysVO.png b/static/newsletter/017/SolSysVO.png
index d0b290a..d9557bd 100644
Binary files a/static/newsletter/017/SolSysVO.png and b/static/newsletter/017/SolSysVO.png differ
diff --git a/static/newsletter/017/SolSysVO_s.png b/static/newsletter/017/SolSysVO_s.png
index 271ab29..21188d8 100644
Binary files a/static/newsletter/017/SolSysVO_s.png and b/static/newsletter/017/SolSysVO_s.png differ
diff --git a/static/newsletter/017/aasworkshop_s.png b/static/newsletter/017/aasworkshop_s.png
index 0db4524..417f502 100644
Binary files a/static/newsletter/017/aasworkshop_s.png and b/static/newsletter/017/aasworkshop_s.png differ
diff --git a/static/newsletter/017/cdsportal.png b/static/newsletter/017/cdsportal.png
index d332a4e..3690787 100644
Binary files a/static/newsletter/017/cdsportal.png and b/static/newsletter/017/cdsportal.png differ
diff --git a/static/newsletter/017/cdsportal_s.png b/static/newsletter/017/cdsportal_s.png
index 6f2029c..c7988b6 100644
Binary files a/static/newsletter/017/cdsportal_s.png and b/static/newsletter/017/cdsportal_s.png differ
diff --git a/static/newsletter/017/clusterix.png b/static/newsletter/017/clusterix.png
index 478fd22..e72eeec 100644
Binary files a/static/newsletter/017/clusterix.png and b/static/newsletter/017/clusterix.png differ
diff --git a/static/newsletter/017/clusterix_s.png b/static/newsletter/017/clusterix_s.png
index c5f6008..e618d0b 100644
Binary files a/static/newsletter/017/clusterix_s.png and b/static/newsletter/017/clusterix_s.png differ
diff --git a/static/newsletter/017/esasky.png b/static/newsletter/017/esasky.png
index b8eb9cf..360978a 100644
Binary files a/static/newsletter/017/esasky.png and b/static/newsletter/017/esasky.png differ
diff --git a/static/newsletter/017/esasky_s.png b/static/newsletter/017/esasky_s.png
index d0e416a..8bf1eeb 100644
Binary files a/static/newsletter/017/esasky_s.png and b/static/newsletter/017/esasky_s.png differ
diff --git a/static/newsletter/017/interop.png b/static/newsletter/017/interop.png
index e941be2..91cf4bf 100644
Binary files a/static/newsletter/017/interop.png and b/static/newsletter/017/interop.png differ
diff --git a/static/newsletter/017/interop_s.png b/static/newsletter/017/interop_s.png
index 615ab99..b41033f 100644
Binary files a/static/newsletter/017/interop_s.png and b/static/newsletter/017/interop_s.png differ
diff --git a/static/newsletter/017/svoschool.png b/static/newsletter/017/svoschool.png
index 1b9d005..ad4a79a 100644
Binary files a/static/newsletter/017/svoschool.png and b/static/newsletter/017/svoschool.png differ
diff --git a/static/newsletter/017/svoschool_s.png b/static/newsletter/017/svoschool_s.png
index ef66879..96559c5 100644
Binary files a/static/newsletter/017/svoschool_s.png and b/static/newsletter/017/svoschool_s.png differ
diff --git a/static/newsletter/017/tutorials.png b/static/newsletter/017/tutorials.png
index 0f3803b..b4627ae 100644
Binary files a/static/newsletter/017/tutorials.png and b/static/newsletter/017/tutorials.png differ
diff --git a/static/newsletter/017/tutorials_s.png b/static/newsletter/017/tutorials_s.png
index eb1ca0a..ab9d777 100644
Binary files a/static/newsletter/017/tutorials_s.png and b/static/newsletter/017/tutorials_s.png differ
diff --git a/static/newsletter/018/ASTERICS.png b/static/newsletter/018/ASTERICS.png
index 0a31ac6..a774d4e 100644
Binary files a/static/newsletter/018/ASTERICS.png and b/static/newsletter/018/ASTERICS.png differ
diff --git a/static/newsletter/018/ASTERICS_s.png b/static/newsletter/018/ASTERICS_s.png
index c3a23af..d5cac74 100644
Binary files a/static/newsletter/018/ASTERICS_s.png and b/static/newsletter/018/ASTERICS_s.png differ
diff --git a/static/newsletter/018/aao.png b/static/newsletter/018/aao.png
index be218e6..ce80de0 100644
Binary files a/static/newsletter/018/aao.png and b/static/newsletter/018/aao.png differ
diff --git a/static/newsletter/018/aao_s.png b/static/newsletter/018/aao_s.png
index 254ead1..5799e98 100644
Binary files a/static/newsletter/018/aao_s.png and b/static/newsletter/018/aao_s.png differ
diff --git a/static/newsletter/018/adass.png b/static/newsletter/018/adass.png
index 2dc10b0..3ea82ac 100644
Binary files a/static/newsletter/018/adass.png and b/static/newsletter/018/adass.png differ
diff --git a/static/newsletter/018/adass_s.png b/static/newsletter/018/adass_s.png
index 1fbe729..a9df929 100644
Binary files a/static/newsletter/018/adass_s.png and b/static/newsletter/018/adass_s.png differ
diff --git a/static/newsletter/018/aladin.png b/static/newsletter/018/aladin.png
index 094670c..962e202 100644
Binary files a/static/newsletter/018/aladin.png and b/static/newsletter/018/aladin.png differ
diff --git a/static/newsletter/018/aladin_s.png b/static/newsletter/018/aladin_s.png
index e73a9f3..d91390a 100644
Binary files a/static/newsletter/018/aladin_s.png and b/static/newsletter/018/aladin_s.png differ
diff --git a/static/newsletter/018/climso.png b/static/newsletter/018/climso.png
index f0cc00c..29793a7 100644
Binary files a/static/newsletter/018/climso.png and b/static/newsletter/018/climso.png differ
diff --git a/static/newsletter/018/climso_s.png b/static/newsletter/018/climso_s.png
index 5f8266f..f626809 100644
Binary files a/static/newsletter/018/climso_s.png and b/static/newsletter/018/climso_s.png differ
diff --git a/static/newsletter/018/esaskyv2.png b/static/newsletter/018/esaskyv2.png
index a8bbe3f..c75b4de 100644
Binary files a/static/newsletter/018/esaskyv2.png and b/static/newsletter/018/esaskyv2.png differ
diff --git a/static/newsletter/018/esaskyv2_s.png b/static/newsletter/018/esaskyv2_s.png
index 50b16a8..3e680c8 100644
Binary files a/static/newsletter/018/esaskyv2_s.png and b/static/newsletter/018/esaskyv2_s.png differ
diff --git a/static/newsletter/018/gavoarvo.png b/static/newsletter/018/gavoarvo.png
index d615e3a..48fc4b3 100644
Binary files a/static/newsletter/018/gavoarvo.png and b/static/newsletter/018/gavoarvo.png differ
diff --git a/static/newsletter/018/interop.png b/static/newsletter/018/interop.png
index 82b2c0f..157be97 100644
Binary files a/static/newsletter/018/interop.png and b/static/newsletter/018/interop.png differ
diff --git a/static/newsletter/018/interop_s.png b/static/newsletter/018/interop_s.png
index caededd..4094be4 100644
Binary files a/static/newsletter/018/interop_s.png and b/static/newsletter/018/interop_s.png differ
diff --git a/static/newsletter/018/ivoaslack.png b/static/newsletter/018/ivoaslack.png
index 8cb9e46..308a511 100644
Binary files a/static/newsletter/018/ivoaslack.png and b/static/newsletter/018/ivoaslack.png differ
diff --git a/static/newsletter/018/ivoaslack_s.png b/static/newsletter/018/ivoaslack_s.png
index 7687518..cea63a8 100644
Binary files a/static/newsletter/018/ivoaslack_s.png and b/static/newsletter/018/ivoaslack_s.png differ
diff --git a/static/newsletter/018/topcat.png b/static/newsletter/018/topcat.png
index 42ce458..07521d5 100644
Binary files a/static/newsletter/018/topcat.png and b/static/newsletter/018/topcat.png differ
diff --git a/static/newsletter/018/topcat_s.png b/static/newsletter/018/topcat_s.png
index 5643219..30910bc 100644
Binary files a/static/newsletter/018/topcat_s.png and b/static/newsletter/018/topcat_s.png differ
diff --git a/static/newsletter/018/vospaces.png b/static/newsletter/018/vospaces.png
index 4d4f62b..96f175f 100644
Binary files a/static/newsletter/018/vospaces.png and b/static/newsletter/018/vospaces.png differ
diff --git a/static/newsletter/019/Chandra_MOCs.png b/static/newsletter/019/Chandra_MOCs.png
index 0a52a9e..50b1c44 100644
Binary files a/static/newsletter/019/Chandra_MOCs.png and b/static/newsletter/019/Chandra_MOCs.png differ
diff --git a/static/newsletter/019/Chandra_MOCs_s.png b/static/newsletter/019/Chandra_MOCs_s.png
index 4f59a3d..1d50503 100644
Binary files a/static/newsletter/019/Chandra_MOCs_s.png and b/static/newsletter/019/Chandra_MOCs_s.png differ
diff --git a/static/newsletter/019/ChinaVO.png b/static/newsletter/019/ChinaVO.png
index c2e4e93..d06b646 100644
Binary files a/static/newsletter/019/ChinaVO.png and b/static/newsletter/019/ChinaVO.png differ
diff --git a/static/newsletter/019/ChinaVO_s.png b/static/newsletter/019/ChinaVO_s.png
index ec81ced..1cf85e0 100644
Binary files a/static/newsletter/019/ChinaVO_s.png and b/static/newsletter/019/ChinaVO_s.png differ
diff --git a/static/newsletter/019/Gaia-DR2-flux-map.png b/static/newsletter/019/Gaia-DR2-flux-map.png
index 0a86f9e..f87bc75 100644
Binary files a/static/newsletter/019/Gaia-DR2-flux-map.png and b/static/newsletter/019/Gaia-DR2-flux-map.png differ
diff --git a/static/newsletter/019/Gaia-DR2-flux-map.png.1 b/static/newsletter/019/Gaia-DR2-flux-map.png.1
deleted file mode 100644
index 0a86f9e..0000000
Binary files a/static/newsletter/019/Gaia-DR2-flux-map.png.1 and /dev/null differ
diff --git a/static/newsletter/019/GaiaDR2.png b/static/newsletter/019/GaiaDR2.png
index 29f915a..cb34a35 100644
Binary files a/static/newsletter/019/GaiaDR2.png and b/static/newsletter/019/GaiaDR2.png differ
diff --git a/static/newsletter/019/GaiaDR2_s.png b/static/newsletter/019/GaiaDR2_s.png
index d7ed84e..9fd3641 100644
Binary files a/static/newsletter/019/GaiaDR2_s.png and b/static/newsletter/019/GaiaDR2_s.png differ
diff --git a/static/newsletter/019/VOSA.png b/static/newsletter/019/VOSA.png
index 79c9a6e..9dd830d 100644
Binary files a/static/newsletter/019/VOSA.png and b/static/newsletter/019/VOSA.png differ
diff --git a/static/newsletter/019/VOSA_s.png b/static/newsletter/019/VOSA_s.png
index 4a4fa78..8c0db62 100644
Binary files a/static/newsletter/019/VOSA_s.png and b/static/newsletter/019/VOSA_s.png differ
diff --git a/static/newsletter/019/csc2.png b/static/newsletter/019/csc2.png
index b131c05..020a601 100644
Binary files a/static/newsletter/019/csc2.png and b/static/newsletter/019/csc2.png differ
diff --git a/static/newsletter/019/csc2_s.png b/static/newsletter/019/csc2_s.png
index 5c268d3..daf5e09 100644
Binary files a/static/newsletter/019/csc2_s.png and b/static/newsletter/019/csc2_s.png differ
diff --git a/static/newsletter/019/hipass.png b/static/newsletter/019/hipass.png
index 1cda36e..ebfed58 100644
Binary files a/static/newsletter/019/hipass.png and b/static/newsletter/019/hipass.png differ
diff --git a/static/newsletter/019/hipass_s.png b/static/newsletter/019/hipass_s.png
index db3c506..49efe3d 100644
Binary files a/static/newsletter/019/hipass_s.png and b/static/newsletter/019/hipass_s.png differ
diff --git a/static/newsletter/019/interop.png b/static/newsletter/019/interop.png
index 42ff920..86e5ba2 100644
Binary files a/static/newsletter/019/interop.png and b/static/newsletter/019/interop.png differ
diff --git a/static/newsletter/019/interop_s.png b/static/newsletter/019/interop_s.png
index dc4f2e0..450918a 100644
Binary files a/static/newsletter/019/interop_s.png and b/static/newsletter/019/interop_s.png differ
diff --git a/static/newsletter/019/navo.png b/static/newsletter/019/navo.png
index fba86e2..05abe31 100644
Binary files a/static/newsletter/019/navo.png and b/static/newsletter/019/navo.png differ
diff --git a/static/newsletter/019/navo_s.png b/static/newsletter/019/navo_s.png
index 44bf3b3..79026ab 100644
Binary files a/static/newsletter/019/navo_s.png and b/static/newsletter/019/navo_s.png differ
diff --git a/static/newsletter/020/ADASStutorial.png b/static/newsletter/020/ADASStutorial.png
index 39d0546..36c7027 100644
Binary files a/static/newsletter/020/ADASStutorial.png and b/static/newsletter/020/ADASStutorial.png differ
diff --git a/static/newsletter/020/ADASStutorial_s.png b/static/newsletter/020/ADASStutorial_s.png
index cc48649..20373d5 100644
Binary files a/static/newsletter/020/ADASStutorial_s.png and b/static/newsletter/020/ADASStutorial_s.png differ
diff --git a/static/newsletter/020/ChinaVO.png b/static/newsletter/020/ChinaVO.png
index 7b76e7f..48c1647 100644
Binary files a/static/newsletter/020/ChinaVO.png and b/static/newsletter/020/ChinaVO.png differ
diff --git a/static/newsletter/020/ChinaVO_s.png b/static/newsletter/020/ChinaVO_s.png
index 76355d4..b7ecb3b 100644
Binary files a/static/newsletter/020/ChinaVO_s.png and b/static/newsletter/020/ChinaVO_s.png differ
diff --git a/static/newsletter/020/chinavo_school.jpg b/static/newsletter/020/chinavo_school.jpg
index ae8f884..652bddd 100644
Binary files a/static/newsletter/020/chinavo_school.jpg and b/static/newsletter/020/chinavo_school.jpg differ
diff --git a/static/newsletter/020/chinavo_school_s.jpg b/static/newsletter/020/chinavo_school_s.jpg
index e9b2668..50ed15a 100644
Binary files a/static/newsletter/020/chinavo_school_s.jpg and b/static/newsletter/020/chinavo_school_s.jpg differ
diff --git a/static/newsletter/020/esasky.png b/static/newsletter/020/esasky.png
index 97fe414..64fd0a8 100644
Binary files a/static/newsletter/020/esasky.png and b/static/newsletter/020/esasky.png differ
diff --git a/static/newsletter/020/esasky_s.png b/static/newsletter/020/esasky_s.png
index 1ab8487..903f1ce 100644
Binary files a/static/newsletter/020/esasky_s.png and b/static/newsletter/020/esasky_s.png differ
diff --git a/static/newsletter/020/interop.png b/static/newsletter/020/interop.png
index be59bab..97f0c70 100644
Binary files a/static/newsletter/020/interop.png and b/static/newsletter/020/interop.png differ
diff --git a/static/newsletter/020/interop_s.png b/static/newsletter/020/interop_s.png
index 58bb456..7880075 100644
Binary files a/static/newsletter/020/interop_s.png and b/static/newsletter/020/interop_s.png differ
diff --git a/static/newsletter/020/skymapper.png b/static/newsletter/020/skymapper.png
index e84bbd4..a2430bd 100644
Binary files a/static/newsletter/020/skymapper.png and b/static/newsletter/020/skymapper.png differ
diff --git a/static/newsletter/020/skymapper_s.png b/static/newsletter/020/skymapper_s.png
index 0a9f3af..e26b1a4 100644
Binary files a/static/newsletter/020/skymapper_s.png and b/static/newsletter/020/skymapper_s.png differ
diff --git a/static/newsletter/020/voschool.png b/static/newsletter/020/voschool.png
index 3683d80..78efa86 100644
Binary files a/static/newsletter/020/voschool.png and b/static/newsletter/020/voschool.png differ
diff --git a/static/newsletter/020/voschool_s.png b/static/newsletter/020/voschool_s.png
index b0aeca0..0190c7a 100644
Binary files a/static/newsletter/020/voschool_s.png and b/static/newsletter/020/voschool_s.png differ
diff --git a/static/newsletter/021/DocSearch.png b/static/newsletter/021/DocSearch.png
index 404fc7d..319e99a 100644
Binary files a/static/newsletter/021/DocSearch.png and b/static/newsletter/021/DocSearch.png differ
diff --git a/static/newsletter/021/DocSearch_s.png b/static/newsletter/021/DocSearch_s.png
index abaa602..d8c7994 100644
Binary files a/static/newsletter/021/DocSearch_s.png and b/static/newsletter/021/DocSearch_s.png differ
diff --git a/static/newsletter/021/LAMOST.png b/static/newsletter/021/LAMOST.png
index 7db85cb..c473cd2 100644
Binary files a/static/newsletter/021/LAMOST.png and b/static/newsletter/021/LAMOST.png differ
diff --git a/static/newsletter/021/SVOSchool.png b/static/newsletter/021/SVOSchool.png
index 188baa8..fd42807 100644
Binary files a/static/newsletter/021/SVOSchool.png and b/static/newsletter/021/SVOSchool.png differ
diff --git a/static/newsletter/021/SVOSchool_s.png b/static/newsletter/021/SVOSchool_s.png
index 9fdf801..06df4ff 100644
Binary files a/static/newsletter/021/SVOSchool_s.png and b/static/newsletter/021/SVOSchool_s.png differ
diff --git a/static/newsletter/021/exomercat.png b/static/newsletter/021/exomercat.png
index 286a0b4..cb0307a 100644
Binary files a/static/newsletter/021/exomercat.png and b/static/newsletter/021/exomercat.png differ
diff --git a/static/newsletter/021/exomercat_s.png b/static/newsletter/021/exomercat_s.png
index 9abeca0..93a6a02 100644
Binary files a/static/newsletter/021/exomercat_s.png and b/static/newsletter/021/exomercat_s.png differ
diff --git a/static/newsletter/021/interop.png b/static/newsletter/021/interop.png
index 9249b44..f7eff69 100644
Binary files a/static/newsletter/021/interop.png and b/static/newsletter/021/interop.png differ
diff --git a/static/newsletter/021/interop_s.png b/static/newsletter/021/interop_s.png
index 4d3bd95..25aa110 100644
Binary files a/static/newsletter/021/interop_s.png and b/static/newsletter/021/interop_s.png differ
diff --git a/static/newsletter/021/montage.png b/static/newsletter/021/montage.png
index cd10de0..baae81f 100644
Binary files a/static/newsletter/021/montage.png and b/static/newsletter/021/montage.png differ
diff --git a/static/newsletter/021/montage_s.png b/static/newsletter/021/montage_s.png
index 4aa32c2..a2e2fe3 100644
Binary files a/static/newsletter/021/montage_s.png and b/static/newsletter/021/montage_s.png differ
diff --git a/static/newsletter/021/pyesasky.png b/static/newsletter/021/pyesasky.png
index 681c9fa..93dcedf 100644
Binary files a/static/newsletter/021/pyesasky.png and b/static/newsletter/021/pyesasky.png differ
diff --git a/static/newsletter/021/pyesasky_s.png b/static/newsletter/021/pyesasky_s.png
index 3d5fdff..9ee8ecf 100644
Binary files a/static/newsletter/021/pyesasky_s.png and b/static/newsletter/021/pyesasky_s.png differ
diff --git a/static/newsletter/022/GTC.png b/static/newsletter/022/GTC.png
index 3e8b5ef..ea550d1 100644
Binary files a/static/newsletter/022/GTC.png and b/static/newsletter/022/GTC.png differ
diff --git a/static/newsletter/022/NewInV11.png b/static/newsletter/022/NewInV11.png
index 9ba5669..01e803b 100644
Binary files a/static/newsletter/022/NewInV11.png and b/static/newsletter/022/NewInV11.png differ
diff --git a/static/newsletter/022/aladinv11.png b/static/newsletter/022/aladinv11.png
index e1ced42..36ae1ee 100644
Binary files a/static/newsletter/022/aladinv11.png and b/static/newsletter/022/aladinv11.png differ
diff --git a/static/newsletter/022/clusterix.png b/static/newsletter/022/clusterix.png
index ad7df7f..8449d06 100644
Binary files a/static/newsletter/022/clusterix.png and b/static/newsletter/022/clusterix.png differ
diff --git a/static/newsletter/022/clusterix_s.png b/static/newsletter/022/clusterix_s.png
index 21a0072..c4fd855 100644
Binary files a/static/newsletter/022/clusterix_s.png and b/static/newsletter/022/clusterix_s.png differ
diff --git a/static/newsletter/022/esasky.png b/static/newsletter/022/esasky.png
index a865d8a..5ffea4a 100644
Binary files a/static/newsletter/022/esasky.png and b/static/newsletter/022/esasky.png differ
diff --git a/static/newsletter/022/esasky_s.png b/static/newsletter/022/esasky_s.png
index f3abc97..0f6b187 100644
Binary files a/static/newsletter/022/esasky_s.png and b/static/newsletter/022/esasky_s.png differ
diff --git a/static/newsletter/022/fast.png b/static/newsletter/022/fast.png
index 6feebed..809e34c 100644
Binary files a/static/newsletter/022/fast.png and b/static/newsletter/022/fast.png differ
diff --git a/static/newsletter/022/fast_s.png b/static/newsletter/022/fast_s.png
index 5e6ee61..2fa6c36 100644
Binary files a/static/newsletter/022/fast_s.png and b/static/newsletter/022/fast_s.png differ
diff --git a/static/newsletter/022/firefly-m51withFilter.png b/static/newsletter/022/firefly-m51withFilter.png
index 1be1628..14fc1ae 100644
Binary files a/static/newsletter/022/firefly-m51withFilter.png and b/static/newsletter/022/firefly-m51withFilter.png differ
diff --git a/static/newsletter/022/firefly-m51withFilter_s.png b/static/newsletter/022/firefly-m51withFilter_s.png
index a1d5ba8..c3d2ec5 100644
Binary files a/static/newsletter/022/firefly-m51withFilter_s.png and b/static/newsletter/022/firefly-m51withFilter_s.png differ
diff --git a/static/newsletter/022/interop.png b/static/newsletter/022/interop.png
index ece7bbf..5512440 100644
Binary files a/static/newsletter/022/interop.png and b/static/newsletter/022/interop.png differ
diff --git a/static/newsletter/022/interop_s.png b/static/newsletter/022/interop_s.png
index 534337b..26670b3 100644
Binary files a/static/newsletter/022/interop_s.png and b/static/newsletter/022/interop_s.png differ
diff --git a/static/newsletter/022/nexsciTAP.png b/static/newsletter/022/nexsciTAP.png
index cd902df..cb5664d 100644
Binary files a/static/newsletter/022/nexsciTAP.png and b/static/newsletter/022/nexsciTAP.png differ
diff --git a/static/newsletter/022/youtube.png b/static/newsletter/022/youtube.png
index 17c7764..8bf94a7 100644
Binary files a/static/newsletter/022/youtube.png and b/static/newsletter/022/youtube.png differ
diff --git a/static/newsletter/023/7BISS.png b/static/newsletter/023/7BISS.png
index aee299e..f39136e 100644
Binary files a/static/newsletter/023/7BISS.png and b/static/newsletter/023/7BISS.png differ
diff --git a/static/newsletter/023/Gaia.png b/static/newsletter/023/Gaia.png
index fc045ee..6130dd4 100644
Binary files a/static/newsletter/023/Gaia.png and b/static/newsletter/023/Gaia.png differ
diff --git a/static/newsletter/023/IVOA2020.png b/static/newsletter/023/IVOA2020.png
index 8bc9f02..0ad0b8e 100644
Binary files a/static/newsletter/023/IVOA2020.png and b/static/newsletter/023/IVOA2020.png differ
diff --git a/static/newsletter/023/ivoa_logoc2.jpg b/static/newsletter/023/ivoa_logoc2.jpg
index 16eab3f..65e8dd0 100644
Binary files a/static/newsletter/023/ivoa_logoc2.jpg and b/static/newsletter/023/ivoa_logoc2.jpg differ
diff --git a/static/newsletter/023/nexsci.png b/static/newsletter/023/nexsci.png
index cd902df..cb5664d 100644
Binary files a/static/newsletter/023/nexsci.png and b/static/newsletter/023/nexsci.png differ
diff --git a/static/newsletter/023/svo.png b/static/newsletter/023/svo.png
index d577183..b471e69 100644
Binary files a/static/newsletter/023/svo.png and b/static/newsletter/023/svo.png differ
diff --git a/static/newsletter/023/symposium.png b/static/newsletter/023/symposium.png
index ea18a16..b63bdbd 100644
Binary files a/static/newsletter/023/symposium.png and b/static/newsletter/023/symposium.png differ
diff --git a/static/newsletter/024/NADC.png b/static/newsletter/024/NADC.png
index b8bae28..fd5464b 100644
Binary files a/static/newsletter/024/NADC.png and b/static/newsletter/024/NADC.png differ
diff --git a/static/newsletter/024/TAPservice.jpg b/static/newsletter/024/TAPservice.jpg
index 6dd6469..2ca24ab 100644
Binary files a/static/newsletter/024/TAPservice.jpg and b/static/newsletter/024/TAPservice.jpg differ
diff --git a/static/newsletter/024/escape1.png b/static/newsletter/024/escape1.png
index 40f6709..d48b62d 100644
Binary files a/static/newsletter/024/escape1.png and b/static/newsletter/024/escape1.png differ
diff --git a/static/newsletter/024/ivoa_logoc2.jpg b/static/newsletter/024/ivoa_logoc2.jpg
index 16eab3f..65e8dd0 100644
Binary files a/static/newsletter/024/ivoa_logoc2.jpg and b/static/newsletter/024/ivoa_logoc2.jpg differ
diff --git a/static/newsletter/024/navo.png b/static/newsletter/024/navo.png
index 5af62bb..42e8226 100644
Binary files a/static/newsletter/024/navo.png and b/static/newsletter/024/navo.png differ
diff --git a/static/newsletter/024/python.png b/static/newsletter/024/python.png
index 846f630..766bef7 100644
Binary files a/static/newsletter/024/python.png and b/static/newsletter/024/python.png differ
diff --git a/static/newsletter/025/cefca_catalogues.png b/static/newsletter/025/cefca_catalogues.png
index fd26ffe..3965633 100644
Binary files a/static/newsletter/025/cefca_catalogues.png and b/static/newsletter/025/cefca_catalogues.png differ
diff --git a/static/newsletter/025/dark_and_quiet_sky.png b/static/newsletter/025/dark_and_quiet_sky.png
index de5b8d8..3bd1c56 100644
Binary files a/static/newsletter/025/dark_and_quiet_sky.png and b/static/newsletter/025/dark_and_quiet_sky.png differ
diff --git a/static/newsletter/025/ivoa_logoc2.jpg b/static/newsletter/025/ivoa_logoc2.jpg
index 16eab3f..65e8dd0 100644
Binary files a/static/newsletter/025/ivoa_logoc2.jpg and b/static/newsletter/025/ivoa_logoc2.jpg differ
diff --git a/static/newsletter/025/jvo_fitswebql.png b/static/newsletter/025/jvo_fitswebql.png
index 1fc181a..9d056c4 100644
Binary files a/static/newsletter/025/jvo_fitswebql.png and b/static/newsletter/025/jvo_fitswebql.png differ
diff --git a/static/newsletter/025/mocs_in_action.png b/static/newsletter/025/mocs_in_action.png
index 406ec6c..8a9ac2d 100644
Binary files a/static/newsletter/025/mocs_in_action.png and b/static/newsletter/025/mocs_in_action.png differ
diff --git a/static/newsletter/025/multi_messenger_in_esasky.png b/static/newsletter/025/multi_messenger_in_esasky.png
index df4fcd4..63f9354 100644
Binary files a/static/newsletter/025/multi_messenger_in_esasky.png and b/static/newsletter/025/multi_messenger_in_esasky.png differ
diff --git a/static/newsletter/025/schools_and_workshop.png b/static/newsletter/025/schools_and_workshop.png
index 0f8cf3d..d42bf34 100644
Binary files a/static/newsletter/025/schools_and_workshop.png and b/static/newsletter/025/schools_and_workshop.png differ