Index: admin/style/scss/init/_config.scss
===================================================================
--- admin/style/scss/init/_config.scss	(revision 3409)
+++ admin/style/scss/init/_config.scss	(revision 3427)
@@ -4,5 +4,5 @@
 // Do not support IE less than IE10
 $browser-minimum-versions: (
-  "ie": "10"
+  "ie": "11"
 );
 $graceful-usage-threshold: 100;
Index: inc/public/class.dc.template.php
===================================================================
--- inc/public/class.dc.template.php	(revision 3426)
+++ inc/public/class.dc.template.php	(revision 3424)
@@ -273,36 +273,26 @@
 	}
 
-	public function getFilters($attr,$default=array())
-	{
-		if (!is_array($attr) && !($attr instanceof arrayObject)) {
-			$attr = array();
-		}
-
-		$p = array_merge(
-			array(
-				0 => null,
-				'encode_xml' => 0,
-				'encode_html' => 0,
-				'cut_string' => 0,
-				'lower_case' => 0,
-				'upper_case' => 0,
-				'encode_url' => 0,
-				'remove_html' => 0,
-				'capitalize' => 0,
-				'strip_tags' => 0
-			),
-			$default
-		);
-
-		foreach($attr as $k => $v) {
-			// attributes names must follow this rule
-			$k = preg_filter('/[a-zA-Z0-9_]/','$0',$k);
-			if ($k) {
-				// addslashes protect var_export, str_replace protect sprintf;
-				$p[$k] = str_replace('%','%%',addslashes($v));
-			}
-		}
-
-		return "context::global_filters(%s,".var_export($p,true).",'".addslashes($this->current_tag)."')";
+	public function getFilters($attr)
+	{
+		$p[0] = '0';	# encode_xml
+		$p[1] = '0';	# remove_html
+		$p[2] = '0';	# cut_string
+		$p[3] = '0';	# lower_case
+		$p[4] = '0';	# upper_case or capitalize
+		$p[5] = '0';    # encode_url
+
+		$p[0] = (integer) (!empty($attr['encode_xml']) || !empty($attr['encode_html']));
+		$p[1] = (integer) !empty($attr['remove_html']);
+
+		if (!empty($attr['cut_string']) && (integer) $attr['cut_string'] > 0) {
+			$p[2] = (integer) $attr['cut_string'];
+		}
+
+		$p[3] = (integer) !empty($attr['lower_case']);
+		$p[4] = (integer) !empty($attr['upper_case']);
+		$p[4] = (!empty($attr['capitalize']) ? 2 : $p[4]);
+		$p[5] = (integer) !empty($attr['encode_url']);
+
+		return "context::global_filter(%s,".implode(",",$p).",'".addslashes($this->current_tag)."')";
 	}
 
Index: inc/public/lib.tpl.context.php
===================================================================
--- inc/public/lib.tpl.context.php	(revision 3426)
+++ inc/public/lib.tpl.context.php	(revision 2863)
@@ -103,15 +103,10 @@
 	}
 
-	/**
-	@deprecated since version 2.11 , use tpl_context::global_filters instead
-	*/
+    # Static methods
 	public static function global_filter($str,
 		$encode_xml, $remove_html, $cut_string, $lower_case, $upper_case ,$encode_url ,$tag='')
 	{
-		return $str;
-	}
-
-	public static function global_filters($str,$args,$tag='')
-	{
+		$args = func_get_args();
+		array_pop($args);
 		$args[0] =& $str;
 
@@ -119,28 +114,27 @@
 		$res = $GLOBALS['core']->callBehavior('publicBeforeContentFilter',$GLOBALS['core'],$tag,$args);
 
-		if ($args['strip_tags']) {
-			$str = self::strip_tags($str);
-		}
-		elseif ($args['remove_html']) {
+		if ($remove_html) {
 			$str = self::remove_html($str);
 			$str = preg_replace('/\s+/',' ',$str);
 		}
-		elseif ($args['encode_xml'] || $args['encode_html']) {
+
+		if ($encode_xml) {
 			$str = self::encode_xml($str);
 		}
 
-		if ($args['cut_string'] > 0) {
-			$str = self::cut_string($str,(integer) $args['cut_string']);
-		}
-
-		if ($args['lower_case']) {
+		if ($cut_string) {
+			$str = self::cut_string($str,(integer) $cut_string);
+		}
+
+		if ($lower_case) {
 			$str = self::lower_case($str);
-		} elseif ($args['capitalize']) {
-			$str = self::capitalize($str);
-		} elseif ($args['upper_case']) {
-			$str = self::upper_case($str);
-		}
-
-		if ($args['encode_url']) {
+		} elseif ($upper_case) {
+			if ($upper_case == 2) {
+				$str = self::capitalize($str);
+			} else {
+				$str = self::upper_case($str);
+			}
+		}
+		if ($encode_url) {
 			$str = self::encode_url($str);
 		}
@@ -170,9 +164,4 @@
 	{
 		return html::decodeEntities(html::clean($str));
-	}
-
-	public static function strip_tags($str)
-	{
-		return trim(preg_replace('/ {2,}/',' ',str_replace(array("\r","\n","\t"),' ',html::clean($str))));
 	}
 
Index: plugins/simpleMenu/_public.php
===================================================================
--- plugins/simpleMenu/_public.php	(revision 3159)
+++ plugins/simpleMenu/_public.php	(revision 3427)
@@ -115,5 +115,5 @@
 					}
 					if ($description == 'span' || $description == 'both') {
-						$span = ' <span>'.html::escapeHTML(__($m['descr'])).'</span>';
+						$span = ' <span class="simple-menu-descr">'.html::escapeHTML(__($m['descr'])).'</span>';
 					}
 				}
@@ -138,5 +138,7 @@
 							($item['class'] ? $item['class'] : '').
 						'">'.
-						'<a href="'.$href.'"'.$item['title'].'>'.$item['label'].$item['span'].'</a>'.
+						'<a href="'.$href.'"'.$item['title'].'>'.
+						'<span class="simple-menu-label">'.$item['label'].'</span>'.
+						$item['span'].'</a>'.
 						'</li>';
 			}
Index: themes/berlin/_define.php
===================================================================
--- themes/berlin/_define.php	(revision 3425)
+++ themes/berlin/_define.php	(revision 3427)
@@ -1,5 +1,5 @@
 <?php
 # -- BEGIN LICENSE BLOCK ---------------------------------------
-# This file is part of Currywurst, a theme for Dotclear
+# This file is part of Berlin, a theme for Dotclear
 #
 # Copyright (c) Association Dotclear
@@ -9,15 +9,13 @@
 #
 # -- END LICENSE BLOCK -----------------------------------------
-
 if (!defined('DC_RC_PATH')) { return; }
 
 $this->registerModule(
 	/* Name */				"Berlin",
-	/* Description*/		"Dotclear > 2.7 default theme",
+	/* Description*/		"Dotclear 2.7+ default theme",
 	/* Author */			"Dotclear Team",
-	/* Version */			'1.0',
+	/* Version */			'1.1',
 	/* Properties */		array(
 								'type' => 'theme',
-//								'tplset' => 'currywurst'
 								'tplset' => 'dotty'
 							)
Index: themes/berlin/_public.php
===================================================================
--- themes/berlin/_public.php	(revision 3427)
+++ themes/berlin/_public.php	(revision 3427)
@@ -0,0 +1,30 @@
+<?php
+# -- BEGIN LICENSE BLOCK ---------------------------------------
+# This file is part of Berlin, a theme for Dotclear
+#
+# Copyright (c) Association Dotclear
+# Licensed under the GPL version 2.0 license.
+# See LICENSE file or
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+#
+# -- END LICENSE BLOCK -----------------------------------------
+if (!defined('DC_RC_PATH')) { return; }
+
+l10n::set(dirname(__FILE__).'/locales/'.$_lang.'/main');
+//__('Show menu').__('Hide menu').__('Navigation');
+
+$core->addBehavior('publicHeadContent',array('behaviorBerlinTheme','publicHeadContent'));
+
+class behaviorBerlinTheme
+{
+	public static function publicHeadContent()
+	{
+//		global $core,$_ctx;
+
+		echo dcUtils::jsVars(array(
+			'dotclear_berlin_show_menu' => __('Show menu'),
+			'dotclear_berlin_hide_menu' => __('Hide menu'),
+			'dotclear_berlin_navigation' => __('Navigation')
+			));
+	}
+}
Index: themes/berlin/locales/fr/main.po
===================================================================
--- themes/berlin/locales/fr/main.po	(revision 3254)
+++ themes/berlin/locales/fr/main.po	(revision 3427)
@@ -40,2 +40,11 @@
 msgid "Send"
 msgstr "Envoyer"
+
+msgid "Show menu"
+msgstr "Montrer le menu"
+
+msgid "Hide menu"
+msgstr "Cacher le menu"
+
+msgid "Navigation"
+msgstr "Navigation"
Index: themes/berlin/scss/libs/_scut.scss
===================================================================
--- themes/berlin/scss/libs/_scut.scss	(revision 2640)
+++ themes/berlin/scss/libs/_scut.scss	(revision 3427)
@@ -1551,5 +1551,5 @@
 
 @mixin scut-reverse-italics (
-  $elements: false
+  $elements: null
 ) {
 
Index: themes/berlin/scss/partials/_header.scss
===================================================================
--- themes/berlin/scss/partials/_header.scss	(revision 2949)
+++ themes/berlin/scss/partials/_header.scss	(revision 3427)
@@ -68,5 +68,5 @@
         padding-bottom: .25em;
         text-align: center;
-        span {
+        span:not(.simple-menu-label) {
             @include adjust-font-size-to(14px);
             font-family: $serif;
Index: themes/berlin/style.css
===================================================================
--- themes/berlin/style.css	(revision 3211)
+++ themes/berlin/style.css	(revision 3427)
@@ -538,5 +538,5 @@
     padding-bottom: .25em;
     text-align: center; }
-    .header__nav li span {
+    .header__nav li span:not(.simple-menu-label) {
       font-size: 0.875em;
       line-height: 1.7142857em;
Index: themes/berlin/tpl/user_footer.html
===================================================================
--- themes/berlin/tpl/user_footer.html	(revision 3332)
+++ themes/berlin/tpl/user_footer.html	(revision 3427)
@@ -1,45 +1,40 @@
-
 <script type="text/javascript">
-        $("html").addClass("js");
-        // Show/Hide main menu
-        $(".header__nav").
-        before('<button id="hamburger" type="button"><span class="visually-hidden">Navigation</span></button>').
-        toggle();
-        $("#hamburger").click(function(){
-                $(this).toggleClass("open");
-                $(".header__nav").toggle('easing');
-        });
-        // Show/Hide sidebar on small screens
-        $("#main").prepend('<button id="offcanvas-on" type="button"><span class="visually-hidden">Show menu</span></button>');
-        $("#offcanvas-on").click(function(){
-            var btn = $('<button id="offcanvas-off" type="button"><span class="visually-hidden">Hide menu</span></button>');
-            $("#wrapper").addClass("off-canvas");
-            $("#footer").addClass("off-canvas");
-            $("#sidebar").prepend(btn);
-            btn.click(function(evt){
-                $("#wrapper").removeClass("off-canvas");
-                $("#footer").removeClass("off-canvas");
-                evt.target.remove();
-            });
-        });
-        $(document).ready(function(){
-        // totop scroll
-        $(window).scroll(function() {
-                if($(this).scrollTop() != 0) {
-                    $('#gotop').fadeIn();
-                } else {
-                    $('#gotop').fadeOut();
-                }
-            });
-
-            $('#gotop').click(function(e) {
-                $('body,html').animate({scrollTop:0},800);
-                e.preventDefault();
-            });
-});
+	$("html").addClass("js");
+	// Show/Hide main menu
+	$(".header__nav").
+	before('<button id="hamburger" type="button"><span class="visually-hidden">' + dotclear_berlin_navigation + '</span></button>').
+	toggle();
+	$("#hamburger").click(function() {
+		$(this).toggleClass("open");
+		$(".header__nav").toggle('easing');
+	});
+	// Show/Hide sidebar on small screens
+	$("#main").prepend('<button id="offcanvas-on" type="button"><span class="visually-hidden">' + dotclear_berlin_show_menu + '</span></button>');
+	$("#offcanvas-on").click(function() {
+		var btn = $('<button id="offcanvas-off" type="button"><span class="visually-hidden">' + dotclear_berlin_hide_menu + '</span></button>');
+		$("#wrapper").addClass("off-canvas");
+		$("#footer").addClass("off-canvas");
+		$("#sidebar").prepend(btn);
+		btn.click(function(evt) {
+			$("#wrapper").removeClass("off-canvas");
+			$("#footer").removeClass("off-canvas");
+			evt.target.remove();
+		});
+	});
+	$(document).ready(function() {
+		// totop scroll
+		$(window).scroll(function() {
+			if ($(this).scrollTop() != 0) {
+				$('#gotop').fadeIn();
+			} else {
+				$('#gotop').fadeOut();
+			}
+		});
+		$('#gotop').click(function(e) {
+			$('body,html').animate({
+				scrollTop: 0
+			}, 800);
+			e.preventDefault();
+		});
+	});
 </script>
-<!--
-Todo:
-Off-canvas
-    Passer les chaînes de caractères en variables pour les traductions.
--->
