Index: CHANGELOG
===================================================================
--- CHANGELOG	(revision 4043)
+++ CHANGELOG	(revision 4046)
@@ -27,4 +27,5 @@
 * Template system: Allow ?sub for category/categories attributes of tpl:EntryIf, and for url/urls attributes of tpl:CategoryIf
 * Responsive tables/lists (posts, pages, users, …)
+* Spams preview (administrative board) now shows HTML code rather than interpreted content
 * Fix: port used behind reverse proxy (Clearbricks)
 * Lib: Update Codemirror to 5.48.0
Index: build-tools/build-module-rsync-exclude.txt
===================================================================
--- build-tools/build-module-rsync-exclude.txt	(revision 4039)
+++ build-tools/build-module-rsync-exclude.txt	(revision 4039)
@@ -0,0 +1,21 @@
+# Developpement specific dirs/files
+*.map
+*.rb
+sass
+scss
+.sass*
+scripts
+# CVS dirs/files
+.git*
+.hg*
+*.old
+*.bak
+*.BAK
+*.orig
+*.rej
+# Archives
+*.zip
+# Documentation
+mkdocs
+# Mac OS Specific
+.DS_Store
Index: build-tools/build-module.sh
===================================================================
--- build-tools/build-module.sh	(revision 4039)
+++ build-tools/build-module.sh	(revision 4039)
@@ -0,0 +1,68 @@
+#!/bin/sh
+
+# Usage: build-module.sh [theme]
+# The local directory of module must be a git repo and version will be extracted from its tags
+# The module installable archive will be created inside the current directory (module root)
+#
+# Examples:
+# (Assuming that the current path is the dotclear local repo root)
+#
+# Plugin module, inside plugins folder:
+# $ cd plugins/my-plugin
+# $ ../build-tools/build-module.sh
+#
+# Theme module, inside themes folder:
+# $ cd themes/my-theme
+# $ ../build-tools/build-module.sh theme
+
+# Module type
+MOD_TYPE="plugin"
+
+# Default module version
+DEF_VERSION="0.1"
+
+# Path for JS minifier (1st argument is the js file to minify)
+DIRECTORY=$(dirname "$0")
+MIN_JS="$DIRECTORY/min-js.php"
+
+# Check optionnal 1st parameter (module type)
+if [ "$1" = "theme" ]; then
+  MOD_TYPE="theme"
+fi
+
+# Find module name
+MOD_NAME=$(basename "$PWD")
+if [ "$MOD_NAME" = "themes" ] || [ "$MOD_NAME" = "plugins" ] || [ -d ./plugins ] ; then
+  echo "Launch this command inside the module folder!"
+  exit 1
+fi
+
+# Copy all files to tmp dir
+if [ -d "$MOD_NAME" ]; then
+  rm -rf ./"$MOD_NAME"
+fi
+mkdir ./"$MOD_NAME"
+rsync --exclude-from="$DIRECTORY/build-module-rsync-exclude.txt" --exclude="$MOD_NAME" -a . ./"$MOD_NAME"
+
+# Pack Javascript files
+if [ -f "$MIN_JS" ]; then
+  find ./"$MOD_NAME" -name '*.js' -exec "$MIN_JS" \{\} \;
+fi
+
+# Find last version (if any)
+CUR_VERSION=$(git tag -l | sort -r -V | grep -E "[0-9]" | head -n 1)
+if [ -z "$CUR_VERSION" ]; then
+  CUR_VERSION=$DEF_VERSION
+fi
+
+# Make installable archive
+if [ -f $MOD_TYPE-"$MOD_NAME"-$CUR_VERSION.zip ]; then
+  rm $MOD_TYPE-"$MOD_NAME"-$CUR_VERSION.zip
+fi
+zip -q -r $MOD_TYPE-"$MOD_NAME"-$CUR_VERSION.zip ./"$MOD_NAME"/
+
+# Cleanup
+rm -rf ./"$MOD_NAME"
+
+# Final output
+echo "$MOD_TYPE-$MOD_NAME-$CUR_VERSION.zip ready!"
Index: inc/prepend.php
===================================================================
--- inc/prepend.php	(revision 4043)
+++ inc/prepend.php	(revision 4046)
@@ -145,5 +145,5 @@
 # Constants
 define('DC_ROOT', path::real(dirname(__FILE__) . '/..'));
-define('DC_VERSION', '2.15.2');
+define('DC_VERSION', '2.16-dev');
 define('DC_DIGESTS', dirname(__FILE__) . '/digests');
 define('DC_L10N_ROOT', dirname(__FILE__) . '/../locales');
Index: themes/berlin/_public.php
===================================================================
--- themes/berlin/_public.php	(revision 3915)
+++ themes/berlin/_public.php	(revision 4028)
@@ -28,5 +28,5 @@
             'show_menu'  => __('Show menu'),
             'hide_menu'  => __('Hide menu'),
-            'navigation' => __('Navigation')
+            'navigation' => __('Main menu')
         ]);
     }
Index: themes/berlin/js/berlin.js
===================================================================
--- themes/berlin/js/berlin.js	(revision 3915)
+++ themes/berlin/js/berlin.js	(revision 4029)
@@ -7,7 +7,8 @@
 // Show/Hide main menu
 $('.header__nav').
-before(`<button id="hamburger" type="button"><span class="visually-hidden">${dotclear_berlin.navigation}</span></button>`).
+before(`<button id="hamburger" type="button" aria-label="${dotclear_berlin.navigation}" aria-expanded="false"></button>`).
 toggle();
 $('#hamburger').click(function() {
+  $(this).attr('aria-expanded', $(this).attr('aria-expanded') == "true" ? "false" : "true");
   $(this).toggleClass('open');
   $('.header__nav').toggle('easing');
Index: themes/berlin/locales/de/main.po
===================================================================
--- themes/berlin/locales/de/main.po	(revision 3688)
+++ themes/berlin/locales/de/main.po	(revision 4035)
@@ -7,2 +7,5 @@
 msgid "Add ping"
 msgstr "Ping hinzufügen"
+
+msgid "Required field"
+msgstr "Pflichtfeld"
Index: themes/berlin/locales/es/main.po
===================================================================
--- themes/berlin/locales/es/main.po	(revision 3688)
+++ themes/berlin/locales/es/main.po	(revision 4035)
@@ -10,2 +10,5 @@
 msgid "From"
 msgstr "Del"
+
+msgid "Required field"
+msgstr "Campo obligatorio"
Index: themes/berlin/locales/fr/main.po
===================================================================
--- themes/berlin/locales/fr/main.po	(revision 3688)
+++ themes/berlin/locales/fr/main.po	(revision 4035)
@@ -32,4 +32,7 @@
 msgstr "Cacher le menu"
 
-msgid "Navigation"
-msgstr "Navigation"
+msgid "Main menu"
+msgstr "Menu principal"
+
+msgid "Required field"
+msgstr "Champ obligatoire"
