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 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 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 @@ + + +
+
+ +
+ +
+ + \ 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