Index: .hgsubstate
===================================================================
--- .hgsubstate	(revision 1860)
+++ .hgsubstate	(revision 1742)
@@ -1,1 +1,1 @@
-d56b02c87260d4e54872c54fba979e03c0b5422b inc/libs/clearbricks
+33139a996922b7a21b658961f8052c869bea60a1 inc/libs/clearbricks
Index: admin/_charte.html
===================================================================
--- admin/_charte.html	(revision 1793)
+++ admin/_charte.html	(revision 1793)
@@ -0,0 +1,368 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+	<meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />
+	<meta name="GOOGLEBOT" content="NOSNIPPET" />
+	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+	<title>Bibliothèque de styles - Dotclear - 2.6</title>
+	<link rel="icon" type="image/png" href="images/favicon.png" />
+	<!--[if lt IE 9]>
+	<script type="text/javascript" src="js/ie7/IE9.js"></script>
+	<link rel="stylesheet" type="text/css" href="style/iesucks.css" />
+	<![endif]-->
+	<link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />
+	<style type="text/css">
+		#content > h2 {padding-top: 2.5em;}
+		#content > h2:first-child {padding-top: 0}
+		.one-box .box {border: 1px solid #ddd; padding: 2px .5em;}
+	</style>
+	<script type="text/javascript" src="js/jquery/jquery.js"></script>
+	<script type="text/javascript" src="js/jquery/jquery.pageTabs.js"></script>
+	<script type="text/javascript" src="js/jquery/jquery.biscuit.js"></script>
+	<script type="text/javascript" src="js/jquery/jquery.bgFade.js"></script>
+	<script type="text/javascript" src="js/common.js"></script>
+	<script type="text/javascript" src="js/prelude.js"></script>
+	<script type="text/javascript">
+	//<![CDATA[
+		dotclear.img_plus_alt = 'dévoiler';
+		dotclear.img_minus_alt = 'cacher';
+		dotclear.img_menu_on = 'images/menu_on.png';
+		dotclear.img_menu_off = 'images/menu_off.png';
+		dotclear.msg.help = 'Aide pour cette page';
+		dotclear.msg.help_hide = 'Masquer';
+		dotclear.msg.error = 'Erreur :';
+	//]]>
+	</script>
+	<script type="text/javascript">
+	//<![CDATA[
+		dotclear.unfolded_sections = {'dc_favorites_menu':true,'dc_system_menu':true};
+	//]]>
+	</script>
+	<script type="text/javascript">
+	//<![CDATA[
+		$(function() {
+			$.pageTabs('two-boxes');
+		});
+	//]]>
+	</script>
+</head>
+
+<body id="dotclear-admin" class="no-js">
+	<div id="header">
+		<ul id="prelude">
+			<li><a href="#content">Aller au contenu</a></li>
+			<li><a href="#main-menu">Aller au menu</a></li>
+			<li><a href="#qx">Aller à la recherche</a></li>
+		</ul>
+		<div id="top"><h1><a href="./index.php">Bibliothèque de styles - Dotclear - 2.6+</a></h1></div>
+		<div id="info-boxes">
+			<div id="info-box1">
+				<p>Informations sur les styles disponibles dans l'admin pour les développeurs de plugins</p>
+			</div>
+			<div id="info-box2">Octobre 2013</div>
+		</div>	
+	</div><!-- /header -->
+
+	<div id="wrapper" class="clearfix">
+		<div id="main">
+			<div id="content" class="clearfix">
+
+				<h2><span class="page-title">Typographie</span></h2>
+				<h3 id="texte">Textes</h3>
+					<p>La font-size de base est à 1.2rem (la valeur <code>1rem</code> correspond à 10px). Si vous utilisez l'unité <code>rem</code> pensez à faire précéder la déclaration par son équivalent 
+					en pixels pour rester compatible avec Internet Explorer. L'interlignage courant est à 1.5.</p>
+					<p>La liste suivante est de class <code>"nice"</code>. Elle est semblable aux listes ordinaires mais avec des puces carrées.</p>
+					<ul class="nice">
+						<li>Les textes courants sont en Arial, Helvetica ou sans-serif. </li>
+						<li>Le code adopte la fonte Andale Mono, Courier New ou monospace.</li>
+						<li>Les liens ont des aspects différents au focus et au survol. Il faut conserver cette distinction, nécessaire à l'accessibilité et l'ergonomie.</li>
+					</ul>
+
+					<h3 id="titres">Titre h3</h3>
+						<p>Le titre de niveau h1 est réservé au titre du site-admin. Le titre de niveau h2 est réservé au breadcrumb/titre de la page courante. On utilise les titres de niveau h3 en premier niveau de titre à l'intérieur des pages, comme sur la page Import/Export.</p>
+						<p>Il ne faut pas choisir un niveau de titre en fonction de son aspect mais respecter une hiérarchie cohérente. On peut obtenir visuellement l'aspect d'un titre h3 en donnant à l'élément la class <code>"as_h3"</code>.</p>
+					<h4>Titre de niveau h4</h4>
+						<p>On peut obtenir visuellement l'aspect d'un titre h4 en donnant à l'élément la class <code>"as_h4"</code>.</p>
+					<h5>Titre de niveau h5</h5>
+						<p>Le titre de niveau h5 est assez peu employé mais son style est prévu. Dans une admin de base, on utilise les niveaux
+						h5 pour certains éléments du sidebar du billet, mais un style particulier leur est alors appliqué pour ressembler aux autres
+						items de ce sidebar.</p>
+					<div class="fieldset">
+						<h4>Titres des encadrés</h4>
+							<p>Les titres de boîte encadrées (div de class <code>"fieldset"</code>, comme ici) se présentent comme ci-dessus.</p>
+							<p>On peut utiliser, quel que soit le niveau hx de cet intertitre la class <code>"pretty-title"</code> pour obtenir l'effet ci-dessus.</p>
+					</div>
+					<h4 class="smart-title">Autre variante</h4>
+						<p>On dispose également d'une class <code>"smart-title"</code> pour obtenir une présentation comme celle du titre de ce paragraphe.</p>
+
+				<h2><span class="page-title">Layouts</span></h2>
+
+				<h3 id="onglets">Onglets</h3>
+				<p>Les descriptions des constructions en multi-colonnes ci-dessous présentent un exemple de répartition en onglets.</p>
+
+				<h3 id="multi-colonnage">Multi-colonnage</h3>
+				<div id="one-box" class="multi-part" title="One-box">
+					<h4>Boîtes distribuées horizontalement</h4>
+					<div class="one-box">
+						<div class="box">
+							<p><span class="step">1</span> Toutes les boîtes de class <code>"box"</code> placées à l'intérieur d'une boîte de class <code>"one-box"</code> se distribuent horizontalement (imaginez que chaque boîte est un mot dans un paragraphe). Si les largeurs de ces boîtes ne sont pas spécifiquement définies dans la CSS, elle s'ajustent à leur contenu.</p>
+						</div>
+						<div class="box">
+							<p><span class="step">2</span> Voici une petite boîte.</p>
+						</div>
+						<div class="box">
+							<p><span class="step">3</span> Une autre petite boîte.</p>
+						</div>
+						<div class="box">
+							<p><span class="step">4</span> Par défaut les « lignes »  de boîtes <code>"box"</code> sont justifiées au sein de la boîte <code>"one-box"</code> et l'espacement se répartit entre elles.</p>
+						</div>
+						<div class="box">
+							<p><span class="step">5</span> Si vous souhaitez un autre alignement des boîtes entre elles vous pouvez ajouter les class : 
+							<ul class="nice clear">
+								<li><code>"txt-left"</code>,</li>
+								<li><code>"txt-right"</code></li> 
+								<li>ou <code>"txt-center"</code></li>
+							</ul>
+							<p> à la class <code>"one-box"</code>.</p>
+						</div>
+						<div class="box">
+							<p><span class="step">6</span> Le cadre placé ici autour de chaque boîte ne fait pas partie des styles par défaut.</p>
+						</div>
+					</div>
+				</div>
+				<div id="two-boxes" class="multi-part" title="Two-boxes">
+					<h4>Boîtes distribuées deux par deux</h4>
+					<div>
+						<div class="two-boxes odd">
+							<p><span class="step">1</span> Les boîtes de class <code>"two-boxes"</code> ont une règle CSS <code>display:inline-block;</code>. Elles se rangent alternativement à gauche et à droite. Pour plus de clarté, les blocs sont ici numérotés avec leur ordre dans le flux.</p>
+						</div><!--
+						--><div class="two-boxes even">
+							<p><span class="step">2</span> S'il n'y a que deux boîtes, une autre class n'est pas nécessaire. S'il y en a plusieurs, il est conseillé de leur attribuer alternativement les class <code>"odd"</code> et <code>"even"</code> pour que les marges se placent correctement.</p>
+						</div><!--
+						--><div class="two-boxes odd">
+							<p><span class="step">3</span> Attention, il faut soit ne pas retourner à la ligne entre la fermeture d'une boîte <code>"two-boxes"</code> et l'ouverture de la suivante soit adopter la méthode de commentaire vide mise en place ici et expliquée chez <a href="http://www.alsacreations.com/astuce/lire/1432-display-inline-block-espaces-indesirables.html">Alsacréations</a> («&nbsp;Méthode 2&nbsp;»).</p>
+						</div><!--
+						--><div class="two-boxes even">
+							<div class="box">
+								<p><span class="step">4</span> Toutes les boîtes de class <code>"box"</code><br />
+								 placées au sein d'une boîte <code>"two-boxes"</code>…</p>
+							</div>
+							<div class="box">
+								<p><span class="step">4 bis</span>… se distribuent horizontalement comme dans <br />
+									une boîte <code>"one-box"</code>.</p>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div id="three-boxes" class="multi-part" title="Three-boxes">
+					<h4>Boîtes distribuées trois par trois</h4>
+					<div>
+						<div class="three-boxes">
+							<div class="box">
+								<p>Sur le même principe que les « two-boxes » on peut utiliser des boîtes de class <code>"three-boxes"</code> pour répartir les contenus sur trois colonnes de 30% chacune (le reste est occupé par les marges).</p>
+							</div>
+						</div><!--
+						--><div class="three-boxes">
+							<div class="box">
+								<p>Comme pour les "two-boxes" il faut soit ne pas laisser d'espace ou de retour à la ligne entre les boîtes, soit adopter la méthode recommandée plus haut.</p>
+							</div>
+						</div><!--
+						--><div class="three-boxes">
+							<div class="box">
+								<p>Dans les « two-boxes » comme dans les « three-boxes », on peut placer à l'intérieur plusieurs autres div de class="box" qui s'afficheront les unes à côté des autres ou l'une en dessous de l'autre selon la place dont elles disposent.</p>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div id="two-cols-50-50" class="multi-part" title="Two-cols (50/50)">
+					<h4>Deux colonnes flottantes de largeurs égales</h4>
+					<div class="two-cols clearfix">
+						<div class="col">
+							<p>La div englobante porte la class <code>"two-cols"</code>, chacune de ses div porte la class <code>"col"</code>.
+							Sans autre précision les deux colonnes sont d'égale largeur.</p>
+						</div>
+						<div class="col">
+							<p>Attention : ces colonnes sont construites avec des flottants, il faut donc penser à mettre une class <code>clear</code> à l'élément suivant ou ajouter la class <code>"clearfix"</code> à la <code>div class="two-cols"</code>.</p>
+						</div>
+					</div>
+				</div>
+				<div id="two-cols-70-30" class="multi-part" title="Two-cols (70/30)">
+					<h4>Deux colonnes flottantes de largeurs inégales</h4>
+					<div class="two-cols clearfix">
+						<div class="col70">
+							<p><span class="step">col70</span> La div englobante porte la class <code>"two-cols"</code>.
+							Pour obtenir des colonnes inégales, on dispose des classes <code>"col70"</code> et <code>col30</code> à attribuer à l'une ou à l'autre de ses colonnes.</p>
+						</div>
+						<div class="col30">
+							<p><span class="step">col30</span> Penser à mettre une class <code>"clear"</code> à l'élément suivant ou ajouter la class <code>"clearfix"</code> <code>div class="two-cols"</code>.</p>
+						</div>
+					</div>
+				</div>
+				<div id="three-cols" class="multi-part" title="Three-cols (deprecated)">
+					<h4>Trois colonnes flottantes de largeurs égales</h4>
+					<p class="warning"><strong>Deprecated.</strong> Ces règles sont conservées dans la 2.6 par souci de rétro-compatibilité mais il est recommandé d'utiliser désormais le colonnage <a href="#three-boxes">three-boxes</a>.</p>
+					<div class="three-cols clearfix">
+						<div class="col">
+							<h5>Colonne 1</h5>
+							<p>La div englobante porte la class <code>"three-cols"</code>, chacune de ses div porte la class <code>"col"</code>. Les trois colonnes sont d'égale largeur.</p>
+						</div>
+						<div class="col">
+							<h5>Colonne 2</h5>
+							<p>Voici une deuxième colonne. N'oubliez pas d'ajouter la class <code>"clearfix"</code> à la class <code>"three-cols"</code> ou un élément de class <code>"clear"</code> après cet élément.</p>
+						</div>
+						<div class="col">
+							<h5>Colonne 3</h5>
+							<p>Voilà la troisième colonne.</p>
+						</div>
+					</div>
+				</div>
+				<hr />
+				<p><strong>Note :</strong> les valeurs en pourcentage et les numérotations sont placées dans un <code>span class="step"</code>.</p>
+
+				<h2><span class="page-title">Interactions</span></h2>
+
+				<h3 id="elements">Éléments de formulaire</h3>
+					<form class="two-cols clearfix" action="#">
+						<div class="col">
+							<p><label for="ex1">Label simple + input text :</label><input id="ex1" type="text" /></p>
+							<p class="form-note">p class="form-note".</p>
+							<p><label for="ex2" class="required"><abbr title="'.__('Required field').'">*</abbr> Label class="required" :</label> <input id="ex2" type="text" /></p>
+							<p><label for="ex3">Input class="maximal" :</label> <input id="ex3" type="text" class="maximal" /></p>
+							<p><label for="ex4" class="classic">Label class="classic" :</label> <input id="ex4" type="text" /></p>
+						</div>
+						<div class="col">
+							<p class="field"><label for="ex5">p.field label + input :</label><input id="ex5" type="text" /></p>
+							<p class="field"><label for="ex6">p.field label + select :</label>
+							<select id="ex6"><option value="opt2">Option 2</option><option selected="selected" value="opt2">Option 2</option></select>
+							</p>
+							<p><label class="classic" for="ex7"><input type="checkbox" checked="checked" id="ex7" value="1" name="ex7" />
+								Checkbox (label.classic)</label></p>
+							<p><label class="classic" for="ex8-1"><input type="radio" checked="checked" id="ex8-1" value="ex8-1" name="ex8-1" />
+							 Bouton radio 1 (label.classic)</label></p>
+							 <p><label class="classic" for="ex8-2"><input type="radio" id="ex8-2" value="ex8-2" name="ex8-2" />
+							 Bouton radio 2 (label.classic)</label></p>
+							 <p class="form-note">Les checkboxes et les boutons radio sont dans la balise &lt;label&gt;.</p>
+						</div>
+					</form>
+					<form action="#" class="clear">
+						<fieldset>
+						<legend>Légende de fieldset</legend>
+							<p>Attention: Les fieldsets ne doivent être utilisés que pour isoler un groupe de champs au sein d'un formulaire.</p>
+						</fieldset>
+					</form>
+
+				<h3 id="boutons">Boutons</h3>
+					<div class="clearfix">
+					<p><a class="button add">a.button.add</a> Se place en haut à droite (dans un p.top-add)</p>
+						<p><input type="button" value="Type button" /> <a href="#" class="button">a.button</a> <input type="reset" value="Type reset" /> <a href="#" class="button reset">a.reset</a></p>
+						<p><input type="submit" value="Type submit" /> <input type="submit" class="delete" value="Type submit class delete" /> <a href="#" class="button delete">a.button delete</a></p>
+						<p><input type="submit" value="Type submit class disabled" class="disabled" /></p>
+					</div>
+
+				<h3 id="messages">Messages</h3>
+				<h4 class="smart-title">Messages système</h4>
+					<p>Il existe quatre types de messages système auxquels correspondent des classes CSS : .error, .message, .success, .warning-msg. Ils s'affichent en haut de page, sous le titre/breadcrumb.</p>
+					<div class="message">
+						<p>Message simple. Le plus souvent horodaté dcPage::message</p>
+					</div>
+					<div class="success">
+						<p>Message de succès. Le plus souvent horodaté dcPage::success</p>
+					</div>
+					<div class="warning-msg">
+						<p>Message warning. Non horodaté dcPage::warning</p>
+					</div>
+					<div class="error">
+						<p>Message d'erreur. Non horodaté dcPage::error</p>
+					</div>
+					<p>La classe .static-msg peut être utilisée directement pour affichage en haut de page :</p>
+					<div class="static-msg">
+						<p>Comme le message simple mais sans effets de transition.</p>
+					</div>
+					<p>Un type de message réservé à Dotclear peut s'afficher en haut de la page :</p>
+					<div class="dc-update">
+						<h3>Dotclear 42 est disponible</h3>
+						<p><a class="button submit" href="#">Mettre à jour maintenant</a>
+						<a href="u#">Me le rappeler plus tard</a>
+						<a href="#" class="updt-info">information sur cette version</a></p>
+					</div>
+				<h4 class="smart-title">Messages contextuels</h4>
+					<p class="warn">Paragraphe de message d'alerte class warn ou warning.</p>
+					<p class="info">Paragraphe de message de class info.</p>
+					<p>Ces messages sont en display:inline-block. Le fond s'adapte à la longueur du message.</p>
+
+				<h2><span class="page-title">Navigation</span></h2>
+
+				<h3 id="direct">Selecteur d'accès direct</h3>
+					<p>Sur des pages longues et denses comme les pages about:config ou about:preferences, on peut utiliser un sélecteur pour faciliter l'accès direct aux sections.</p>
+					<p class="anchor-nav">
+						<label class="classic" for="lp_nav">Aller à : </label> 
+						<select id="lp_nav" name="lp_nav">
+							<option value="#l_accessibility">accessibility</option>
+							<option value="#l_dashboard">dashboard</option>
+							<option value="#l_dmhostingmonitor">dmhostingmonitor</option>
+							<option value="#l_dmpending">dmpending</option>
+							<option value="#l_favorites">favorites</option>
+							<option value="#l_filters">filters</option>
+							<option value="#l_interface">interface</option>
+							<option value="#l_lists">lists</option>
+							<option value="#l_toggles">toggles</option>
+						</select>
+						<input type="submit" id="lp_submit" value="Ok" style="display: none;" />
+						<input type="hidden" value="aboutConfig" name="p" />
+					</p>
+				<h3 id="prevnext">Navigation contextuelle</h3>
+					<p><a title="Titre du lien (nouvelle fenêtre)" onclick="window.open(this.href);return false;" href="http://fr.dotclear.org/blog" class="onblog_link">Lien vers le blog <img alt="" src="images/outgoing-blue.png" /></a></p>
+					<p class="nav_prevnext"><a title="Titre de l'élément précédente" href="post.php?id=4145">«&nbsp;Élément précédent</a> | <a title="Titre de l'élément suivant" href="#">Élément suivant&nbsp;»</a></p>
+
+			</div><!-- /content -->
+		</div><!-- /main -->
+		<div id="main-menu">
+			<form id="search-menu" action="search.php" method="get">
+				<p><label for="qx" class="hidden">Chercher : </label><input type="text" size="30" name="qx" id="qx" maxlength="255"  /><input type="submit" value="OK" /></p>
+			</form>
+			<div id="favorites-menu">
+				<h3>Typo</h3>
+				<ul>
+					<li><a href="#texte">Texte</a></li>
+					<li><a href="#titres">Titres hx</a></li>
+				</ul>
+			</div><!-- /favorites-menu -->
+			<div id="blog-menu">
+				<h3>Layouts</h3>
+				<ul>
+					<li><a href="#onglets">Onglets</a></li>
+					<li><a href="#multi-colonnage">Multi-colonnage</a></li>
+				</ul>
+			</div><!-- /blog-menu -->
+			<div id="system-menu">
+				<h3>Interactions</h3>
+				<ul>
+					<li><a href="#elements">Éléments de formulaire</a></li>
+					<li><a href="#boutons">Boutons</a></li>
+					<li><a href="#messages">Messages</a></li>
+				</ul>
+			</div><!-- /system-menu -->
+			<div id="plugins-menu">
+				<h3>Navigation</h3>
+				<ul>
+					<li><a href="#direct">Accès direct</a></li>
+					<li><a href="#prevnext">Précédent, suivant</a></li>
+				</ul>
+			</div><!-- /plugins-menu -->
+		</div><!-- /main-menu -->
+
+		<div id="footer">
+			<a href="http://dotclear.org/" title="Merci de manger des clafoutis."><img src="style/dc_logos/w-dotclear90.png" alt="Merci d'utiliser Dotclear 2.6-dev." /></a>
+		</div><!-- /footer -->
+												<!-- 
+												                  .
+												               ,;:'`'::
+												            __||
+												      _____/LLLL\_
+												      \__________"|
+												    ~^~^~^~^~^~^~^~^~^~
+												 -->
+	</div><!-- /wrapper -->
+</body>
+</html>
Index: dmin/_charte.php
===================================================================
--- admin/_charte.php	(revision 1840)
+++ 	(revision )
@@ -1,384 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & 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 -----------------------------------------
-
-require dirname(__FILE__).'/../inc/admin/prepend.php';
-
-dcPage::check('usage,contentadmin');
-?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-	<meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />
-	<meta name="GOOGLEBOT" content="NOSNIPPET" />
-	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
-	<title>Bibliothèque de styles - Dotclear - 2.6</title>
-	<link rel="icon" type="image/png" href="images/favicon.png" />
-	<!--[if lt IE 9]>
-	<script type="text/javascript" src="js/ie7/IE9.js"></script>
-	<link rel="stylesheet" type="text/css" href="style/iesucks.css" />
-	<![endif]-->
-	<link rel="stylesheet" href="style/default.css" type="text/css" media="screen" />
-	<style type="text/css">
-		#content > h2 {padding-top: 2.5em;}
-		#content > h2:first-child {padding-top: 0}
-		.one-box .box {border: 1px solid #ddd; padding: 2px .5em;}
-	</style>
-	<script type="text/javascript" src="js/jquery/jquery.js"></script>
-	<script type="text/javascript" src="js/jquery/jquery.pageTabs.js"></script>
-	<script type="text/javascript" src="js/jquery/jquery.biscuit.js"></script>
-	<script type="text/javascript" src="js/jquery/jquery.bgFade.js"></script>
-	<script type="text/javascript" src="js/common.js"></script>
-	<script type="text/javascript" src="js/prelude.js"></script>
-	<script type="text/javascript">
-	//<![CDATA[
-		dotclear.img_plus_alt = 'dévoiler';
-		dotclear.img_minus_alt = 'cacher';
-		dotclear.img_menu_on = 'images/menu_on.png';
-		dotclear.img_menu_off = 'images/menu_off.png';
-		dotclear.msg.help = 'Aide pour cette page';
-		dotclear.msg.help_hide = 'Masquer';
-		dotclear.msg.error = 'Erreur :';
-	//]]>
-	</script>
-	<script type="text/javascript">
-	//<![CDATA[
-		dotclear.unfolded_sections = {'dc_favorites_menu':true,'dc_system_menu':true};
-	//]]>
-	</script>
-	<script type="text/javascript">
-	//<![CDATA[
-		$(function() {
-			$.pageTabs('two-boxes');
-		});
-	//]]>
-	</script>
-</head>
-
-<body id="dotclear-admin" class="no-js">
-	<div id="header">
-		<ul id="prelude">
-			<li><a href="#content">Aller au contenu</a></li>
-			<li><a href="#main-menu">Aller au menu</a></li>
-			<li><a href="#qx">Aller à la recherche</a></li>
-		</ul>
-		<div id="top"><h1><a href="./index.php">Bibliothèque de styles - Dotclear - 2.6+</a></h1></div>
-		<div id="info-boxes">
-			<div id="info-box1">
-				<p>Informations sur les styles disponibles dans l'admin pour les développeurs de plugins</p>
-			</div>
-			<div id="info-box2">Octobre 2013</div>
-		</div>	
-	</div><!-- /header -->
-
-	<div id="wrapper" class="clearfix">
-		<div id="main">
-			<div id="content" class="clearfix">
-
-				<h2><span class="page-title">Typographie</span></h2>
-				<h3 id="texte">Textes</h3>
-					<p>La font-size de base est à 1.2rem (la valeur <code>1rem</code> correspond à 10px). Si vous utilisez l'unité <code>rem</code> pensez à faire précéder la déclaration par son équivalent 
-					en pixels pour rester compatible avec Internet Explorer. L'interlignage courant est à 1.5.</p>
-					<p>La liste suivante est de class <code>"nice"</code>. Elle est semblable aux listes ordinaires mais avec des puces carrées.</p>
-					<ul class="nice">
-						<li>Les textes courants sont en Arial, Helvetica ou sans-serif. </li>
-						<li>Le code adopte la fonte Andale Mono, Courier New ou monospace.</li>
-						<li>Les liens ont des aspects différents au focus et au survol. Il faut conserver cette distinction, nécessaire à l'accessibilité et l'ergonomie.</li>
-					</ul>
-
-					<h3 id="titres">Titre h3</h3>
-						<p>Le titre de niveau h1 est réservé au titre du site-admin. Le titre de niveau h2 est réservé au breadcrumb/titre de la page courante. On utilise les titres de niveau h3 en premier niveau de titre à l'intérieur des pages, comme sur la page Import/Export.</p>
-						<p>Il ne faut pas choisir un niveau de titre en fonction de son aspect mais respecter une hiérarchie cohérente. On peut obtenir visuellement l'aspect d'un titre h3 en donnant à l'élément la class <code>"as_h3"</code>.</p>
-					<h4>Titre de niveau h4</h4>
-						<p>On peut obtenir visuellement l'aspect d'un titre h4 en donnant à l'élément la class <code>"as_h4"</code>.</p>
-					<h5>Titre de niveau h5</h5>
-						<p>Le titre de niveau h5 est assez peu employé mais son style est prévu. Dans une admin de base, on utilise les niveaux
-						h5 pour certains éléments du sidebar du billet, mais un style particulier leur est alors appliqué pour ressembler aux autres
-						items de ce sidebar.</p>
-					<div class="fieldset">
-						<h4>Titres des encadrés</h4>
-							<p>Les titres de boîte encadrées (div de class <code>"fieldset"</code>, comme ici) se présentent comme ci-dessus.</p>
-							<p>On peut utiliser, quel que soit le niveau hx de cet intertitre la class <code>"pretty-title"</code> pour obtenir l'effet ci-dessus.</p>
-					</div>
-					<h4 class="smart-title">Autre variante</h4>
-						<p>On dispose également d'une class <code>"smart-title"</code> pour obtenir une présentation comme celle du titre de ce paragraphe.</p>
-
-				<h2><span class="page-title">Layouts</span></h2>
-
-				<h3 id="onglets">Onglets</h3>
-				<p>Les descriptions des constructions en multi-colonnes ci-dessous présentent un exemple de répartition en onglets.</p>
-
-				<h3 id="multi-colonnage">Multi-colonnage</h3>
-				<div id="one-box" class="multi-part" title="One-box">
-					<h4>Boîtes distribuées horizontalement</h4>
-					<div class="one-box">
-						<div class="box">
-							<p><span class="step">1</span> Toutes les boîtes de class <code>"box"</code> placées à l'intérieur d'une boîte de class <code>"one-box"</code> se distribuent horizontalement (imaginez que chaque boîte est un mot dans un paragraphe). Si les largeurs de ces boîtes ne sont pas spécifiquement définies dans la CSS, elle s'ajustent à leur contenu.</p>
-						</div>
-						<div class="box">
-							<p><span class="step">2</span> Voici une petite boîte.</p>
-						</div>
-						<div class="box">
-							<p><span class="step">3</span> Une autre petite boîte.</p>
-						</div>
-						<div class="box">
-							<p><span class="step">4</span> Par défaut les « lignes »  de boîtes <code>"box"</code> sont justifiées au sein de la boîte <code>"one-box"</code> et l'espacement se répartit entre elles.</p>
-						</div>
-						<div class="box">
-							<p><span class="step">5</span> Si vous souhaitez un autre alignement des boîtes entre elles vous pouvez ajouter les class :</p>
-							<ul class="nice clear">
-								<li><code>"txt-left"</code>,</li>
-								<li><code>"txt-right"</code></li> 
-								<li>ou <code>"txt-center"</code></li>
-							</ul>
-							<p>à la class <code>"one-box"</code>.</p>
-						</div>
-						<div class="box">
-							<p><span class="step">6</span> Le cadre placé ici autour de chaque boîte ne fait pas partie des styles par défaut.</p>
-						</div>
-					</div>
-				</div>
-				<div id="two-boxes" class="multi-part" title="Two-boxes">
-					<h4>Boîtes distribuées deux par deux</h4>
-					<div>
-						<div class="two-boxes odd">
-							<p><span class="step">1</span> Les boîtes de class <code>"two-boxes"</code> ont une règle CSS <code>display:inline-block;</code>. Elles se rangent alternativement à gauche et à droite. Pour plus de clarté, les blocs sont ici numérotés avec leur ordre dans le flux.</p>
-						</div><!--
-						--><div class="two-boxes even">
-							<p><span class="step">2</span> S'il n'y a que deux boîtes, une autre class n'est pas nécessaire. S'il y en a plusieurs, il est conseillé de leur attribuer alternativement les class <code>"odd"</code> et <code>"even"</code> pour que les marges se placent correctement.</p>
-						</div><!--
-						--><div class="two-boxes odd">
-							<p><span class="step">3</span> Attention, il faut soit ne pas retourner à la ligne entre la fermeture d'une boîte <code>"two-boxes"</code> et l'ouverture de la suivante soit adopter la méthode de commentaire vide mise en place ici et expliquée chez <a href="http://www.alsacreations.com/astuce/lire/1432-display-inline-block-espaces-indesirables.html">Alsacréations</a> («&nbsp;Méthode 2&nbsp;»).</p>
-						</div><!--
-						--><div class="two-boxes even">
-							<div class="box">
-								<p><span class="step">4</span> Toutes les boîtes de class <code>"box"</code><br />
-								 placées au sein d'une boîte <code>"two-boxes"</code>…</p>
-							</div>
-							<div class="box">
-								<p><span class="step">4 bis</span>… se distribuent horizontalement comme dans <br />
-									une boîte <code>"one-box"</code>.</p>
-							</div>
-						</div>
-					</div>
-				</div>
-				<div id="three-boxes" class="multi-part" title="Three-boxes">
-					<h4>Boîtes distribuées trois par trois</h4>
-					<div>
-						<div class="three-boxes">
-							<div class="box">
-								<p>Sur le même principe que les « two-boxes » on peut utiliser des boîtes de class <code>"three-boxes"</code> pour répartir les contenus sur trois colonnes de 30% chacune (le reste est occupé par les marges).</p>
-							</div>
-						</div><!--
-						--><div class="three-boxes">
-							<div class="box">
-								<p>Comme pour les "two-boxes" il faut soit ne pas laisser d'espace ou de retour à la ligne entre les boîtes, soit adopter la méthode recommandée plus haut.</p>
-							</div>
-						</div><!--
-						--><div class="three-boxes">
-							<div class="box">
-								<p>Dans les « two-boxes » comme dans les « three-boxes », on peut placer à l'intérieur plusieurs autres div de class="box" qui s'afficheront les unes à côté des autres ou l'une en dessous de l'autre selon la place dont elles disposent.</p>
-							</div>
-						</div>
-					</div>
-				</div>
-				<div id="two-cols-50-50" class="multi-part" title="Two-cols (50/50)">
-					<h4>Deux colonnes flottantes de largeurs égales</h4>
-					<div class="two-cols clearfix">
-						<div class="col">
-							<p>La div englobante porte la class <code>"two-cols"</code>, chacune de ses div porte la class <code>"col"</code>.
-							Sans autre précision les deux colonnes sont d'égale largeur.</p>
-						</div>
-						<div class="col">
-							<p>Attention : ces colonnes sont construites avec des flottants, il faut donc penser à mettre une class <code>clear</code> à l'élément suivant ou ajouter la class <code>"clearfix"</code> à la <code>div class="two-cols"</code>.</p>
-						</div>
-					</div>
-				</div>
-				<div id="two-cols-70-30" class="multi-part" title="Two-cols (70/30)">
-					<h4>Deux colonnes flottantes de largeurs inégales</h4>
-					<div class="two-cols clearfix">
-						<div class="col70">
-							<p><span class="step">col70</span> La div englobante porte la class <code>"two-cols"</code>.
-							Pour obtenir des colonnes inégales, on dispose des classes <code>"col70"</code> et <code>col30</code> à attribuer à l'une ou à l'autre de ses colonnes.</p>
-						</div>
-						<div class="col30">
-							<p><span class="step">col30</span> Penser à mettre une class <code>"clear"</code> à l'élément suivant ou ajouter la class <code>"clearfix"</code> <code>div class="two-cols"</code>.</p>
-						</div>
-					</div>
-				</div>
-				<div id="three-cols" class="multi-part" title="Three-cols (deprecated)">
-					<h4>Trois colonnes flottantes de largeurs égales</h4>
-					<p class="warning"><strong>Deprecated.</strong> Ces règles sont conservées dans la 2.6 par souci de rétro-compatibilité mais il est recommandé d'utiliser désormais le colonnage <a href="#three-boxes">three-boxes</a>.</p>
-					<div class="three-cols clearfix">
-						<div class="col">
-							<h5>Colonne 1</h5>
-							<p>La div englobante porte la class <code>"three-cols"</code>, chacune de ses div porte la class <code>"col"</code>. Les trois colonnes sont d'égale largeur.</p>
-						</div>
-						<div class="col">
-							<h5>Colonne 2</h5>
-							<p>Voici une deuxième colonne. N'oubliez pas d'ajouter la class <code>"clearfix"</code> à la class <code>"three-cols"</code> ou un élément de class <code>"clear"</code> après cet élément.</p>
-						</div>
-						<div class="col">
-							<h5>Colonne 3</h5>
-							<p>Voilà la troisième colonne.</p>
-						</div>
-					</div>
-				</div>
-				<hr />
-				<p><strong>Note :</strong> dans les exemples les valeurs et les numérotations sont placées dans un <code>span class="step"</code> (et ressortent donc dans un petit bloc à fond gris).</p>
-
-				<h2><span class="page-title">Interactions</span></h2>
-
-				<h3 id="elements">Éléments de formulaire</h3>
-					<form class="two-cols clearfix" action="#">
-						<div class="col">
-							<p><label for="ex1">Label simple + input text :</label><input id="ex1" type="text" /></p>
-							<p class="form-note">p class="form-note".</p>
-							<p><label for="ex2" class="required"><abbr title="'.__('Required field').'">*</abbr> Label class="required" :</label> <input id="ex2" type="text" /></p>
-							<p><label for="ex3">Input class="maximal" :</label> <input id="ex3" type="text" class="maximal" /></p>
-							<p><label for="ex4" class="classic">Label class="classic" :</label> <input id="ex4" type="text" /></p>
-						</div>
-						<div class="col">
-							<p class="field"><label for="ex5">p.field label + input :</label><input id="ex5" type="text" /></p>
-							<p class="field"><label for="ex6">p.field label + select :</label>
-							<select id="ex6"><option value="opt2">Option 2</option><option selected="selected" value="opt2">Option 2</option></select>
-							</p>
-							<p><label class="classic" for="ex7"><input type="checkbox" checked="checked" id="ex7" value="1" name="ex7" />
-								Checkbox (label.classic)</label></p>
-							<p><label class="classic" for="ex8-1"><input type="radio" checked="checked" id="ex8-1" value="ex8-1" name="ex8-1" />
-							 Bouton radio 1 (label.classic)</label></p>
-							 <p><label class="classic" for="ex8-2"><input type="radio" id="ex8-2" value="ex8-2" name="ex8-2" />
-							 Bouton radio 2 (label.classic)</label></p>
-							 <p class="form-note">Les checkboxes et les boutons radio sont dans la balise &lt;label&gt;.</p>
-						</div>
-					</form>
-					<form action="#" class="clear">
-						<fieldset>
-						<legend>Légende de fieldset</legend>
-							<p>Attention: Les fieldsets ne doivent être utilisés que pour isoler un groupe de champs au sein d'un formulaire.</p>
-						</fieldset>
-					</form>
-
-				<h3 id="boutons">Boutons</h3>
-					<div class="clearfix">
-					<p><a class="button add">a.button.add</a> Se place en haut à droite (dans un p.top-add)</p>
-						<p><input type="button" value="Type button" /> <a href="#" class="button">a.button</a> <input type="reset" value="Type reset" /> <a href="#" class="button reset">a.reset</a></p>
-						<p><input type="submit" value="Type submit" /> <input type="submit" class="delete" value="Type submit class delete" /> <a href="#" class="button delete">a.button delete</a></p>
-						<p><input type="submit" value="Type submit class disabled" class="disabled" /></p>
-					</div>
-
-				<h3 id="messages">Messages</h3>
-				<h4 class="smart-title">Messages système</h4>
-					<p>Il existe quatre types de messages système auxquels correspondent des classes CSS : .error, .message, .success, .warning-msg. Ils s'affichent en haut de page, sous le titre/breadcrumb.</p>
-					<div class="message">
-						<p>Message simple. Le plus souvent horodaté dcPage::message</p>
-					</div>
-					<div class="success">
-						<p>Message de succès. Le plus souvent horodaté dcPage::success</p>
-					</div>
-					<div class="warning-msg">
-						<p>Message warning. Non horodaté dcPage::warning</p>
-					</div>
-					<div class="error">
-						<p>Message d'erreur. Non horodaté dcPage::error</p>
-					</div>
-					<p>La classe .static-msg peut être utilisée directement pour affichage en haut de page :</p>
-					<div class="static-msg">
-						<p>Comme le message simple mais sans effets de transition.</p>
-					</div>
-					<p>Un type de message réservé à Dotclear peut s'afficher en haut de la page :</p>
-					<div class="dc-update">
-						<h3>Dotclear 42 est disponible</h3>
-						<p><a class="button submit" href="#">Mettre à jour maintenant</a>
-						<a class="button" href="u#">Me le rappeler plus tard</a></p>
-						<p class="updt-info"><a href="#">Informations sur cette version</a></p>
-					</div>
-				<h4 class="smart-title">Messages contextuels</h4>
-					<p class="warn">Paragraphe de message d'alerte class warn ou warning.</p>
-					<p class="info">Paragraphe de message de class info.</p>
-					<p>Ces messages sont en display:inline-block. Le fond s'adapte à la longueur du message.</p>
-
-				<h2><span class="page-title">Navigation</span></h2>
-
-				<h3 id="direct">Selecteur d'accès direct</h3>
-					<p>Sur des pages longues et denses comme les pages about:config ou about:preferences, on peut utiliser un sélecteur pour faciliter l'accès direct aux sections.</p>
-					<p class="anchor-nav">
-						<label class="classic" for="lp_nav">Aller à : </label> 
-						<select id="lp_nav" name="lp_nav">
-							<option value="#l_accessibility">accessibility</option>
-							<option value="#l_dashboard">dashboard</option>
-							<option value="#l_dmhostingmonitor">dmhostingmonitor</option>
-							<option value="#l_dmpending">dmpending</option>
-							<option value="#l_favorites">favorites</option>
-							<option value="#l_filters">filters</option>
-							<option value="#l_interface">interface</option>
-							<option value="#l_lists">lists</option>
-							<option value="#l_toggles">toggles</option>
-						</select>
-						<input type="submit" id="lp_submit" value="Ok" style="display: none;" />
-						<input type="hidden" value="aboutConfig" name="p" />
-					</p>
-				<h3 id="prevnext">Navigation contextuelle</h3>
-					<p><a title="Titre du lien (nouvelle fenêtre)" onclick="window.open(this.href);return false;" href="http://fr.dotclear.org/blog" class="onblog_link">Lien vers le blog <img alt="" src="images/outgoing-blue.png" /></a></p>
-					<p class="nav_prevnext"><a title="Titre de l'élément précédente" href="post.php?id=4145">«&nbsp;Élément précédent</a> | <a title="Titre de l'élément suivant" href="#">Élément suivant&nbsp;»</a></p>
-
-			</div><!-- /content -->
-		</div><!-- /main -->
-		<div id="main-menu">
-			<form id="search-menu" action="search.php" method="get">
-				<p><label for="qx" class="hidden">Chercher : </label><input type="text" size="30" name="qx" id="qx" maxlength="255"  /><input type="submit" value="OK" /></p>
-			</form>
-			<div id="favorites-menu">
-				<h3>Typo</h3>
-				<ul>
-					<li><a href="#texte">Texte</a></li>
-					<li><a href="#titres">Titres hx</a></li>
-				</ul>
-			</div><!-- /favorites-menu -->
-			<div id="blog-menu">
-				<h3>Layouts</h3>
-				<ul>
-					<li><a href="#onglets">Onglets</a></li>
-					<li><a href="#multi-colonnage">Multi-colonnage</a></li>
-				</ul>
-			</div><!-- /blog-menu -->
-			<div id="system-menu">
-				<h3>Interactions</h3>
-				<ul>
-					<li><a href="#elements">Éléments de formulaire</a></li>
-					<li><a href="#boutons">Boutons</a></li>
-					<li><a href="#messages">Messages</a></li>
-				</ul>
-			</div><!-- /system-menu -->
-			<div id="plugins-menu">
-				<h3>Navigation</h3>
-				<ul>
-					<li><a href="#direct">Accès direct</a></li>
-					<li><a href="#prevnext">Précédent, suivant</a></li>
-				</ul>
-			</div><!-- /plugins-menu -->
-		</div><!-- /main-menu -->
-
-		<div id="footer">
-			<a href="http://dotclear.org/" title="Merci de manger des clafoutis."><img src="style/dc_logos/w-dotclear90.png" alt="Merci d'utiliser Dotclear 2.6-dev." /></a>
-		</div><!-- /footer -->
-												<!-- 
-												                  .
-												               ,;:'`'::
-												            __||
-												      _____/LLLL\_
-												      \__________"|
-												    ~^~^~^~^~^~^~^~^~^~
-												 -->
-	</div><!-- /wrapper -->
-</body>
-</html>
Index: admin/blog_pref.php
===================================================================
--- admin/blog_pref.php	(revision 1848)
+++ admin/blog_pref.php	(revision 1746)
@@ -394,5 +394,5 @@
 	'</p>'.
 
-	'<p><label for="note_title_tag">'.__('HTML tag for the title of the notes on the blog:').'</label>'.
+	'<p><label for="note_title_tag">'.__('Note title HTML tag:').'</label>'.
 	form::combo('note_title_tag',$note_title_tag_combo,$blog_settings->system->note_title_tag).
 	'</p>'.
@@ -403,5 +403,5 @@
 
 	echo
-		'<p class="form-note info">'.__('XML/RPC interface allows you to edit your blog with an external client.').'</p>';	
+		'<p class="form-note">'.__('XML/RPC interface allows you to edit your blog with an external client.').'</p>';	
 
 	if ($blog_settings->system->enable_xmlrpc) {
@@ -509,33 +509,33 @@
 	'<div class="col">'.
 	'<h5>'.__('Generated image sizes (in pixels)').'</h5>'.
-	'<p class="field"><label for="media_img_t_size">Thumbnail</label> '.
-	form::field('media_img_t_size',3,3,$blog_settings->system->media_img_t_size).'</p>'.
-	
-	'<p class="field"><label for="media_img_s_size">Small</label> '.
-	form::field('media_img_s_size',3,3,$blog_settings->system->media_img_s_size).'</p>'.
-	
-	'<p class="field"><label for="media_img_m_size">Medium</label> '.
-	form::field('media_img_m_size',3,3,$blog_settings->system->media_img_m_size).'</p>'.
-	'</div>'.
-	
-	'<div class="col">'.
-	'<h5>'.__('Default image insertion attributes').'</h5>'.
-	'<p class="vertical-separator"><label for="media_img_title_pattern">'.__('Inserted image title').'</label>'.
-	form::combo('media_img_title_pattern',$img_title_combo,html::escapeHTML($blog_settings->system->media_img_title_pattern)).' '.
-	'<label for="media_img_use_dto_first" class="classic">'.
+	'<p class="field"><label for="media_img_t_size">'.__('Thumbnails:').' '.
+	form::field('media_img_t_size',3,3,$blog_settings->system->media_img_t_size).'</label></p>'.
+	
+	'<p class="field"><label for="media_img_s_size">'.__('Small:').' '.
+	form::field('media_img_s_size',3,3,$blog_settings->system->media_img_s_size).'</label></p>'.
+	
+	'<p class="field"><label for="media_img_m_size">'.__('Medium:').' '.
+	form::field('media_img_m_size',3,3,$blog_settings->system->media_img_m_size).'</label></p>'.
+	'</div>'.
+	
+	'<div class="col">'.
+	'<h5><label for="media_img_title_pattern">'.__('Inserted image title').'</label></h5>'.
+	'<p>'.__('This defines image tag title when you insert it in a post from the media manager. It is retrieved from the picture\'s metadata.').'</p>'.
+	'<p>'.form::combo('media_img_title_pattern',$img_title_combo,html::escapeHTML($blog_settings->system->media_img_title_pattern)).'</p>'.
+	'<p><label for="media_img_use_dto_first" class="classic">'.
 	form::checkbox('media_img_use_dto_first','1',$blog_settings->system->media_img_use_dto_first).
 	__('Use original media date if possible').'</label></p>'.
-	'<p class="form-note info">'.__('It is retrieved from the picture\'s metadata.').'</p>'.
-
-	'<p class="field vertical-separator"><label for="media_img_default_size">'.__('Size of inserted image:').'</label>'.
+
+	'<h5>'.__('Default image insertion attributes').'</h5>'.
+	'<p><label for="media_img_default_size">'.__('Image size:').'</label>'.
 	form::combo('media_img_default_size',$img_default_size_combo,
 		(html::escapeHTML($blog_settings->system->media_img_default_size) != '' ? html::escapeHTML($blog_settings->system->media_img_default_size) : 'm')).
 	'</p>'.
-	'<p class="field"><label for="media_img_default_alignment">'.__('Image alignment:').'</label>'.
+	'<p><label for="media_img_default_alignment">'.__('Image alignment:').'</label>'.
 	form::combo('media_img_default_alignment',$img_default_alignment_combo,html::escapeHTML($blog_settings->system->media_img_default_alignment)).
 	'</p>'.
-	'<p><label for="media_img_default_link">'.
+	'<p><label for="media_img_default_link" class="classic">'.
 	form::checkbox('media_img_default_link','1',$blog_settings->system->media_img_default_link).
-	__('Insert a link to the original image').'</label></p>'.
+	__('As a link to original image').'</label></p>'.
 	'</div>'.
 	'</div>'.
Index: admin/comments.php
===================================================================
--- admin/comments.php	(revision 1905)
+++ admin/comments.php	(revision 1719)
@@ -131,12 +131,21 @@
 $combo_action = array();
 $default = '';
-if ($core->auth->check('delete,contentadmin',$core->blog->id) && $status == -2)
-{
-	$default = 'delete';
-}
-
-$comments_actions_page = new dcCommentsActionsPage($core,'comments.php');
-
-$comments_actions_page->process();
+if ($core->auth->check('publish,contentadmin',$core->blog->id))
+{
+	$combo_action[__('Publish')] = 'publish';
+	$combo_action[__('Unpublish')] = 'unpublish';
+	$combo_action[__('Mark as pending')] = 'pending';
+	$combo_action[__('Mark as junk')] = 'junk';
+}
+if ($core->auth->check('delete,contentadmin',$core->blog->id))
+{
+	$combo_action[__('Delete')] = 'delete';
+	if ($status == -2) {
+		$default = 'delete';
+	}
+}
+
+# --BEHAVIOR-- adminCommentsActionsCombo
+$core->callBehavior('adminCommentsActionsCombo',array(&$combo_action));
 
 /* Get comments
@@ -156,4 +165,6 @@
 	$starting_script .= dcPage::jsLoad('js/filter-controls.js');
 }
+# --BEHAVIOR-- adminCommentsHeaders
+$starting_script .= $core->callBehavior('adminCommentsHeaders');
 
 dcPage::open(__('Comments and trackbacks'),$starting_script,
@@ -164,9 +175,4 @@
 		))
 );
-if (!empty($_GET['upd'])) {
-	dcPage::success(__('Selected comments have been successfully updated.'));
-} elseif (!empty($_GET['del'])) {
-	dcPage::success(__('Selected comments have been successfully deleted.'));
-}
 
 if (!$core->error->flag())
@@ -248,5 +254,5 @@
 	# Show comments
 	$comment_list->display($page,$nb_per_page,
-	'<form action="comments.php" method="post" id="form-comments">'.
+	'<form action="comments_actions.php" method="post" id="form-comments">'.
 	
 	'%s'.
@@ -256,5 +262,5 @@
 	
 	'<p class="col right"><label for="action" class="classic">'.__('Selected comments action:').'</label> '.
-	form::combo('action',$comments_actions_page->getCombo(),$default,'','','','title="'.__('Actions').'"').
+	form::combo('action',$combo_action,$default,'','','','title="'.__('Actions').'"').
 	$core->formNonce().
 	'<input type="submit" value="'.__('ok').'" /></p>'.
Index: admin/comments_actions.php
===================================================================
--- admin/comments_actions.php	(revision 1905)
+++ admin/comments_actions.php	(revision 1474)
@@ -11,14 +11,132 @@
 # -- END LICENSE BLOCK -----------------------------------------
 
-/* ### THIS FILE IS DEPRECATED 					### */
-/* ### IT IS ONLY USED FOR PLUGINS COMPATIBILITY ### */
-
 require dirname(__FILE__).'/../inc/admin/prepend.php';
 
 dcPage::check('usage,contentadmin');
 
-$comments_actions_page = new dcCommentsActionsPage($core,'posts.php');
+$params = array();
+$redir = 'comments.php';
 
-$comments_actions_page->process();
+if (!empty($_POST['action']) && !empty($_POST['comments']))
+{
+	$comments = $_POST['comments'];
+	$action = $_POST['action'];
+	
+	if (isset($_POST['redir']) && strpos($_POST['redir'],'://') === false)
+	{
+		$redir = $_POST['redir'];
+	}
+	else
+	{
+		$redir =
+		'comments.php?type='.$_POST['type'].
+		'&author='.$_POST['author'].
+		'&status='.$_POST['status'].
+		'&sortby='.$_POST['sortby'].
+		'&ip='.$_POST['ip'].
+		'&order='.$_POST['order'].
+		'&page='.$_POST['page'].
+		'&nb='.(integer) $_POST['nb'];
+	}
+	
+	foreach ($comments as $k => $v) {
+		$comments[$k] = (integer) $v;
+	}
+	
+	$params['sql'] = 'AND C.comment_id IN('.implode(',',$comments).') ';
+	
+	if (!isset($_POST['full_content']) || empty($_POST['full_content'])) {
+		$params['no_content'] = true;
+	}
+	
+	$co = $core->blog->getComments($params);
+	
+	$co_ids = array();
+	while ($co->fetch())	{
+		$co_ids[] = $co->comment_id;
+	}
+	
+	# --BEHAVIOR-- adminCommentsActions
+	$core->callBehavior('adminCommentsActions',$core,$co,$action,$redir);
+	
+	if (preg_match('/^(publish|unpublish|pending|junk)$/',$action))
+	{
+		switch ($action) {
+			case 'unpublish' : $status = 0; break;
+			case 'pending' : $status = -1; break;
+			case 'junk' : $status = -2; break;
+			default : $status = 1; break;
+		}
+		
+		try {
+			$core->blog->updCommentsStatus($co_ids,$status);
+		} catch (Exception $e) {
+			$core->error->add($e->getMessage());
+		}
+		
+		if (!$core->error->flag()) {
+			http::redirect($redir);
+		}
+	}
+	elseif ($action == 'delete')
+	{
+		try {
+			// Backward compatibility
+			foreach($co_ids as $comment_id)
+			{
+				# --BEHAVIOR-- adminBeforeCommentDelete
+				$core->callBehavior('adminBeforeCommentDelete',$comment_id);				
+			}
+			
+			# --BEHAVIOR-- adminBeforeCommentsDelete
+			$core->callBehavior('adminBeforeCommentsDelete',$co_ids);
+			
+			$core->blog->delComments($co_ids);
+		} catch (Exception $e) {
+			$core->error->add($e->getMessage());
+		}
+		
+		if (!$core->error->flag()) {
+			http::redirect($redir);
+		}
+	}
+}
 
+/* DISPLAY
+-------------------------------------------------------- */
+dcPage::open(__('Comments'));
+
+if (!isset($action)) {
+	dcPage::close();
+	exit;
+}
+
+$hidden_fields = '';
+while ($co->fetch()) {
+	$hidden_fields .= form::hidden(array('comments[]'),$co->comment_id);
+} 
+
+if (isset($_POST['redir']) && strpos($_POST['redir'],'://') === false)
+{
+	$hidden_fields .= form::hidden(array('redir'),html::escapeURL($_POST['redir']));
+}
+else
+{
+	$hidden_fields .=
+	form::hidden(array('type'),$_POST['type']).
+	form::hidden(array('author'),$_POST['author']).
+	form::hidden(array('status'),$_POST['status']).
+	form::hidden(array('sortby'),$_POST['sortby']).
+	form::hidden(array('ip'),$_POST['ip']).
+	form::hidden(array('order'),$_POST['order']).
+	form::hidden(array('page'),$_POST['page']).
+	form::hidden(array('nb'),$_POST['nb']);
+}
+
+# --BEHAVIOR-- adminCommentsActionsContent
+$core->callBehavior('adminCommentsActionsContent',$core,$action,$hidden_fields);
+
+echo '<p><a class="back" href="'.str_replace('&','&amp;',$redir).'">'.__('Back to comments list').'</a></p>';
+
+dcPage::close();
 ?>
Index: admin/help.php
===================================================================
--- admin/help.php	(revision 1839)
+++ admin/help.php	(revision 1799)
@@ -90,6 +90,5 @@
 dcPage::open(__('Global help'),
 	# --BEHAVIOR-- adminPostHeaders
-	$core->callBehavior('adminPostHeaders').
-	dcPage::jsPageTabs('first-step'),
+	$core->callBehavior('adminPostHeaders'),
 	$breadcrumb
 );
Index: admin/index.php
===================================================================
--- admin/index.php	(revision 1811)
+++ admin/index.php	(revision 1788)
@@ -221,7 +221,7 @@
 		'<div class="dc-update"><h3>'.sprintf(__('Dotclear %s is available!'),$new_v).'</h3> '.
 		'<p><a class="button submit" href="update.php">'.sprintf(__('Upgrade now'),$new_v).'</a> '.
-		'<a class="button" href="update.php?hide_msg=1">'.__('Remind me later').'</a>'.
+		'<a href="update.php?hide_msg=1">'.__('Remind me later').'</a>'.
 		($version_info ? ' </p>'.
-		'<p class="updt-info"><a href="'.$version_info.'">'.__('Information about this version').'</a>' : '').'</p>'.
+		'<p><a href="'.$version_info.'" class="updt-info">'.__('Information about this version').'</a>' : '').'</p>'.
 		'</div>';
 	}
Index: admin/js/_media.js
===================================================================
--- admin/js/_media.js	(revision 1852)
+++ admin/js/_media.js	(revision 1782)
@@ -25,5 +25,5 @@
 			}
 			
-			$('.button.choose_files').click(function(e) {
+			$('.button.add').click(function(e) {
 				// Use the native click() of the file input.
 				$('#upfile').click();
Index: admin/js/_post.js
===================================================================
--- admin/js/_post.js	(revision 1832)
+++ admin/js/_post.js	(revision 1760)
@@ -90,7 +90,4 @@
 				$(this).val(last_post_format);
 			}
-			
-			$('.format_control > *').addClass('hide');
-			$('.format_control:not(.control_no_'+$(this).val()+') > *').removeClass('hide');
 		});
 
@@ -120,68 +117,4 @@
 			return window.confirm(dotclear.msg.confirm_delete_post);
 		});
-
-		// Markup validator
-		var v = $('<div class="format_control"><p><a id="a-validator"></a></p><div/>').get(0);
-		$('.format_control').before(v);
-		var a = $('#a-validator').get(0);
-		a.href = '#';
-		a.className = 'button ';
-		$(a).click(function() {
-			
-			excerpt_content = $('#post_excerpt').css('display') != 'none' ? $('#post_excerpt').val() : $('#excerpt-area iframe').contents().find('body').html();
-			post_content    = $('#post_content').css('display') != 'none' ? $('#post_content').val() : $('#content-area iframe').contents().find('body').html();
-			
-			var params = {
-				xd_check: dotclear.nonce,
-				f: 'validatePostMarkup',
-				excerpt: excerpt_content,
-				content: post_content,
-				format: $('#post_format').get(0).value,
-				lang: $('#post_lang').get(0).value
-			};
-
-			$.post('services.php',params,function(data) {
-				if ($(data).find('rsp').attr('status') != 'ok') {
-					alert($(data).find('rsp message').text());
-					return false;
-				}
-					
-				$('.message, .success, .error, .warning-msg').remove();
-
-				if ($(data).find('valid').text() == 1) {
-					var p = document.createElement('p');
-					p.id = 'markup-validator';
-					
-					$(p).addClass('success');
-					$(p).text(dotclear.msg.xhtml_valid);
-					$('#entry-content h3').after(p);
-					$(p).backgroundFade({sColor:'#9BCA1C',eColor:'#bee74b',steps:20});
-				} else {
-					var div = document.createElement('div');
-					div.id = 'markup-validator';
-					
-					$(div).addClass('error');
-					$(div).html('<p><strong>' + dotclear.msg.xhtml_not_valid + '</strong></p>' + $(data).find('errors').text());
-					$('#entry-content h3').after(div);
-					$(div).backgroundFade({sColor:'#ffdec8',eColor:'#ffbaba',steps:20});
-				}
-				
-				if ( $('#post_excerpt').text() != excerpt_content || $('#post_content').text() != post_content ) {
-					var pn = document.createElement('p');
-					$(pn).addClass('warning-msg');
-					$(pn).text(dotclear.msg.warning_validate_no_save_content);
-					$('#entry-content h3').after(pn);
-				}
-
-				return false;
-			});
-
-			return false;
-		});
-
-		a.appendChild(document.createTextNode(dotclear.msg.xhtml_validator));
-		
-		$('.format_control > *').addClass('hide');
-		$('.format_control:not(.control_no_'+last_post_format+') > *').removeClass('hide');
 
 		// Hide some fields
@@ -251,4 +184,65 @@
 		});
 
+		// Markup validator
+		var h = document.createElement('h4');
+		var a = document.createElement('a');
+		a.href = '#';
+		a.className = 'button';
+		$(a).click(function() {
+			var params = {
+				xd_check: dotclear.nonce,
+				f: 'validatePostMarkup',
+				excerpt: $('#post_excerpt').text(),
+				content: $('#post_content').text(),
+				format: $('#post_format').get(0).value,
+				lang: $('#post_lang').get(0).value
+			};
+
+			$.post('services.php',params,function(data) {
+				if ($(data).find('rsp').attr('status') != 'ok') {
+					alert($(data).find('rsp message').text());
+					return false;
+				}
+
+				if ($(data).find('valid').text() == 1) {
+					var p = document.createElement('p');
+					p.id = 'markup-validator';
+
+					if ($('#markup-validator').length > 0) {
+						$('#markup-validator').remove();
+					}
+
+					$(p).addClass('message');
+					$(p).text(dotclear.msg.xhtml_valid);
+					$(p).insertAfter(h);
+					$(p).backgroundFade({sColor:'#676e78',eColor:'#ffcc00',steps:50},function() {
+							$(this).backgroundFade({sColor:'#ffcc00',eColor:'#676e78'});
+					});
+				} else {
+					var div = document.createElement('div');
+					div.id = 'markup-validator';
+
+					if ($('#markup-validator').length > 0) {
+						$('#markup-validator').remove();
+					}
+
+					$(div).addClass('error');
+					$(div).html('<p><strong>' + dotclear.msg.xhtml_not_valid + '</strong></p>' + $(data).find('errors').text());
+					$(div).insertAfter(h);
+					$(div).backgroundFade({sColor:'#ffffff',eColor:'#FFBABA',steps:50},function() {
+							$(this).backgroundFade({sColor:'#ffbaba',eColor:'#ffffff'});
+					});
+				}
+
+				return false;
+			});
+
+			return false;
+		});
+
+		a.appendChild(document.createTextNode(dotclear.msg.xhtml_validator));
+		h.appendChild(a);
+		$(h).appendTo('#entry-content');
+
 		// Check unsaved changes before XHTML conversion
 		var excerpt = $('#post_excerpt').val();
Index: admin/js/_posts_actions.js
===================================================================
--- admin/js/_posts_actions.js	(revision 1806)
+++ admin/js/_posts_actions.js	(revision 1638)
@@ -1,12 +1,9 @@
 $(function() {
-	new_auth_id = $('#new_auth_id');
-	if (new_auth_id.length) {
-		new_auth_id.autocomplete(usersList,
-		{
-			delay: 1000,
-			matchSubset: true,
-			matchContains: true
-		});
-	}
+	$('#new_auth_id').autocomplete(usersList,
+	{
+		delay: 1000,
+		matchSubset: true,
+		matchContains: true
+	});
 	$('#new_cat').toggleWithLegend($('#new_cat').parent().children().not('#new_cat'), {
 		// no cookie on new category as we don't use this every day
Index: admin/js/common.js
===================================================================
--- admin/js/common.js	(revision 1862)
+++ admin/js/common.js	(revision 1798)
@@ -263,15 +263,13 @@
 	},
 
-	checkboxesHelpers: function(e, target) {
+	checkboxesHelpers: function(e) {
 		$(e).append(document.createTextNode(dotclear.msg.to_select));
 		$(e).append(document.createTextNode(' '));
 
-		target = target || $(e).parents('form').find('input[type="checkbox"]');
-		
 		var a = document.createElement('a');
 		a.href='#';
 		$(a).append(document.createTextNode(dotclear.msg.select_all));
 		a.onclick = function() {
-			target.check();
+			$(this).parents('form').find('input[type="checkbox"]').check();
 			return false;
 		};
@@ -284,5 +282,5 @@
 		$(a).append(document.createTextNode(dotclear.msg.no_selection));
 		a.onclick = function() {
-			target.unCheck();
+			$(this).parents('form').find('input[type="checkbox"]').unCheck();
 			return false;
 		};
@@ -295,5 +293,5 @@
 		$(a).append(document.createTextNode(dotclear.msg.invert_sel));
 		a.onclick = function() {
-			target.toggleCheck();
+			$(this).parents('form').find('input[type="checkbox"]').toggleCheck();
 			return false;
 		};
@@ -397,33 +395,4 @@
 		return true;
 	});
-
-	// Main menu collapser
-    var objMain = $('#wrapper');
-    function showSidebar(){
-	    // Show sidebar
-        objMain.removeClass('hide-mm');
-        $.cookie('sidebar-pref',null,{expires:30});
-    }
-    function hideSidebar(){
-	    // Hide sidebar
-        objMain.addClass('hide-mm');
-        $.cookie('sidebar-pref','hide-mm',{expires:30});
-    }
-    // Sidebar separator
-    var objSeparator = $('#collapser');
-    objSeparator.click(function(e){
-        e.preventDefault();
-        if ( objMain.hasClass('hide-mm') ){
-            showSidebar();
-        }
-        else {
-            hideSidebar();
-        }
-    }).css('height', objSeparator.parent().parent().parent().outerHeight() + 'px');
-	if ( $.cookie('sidebar-pref') == 'hide-mm' ){
-		objMain.addClass('hide-mm');
-	} else {
-		objMain.removeClass('hide-mm');
-	}
-
 });
+
Index: admin/js/jsToolBar/jsToolBar.wysiwyg.js
===================================================================
--- admin/js/jsToolBar/jsToolBar.wysiwyg.js	(revision 1833)
+++ admin/js/jsToolBar/jsToolBar.wysiwyg.js	(revision 1753)
@@ -46,5 +46,4 @@
 	
 	if (mode == 'xhtml') {
-		this.wwg_mode = true;
 		this.draw(mode);
 	} else {
@@ -52,5 +51,4 @@
 			this.syncContents('iframe');
 		}
-		this.wwg_mode = false;
 		this.removeEditor();
 		this.textarea.style.display = '';
@@ -88,5 +86,5 @@
 		} else if (window.navigator.product != undefined && 
 							 window.navigator.product == 'Gecko') {
-			This.ibody.innerHTML = '<p><br _moz_editor_blogus_node="TRUE" _moz_dirty=""/></p>';
+			This.ibody.innerHTML = '<p><br _moz_editor_blogus_node="TRUE" _moz_dirty=""></p>';
 		} else {
 			var idoc = This.iwin.document;
Index: admin/js/meta-editor.js
===================================================================
--- admin/js/meta-editor.js	(revision 1819)
+++ admin/js/meta-editor.js	(revision 1741)
@@ -113,4 +113,5 @@
 	
 	addMetaDialog: function() {
+		var This = this;
 		
 		if (this.submit_button == null) {
@@ -120,13 +121,20 @@
 		}
 		
+		// View meta list
+		var a = $('<a href="#">' + this.text_choose + '</a>');
+		a.click(function() {
+			This.showMetaList(metaEditor.prototype.meta_type,$(this).parent());
+			return false;
+		});
 		if (this.text_separation != '') {
 			this.target.append($('<p></p>').addClass('form-note').append(this.text_separation.replace(/%s/,this.meta_type)));
 		}
-		
-		this.showMetaList(metaEditor.prototype.meta_type,this.target);
-		
+		this.target.append($('<p></p>').append(a));
 	},
 	
 	showMetaList: function(type,target) {
+		target.empty();
+		target.append('...');
+		target.addClass('addMeta');
 		
 		var params = {
@@ -143,11 +151,6 @@
 		
 		$.get(this.service_uri,params,function(data) {
-			
-			var pl = $('<p class="addMeta"></p>');
-			
-			$('.addMeta').remove();
-			
 			if ($(data).find('meta').length > 0) {
-				pl.empty();
+				target.empty();
 				var meta_link;
 				
@@ -162,7 +165,7 @@
 					
 					if (i>0) {
-						pl.append(', ');
+						target.append(', ');
 					}
-					pl.append(meta_link);
+					target.append(meta_link);
 				});
 				
@@ -174,25 +177,8 @@
 						return false;
 					});
-					pl.append(', ').append(a_more);
-					
-					pl.addClass('hide');
-					
-					var pa = $('<p></p>');
-					target.append(pa);
-					
-					var a = $('<a href="#" class="metaGetList">' + This.text_choose + '</a>');
-					a.click(function() {
-						$('.addMeta').removeClass('hide');
-						$('.metaGetList').remove();
-						return false;
-					});
-					
-					pa.append(a);
-				}
-				
-				target.append(pl);
-				
+					target.append(', ').append(a_more);
+				}
 			} else {
-				pl.empty();
+				target.empty();
 			}
 		});
Index: admin/media.php
===================================================================
--- admin/media.php	(revision 1855)
+++ admin/media.php	(revision 1760)
@@ -328,18 +328,9 @@
 	
 	'<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
-
-	$dgroup = '';
-	$fgroup = '';
-	for ($i=$pager->index_start, $j=0; $i<=$pager->index_end; $i++,$j++)
+	
+	for ($i=$pager->index_start, $j=0; $i<=$pager->index_end; $i++, $j++)
 	{
-		if ($items[$i]->d) {
-			$dgroup .= mediaItemLine($items[$i],$j);
-		} else {
-			$fgroup .= mediaItemLine($items[$i],$j);
-		}
-	}
-	echo 
-		($dgroup != '' ? '<div class="folders-group">'.$dgroup.'</div>' : '').
-		($fgroup != '' ? '<div class="files-group">'.$fgroup.'</div>' : '');
+		echo mediaItemLine($items[$i],$j);
+	}
 	
 	echo
@@ -370,4 +361,5 @@
 	'<h4>'.__('Add files').'</h4>'.
 	'<p>'.__('Please take care to publish media that you own and that are not protected by copyright.').'</p>'.
+	'<p class="max-sizer form-note info">&nbsp;'.__('Maximum file size allowed:').' '.files::size(DC_MAX_UPLOAD_SIZE).'</p>'.
 	'<form id="fileupload" action="'.html::escapeURL($page_url).'" method="post" enctype="multipart/form-data" aria-disabled="false">'.
 	'<p>'.form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE).
@@ -380,9 +372,6 @@
 	echo
 	'<p><label for="upfile">'.'<span class="add-label one-file">'.__('Choose file').'</span>'.'</label>'.
-	'<button class="button choose_files">'.__('Choose files').'</button>'.
+	'<button class="button add">'.__('Choose files').'</button>'.
 	'<input type="file" id="upfile" name="upfile[]"'.($user_ui_enhanceduploader?' multiple="mutiple"':'').' data-url="'.html::escapeURL($page_url).'" /></p>';
-
-	echo
-	'<p class="max-sizer form-note">&nbsp;'.__('Maximum file size allowed:').' '.files::size(DC_MAX_UPLOAD_SIZE).'</p>';
 
 	echo
@@ -390,6 +379,4 @@
 	'<p class="one-file"><label for="upfilepriv" class="classic">'.__('Private').'</label> '.
 	form::checkbox(array('upfilepriv','upfilepriv'),1).'</p>';
-
-
 
 	if (!$user_ui_enhanceduploader) {
@@ -467,13 +454,8 @@
 	$fname = $f->basename;
 	
-	$class = 'media-item media-col-'.($i%2);
-	
 	if ($f->d) {
 		$link = html::escapeURL($page_url).'&amp;d='.html::sanitizeURL($f->relname);
 		if ($f->parent) {
 			$fname = '..';
-			$class .= ' media-folder-up';
-		} else {
-			$class .= ' media-folder';
 		}
 	} else {
@@ -482,12 +464,14 @@
 	}
 	
+	$class = 'media-item media-col-'.($i%2);
+	
 	$res =
-	'<div class="'.$class.'"><p><a class="media-icon media-link" href="'.$link.'">'.
-	'<img src="'.$f->media_icon.'" alt="" />'.$fname.'</a></p>';
-
-	$lst = '';
+	'<div class="'.$class.'"><a class="media-icon media-link" href="'.$link.'">'.
+	'<img src="'.$f->media_icon.'" alt="" /></a>'.
+	'<ul>'.
+	'<li><a class="media-link" href="'.$link.'">'.$fname.'</a></li>';
 	
 	if (!$f->d) {
-		$lst .=
+		$res .=
 		'<li>'.$f->media_title.'</li>'.
 		'<li>'.
@@ -498,9 +482,8 @@
 	}
 	
-	$act = '';
+	$res .= '<li class="media-action">&nbsp;';
 	
 	if ($post_id && !$f->d) {
-		$act .= 
-		'<form action="post_media.php" method="post">'.
+		$res .= '<form action="post_media.php" method="post">'.
 		'<input type="image" src="images/plus.png" alt="'.__('Attach this file to entry').'" '.
 		'title="'.__('Attach this file to entry').'" /> '.
@@ -513,10 +496,10 @@
 	
 	if ($popup && !$f->d) {
-		$act .= '<a href="'.$link.'"><img src="images/plus.png" alt="'.__('Insert this file into entry').'" '.
+		$res .= '<a href="'.$link.'"><img src="images/plus.png" alt="'.__('Insert this file into entry').'" '.
 		'title="'.__('Insert this file into entry').'" /></a> ';
 	}
 	
 	if ($f->del) {
-		$act .= '<a class="media-remove" '.
+		$res .= '<a class="media-remove" '.
 		'href="'.html::escapeURL($page_url).'&amp;d='.
 		rawurlencode($GLOBALS['d']).'&amp;remove='.rawurlencode($f->basename).'">'.
@@ -524,13 +507,11 @@
 	}
 	
-	$lst .= ($act != '' ? '<li class="media-action">&nbsp;'.$act.'</li>' : '');
+	$res .= '</li>';
 	
 	if ($f->type == 'audio/mpeg3') {
-		$lst .= '<li>'.dcMedia::mp3player($f->file_url,'index.php?pf=player_mp3.swf').'</li>';
-	}
-	
-	$res .=	($lst != '' ? '<ul>'.$lst.'</ul>' : '');
-
-	$res .= '</div>';
+		$res .= '<li>'.dcMedia::mp3player($f->file_url,'index.php?pf=player_mp3.swf').'</li>';
+	}
+	
+	$res .= '</ul></div>';
 	
 	return $res;
Index: admin/media_item.php
===================================================================
--- admin/media_item.php	(revision 1853)
+++ admin/media_item.php	(revision 1605)
@@ -263,5 +263,5 @@
 		__('As a single image').'</label><br />'.
 		'<label for="insert2" class="classic">'.form::radio(array('insertion','insert2'),'link',$media_img_default_link).
-		__('As a link to the original image').'</label>'.
+		__('As a link to original image').'</label>'.
 		'</p>';
 	}
@@ -282,5 +282,5 @@
 		echo '<p>';
 		foreach ($i_align as $k => $v) {
-			echo '<label class="classic">'.
+			echo '<label for="alignment" class="classic">'.
 			form::radio(array('alignment'),$k,$v[1]).' '.$v[0].'</label><br /> ';
 		}
@@ -316,5 +316,5 @@
 		echo '<p>';
 		foreach ($i_align as $k => $v) {
-			echo '<label class="classic">'.
+			echo '<label for="alignment" class="classic">'.
 			form::radio(array('alignment'),$k,$v[1]).' '.$v[0].'</label><br /> ';
 		}
Index: admin/post.php
===================================================================
--- admin/post.php	(revision 1831)
+++ admin/post.php	(revision 1789)
@@ -455,7 +455,7 @@
 					'<p>'.form::combo('post_format',$formaters_combo,$post_format,'maximal').
 					'</p>'.
-					'<p class="format_control control_no_xhtml">'.
-					'<a id="convert-xhtml" class="button'.($post_id && $post_format != 'wiki' ? ' hide' : '').'" href="post.php?id='.$post_id.'&amp;xconv=1">'.
-					__('Convert to XHTML').'</a></p></div>')),
+					'<p>'.($post_id && $post_format != 'xhtml' ? 
+					'<a id="convert-xhtml" class="button" href="post.php?id='.$post_id.'&amp;xconv=1">'.
+					__('Convert to XHTML').'</a>' : '').'</p></div>')),
 		'metas-box' => array(
 			'title' => __('Ordering'),
@@ -533,5 +533,5 @@
 		
 		"post_content" =>
-			'<p class="area" id="content-area"><label class="required" '.
+			'<p class="area"><label class="required" '.
 			'for="post_content"><abbr title="'.__('Required field').'">*</abbr> '.__('Content:').'</label> '.
 			form::textarea('post_content',50,$core->auth->getOption('edit_size'),html::escapeHTML($post_content)).
Index: admin/posts.php
===================================================================
--- admin/posts.php	(revision 1806)
+++ admin/posts.php	(revision 1792)
@@ -103,8 +103,33 @@
 
 # Actions combo box
-
-$posts_actions_page = new dcPostsActionsPage($core,'posts.php');
-
-$posts_actions_page->process();
+$combo_action = array();
+if ($core->auth->check('publish,contentadmin',$core->blog->id))
+{
+	$combo_action[__('Status')] = array(
+		__('Publish') => 'publish',
+		__('Unpublish') => 'unpublish',
+		__('Schedule') => 'schedule',
+		__('Mark as pending') => 'pending'
+	);
+}
+$combo_action[__('Mark')] = array(
+	__('Mark as selected') => 'selected',
+	__('Mark as unselected') => 'unselected'
+);
+$combo_action[__('Change')] = array(
+	__('Change category') => 'category',
+	__('Change language') => 'lang');
+if ($core->auth->check('admin',$core->blog->id))
+{
+	$combo_action[__('Change')] = array_merge($combo_action[__('Change')],
+		array(__('Change author') => 'author'));
+}
+if ($core->auth->check('delete,contentadmin',$core->blog->id))
+{
+	$combo_action[__('Delete')] = array(__('Delete') => 'delete');
+}
+
+# --BEHAVIOR-- adminPostsActionsCombo
+$core->callBehavior('adminPostsActionsCombo',array(&$combo_action));
 
 /* Get posts
@@ -279,5 +304,5 @@
 	# Show posts
 	$post_list->display($page,$nb_per_page,
-	'<form action="posts.php" method="post" id="form-entries">'.
+	'<form action="posts_actions.php" method="post" id="form-entries">'.
 	
 	'%s'.
@@ -287,5 +312,5 @@
 	
 	'<p class="col right"><label for="action" class="classic">'.__('Selected entries action:').'</label> '.
-	form::combo('action',$posts_actions_page->getCombo()).
+	form::combo('action',$combo_action).
 	'<input type="submit" value="'.__('ok').'" /></p>'.
 	form::hidden(array('user_id'),$user_id).
Index: admin/posts_actions.php
===================================================================
--- admin/posts_actions.php	(revision 1806)
+++ admin/posts_actions.php	(revision 1719)
@@ -11,14 +11,490 @@
 # -- END LICENSE BLOCK -----------------------------------------
 
-/* ### THIS FILE IS DEPRECATED 					### */
-/* ### IT IS ONLY USED FOR PLUGINS COMPATIBILITY ### */
-
 require dirname(__FILE__).'/../inc/admin/prepend.php';
 
 dcPage::check('usage,contentadmin');
 
-$posts_actions_page = new dcPostsActionsPage($core,'posts.php');
-
-$posts_actions_page->process();
-
+$params = array();
+
+/**
+* FieldsList - Compatibility class for hidden fields & entries[] fields
+*
+*/
+class FieldsList {
+	/** @var array list of hidden fields */
+	protected $hidden;
+	/** @var array list of selected entries */
+	protected $entries;
+
+
+   /**
+     * Class constructor
+	*/
+	public function __construct() {
+		$this->hidden=array();
+		$this->entries =array();
+	}
+
+    /**
+     * addHidden - adds a hidden field
+     * 
+     * @param string $name the field name.
+     * @param mixed $value the field value.
+     *
+     * @access public
+	 * @return the FieldsList instance, enabling to chain requests
+     */	
+	 public function addHidden($name,$value) {
+		$this->hidden[] = form::hidden($name,$value);
+		return $this;
+	}
+
+    /**
+     * addEntry - adds a antry field
+     * 
+     * @param string $id the entry id.
+     * @param mixed $title the entry title.
+     *
+     * @access public
+	 * @return the FieldsList instance, enabling to chain requests
+     */	
+	 public function addEntry($id,$title) {
+		$this->entries[$id]=$title;
+		return $this;
+	}
+
+    /**
+     * getHidden - returns the list of hidden fields, html encoded
+     *
+     * @access public
+	 * @return the list of hidden fields, html encoded
+     */
+	 public function getHidden() {
+		return join('',$this->hidden);
+	}
+	
+    /**
+     * getEntries - returns the list of entry fields, html encoded
+     *
+	 * @param boolean $hidden if set to true, returns entries as a list of hidden field
+	 *                if set to false, returns html code displaying the list of entries
+	 *                with a list of checkboxes to enable to select/deselect entries
+     * @access public
+	 * @return the list of entry fields, html encoded
+     */
+	public function getEntries ($hidden=false) {
+		$ret = '';
+		if ($hidden) {
+			foreach ($this->entries as $id=> $e) {
+				$ret .= form::hidden('entries[]',$id);
+			}
+		} else {
+			$ret = 
+				'<table class="posts-list"><tr>'.
+				'<th colspan="2">'.__('Title').'</th>'.
+				'</tr>';
+			foreach ($this->entries as $id=>$title) {
+				$ret .= 
+					'<tr><td>'.
+					form::checkbox(array('entries[]'),$id,true,'','').'</td>'.
+					'<td>'.	$title.'</td></tr>';
+			}
+			$ret .= '</table>';
+		}
+		return $ret;
+	}
+	
+    /**
+     * getEntriesQS - returns the list of entry fields as query string
+     *
+     * @access public
+	 * @return the list of entry fields, html encoded
+     */
+	public function getEntriesQS() {
+		$ret=array();
+		foreach ($this->entries as $id=>$title) {
+			$ret[] = 'entries[]='.$id;
+		}
+		return join('&',$ret);
+	}
+	
+    /**
+     * __toString - magic method. -- DEPRECATED here
+	 *              This method is only used to preserve compatibility with plugins 
+	 *				relying on previous versions of adminPostsActionsContent behavior, 
+	 *
+     * @access public
+	 * @return the list of hidden fields and entries (as hidden fields too), html encoded
+     */
+	public function __toString() {
+		return join('',$this->hidden).$this->getEntries(true);
+	}
+}
+
+$fields = new FieldsList();
+$posts_ids = array();
+
+if (isset($_POST['redir']) && strpos($_POST['redir'],'://') === false)
+{
+	$redir = $_POST['redir'];
+}
+else
+{
+	$redir =
+	'posts.php?user_id='.$_POST['user_id'].
+	'&cat_id='.$_POST['cat_id'].
+	'&status='.$_POST['status'].
+	'&selected='.$_POST['selected'].
+	'&month='.$_POST['month'].
+	'&lang='.$_POST['lang'].
+	'&sortby='.$_POST['sortby'].
+	'&order='.$_POST['order'].
+	'&page='.$_POST['page'].
+	'&nb='.$_POST['nb'];
+}
+$redir_sel = $redir;
+
+if (!empty($_POST['entries']))
+{
+	$entries = $_POST['entries'];
+	
+	foreach ($entries as $k => $v) {
+		$entries[$k] = (integer) $v;
+	}
+	
+	$params['sql'] = 'AND P.post_id IN('.implode(',',$entries).') ';
+	
+	if (!isset($_POST['full_content']) || empty($_POST['full_content'])) {
+		$params['no_content'] = true;
+	}
+	
+	if (isset($_POST['post_type'])) {
+		$params['post_type'] = $_POST['post_type'];
+	}
+	
+	$posts = $core->blog->getPosts($params);
+	while ($posts->fetch())	{
+		$posts_ids[] = $posts->post_id;
+		$fields->addEntry($posts->post_id,$posts->post_title);
+	}
+	// Redirection including selected entries
+	$redir_sel = $redir.'&'.$fields->getEntriesQS();
+
+} else {
+	$posts = $core->con->select("SELECT blog_id FROM ".$core->prefix."blog WHERE false");;
+}
+
+/* Actions
+-------------------------------------------------------- */
+if (!empty($_POST['action']))
+{
+	$action = $_POST['action'];
+} 
+else
+{
+	$core->error->add(__('No action specified.'));
+	dcPage::open(
+		__('Entries'),'',dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			__('Entries') => 'posts.php',
+			'<span class="page-title">'.__('Entries actions').'</span>' => ''
+		))
+	);
+	
+	echo '<p><a class="back" href="'.html::escapeURL($redir_sel).'">'.__('Back to entries list').'</a></p>';
+
+	dcPage::close();
+	exit;
+}
+
+# --BEHAVIOR-- adminPostsActions
+$core->callBehavior('adminPostsActions',$core,$posts,$action,$redir);
+
+if (preg_match('/^(publish|unpublish|schedule|pending)$/',$action))
+{
+	switch ($action) {
+		case 'unpublish' : $status = 0; break;
+		case 'schedule' : $status = -1; break;
+		case 'pending' : $status = -2; break;
+		default : $status = 1; break;
+	}
+	
+	try
+	{
+		$core->blog->updPostsStatus($posts_ids,$status);
+		
+		http::redirect($redir_sel.'&upd=1');
+	}
+	catch (Exception $e)
+	{
+		$core->error->add($e->getMessage());
+	}
+}
+elseif ($action == 'selected' || $action == 'unselected')
+{
+	try
+	{
+		$core->blog->updPostsSelected($posts_ids,$action == 'selected');
+		
+		http::redirect($redir_sel."&upd=1");
+	}
+	catch (Exception $e)
+	{
+		$core->error->add($e->getMessage());
+	}
+}
+elseif ($action == 'delete')
+{
+	try
+	{
+		// Backward compatibility
+		foreach($posts_ids as $post_id)
+		{
+			# --BEHAVIOR-- adminBeforePostDelete
+			$core->callBehavior('adminBeforePostDelete',(integer) $post_id);
+		}
+		
+		# --BEHAVIOR-- adminBeforePostsDelete
+		$core->callBehavior('adminBeforePostsDelete',$posts_ids);
+		
+		$core->blog->delPosts($posts_ids);
+		
+		http::redirect($redir."&del=1");
+	}
+	catch (Exception $e)
+	{
+		$core->error->add($e->getMessage());
+	}
+	
+}
+elseif ($action == 'category' && isset($_POST['new_cat_id']))
+{
+	$new_cat_id = $_POST['new_cat_id'];
+	
+	try
+	{
+		if (!empty($_POST['new_cat_title']) && $core->auth->check('categories', $core->blog->id))
+		{
+			$cur_cat = $core->con->openCursor($core->prefix.'category');
+			$cur_cat->cat_title = $_POST['new_cat_title'];
+			$cur_cat->cat_url = '';
+			
+			$parent_cat = !empty($_POST['new_cat_parent']) ? $_POST['new_cat_parent'] : '';
+			
+			# --BEHAVIOR-- adminBeforeCategoryCreate
+			$core->callBehavior('adminBeforeCategoryCreate', $cur_cat);
+			
+			$new_cat_id = $core->blog->addCategory($cur_cat, (integer) $parent_cat);
+			
+			# --BEHAVIOR-- adminAfterCategoryCreate
+			$core->callBehavior('adminAfterCategoryCreate', $cur_cat, $new_cat_id);
+		}
+		
+		$core->blog->updPostsCategory($posts_ids, $new_cat_id);
+		
+		http::redirect($redir_sel."&upd=1");
+	}
+	catch (Exception $e)
+	{
+		$core->error->add($e->getMessage());
+	}
+}
+elseif ($action == 'author' && isset($_POST['new_auth_id'])
+&& $core->auth->check('admin',$core->blog->id))
+{
+	$new_user_id = $_POST['new_auth_id'];
+	
+	try
+	{
+		if ($core->getUser($new_user_id)->isEmpty()) {
+			throw new Exception(__('This user does not exist'));
+		}
+		
+		$cur = $core->con->openCursor($core->prefix.'post');
+		$cur->user_id = $new_user_id;
+		$cur->update('WHERE post_id '.$core->con->in($posts_ids));
+		
+		http::redirect($redir_sel."&upd=1");
+	}
+	catch (Exception $e)
+	{
+		$core->error->add($e->getMessage());
+	}
+}
+elseif ($action == 'lang' && isset($_POST['new_lang']))
+{
+	$new_lang = $_POST['new_lang'];
+	try
+	{
+		$cur = $core->con->openCursor($core->prefix.'post');
+		$cur->post_lang = $new_lang;
+		$cur->update('WHERE post_id '.$core->con->in($posts_ids));
+		
+		http::redirect($redir_sel."&upd=1");
+	}
+	catch (Exception $e)
+	{
+		$core->error->add($e->getMessages());
+	}
+}
+
+/* DISPLAY
+-------------------------------------------------------- */
+// Get current users list
+$usersList = '';
+if ($action == 'author' && $core->auth->check('admin',$core->blog->id)) {
+	$params = array(
+		'limit' => 100,
+		'order' => 'nb_post DESC'
+		);
+	$rs = $core->getUsers($params);
+	while ($rs->fetch())
+	{
+		$usersList .= ($usersList != '' ? ',' : '').'"'.$rs->user_id.'"';
+	}
+}
+dcPage::open(
+	__('Entries'),
+	'<script type="text/javascript">'."\n".
+	"//<![CDATA[\n".
+	'usersList = ['.$usersList.']'."\n".
+	"\n//]]>\n".
+	"</script>\n".
+	dcPage::jsLoad('js/jquery/jquery.autocomplete.js').
+	dcPage::jsLoad('js/_posts_actions.js').
+	dcPage::jsMetaEditor().
+	# --BEHAVIOR-- adminBeforePostDelete
+	$core->callBehavior('adminPostsActionsHeaders')
+);
+
+if (!isset($action)) {
+	dcPage::close();
+	exit;
+}
+
+if (isset($_POST['redir']) && strpos($_POST['redir'],'://') === false)
+{
+	$fields->addHidden(array('redir'),html::escapeURL($_POST['redir']));
+}
+else
+{
+	$fields
+		->addHidden(array('user_id'),$_POST['user_id'])
+		->addHidden(array('cat_id'),$_POST['cat_id'])
+		->addHidden(array('status'),$_POST['status'])
+		->addHidden(array('selected'),$_POST['selected'])
+		->addHidden(array('month'),$_POST['month'])
+		->addHidden(array('lang'),$_POST['lang'])
+		->addHidden(array('sortby'),$_POST['sortby'])
+		->addHidden(array('order'),$_POST['order'])
+		->addHidden(array('page'),$_POST['page'])
+		->addHidden(array('nb'),$_POST['nb'])
+	;
+}
+
+if (isset($_POST['post_type'])) {
+	$fields->addHidden(array('post_type'),$_POST['post_type']);
+}
+
+# --BEHAVIOR-- adminPostsActionsContent
+$core->callBehavior('adminPostsActionsContent',$core,$action,$fields);
+
+if ($action == 'category')
+{
+	echo dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			__('Entries') => 'posts.php',
+			'<span class="page-title">'.__('Change category for this selection').'</span>' => ''
+	));
+	
+	echo '<p><a class="back" href="'.html::escapeURL($redir_sel).'">'.__('Back to entries list').'</a></p>';
+
+	# categories list
+	# Getting categories
+	$categories_combo = dcAdminCombos::getCategoriesCombo(
+		$core->blog->getCategories(array('post_type'=>'post'))
+	);
+	
+	echo
+	'<form action="posts_actions.php" method="post">'.
+	$fields->getEntries().
+	'<p><label for="new_cat_id" class="classic">'.__('Category:').'</label> '.
+	form::combo('new_cat_id',$categories_combo,'');
+	
+	if ($core->auth->check('categories', $core->blog->id)) {
+		echo 
+		'<div>'.
+		'<p id="new_cat">'.__('Create a new category for the post(s)').'</p>'.
+		'<p><label for="new_cat_title">'.__('Title:').'</label> '.
+		form::field('new_cat_title',30,255,'','').'</p>'.
+		'<p><label for="new_cat_parent">'.__('Parent:').'</label> '.
+		form::combo('new_cat_parent',$categories_combo,'','').
+		'</p>'.
+		'</div>';
+	}
+	
+	echo
+	$fields->getHidden().
+	$core->formNonce().
+	form::hidden(array('action'),'category').
+	'<input type="submit" value="'.__('Save').'" /></p>'.
+	'</form>';
+}
+elseif ($action == 'lang')
+{
+	echo dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			__('Entries') => 'posts.php',
+			'<span class="page-title">'.__('Change language for this selection').'</span>' => ''
+	));
+	echo '<p><a class="back" href="'.html::escapeURL($redir_sel).'">'.__('Back to entries list').'</a></p>';
+
+	# lang list
+	# Languages combo
+	$rs = $core->blog->getLangs(array('order'=>'asc'));
+	$lang_combo = dcAdminCombos::getLangsCombo($rs,true);
+	
+	echo
+	'<form action="posts_actions.php" method="post">'.
+	$fields->getEntries().
+	
+	'<p><label for="new_lang" class="classic">'.__('Entry lang:').'</label> '.
+	form::combo('new_lang',$lang_combo,'');
+	
+	echo
+	$fields->getHidden().
+	$core->formNonce().
+	form::hidden(array('action'),'lang').
+	'<input type="submit" value="'.__('Save').'" /></p>'.
+	'</form>';
+
+}
+elseif ($action == 'author' && $core->auth->check('admin',$core->blog->id))
+{
+	echo dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			__('Entries') => 'posts.php',
+			'<span class="page-title">'.__('Change author for this selection').'</span>' => ''
+	));
+	echo '<p><a class="back" href="'.html::escapeURL($redir_sel).'">'.__('Back to entries list').'</a></p>';
+
+	echo
+	'<form action="posts_actions.php" method="post">'.
+	$fields->getEntries().
+	'<p><label for="new_auth_id" class="classic">'.__('New author (author ID):').'</label> '.
+	form::field('new_auth_id',20,255);
+	
+	echo
+	$fields->getHidden().
+	$core->formNonce().
+	form::hidden(array('action'),'author').
+	'<input type="submit" value="'.__('Save').'" /></p>'.
+	'</form>';
+}
+
+dcPage::close();
 ?>
Index: admin/preferences.php
===================================================================
--- admin/preferences.php	(revision 1845)
+++ admin/preferences.php	(revision 1786)
@@ -169,4 +169,6 @@
 			$core->auth->user_prefs->interface->put('hide_std_favicon',!empty($_POST['user_ui_hide_std_favicon']),'boolean',null,true,true);
 		}
+		$core->auth->user_prefs->interface->put('iconset',(!empty($_POST['user_ui_iconset']) ? $_POST['user_ui_iconset'] : ''));
+		$core->auth->user_prefs->interface->put('nofavmenu',!empty($_POST['user_ui_nofavmenu']),'boolean');
 		
 		# Udate user
Index: admin/style/default.css
===================================================================
--- admin/style/default.css	(revision 1869)
+++ admin/style/default.css	(revision 1801)
@@ -27,5 +27,4 @@
 	width: 100%;
 	padding-top: 1em;
-	background: #f7f7f7 url(bg_wrapper.png) repeat-y 15.5em;
 	}
 #main {
@@ -34,11 +33,11 @@
 	margin-left: -14.5em;
 	margin-top: 0;
+	background: #fff url(bg_menu.png);
 	}
 #content {
-	margin: 0 0 0 15.5em;
+	margin: 0 0 0 14.5em;
 	padding: 9px 18px 18px; /* ie < 9 sucks */
 	padding: .9rem 1.8rem 1.8rem;
 	background: #fff;
-	overflow: hidden;
 	}
 #main-menu {
@@ -48,5 +47,5 @@
 	padding-top: .5em;
 	padding-bottom: 1em;
-	overflow: hidden;
+	background: #f7f7f7;
 	}
 #footer {
@@ -55,50 +54,5 @@
 	text-align: right;
 	border-top: 1px solid #ccc;
-	background-color: #fff;
-	}
-/* to hide main-menu */
-#collapser {
-	display: block;
-	float: left;
-	width: 1em;
-	background: #f3f3f3;
-	margin-left: 14.5em;
-	border: none;
-	text-align: left;
-	overflow: hidden;
-	padding-top: 22px;
-	}
-.expand-mm {
-	display:none;
-	}
-/* if main-menu is hidden */
-#wrapper.hide-mm {
-	background: #fff;
-	}
-.hide-mm #main {
-	margin-left: 0;
-	}
-.hide-mm #content {
-	margin-left: 1em;
-	}
-.hide-mm #main-menu {
-	display: none;
-	}
-.hide-mm #collapser {
-	margin-left: 0;
-	text-align: right;
-	background-color: #e3e3e3; 
-	}
-.hide-mm .collapse-mm {
-	display: none;
-	}
-.hide-mm .expand-mm {
-	display: block;
-	}
-/* if no js activated */
-.no-js #content {
-	margin-left: 14.5em;
-	}
-
+	}
 /* -------------------------------------------------------------- layout: two-cols */
 .two-cols {
@@ -168,14 +122,14 @@
 	display: inline-block;
 	vertical-align: top;
-	margin-left: 1.5%;
-	margin-right: 1.5%; 
+	margin-left: 2.5%;
+	margin-right: 2.5%; 
 	-moz-box-sizing: border-box; 
 	-webkit-box-sizing: border-box; 
 	box-sizing: border-box;
 	}
-	.three-boxes:first-child, .three-boxes.first-child {
+	.three-boxes:first-child {
 		margin-left: 0;
 		}
-	.three-boxes:last-child, .three-boxes.last-child {
+	.three-boxes:last-child {
 		margin-right: 0;
 		}
@@ -437,7 +391,4 @@
 	border:none;
 	}
-h1 a:link, h1 a:visited {
-	border:	none;
-	}
 /* ----------------------------------------------------------------------------
 																	FORMULAIRES
@@ -602,5 +553,5 @@
 	border: 1px solid #ccc;
 	font-family: arial, helvetica, sans-serif;
-	padding: 4px 10px;
+	padding: 3px 8px;
 	line-height: normal !important;
 	display: inline-block;
@@ -612,5 +563,4 @@
 	border-radius: 3px;
 	cursor: pointer;
-	font: 100% "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;
 	}
 button,
@@ -621,19 +571,18 @@
 	}
  /* validation */
-input[type=submit], a.button.submit, input.button.start {
+input[type=submit], a.button.submit {
 	color: #fff;
 	border: 1px solid #2C8FD1;
-	background-image:-moz-linear-gradient(top,#25A6E1 0%,#188BC0 100%);
-	background-image:-webkit-gradient(linear,left top,left bottom, from(#25A6E1), to(#188BC0));
-	background-image:linear-gradient(top,#25A6E1 0%,#188BC0 100%);
+	background:-moz-linear-gradient(top,#25A6E1 0%,#188BC0 100%);
+	background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#25A6E1),color-stop(100%,#188BC0));
+	background:linear-gradient(top,#25A6E1 0%,#188BC0 100%);
 	background-color:#25A6E1;
 	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3);
 	}
 	input[type=submit]:hover, input[type=submit]:focus,
-	input.button.start:hover, input.button.start:focus,
 	a.button.submit:hover, a.button.submit:focus {
-		background-image:-moz-linear-gradient(top,#188BC0 0%,#25A6E1 100%);
-		background-image:-webkit-gradient(linear,left top,left bottom, from(#188BC0),to(#25A6E1));
-		background-image:linear-gradient(top,#188BC0 0%,#25A6E1 100%);
+		background:-moz-linear-gradient(top,#188BC0 0%,#25A6E1 100%);
+		background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#188BC0),color-stop(100%,#25A6E1));
+		background:linear-gradient(top,#188BC0 0%,#25A6E1 100%);
 		background-color:#188BC0;
 		}
@@ -644,9 +593,7 @@
 a.button.delete, a.button.reset, a.button {
 	color: #000;
-	background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#dfdfdf));
-	background-image: -moz-linear-gradient(top,  #f5f5f5,  #dfdfdf);
-	background-image:linear-gradient(top,#f5f5f5 0%,#dfdfdf 100%);
+	background: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#dfdfdf));
+	background: -moz-linear-gradient(top,  #f5f5f5,  #dfdfdf);
 	background-color: #eee;
-	border: 1px solid #ccc;
 	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
 	}
@@ -659,7 +606,6 @@
 	a.button.delete:hover, a.button.reset:hover, a.button:hover,
 	a.button.delete:focus, a.button.reset:focus, a.button:focus {
-		background-image:-webkit-gradient( linear, left top, left bottom, from(#e9e9e9), to(#f9f9f9));
-		background-image:-moz-linear-gradient(top, #e9e9e9, #f9f9f9);
-		background-image:linear-gradient(top,#e9e9e9 0%,#f9f9f9 100%);
+		background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #e9e9e9), color-stop(1, #f9f9f9) );
+		background:-moz-linear-gradient( center top, #e9e9e9 5%, #f9f9f9 100% );
 		background-color:#f3f3f3;
 		}
@@ -682,10 +628,10 @@
 		}
 .button.add {
-	background-image:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bee74b), color-stop(1, #9BCA1C) );
-	background-image:-moz-linear-gradient(center top, #bee74b 5%, #9BCA1C 100%);
+	background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #bee74b), color-stop(1, #9BCA1C) );
+	background:-moz-linear-gradient( center top, #bee74b 5%, #9BCA1C 100% );
 	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bee74b', endColorstr='#9BCA1C');
 	background-color:#bee74b;
 	border:1px solid #B2D742;
-	padding:.33em 1.33em .5em;
+	padding:.33em 1.33em;
 	color: #000;
 	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6);
@@ -695,7 +641,6 @@
 	}
 	.button.add:hover, .button.add:active, .button.add:focus {
-		background-image:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #9BCA1C), color-stop(1, #bee74b) );
-		background-image:-moz-linear-gradient(center top, #9BCA1C 5%, #bee74b 100%);
-		background-image:linear-gradient(center top, #9BCA1C 5%, #bee74b 100%);
+		background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #9BCA1C), color-stop(1, #bee74b) );
+		background:-moz-linear-gradient( center top, #9BCA1C 5%, #bee74b 100% );
 		filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9BCA1C', endColorstr='#bee74b');
 		background-color:#9BCA1C;
@@ -713,5 +658,4 @@
 input.disabled, input[type=submit].disabled {
  	text-shadow: none;
- 	filter: none;
  	color: #676e78;
  	background: #F5F5F5;
@@ -794,10 +738,10 @@
 	background: #A2CBE9 url(msg-success.png) no-repeat .7em .7em;
 	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6);
-	color: #000;
+	color: #34495e;
 	box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1)
 	}
 	.dc-update h3 {
 		margin-top: 0;
-		color: #000;
+		color: #34495e;
 		}
 	.dc-update p {
@@ -806,14 +750,14 @@
 		}
 	.dc-update a {
-		color: #000;
+		color: #34495e;
+		border-color: #000;
 		margin-right: 1em;
 		}
+		a.updt-info {
+			margin-left: 2em;
+			font-weight: bold;
+			}
 		.dc-update a.button {
 			padding: .5em 1em; 
-			}
-		.updt-info a {
-			margin-left: 2em;
-			border-color: #000;
-			font-weight: bold;
 			}
 /* ---------------------------------------------------------------------------------
@@ -867,4 +811,5 @@
 			height: 36px; /* ie < 9 sucks */
 			height: 3.6rem;
+			border: none;
 			color: #fff;
 			background: transparent url(dc_logos/b-dotclear120.png) no-repeat 0 6px;
@@ -1463,7 +1408,4 @@
 		}
 /* ------------------------------------------------------------------- blog_pref.php */
-#media_img_title_pattern {
-	margin-right: 1em;
-	}
 .user-perm {
 	margin: 2em 0px;
@@ -1660,28 +1602,18 @@
 		width: 100%;
 		}
-/* ------------------------------------------------------------------ help.php */
-.legible { /* for pages with a lot of text to read */
-	font-size: 1.16em;
-	max-width: 62em;
-	margin-left: 6%;
-	}
-
 /* ------------------------------------------------------------------ media.php */
+.media-list {
+	position: static;
+	}
 .media-item {
 	position: relative;
-	border: 1px solid #ddd;
-	margin: 9px;
-	padding: 10px 12px 6px;
+	border: 1px solid #ccc;
+	margin: 1em;
+	padding: 1em;
 	width: 300px;
 	display: inline-block;
 	vertical-align: top;
-	min-height: 140px;
-	}
-	.media-item p {
-		margin: 0 0 .5em;
-		}
-	.media-item object {
-		margin-top: .5em;
-		}
+	min-height: 120px
+	}
 	.media-item ul {
 		display: block;
@@ -1698,20 +1630,17 @@
 			display: block;
 			}
-	.media-link {
-		font-size: 1.1em;
-		}
-	.media-action-box {
-		position: relative;
-		margin: 3em 3em 1em 1em;
-		display: inline-block;
-		vertical-align: top;
-		}
-	li.media-action {
-		display: block;
-		position: absolute;
-		bottom: 4px;
-		right: 8px;
-		height: 16px;
-		}
+.media-action-box {
+	position: relative;
+	margin: 3em 3em 1em 1em;
+	display: inline-block;
+	vertical-align: top;
+	}
+li.media-action {
+	display: block;
+	position: absolute;
+	top: 5px;
+	right: 5px;
+	height: 16px;
+	}
 	li.media-action a {
 		border: none;
@@ -1723,155 +1652,8 @@
 		border: none;
 		}
-#entry-sidebar .media-item {
-	width: 100%;
-	min-height: 0;
-	padding: 4px;
-	margin: .33em 0;
-	}
-	#entry-sidebar li.media-action {
-		top: 4px;
-		}
-
-.folders-group .media-item {
-	min-height: 70px;
-	}
-	.folders-group .media-item p {
-		margin-bottom: 0;
-		}
-	.media-folder {
-		background: transparent url(bg_menu.png) repeat-y;
-		border-color: #eee;
-		}
-	.media-folder-up {
-		border-color: #fff;
-		padding-bottom: 6px;
-		}
-	.media-folder .media-link {
-		font-size: 1.25em;
-		margin-left: 2em;
-		color: #676e78;
-		border-bottom: none;
-		}
-
 .zip-dl {
 	background: transparent url(package.png) no-repeat 0 50%;
 	padding: 5px 0 5px 20px;
 	}
-/* upload multiple */
-.enhanced_uploader .choose_files, .enhanced_uploader .cancel, 
-.enhanced_uploader .clean, .enhanced_uploader .start {
-	margin-right: .4em;
-	}
-.enhanced_uploader #upfile {
-	visibility: hidden;
-	width: 0;
-	height: 0;
-	margin: 0;
-	opacity: 0;
-	filter: alpha(opacity=0);
-	cursor: pointer;
-	}
-.button.clean, .button.cancel, .button.choose_files {
-	display: none;
-	}
-.enhanced_uploader .button.choose_files {
-	display: inline-block;
-	}
-.enhanced_uploader .max-size {
-	display: block;
-	}
-.enhanced_uploader .one-file {
-	display: none;
-	}
-label span.one-file {
-	display: inline;
-	}
-.enhanced_uploader p.clear {
-	padding-top: 1em;
-	margin-bottom: 1em;
-	}
-#add-file-f p.clear {
-	margin-top: 1em;
-	margin-bottom: 0;
-	clear: both;
-	}
-.files {
-	list-style-type: none;
-	margin-left: 0;
-	padding-left: 0;
-	border-bottom: 1px solid #ddd;
-	}
-.files li {
-	margin-left: 0;
-	padding-left: 0;
-	}
-.upload-msg {
-	font-weight: bold;
-	}
-.upload-msg.upload-error {
-	color: #c00;
-	}
-.upload-files {
-	padding: 0 0.5em;
-	margin: 1em 0;
-	}
-.upload-file {
-	margin: 0;
-	padding: .3em 0;
-	border-top: 1px solid #ddd;
-	position: relative;
-	}
-.upload-fileinfo {
-	margin-left: 0;
-/*	margin-bottom: .4em;*/
-	}
-.upload-fileinfo input {
-	position: absolute;
-	top: .5em;
-	right: .5em;
-	}
-.upload-fileinfo span {
-	padding-right: 8px;
-	}
-.upload-fileinfo .upload-filecancel {
-	display: block;
-	padding-right: 0;
-	margin-top: 3px;
-	width: 20px;
-	height: 20px;
-	background: transparent url("cancel.png") no-repeat left top;
-	text-indent: -1000px;
-	cursor: pointer;
-	float: left;
-	}
-.upload-filemsg {
-	font-weight: bold;
-	color: green;
-	}
-.upload-filemsg.upload-error {
-	color: #c00;
-	}
-.upload-progress {
-	padding: .3em 0; 
-	}
-.upload-progress div {
-	width: 0;
-	height: 1em;
-	padding: .2em 0;
-	font-size: 0.8em;
-	font-weight: bold;
-	line-height: 1em;
-	text-align: right;
-	background: green url("loader.png") repeat-x left top;
-	color: white;
-	border-radius: 2px;
-	}
-div.template-upload {
-	clear: both;
-	}
-.queue-message {
-	font-weight: bold;
-	}
-
 /* --------------------------------------------------------------- media-item.php */
 #media-icon {
@@ -2215,25 +1997,29 @@
 	}
 /* caché pour tout le monde */
-.hide, .button.hide {
+.hide {
 	display: none;
 	}
 /* Caché sauf pour les revues d'écran */
 .hidden, .with-js .out-of-screen-if-js {
-	position: absolute !important;
-	clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
-	clip: rect(1px, 1px, 1px, 1px);
-	padding: 0 !important;
-	border: 0 !important;
-	height: 1px !important;
-	width: 1px !important;
-	overflow: hidden;
-	}
+    position: absolute !important;
+    clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
+    clip: rect(1px, 1px, 1px, 1px);
+    padding: 0 !important;
+    border: 0 !important;
+    height: 1px !important;
+    width: 1px !important;
+    overflow: hidden;
+    }
 /* caché si js est inactif */
 .no-js .hidden-if-no-js {
-	display: none;
+        display: none;
+	}
+/* montré si js est inactif */
+.no-js .hidden-if-js {
+	display: block;
 	}
 /* caché si js est actif */
-.with-js .hidden-if-js {
-	display: none;
+.hidden-if-js {
+        display: none;
 	}
 /* ------------------------------------------------------------------------------------
Index: admin/style/jsToolBar/jsToolBar.css
===================================================================
--- admin/style/jsToolBar/jsToolBar.css	(revision 1810)
+++ admin/style/jsToolBar/jsToolBar.css	(revision 1760)
@@ -36,4 +36,5 @@
 	border-radius: 4px 4px 0 0; 
 }
+
 .jstElements select, .jstElements button {
 	vertical-align: middle;
@@ -54,5 +55,5 @@
 	background-repeat: no-repeat;
 }
-.jstElements button:hover, .jstElements button:focus {
+.jstElements button:hover {
 	border-color : #ddd;
 	background-color: #fff;
@@ -71,4 +72,5 @@
 	margin-right: 0;
 }
+
 .jstSwitcher {
 	display: block;
@@ -96,53 +98,53 @@
 /* Buttons
 -------------------------------------------------------- */
-button.jstb_strong {
+.jstb_strong {
 	background-image: url(bt_strong.png);
 }
-button.jstb_em {
+.jstb_em {
 	background-image: url(bt_em.png);
 }
-button.jstb_ins {
+.jstb_ins {
 	background-image: url(bt_ins.png);
 }
-button.jstb_del {
+.jstb_del {
 	background-image: url(bt_del.png);
 }
-button.jstb_quote {
+.jstb_quote {
 	background-image: url(bt_quote.png);
 }
-button.jstb_code {
+.jstb_code {
 	background-image: url(bt_code.png);
 }
-button.jstb_paragraph {
+.jstb_paragraph {
 	background-image: url(bt_paragraph.png);
 }
-button.jstb_br {
+.jstb_br {
 	background-image: url(bt_br.png);
 }
-button.jstb_blockquote {
+.jstb_blockquote {
 	background-image: url(bt_bquote.png);
 }
-button.jstb_pre {
+.jstb_pre {
 	background-image: url(bt_pre.png);
 }
-button.jstb_ul {
+.jstb_ul {
 	background-image: url(bt_ul.png);
 }
-button.jstb_ol {
+.jstb_ol {
 	background-image: url(bt_ol.png);
 }
-button.jstb_link {
+.jstb_link {
 	background-image: url(bt_link.png);
 }
-button.jstb_img {
+.jstb_img {
 	background-image: url(bt_img.png);
 }
-button.jstb_img_select {
+.jstb_img_select {
 	background-image: url(bt_img_select.png);
 }
-button.jstb_post_link {
+.jstb_post_link {
 	background-image: url(bt_post.png);
 }
-button.jstb_removeFormat {
+.jstb_removeFormat {
 	background-image: url(bt_clean.png);
 }
Index: admin/style/jsUpload/style.css
===================================================================
--- admin/style/jsUpload/style.css	(revision 1588)
+++ admin/style/jsUpload/style.css	(revision 1588)
@@ -0,0 +1,163 @@
+.enhanced_uploader .button {
+	display: inline-block;
+	*display: inline;
+
+	border-radius: .2em;
+	background: #2373A8;
+	background: -webkit-gradient(linear, left top, left bottom, from(#2C8FD1), to(#2373A8));
+	background: -moz-linear-gradient(center top , #2C8FD1, #2373A8) repeat scroll 0 0 transparent;
+	outline: none;
+	border: 1px solid #2373A8;
+	text-decoration: none;
+	text-shadow: 0 1px 1px rgba(0,0,0,.3);
+	text-align: center;
+	cursor: pointer;
+	color: #fff;
+	font: 1em "DejaVu Sans","Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;
+	margin-right: 4px;
+	margin-bottom: .5em;
+	padding: .1em .5em 0 .5em;
+	float: left;
+}
+.enhanced_uploader .button:hover {
+	background: #2373A8;
+	background: -webkit-gradient(linear, left top, left bottom, from(#2373A8), to(#2C8FD1));
+	background: -moz-linear-gradient(center top , #2373A8, #2C8FD1) repeat scroll 0 0 transparent;
+	border: 1px solid #2C8FD1;
+}
+.enhanced_uploader .add, .enhanced_uploader .clean, 
+.enhanced_uploader .cancel, .enhanced_uploader .disabled {
+	text-shadow: none;
+	color: #000;
+	background: #F5F5F5;
+	background: -webkit-gradient(linear, left top, left bottom, from(#DFDFDF), to(#F5F5F5));
+	background: -moz-linear-gradient(center top , #F5F5F5, #DFDFDF) repeat scroll 0 0 transparent;
+	border: 1px solid #CCCCCC;
+}
+.enhanced_uploader .button.add:hover, .enhanced_uploader .button.clean:hover, 
+.enhanced_uploader .button.cancel:hover, .enhanced_uploader .disabled:hover {
+	background: #DFDFDF;
+	background: -webkit-gradient(linear, left top, left bottom, from(#DFDFDF), to(#F5F5F5));
+	background: -moz-linear-gradient(center top , #DFDFDF, #F5F5F5) repeat scroll 0 0 transparent;
+	border: 1px solid #CCCCCC;
+}
+
+.enhanced_uploader .disabled, .enhanced_uploader .disabled:hover {
+	color: #666;
+	background: #DFDFDF;
+	border: 1px solid #CCCCCC;
+}
+/*.enhanced_uploader .fileupload-buttonbar {
+	margin-top: 2em;
+}*/
+.enhanced_uploader .upload-filecancel {
+	border: none;
+}
+.enhanced_uploader .add, .enhanced_uploader .cancel, 
+.enhanced_uploader .clean, .enhanced_uploader .start {
+	margin-right: .4em;
+}
+.enhanced_uploader #upfile {
+	visibility: hidden;
+	width: 0;
+	height: 0;
+	margin: 0;
+	opacity: 0;
+	filter: alpha(opacity=0);
+	cursor: pointer;
+}
+.button.clean, .button.cancel, .button.add {
+	display: none;
+}
+.enhanced_uploader .button.add {
+	display: inline-block;
+}
+.enhanced_uploader .max-size {
+	display: block;
+}
+.enhanced_uploader .one-file {
+	display: none;
+}
+label span.one-file {
+	display: inline;
+}
+.enhanced_uploader p.clear {
+	padding-top: 1em;
+	margin-bottom: 1em;
+}
+#add-file-f p.clear {
+	margin-top: 1em;
+	margin-bottom: 0;
+	clear: both;
+}
+/* files */
+.files {
+	list-style-type: none;
+	margin-left: 0;
+	padding-left: 0;
+}
+.files li {
+	margin-left: 0;
+	padding-left: 0;
+}
+.upload-msg {
+	font-weight: bold;
+}
+.upload-msg.upload-error {
+	color: #c00;
+}
+.upload-files {
+	padding: 0 0.5em;
+	margin: 10px 0;
+}
+.upload-file {
+	margin: 0 0 8px 0;
+	position: relative;
+}
+.upload-fileinfo {
+	margin-left: 8px;
+	margin-bottom: .4em;
+}
+.upload-fileinfo span {
+	padding-right: 8px;
+}
+.upload-fileinfo .upload-filecancel {
+	display: block;
+	padding-right: 0;
+	margin-top: 3px;
+	width: 20px;
+	height: 20px;
+	background: transparent url("cancel.png") no-repeat left top;
+	text-indent: -1000px;
+	cursor: pointer;
+	float: left;
+}
+.upload-filemsg {
+	font-weight: bold;
+	color: green;
+}
+.upload-filemsg.upload-error {
+	color: #c00;
+}
+.upload-progress {
+	padding: 0 8px;
+}
+.upload-progress div {
+	width: 0;
+	height: 1em;
+	padding: .2em 0;
+	font-size: 0.8em;
+	font-weight: bold;
+	line-height: 1em;
+	text-align: right;
+	background: green url("loader.png") repeat-x left top;
+	color: white;
+	border-radius: 2px;
+}
+div.template-upload {
+	clear: both;
+}
+.queue-message {
+	font-weight: bold;
+	margin: 0 0 1em 0;
+}
Index: build-tools/make-l10n.php
===================================================================
--- build-tools/make-l10n.php	(revision 1863)
+++ build-tools/make-l10n.php	(revision 1179)
@@ -29,5 +29,24 @@
 	echo "l10n file ".$dest.": ";
 	
-	if (l10n::generatePhpFileFromPo(dirname($f).'/'.basename($f,'.po'),$license_block)) {
+	$l = l10n::getPoFile($f);
+	
+	$fcontent =
+	"<?php\n".
+	$license_block.
+	"#\n#\n#\n".
+	"#        DOT NOT MODIFY THIS FILE !\n\n\n\n\n";
+	
+	foreach (l10n::getPoFile($f) as $vo => $tr) {
+		$vo = str_replace("'","\\'",$vo);
+		$tr = str_replace("'","\\'",$tr);
+		$fcontent .= '$GLOBALS[\'__l10n\'][\''.$vo.'\'] = \''.$tr.'\';'."\n";
+	}
+	
+	$fcontent .= "?>";
+	
+	echo $dest.' : ';
+	if (($fp = fopen($dest,'w')) !== false) {
+		fwrite($fp,$fcontent,strlen($fcontent));
+		fclose($fp);
 		echo 'OK';
 	} else {
Index: nc/admin/actions/class.dcaction.php
===================================================================
--- inc/admin/actions/class.dcaction.php	(revision 1905)
+++ 	(revision )
@@ -1,318 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & 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; }
-
-/**
-* dcActionsPage -- handler for action page on selected entries
-*
-*/
-abstract class dcActionsPage
-{
-	/** @var string form submit uri */
-	protected $uri;
-	/** @var dcCore dotclear core instance */
-	protected $core;
-	/** @var array action combo box */
-	protected $combo;
-	/** @var array list of defined actions (callbacks) */
-	protected $actions;
-	/** @var array selected entries (each key is the entry id, value contains the entry description) */
-	protected $entries;
-	/** @var record record that challenges ids against permissions */
-	protected $rs;
-	/** @var array redirection $_GET arguments, if any (does not contain ids by default, ids may be merged to it) */
-	protected $redir_args;
-	/** @var array list of $_POST fields used to build the redirection  */
-	protected $redirect_fields;
-	/** @var string current action, if any */
-	protected $action;
-	/** @var array list of url parameters (usually $_POST) */
-	protected $from;
-	/** @var string form field name for "entries" (usually "entries") */
-	protected $field_entries;
-	
-	/** @var string title for checkboxes list, if displayed */
-	protected $cb_title;
-	
-    /**
-     * Class constructor
-     * 
-     * @param mixed  $core   dotclear core
-     * @param mixed  $uri   form uri
-     *
-     * @access public
-     *
-     * @return mixed Value.
-     */
-	public function __construct($core,$uri,$redirect_args=array()) {
-		$this->core = $core;
-		$this->actions = new ArrayObject();
-		$this->combo = array();
-		$this->uri = $uri;
-		$this->redir_args = $redirect_args;
-		$this->redirect_fields = array();
-		$this->action = '';
-		$this->cb_title = __('Title');
-		$this->entries = array();
-		$this->from = new ArrayObject($_POST);
-		$this->field_entries = 'entries';
-	}
-	
-    /**
-     * addAction - adds an action
-     *
-     * @param string $actions the actions names as if it was a standalone combo array.
-	 * 						  It will be merged with other actions.
-	 * 						  Can be bound to multiple values, if the same callback is to be called
-     * @param callback $callback the callback for the action.
-     *
-     * @access public
-	 *
-     * @return dcActionsPage the actions page itself, enabling to chain addAction().
-     */
-	public function addAction ($actions,$callback) {
-		foreach ($actions as $k => $a) {
-			// Check each case of combo definition
-			// Store form values in $values
-			if (is_array($a)) {
-				$values = array_values($a);
-				if (!isset($this->combo[$k])) {
-					$this->combo[$k]=array();
-				}
-				$this->combo[$k] = array_merge ($this->combo[$k],$a);
-			} elseif ($a instanceof formSelectOption) {
-				$values = array($a->value);
-				$this->combo[$k] = $a->value;
-			} else {
-				$values = array($a);
-				$this->combo[$k] = $a;
-			}
-			// Associate each potential value to the callback
-			foreach ($values as $v) {
-				$this->actions[$v]=$callback;
-			}
-		}
-		return $this;
-	}
-	
-    /**
-     * getCombo - returns the actions combo, useable through form::combo
-     *
-     * @access public
-	 *
-     * @return array the actions combo
-     */
-	public function getCombo() {
-		return $this->combo;
-	}
-	
-	
-    /**
-     * getIDS() - returns the list of selected entries
-     *
-     * @access public
-	 *
-     * @return array the list
-     */
-	public function getIDs() {
-		return array_keys($this->entries);
-	}
-	
-    /**
-     * getIDS() - returns the list of selected entries as HTML hidden fields string
-     *
-     * @access public
-	 *
-     * @return string the HTML code for hidden fields
-     */
-	 public function getIDsHidden() {
-		$ret = '';
-		foreach  ($this->entries as $id->$v) {
-			$ret .= form::hidden($this->field_entries.'[]',$id);
-		}
-		return $ret;
-	}
-	
-    /**
-     * getHiddenFields() - returns all redirection parameters as HTML hidden fields
-     *
-     * @param boolean $with_ids if true, also include ids in HTML code
-	 *
-     * @access public
-	 *
-     * @return string the HTML code for hidden fields
-     */	
-	public function getHiddenFields($with_ids = false) {
-		$ret = '';
-		foreach ($this->redir_args as $k => $v) {
-			$ret .= form::hidden(array($k),$v);
-		}
-		if ($with_ids) {
-			$ret .= $this->getIDsHidden();
-		}
-		return $ret;
-	}
-	
-	
-	/**
-     * getRS() - get record from DB Query containing requested IDs
-     *
-     * @param boolean $with_ids if true, also include ids in HTML code
-	 *
-     * @access public
-	 *
-     * @return string the HTML code for hidden fields
-     */
-	public function getRS() {
-		return $this->rs;
-	}
-	
-	/**
-     * setupRedir - setup redirection arguments
-	 *  by default, $_POST fields as defined in redirect_fields attributes
-	 *  are set into redirect_args.
-     *
-     * @param array $from input to parse fields from (usually $_POST)
-	 *
-     * @access protected
-     */
-	protected function setupRedir($from) {
-		foreach ($this->redirect_fields as $p) {
-			if (isset($from[$p])) {
-				$redir_args[$p] = $from[$p];
-			}
-		}
-	}
-
-	/**
-     * getRedirection - returns redirection URL
-     *
-     * @param array $params extra parameters to append to redirection
-	 *						must be an array : each key is the name, 
-	 *						each value is the wanted value
-     * @param boolean $with_selected_entries if true, add selected entries in url
-	 *
-     * @access public
-	 *
-     * @return string the redirection url
-     */
-	public function getRedirection($params=array(),$with_selected_entries=false) {
-		$redir_args = array_merge($params,$this->redir_args);
-		if ($with_selected_entries) {
-			$redir_args[$this->field_entries] = array_keys($this->entries);
-		}
-		return $this->uri.'?'.http_build_query($redir_args);
-	}
-
-	/**
-     * redirect - redirects to redirection page
-     *
-	 * @see getRedirection for arguments details
-	 *
-     * @access public
-     */
-	public function redirect($params=array(),$with_selected_entries=false) {
-		http::redirect($this->getRedirection($params,$with_selected_entries));
-	}	
-	
-	/**
-     * getAction - returns current action, if any
-     *
-	 * @see getRedirection for arguments details
-	 *
-     * @access public
-	 *
-     * @return string the action
-     */
-	public function getAction() {
-		return $this->action;
-	}
-
-	/**
-     * process - proceeds action handling, if any
-	 * 			this method may issue an exit() if
-	 *			an action is being processed. If it
-	 *			returns, no action has been performed
-     *
-     * @access public
-     */
-	public function process() {
-
-		$this->setupRedir($this->from);
-		$this->fetchEntries($this->from);	
-		if (isset($this->from['action'])) {
-			$this->action = $this->from['action'];
-			try {
-				$performed=false;
-				foreach ($this->actions as $k=>$v) {
-					if ($this->from['action']==$k) {
-						$performed = true;
-						call_user_func($v,$this->core,$this,$this->from);
-					}
-				}
-				if ($performed) {
-					exit;
-				}
-			} catch (Exception $e) {
-				$this->error($e);
-			}
-		}
-	}
-
-	/**
-     * getcheckboxes -returns html code for selected entries
-	 * 			as a table containing entries checkboxes
-     *
-     * @access public
-	 *
-     * @return string the html code for checkboxes
-     */
-	public function getCheckboxes() {
-		$ret = 
-			'<table class="posts-list"><tr>'.
-			'<th colspan="2">'.$this->cb_title.'</th>'.
-			'</tr>';
-		foreach ($this->entries as $id=>$title) {
-			$ret .= 
-				'<tr><td>'.
-				form::checkbox(array($this->field_entries.'[]'),$id,true,'','').'</td>'.
-				'<td>'.	$title.'</td></tr>';
-		}
-		$ret .= '</table>';
-		return $ret;
-	}
-	
-	/**
-     * beginPage, endPage - displays the beginning/ending of a page, if action does not redirects dirtectly
-     *
-	 * These methods are called from the actions themselves.
-	 *
-     * @param string $breadcrumb breadcrumb to display
-     * @param string $head	page header to include
-	 *
-     * @access public
-     */
-	abstract public function beginPage($breadcrumb='',$head='');
-	abstract public function endPage();
-
-	/**
-     * fetchEntries - fills-in information by requesting into db
-	 * 	this method may setup the following attributes
-	 *   * entries : list of entries (checked against permissions)
-	 *      entries ids are array keys, values contain entry description (if relevant)
-     *   * rs : record given by db request
-     * @access protected
-     */
-	 abstract protected function fetchEntries($from);
-
-}
-
Index: nc/admin/actions/class.dcactioncomments.php
===================================================================
--- inc/admin/actions/class.dcactioncomments.php	(revision 1905)
+++ 	(revision )
@@ -1,140 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & 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; }
-
-class dcCommentsActionsPage extends dcActionsPage
-{
-	public function __construct($core,$uri,$redirect_args=array()) {
-		parent::__construct($core,$uri,$redirect_args);
-		$this->redirect_fields = array('type','author','status',
-			'sortby','ip','order','page','nb');
-		$this->field_entries = 'comments';
-		$this->title_cb = __('Comments');
-		$this->loadDefaults();
-		$core->callBehavior('adminCommentsActionsPage',$core,$this);
-	}
-
-	protected function loadDefaults() {
-		// We could have added a behavior here, but we want default action
-		// to be setup first
-		dcDefaultCommentActions::adminCommentsActionsPage($this->core,$this);
-	}
-	
-	public function beginPage($breadcrumb='',$head='') {
-		dcPage::open(
-			__('Comments'),
-			
-			dcPage::jsLoad('js/_comments_actions.js').
-			$head,
-			$breadcrumb
-		);	
-		echo '<p><a class="back" href="'.$this->getRedirection(array(),true).'">'.__('Back to entries list').'</a></p>';
-	}
-	
-	public function endPage() {
-		dcPage::close();
-	}
-
-	public function error(Exception $e) {
-		$this->core->error->add($e->getMessage());
-		$this->beginPage(dcPage::breadcrumb(
-			array(
-				html::escapeHTML($this->core->blog->name) => '',
-				__('Comments') => 'comments.php',
-				'<span class="page-title">'.__('Comments actions').'</span>' => ''
-			))
-		);
-		$this->endPage();
-	}
-	
-	protected function fetchEntries($from) {
-		if (!empty($from['comments'])) {
-			$comments = $from['comments'];
-			
-			foreach ($comments as $k => $v) {
-				$comments[$k] = (integer) $v;
-			}
-			
-			$params['sql'] = 'AND C.comment_id IN('.implode(',',$comments).') ';
-			
-			if (!isset($from['full_content']) || empty($from['full_content'])) {
-				$params['no_content'] = true;
-			}
-			
-			$co = $this->core->blog->getComments($params);
-			while ($co->fetch())	{
-				$this->entries[$co->comment_id] = array(
-					'title' => $co->post_title,
-					'author' => $co->comment_author
-				);
-			}
-			$this->rs = $co;
-		}
-	}
-}
-
-class dcDefaultCommentActions 
-{
-	public static function adminCommentsActionsPage($core, dcCommentsActionsPage $ap) {
-		if ($core->auth->check('publish,contentadmin',$core->blog->id))
-		{
-			$action = array('dcDefaultCommentActions','doChangeCommentStatus');
-			$ap->addAction (array(__('Publish') => 'publish'), $action);
-			$ap->addAction (array(__('Publish') => 'publish'), $action);
-			$ap->addAction (array(__('Unpublish') => 'unpublish'), $action);
-			$ap->addAction (array(__('Mark as pending') => 'pending'), $action);
-			$ap->addAction(array(__('Mark as junk') => 'junk'), $action);
-		}
-	
-		if ($core->auth->check('delete,contentadmin',$core->blog->id))
-		{
-			$ap->addAction(array(__('Delete') => 'delete'),
-				array('dcDefaultCommentActions','doDeleteComment'));
-		}
-	}
-
-	public static function doChangeCommentStatus($core, dcCommentsActionsPage $ap, $post) {
-		$action = $ap->getAction();
-		$co_ids = $ap->getIDs();
-		if (empty($co_ids)) {
-			throw new Exception(__('No comment selected'));
-		}
-		switch ($action) {
-			case 'unpublish' : $status = 0; break;
-			case 'pending' : $status = -1; break;
-			case 'junk' : $status = -2; break;
-			default : $status = 1; break;
-		}
-		
-		$core->blog->updCommentsStatus($co_ids,$status);
-		$ap->redirect(array('upd'=>1),true);
-	}
-
-	public static function doDeleteComment($core, dcCommentsActionsPage $ap, $post) {
-		$co_ids = $ap->getIDs();
-		if (empty($co_ids)) {
-			throw new Exception(__('No comment selected'));
-		}
-		// Backward compatibility
-		foreach($co_ids as $comment_id)
-		{
-			# --BEHAVIOR-- adminBeforeCommentDelete
-			$core->callBehavior('adminBeforeCommentDelete',$comment_id);				
-		}
-		
-		# --BEHAVIOR-- adminBeforeCommentsDelete
-		$core->callBehavior('adminBeforeCommentsDelete',$co_ids);
-		
-		$core->blog->delComments($co_ids);
-		$ap->redirect(array('del'=>1), false);
-	}
-}
Index: nc/admin/actions/class.dcactionposts.php
===================================================================
--- inc/admin/actions/class.dcactionposts.php	(revision 1903)
+++ 	(revision )
@@ -1,361 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & 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; }
-
-class dcPostsActionsPage extends dcActionsPage
-{
-	public function __construct($core,$uri,$redirect_args=array()) {
-		parent::__construct($core,$uri,$redirect_args);
-		$this->redirect_fields = array('user_id','cat_id','status',
-		'selected','month','lang','sortby','order','page','nb');
-		$this->loadDefaults();
-		$core->callBehavior('adminPostsActionsPage',$core,$this);
-	}
-
-	protected function loadDefaults() {
-		// We could have added a behavior here, but we want default action
-		// to be setup first
-		dcDefaultPostActions::adminPostsActionsPage($this->core,$this);
-	}
-	
-	public function beginPage($breadcrumb='',$head='') {
-		dcPage::open(
-			__('Entries'),
-			
-			dcPage::jsLoad('js/_posts_actions.js').
-			$head,
-			$breadcrumb
-		);	
-		echo '<p><a class="back" href="'.$this->getRedirection(array(),true).'">'.__('Back to entries list').'</a></p>';
-	}
-	
-	public function endPage() {
-		dcPage::close();
-	}
-	
-	public function error(Exception $e) {
-		$this->core->error->add($e->getMessage());
-		$this->beginPage(dcPage::breadcrumb(
-			array(
-				html::escapeHTML($this->core->blog->name) => '',
-				__('Entries') => 'posts.php',
-				'<span class="page-title">'.__('Entries actions').'</span>' => ''
-			))
-		);
-		$this->endPage();
-	}
-	
-	protected function fetchEntries($from) {
-		if (!empty($from['entries']))
-		{
-			$entries = $from['entries'];
-			
-			foreach ($entries as $k => $v) {
-				$entries[$k] = (integer) $v;
-			}
-			
-			$params['sql'] = 'AND P.post_id IN('.implode(',',$entries).') ';
-			
-			if (!isset($from['full_content']) || empty($from['full_content'])) {
-				$params['no_content'] = true;
-			}
-			
-			if (isset($from['post_type'])) {
-				$params['post_type'] = $from['post_type'];
-			}
-			
-			$posts = $this->core->blog->getPosts($params);
-			while ($posts->fetch())	{
-				$this->entries[$posts->post_id] = $posts->post_title;
-			}
-			$this->rs = $posts;			
-		} else {
-			$this->rs = $this->core->con->select("SELECT blog_id FROM ".$this->core->prefix."blog WHERE false");;
-		}
-	}
-}
-
-class dcDefaultPostActions 
-{
-	public static function adminPostsActionsPage($core, dcPostsActionsPage $ap) {
-		if ($core->auth->check('publish,contentadmin',$core->blog->id)) {
-			$ap->addAction(
-				array(__('Status') => array(
-					__('Publish') => 'publish',
-					__('Unpublish') => 'unpublish',
-					__('Schedule') => 'schedule',
-					__('Mark as pending') => 'pending'
-				)),
-				array('dcDefaultPostActions','doChangePostStatus')
-			);
-		}
-		$ap->addAction(
-			array(__('Mark')=> array(
-				__('Mark as selected') => 'selected',
-				__('Mark as unselected') => 'unselected'
-			)),
-			array('dcDefaultPostActions','doUpdateSelectedPost')
-		);
-		$ap->addAction(
-			array(__('Change') => array(
-				__('Change category') => 'category',
-			)),
-			array('dcDefaultPostActions','doChangePostCategory')
-		);
-		$ap->addAction(
-			array(__('Change') => array(
-				__('Change language') => 'lang',
-			)),
-			array('dcDefaultPostActions','doChangePostLang')
-		);
-		if ($core->auth->check('admin',$core->blog->id))
-		{
-			$ap->addAction(
-				array(__('Change') => array(
-					__('Change author') => 'author')),
-				array('dcDefaultPostActions','doChangePostAuthor')
-			);
-		}
-		if ($core->auth->check('delete,contentadmin',$core->blog->id)) {
-			$ap->addAction(
-				array(__('Delete') => array(
-					__('Delete') => 'delete')),
-				array('dcDefaultPostActions','doDeletePost')
-			);
-		}
-	}
-
-	public static function doChangePostStatus($core, dcPostsActionsPage $ap, $post) {
-		switch ($ap->getAction()) {
-			case 'unpublish' : $status = 0; break;
-			case 'schedule' : $status = -1; break;
-			case 'pending' : $status = -2; break;
-			default : $status = 1; break;
-		}
-		$posts_ids = $ap->getIDs();
-		if (empty($posts_ids)) {
-			throw new Exception(__('No entry selected'));
-		}
-		$core->blog->updPostsStatus($posts_ids,$status);
-		
-		$ap->redirect(array('upd' => 1),true);
-	}
-	
-	public static function doUpdateSelectedPost($core, dcPostsActionsPage $ap, $post) {
-		$posts_ids = $ap->getIDs();
-		if (empty($posts_ids)) {
-			throw new Exception(__('No entry selected'));
-		}
-		$action = $ap->getAction();
-		$core->blog->updPostsSelected($posts_ids,$action == 'selected');
-		
-		$ap->redirect(array('upd' => 1),true);
-	}
-	
-	public static function doDeletePost($core, dcPostsActionsPage $ap, $post) {
-
-		$posts_ids = $ap->getIDs();
-		if (empty($posts_ids)) {
-			throw new Exception(__('No entry selected'));
-		}
-		// Backward compatibility
-		foreach($posts_ids as $post_id)
-		{
-			# --BEHAVIOR-- adminBeforePostDelete
-			$core->callBehavior('adminBeforePostDelete',(integer) $post_id);
-		}
-		
-		# --BEHAVIOR-- adminBeforePostsDelete
-		$core->callBehavior('adminBeforePostsDelete',$posts_ids);
-		
-		$core->blog->delPosts($posts_ids);
-		
-		$ap->redirect(array('del',1),false);
-	}
-
-	public static function doChangePostCategory($core, dcPostsActionsPage $ap, $post) {
-		if (isset($post['new_cat_id'])) {
-			$posts_ids = $ap->getIDs();
-			if (empty($posts_ids)) {
-				throw new Exception(__('No entry selected'));
-			}
-			$new_cat_id = $post['new_cat_id'];
-			if (!empty($post['new_cat_title']) && $core->auth->check('categories', $core->blog->id))
-			{
-				$cur_cat = $core->con->openCursor($core->prefix.'category');
-				$cur_cat->cat_title = $post['new_cat_title'];
-				$cur_cat->cat_url = '';
-				
-				$parent_cat = !empty($post['new_cat_parent']) ? $post['new_cat_parent'] : '';
-				
-				# --BEHAVIOR-- adminBeforeCategoryCreate
-				$core->callBehavior('adminBeforeCategoryCreate', $cur_cat);
-				
-				$new_cat_id = $core->blog->addCategory($cur_cat, (integer) $parent_cat);
-				
-				# --BEHAVIOR-- adminAfterCategoryCreate
-				$core->callBehavior('adminAfterCategoryCreate', $cur_cat, $new_cat_id);
-			}
-			
-			$core->blog->updPostsCategory($posts_ids, $new_cat_id);
-			
-			$ap->redirect(array('upd'=>1),true);
-		} else {
-			$ap->beginPage(
-				dcPage::breadcrumb(
-					array(
-						html::escapeHTML($core->blog->name) => '',
-						__('Entries') => 'posts.php',
-						'<span class="page-title">'.__('Change category for entries').'</span>' => ''
-			)));
-			
-			# categories list
-			# Getting categories
-			$categories_combo = dcAdminCombos::getCategoriesCombo(
-				$core->blog->getCategories(array('post_type'=>'post'))
-			);			
-			echo
-			'<form action="posts.php" method="post">'.
-			$ap->getCheckboxes().
-			'<p><label for="new_cat_id" class="classic">'.__('Category:').'</label> '.
-			form::combo('new_cat_id',$categories_combo,'');
-			
-			if ($core->auth->check('categories', $core->blog->id)) {
-				echo 
-				'<div>'.
-				'<p id="new_cat">'.__('Create a new category for the post(s)').'</p>'.
-				'<p><label for="new_cat_title">'.__('Title:').'</label> '.
-				form::field('new_cat_title',30,255,'','').'</p>'.
-				'<p><label for="new_cat_parent">'.__('Parent:').'</label> '.
-				form::combo('new_cat_parent',$categories_combo,'','').
-				'</p>'.
-				'</div>';
-			}
-			
-			echo
-			$core->formNonce().
-			form::hidden(array('action'),'category').
-			'<input type="submit" value="'.__('Save').'" /></p>'.
-			'</form>';
-			$ap->endPage();
-
-		}
-	
-	}
-	public static function doChangePostAuthor($core, dcPostsActionsPage $ap, $post) {
-		if (isset($post['new_auth_id']) && $core->auth->check('admin',$core->blog->id)) {
-			$new_user_id = $post['new_auth_id'];
-			$posts_ids = $ap->getIDs();
-			if (empty($posts_ids)) {
-				throw new Exception(__('No entry selected'));
-			}
-			if ($core->getUser($new_user_id)->isEmpty()) {
-				throw new Exception(__('This user does not exist'));
-			}
-			
-			$cur = $core->con->openCursor($core->prefix.'post');
-			$cur->user_id = $new_user_id;
-			$cur->update('WHERE post_id '.$core->con->in($posts_ids));
-			
-			$ap->redirect(array('upd' => 1),true);
-		} else {
-			$usersList = '';
-			if ($core->auth->check('admin',$core->blog->id)) {
-				$params = array(
-					'limit' => 100,
-					'order' => 'nb_post DESC'
-					);
-				$rs = $core->getUsers($params);
-				while ($rs->fetch())
-				{
-					$usersList .= ($usersList != '' ? ',' : '').'"'.$rs->user_id.'"';
-				}
-			}
-			$ap->beginPage(
-				dcPage::breadcrumb(
-					array(
-						html::escapeHTML($core->blog->name) => '',
-						__('Entries') => 'posts.php',
-						'<span class="page-title">'.__('Change author for entries').'</span>' => '')),
-					dcPage::jsLoad('js/jquery/jquery.autocomplete.js').
-					'<script type="text/javascript">'."\n".
-					"//<![CDATA[\n".
-					'usersList = ['.$usersList.']'."\n".
-					"\n//]]>\n".
-					"</script>\n"
-			);
-
-			echo
-			'<form action="posts_actions.php" method="post">'.
-			$ap->getCheckboxes().
-			'<p><label for="new_auth_id" class="classic">'.__('New author (author ID):').'</label> '.
-			form::field('new_auth_id',20,255);
-			
-			echo
-				$core->formNonce().
-				form::hidden(array('action'),'author').
-				'<input type="submit" value="'.__('Save').'" /></p>'.
-				'</form>';
-			$ap->endPage();
-		}
-	}
-	public static function doChangePostLang($core, dcPostsActionsPage $ap, $post) {
-		$posts_ids = $ap->getIDs();
-		if (empty($posts_ids)) {
-			throw new Exception(__('No entry selected'));
-		}
-		if (isset($post['new_lang'])) {
-			$new_lang = $post['new_lang'];
-			$cur = $core->con->openCursor($core->prefix.'post');
-			$cur->post_lang = $new_lang;
-			$cur->update('WHERE post_id '.$core->con->in($posts_ids));
-			
-			$ap->redirect(array('upd' => 1),true);
-		} else {
-			$ap->beginPage(
-				dcPage::breadcrumb(
-					array(
-						html::escapeHTML($core->blog->name) => '',
-						__('Entries') => 'posts.php',
-						'<span class="page-title">'.__('Change language for entries').'</span>' => ''
-			)));
-			# lang list
-			# Languages combo
-			$rs = $core->blog->getLangs(array('order'=>'asc'));
-			$all_langs = l10n::getISOcodes(0,1);
-			$lang_combo = array('' => '', __('Most used') => array(), __('Available') => l10n::getISOcodes(1,1));
-			while ($rs->fetch()) {
-				if (isset($all_langs[$rs->post_lang])) {
-					$lang_combo[__('Most used')][$all_langs[$rs->post_lang]] = $rs->post_lang;
-					unset($lang_combo[__('Available')][$all_langs[$rs->post_lang]]);
-				} else {
-					$lang_combo[__('Most used')][$rs->post_lang] = $rs->post_lang;
-				}
-			}
-			unset($all_langs);
-			unset($rs);
-			
-			echo
-			'<form action="posts_actions.php" method="post">'.
-			$ap->getCheckboxes().
-			
-			'<p><label for="new_lang" class="classic">'.__('Entry lang:').'</label> '.
-			form::combo('new_lang',$lang_combo,'');
-			
-			echo
-				$core->formNonce().
-				form::hidden(array('action'),'lang').
-				'<input type="submit" value="'.__('Save').'" /></p>'.
-				'</form>';
-		}
-	}
-}
Index: inc/admin/lib.dc.page.php
===================================================================
--- inc/admin/lib.dc.page.php	(revision 1867)
+++ inc/admin/lib.dc.page.php	(revision 1793)
@@ -152,8 +152,4 @@
 		'<div id="wrapper" class="clearfix">'."\n".
 		'<div id="main">'."\n".
-		'<div class="hidden-if-no-js"><a href="#" id="collapser">'.
-		'<img class="collapse-mm" src="images/collapser-hide.png" alt="'.__('Hide main menu').'" />'.
-		'<img class="expand-mm" src="images/collapser-show.png" alt="'.__('Show main menu').'" />'.
-		'</a></div>'.
 		'<div id="content" class="clearfix">'."\n";
 
@@ -210,5 +206,4 @@
 		echo
 		'</div>'."\n".		// End of #main-menu
-
 		'<div id="footer">'.
 		'<span class="helplink"><a href="help.php">'.__('Global help').'</a></span> '.
@@ -487,5 +482,5 @@
 	{
 		$mute_or_no = '';
-		if (empty($GLOBALS['core']->blog) || $GLOBALS['core']->blog->settings->system->jquery_migrate_mute) {
+		if (!empty($GLOBALS['core']->blog->settings->system->jquery_migrate_mute)) {
 			$mute_or_no .=
 				'<script type="text/javascript">'."\n".
@@ -589,6 +584,4 @@
 		self::jsVar('dotclear.msg.xhtml_not_valid',
 			__('There are XHTML markup errors.')).
-		self::jsVar('dotclear.msg.warning_validate_no_save_content',
-			__('Attention: an audit of a content not yet registered.')).
 		self::jsVar('dotclear.msg.confirm_change_post_format',
 			__('You have unsaved changes. Switch post format will loose these changes. Proceed anyway?')).
@@ -817,4 +810,6 @@
 
 	return
+	'<link rel="stylesheet" type="text/css" href="style/jsUpload/style.css" />'."\n".
+
 	'<script type="text/javascript">'."\n".
 	"//<![CDATA[\n".
Index: inc/admin/lib.pager.php
===================================================================
--- inc/admin/lib.pager.php	(revision 1905)
+++ inc/admin/lib.pager.php	(revision 1670)
@@ -257,10 +257,5 @@
 			$pager->html_next = $this->html_next;
 			$pager->var_page = 'page';
-			$comments = array();
-			if (isset($_REQUEST['comments'])) {
-				foreach ($_REQUEST['comments'] as $v) {
-					$comments[(integer)$v]=true;
-				}
-			}			
+			
 			$html_block =
 			'<table><caption class="hidden">'.__('Comments and trackbacks list').'</caption><tr>'.
@@ -284,5 +279,5 @@
 			while ($this->rs->fetch())
 			{
-				echo $this->commentLine(isset($comments[$this->rs->comment_id]));
+				echo $this->commentLine();
 			}
 			
@@ -293,5 +288,5 @@
 	}
 	
-	private function commentLine($checked)
+	private function commentLine()
 	{
 		global $author, $status, $sortby, $order, $nb_per_page;
@@ -341,5 +336,5 @@
 		$res .=
 		'<td class="nowrap">'.
-		form::checkbox(array('comments[]'),$this->rs->comment_id,$checked,'','',0).'</td>'.
+		form::checkbox(array('comments[]'),$this->rs->comment_id,'','','',0).'</td>'.
 		'<td class="nowrap" abbr="'.__('Type and author').'" scope="raw">'.
 			'<a href="'.$comment_url.'" title="'.$comment_title.'">'.
Index: inc/core/class.dc.media.php
===================================================================
--- inc/core/class.dc.media.php	(revision 1855)
+++ inc/core/class.dc.media.php	(revision 1718)
@@ -462,5 +462,5 @@
 		$this->dir['files'] = $f_res;
 		foreach ($this->dir['dirs'] as $k => $v) {
-			$v->media_icon = sprintf($this->icon_img,($v->parent ? 'folder-up' : 'folder'));
+			$v->media_icon = sprintf($this->icon_img,'folder');
 		}
 		
Index: inc/prepend.php
===================================================================
--- inc/prepend.php	(revision 1905)
+++ inc/prepend.php	(revision 1719)
@@ -64,7 +64,4 @@
 $__autoload['context']				= dirname(__FILE__).'/public/lib.tpl.context.php';
 $__autoload['dcUrlHandlers']			= dirname(__FILE__).'/public/lib.urlhandlers.php';
-$__autoload['dcPostsActionsPage']			= dirname(__FILE__).'/admin/actions/class.dcactionposts.php';
-$__autoload['dcCommentsActionsPage']			= dirname(__FILE__).'/admin/actions/class.dcactioncomments.php';
-$__autoload['dcActionsPage']			= dirname(__FILE__).'/admin/actions/class.dcaction.php';
 
 # Clearbricks extensions
Index: ocales/fr/help/blowupConfig.html
===================================================================
--- locales/fr/help/blowupConfig.html	(revision 1874)
+++ 	(revision )
@@ -1,71 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html>
-<head>
-  <title>Configuration du thème Blowup</title>
-</head>
-
-<body>
-<p>En modifiant la configuration du thème Blowup, vous pouvez personnaliser votre
-thème très facilement. Pour cela, renseignez simplement les champs de configuration
-ou choisissez un style prédéfini.</p>
-
-<h4>Couleurs</h4>
-
-<p>Quand vous devez indiquer une valeur de couleur, celle-ci doit être au format
-hexadécimal. Par exemple&nbsp;: "#FF0000" donnera du rouge. Vous pouvez vous aider
-de la pipette à côté de chaque champ de couleur.</p>
-<p>Si vous manquez d'inspiration vous pouvez consulter&nbsp;:</p>
-<ul>
- <li><a href="http://fr.wikipedia.org/wiki/Liste_De_Couleurs">La liste des codes</a> (Wikipedia)</li>
- <li><a href="http://kuler.adobe.com/">Adobe Kuler</a></li>
- <li><a href="http://colorblender.com/">ColorBlender</a></li>
- <li><a href="http://www.colorcombos.com/">ColorCombos</a></li>
-</ul>
-
-<h4>Unités de mesure</h4>
-
-<p>Quand vous devez indiquer une taille, celle-ci doit être suivie d'une unité
-de mesure. Par exemple&nbsp;: "1em". Si vous n'indiquez aucune unité, la valeur
-donnée prendra des pixels comme unité par défaut.</p>
-<p>Les unités possibles sont&nbsp;:</p>
-<ul>
-  <li>px</li>
-  <li>em</li>
-  <li>ex</li>
-  <li>pt</li>
-  <li>%</li>
-</ul>
-
-<h4>Images d'en-tête</h4>
-
-<p>Vous pouvez choisir une image d'en-tête parmi une liste de nombreuses images
-afin de remplacer celle utilisée par défaut.</p>
-
-<p>En choisissant "Personnalisé..." parmi la liste d'images, vous pourrez
-déposer votre propre image. <strong>Celle-ci doit être au format JPG ou PNG et
-avoir une largeur exacte de 800 pixels.</strong></p>
-
-<p>Si vous déposez une image au format JPG, un cadre sera ajouté autours de
-l'image, ce qui n'est pas le cas avec une image au format PNG (dont la
-transparence sera également préservée).</p>
-
-<h4>Styles prédéfinis</h4>
-
-<p>Vous pouvez choisir un style prédéfini dans la liste d'option "Styles prédéfinis".
-Une fois le style choisi, vous devez valider le formulaire pour appliquer les
-changements.</p>
-
-<p>Vous pouvez ensuite modifier le style prédéfini comme bon vous semble.</p>
-
-<h4>Import / export de configuration</h4>
-
-<p>À la fin des options de Blowup, vous pouvez afficher une zone appelée "Import
-/ export de configuration". Dans cette zone de texte se trouve la configuration
-en cours d'utilisation. Vous pouvez la copier pour la partager avec d'autres.</p>
-
-<p>Pour appliquer (importer) une configuration, il suffit simplement de remplacer
-le contenu de la zone de texte par celui que vous voulez utiliser. N'oubliez pas
-de cliquer sur "appliquer le code".</p>
-
-</body>
-</html>
Index: ocales/fr/help/core_blog_pref.html
===================================================================
--- locales/fr/help/core_blog_pref.html	(revision 1874)
+++ 	(revision )
@@ -1,196 +1,0 @@
-<html>
-<head>
-  <title>Préférences du blog</title>
-</head>
-
-<body>
-
-<h4>Informations du blog</h4>
-<dl>
-  <dt>Identifiant du blog</dt>
-  <dd>Identifiant unique du blog. Obligatoire, ne peut être modifié que par un
-  super administrateur.</dd>
-  
-  <dt>Nom du blog</dt>
-  <dd>Nom du blog, obligatoire. Il peut être modifié à tout moment sans incidence sur
-  le fonctionnement du blog.</dd>
-  
-  <dt>URL du blog</dt>
-  <dd>URL complète du blog. Obligatoire, ne peut être modifiée que par un super
-  administrateur.</dd>
-  
-  <dt>Méthode de lecture de l'URL</dt>
-  <dd>Définit le mode de lecture de l'URL. PATH_INFO est conseillé, QUERY_STRING
-  doit être utilisé si le premier ne fonctionne pas. En mode PATH_INFO, l'URL du
-  blog doit se terminer par un "/" et en mode QUERY_STRING, par un "?".</dd>
-  
-  <dt>État du blog</dt>
-  <dd>
-    <ul>
-      <li><strong>en ligne</strong>&nbsp;: blog accessible aux visiteurs</li>
-      <li><strong>hors ligne</strong>&nbsp;: blog inaccessible aux visiteurs
-      mais les rédacteurs peuvent se connecter</li>
-      <li><strong>retiré</strong>&nbsp;: blog inaccessible aux visiteurs
-      comme aux rédacteurs, seuls les super-administrateurs peuvent y accéder</li>
-    </ul>
-  </dd>
-  
-  <dt>Description du blog</dt>
-  <dd>Texte libre de description du blog. Il s'agit d'un texte simple, sans
-  formatage quelconque.</dd>
-</dl>
-
-<h4>Configuration du blog</h4>
-<dl>
-  <dt>Nom de l'éditeur du blog</dt>
-  <dd>Nom de la personne responsable du contenu du blog. Peut être le propriétaire
-  ou le directeur de publication s'il existe. Cette information sera affichée dans les
-  informations du flux de syndication.</dd>
-  
-  <dt>Note de copyright</dt>
-  <dd>Note indiquant les droits de reproduction autorisés pour le blog.</dd>
-  
-  <dt>Langue par défaut</dt>
-  <dd>Langue de l'interface du blog. Si cette langue existe parmi les
-  traductions, l'interface sera traduite dans celle-ci, sinon elle apparaîtra
-  en anglais.</dd>
-  
-  <dt>Fuseau horaire du blog</dt>
-  <dd>Définit le fuseau horaire qui sera utilisé pour dater les commentaires et
-  trackbacks entrant sur le blog.</dd>
-
-  <dt>Interface XML/RPC</dt>
-  <dd>Permet à un client externe d'interagir avec votre blog via le protocole XML/RPC. À l'activation, 
-  les paramètres nécessaires au réglage du client externe sont affichés.</dd>
-    
-  <dt>Format des dates</dt>
-  <dd>Indique le format de la date d'un billet sur le blog. Voir la section
-  "formatage des dates" pour plus détails.</dd>
-  
-  <dt>Format des heures</dt>
-  <dd>Indique le format de l'heure d'un billet sur le blog. Voir la section
-  "formatage des dates" pour plus détails.</dd>
-  
-  <dt>Laisser les commentaires ouverts durant .. jours</dt>
-  <dd>Permet d'indiquer le nombre de jours durant lesquels les commentaires
-  sont possibles sur un billet après sa publication. Aucune valeur laissera
-  les commentaires toujours ouverts.</dd>
-  
-  <dt>Laisser les rétroliens ouverts durant .. jours</dt>
-  <dd>Permet d'indiquer le nombre de jours durant lesquels les rétroliens
-  sont possibles sur un billet après sa publication. Aucune valeur laissera
-  les rétroliens toujours ouverts.</dd>
-  
-  <dt>Accepter les commentaires</dt>
-  <dd>Accepter globalement les commentaires sur le blog. Ce paramètre est
-  supérieur à celui autorisant ou non les commentaires sur un billet.</dd>
-  
-  <dt>Accepter les rétroliens</dt>
-  <dd>Accepter globalement les rétroliens sur le blog. Ce paramètre est
-  supérieur à celui autorisant ou non les rétroliens sur un billet.</dd>
-  
-  <dt>Modérer les commentaires</dt>
-  <dd>Si cette option est activée, les commentaires ne seront publiés qu'après
-  l'approbation d'un rédacteur.</dd>
-  
-  <dt>Modérer les rétroliens</dt>
-  <dd>Si cette option est activée, les rétroliens ne seront publiés qu'après
-  l'approbation d'un rédacteur.</dd>
-  
-  <dt>Ajouter la relation "nofollow" aux liens des commentaires et rétroliens</dt>
-  <dd>Ajoute un attribut sur les liens des commentaires et rétroliens indiquant
-  aux robots des moteurs de recherche de ne pas les suivre. Cette mesure
-  est censée permettre de lutter contre le spam mais n'a pas encore vraiment
-  prouvé son efficacité.</dd>
-  
-  <dt>Syntaxe wiki pour les commentaires</dt>
-  <dd>Autoriser quelques éléments de la syntaxe wiki dans les commentaires.</dd>
-  
-  <dt>Afficher .. billets par page</dt>
-  <dd>Le nombre donné sera utilisé comme limite d'affichage des billets sur la
-  page d'accueil et la première page de chaque catégorie.</dd>
-  
-  <dt>Afficher des émoticônes dans les billets et commentaires</dt>
-  <dd>Remplacer certaines suites de caractères comme :-) ou ;-) par des images.</dd>
-  
-  <dt>Afficher .. billets par flux de syndication</dt>
-  <dd>Le nombre donné sera utilisé comme limite d'affichage des billets dans
-  les flux de syndication.</dd>
-  
-  <dt>Afficher .. commentaires par flux de syndication</dt>
-  <dd>Le nombre donné sera utilisé comme limite d'affichage des commentaires dans
-  les flux de syndication.</dd>
-  
-  <dt>Tronquer le flux de syndication</dt>
-  <dd>Cette option permet de ne fournir qu'un extrait des billets dans les flux
-  de syndication.</dd>
-</dl>
-
-<h4>Formatage des dates</h4>
-<p>Certains champs permettent de formater les dates avec des caractères
-particuliers dont voici la définition&nbsp;:</p>
-
-<ul>
-  <li><strong>%a</strong>&nbsp;: nom abrégé du jour de la semaine (local).</li>
-  <li><strong>%A</strong>&nbsp;: nom complet du jour de la semaine (local).</li>
-  <li><strong>%b</strong>&nbsp;: nom abrégé du mois (local).</li>
-  <li><strong>%B</strong>&nbsp;: nom complet du mois (local).</li>
-  <li><strong>%c</strong>&nbsp;: représentation préférée pour les dates et
-  heures, en local.</li>
-  <li><strong>%C</strong>&nbsp;: numéro de siècle (l'année, divisée par 100 et
-  arrondie entre 00 et 99)</li>
-  <li><strong>%d</strong>&nbsp;: jour du mois en numérique (intervalle 01 à
-  31)</li>
-  <li><strong>%D</strong>&nbsp;: identique à %m/%d/%y</li>
-  <li><strong>%e</strong>&nbsp;: numéro du jour du mois. Les chiffres sont
-  précédés d'un espace (de ' 1' à '31')</li>
-  <li><strong>%g</strong>&nbsp;: identique à %G, sur 2 chiffres.</li>
-  <li><strong>%G</strong>&nbsp;: L'année sur 4 chiffres correspondant au numéro
-  de semaine (voir %V). Même format et valeur que %Y, excepté que si le numéro
-  de la semaine appartient à l'année précédente ou suivante, l'année courante
-  sera utilisé à la place.</li>
-  <li><strong>%h</strong>&nbsp;: identique à %b</li>
-  <li><strong>%H</strong>&nbsp;: heure de la journée en numérique, et sur
-  24-heures (intervalle de 00 à 23)</li>
-  <li><strong>%I</strong>&nbsp;: heure de la journée en numérique, et sur 12-
-  heures (intervalle 01 à 12)</li>
-  <li><strong>%j</strong>&nbsp;: jour de l'année, en numérique (intervalle 001 à
-  366)</li>
-  <li><strong>%m</strong>&nbsp;: mois en numérique (intervalle 1 à 12)</li>
-  <li><strong>%M</strong>&nbsp;: minute en numérique</li>
-  <li><strong>%n</strong>&nbsp;: newline character</li>
-  <li><strong>%p</strong>&nbsp;: soit `am' ou `pm' en fonction de l'heure
-  absolue, ou en fonction des valeurs enregistrées en local.</li>
-  <li><strong>%r</strong>&nbsp;: l'heure au format a.m. et p.m.</li>
-  <li><strong>%R</strong>&nbsp;: l'heure au format 24h</li>
-  <li><strong>%S</strong>&nbsp;: secondes en numérique</li>
-  <li><strong>%t</strong>&nbsp;: tabulation</li>
-  <li><strong>%T</strong>&nbsp;: l'heure actuelle (égal à %H:%M:%S)</li>
-  <li><strong>%u</strong>&nbsp;: le numéro de jour dans la semaine, de 1 à 7. (1
-  représente Lundi)</li>
-  <li><strong>%U</strong>&nbsp;: numéro de semaine dans l'année, en considérant
-  le premier dimanche de l'année comme le premier jour de la première
-  semaine.</li>
-  <li><strong>%V</strong>&nbsp;: le numéro de semaine comme défini dans l'ISO
-  8601:1988, sous forme décimale, de 01 à 53. La semaine 1 est la première
-  semaine qui a plus de 4 jours dans l'année courante, et dont Lundi est le
-  premier jour. (Utilisez %G ou %g pour les éléments de l'année qui
-  correspondent au numéro de la semaine pour le timestamp donné.)</li>
-  <li><strong>%W</strong>&nbsp;: numéro de semaine dans l'année, en considérant
-  le premier lundi de l'année comme le premier jour de la première semaine</li>
-  <li><strong>%w</strong>&nbsp;: jour de la semaine, numérique, avec Dimanche =
-  0</li>
-  <li><strong>%x</strong>&nbsp;: format préféré de représentation de la date
-  sans l'heure</li>
-  <li><strong>%X</strong>&nbsp;: format préféré de représentation de l'heure
-  sans la date</li>
-  <li><strong>%y</strong>&nbsp;: l'année, numérique, sur deux chiffres (de 00 à
-  99)</li>
-  <li><strong>%Y</strong>&nbsp;: l'année, numérique, sur quatre chiffres</li>
-  <li><strong>%Z ou %z</strong>&nbsp;: fuseau horaire, ou nom ou
-  abréviation</li>
-  <li><strong>%%</strong>&nbsp;: un caractère `%' littéral</li>
-</ul>
-
-</body>
-</html>
Index: ocales/fr/help/core_categories.html
===================================================================
--- locales/fr/help/core_categories.html	(revision 1874)
+++ 	(revision )
@@ -1,50 +1,0 @@
-<html>
-<head>
-  <title>Catégories</title>
-</head>
-
-<body>
-<h4>Liste des categories</h4>
-<dl>
-  <dt>Créer une nouvelle catégorie</dt>
-  <dd>Choisissez le nom que vous souhaitez donner à votre nouvelle catégorie
-  puis cliquer sur Enregistrer pour valider sa création. Vous pouvez choisir 
-  sa catégorie parente ou la laisser au premier niveau. Pour modifier la catégorie, 
-  cliquez sur son nom dans la liste.</dd>
-  
-  <dt>Supprimer une catégorie</dt>
-  <dd>Choisissez la catégorie que vous voulez supprimer et cliquez sur ok.
-  Une catégorie ne peut être supprimée que si elle ne contient aucun billet.</dd>
-  
-  <dt>Réordonner les catégories</dt>
-  <dd>Utilisez cette option pour placer toutes les catégories au même niveau.
-  Si vous voulez modifier l'ordre des catégories plus précisément, cliquez sur le nom de chacune d'entre elles 
-  et choisissez sa catégorie parente ou sa position par rapport à ses voisines.</dd>
-</dl>
-
-<h4>Modifier une catégorie</h4>
-<dl>
-  <dt>Titre</dt>
-  <dd>Choisissez le nom que vous souhaitez donner à votre nouvelle catégorie
-  puis cliquer sur Enregistrer pour valider sa création.</dd>
-  
-  <dt>URL</dt>
-  <dd>DotClear crée une url par défaut de la catégorie, qui sera ainsi
-  accessible avec un chemin de la forme
-  <strong>http://monblog.tld/category/Ma-categorie</strong>. En cliquant sur le
-  petit verrou situé à la droite, vous pouvez la modifier comme il vous
-  plaira.</dd>
-  
-  <dt>Description</dt>
-  <dd>Le contenu de ce champ de description sera affiché lors de la sélection
-  d'une catégorie dans le blog. Vous pouvez le remplir avec toute forme de
-  contenu (paragraphes, listes, etc.) Le format du texte de la description est
-  HTML.</dd>
-  
-  <dt>Déplacer cette catégorie</dt>
-  <dd>Vous pouvez déplacer la catégorie dans n'importe quelle autre, qui deviendra sa parente. 
-  Vous pouvez aussi spécifier sa position par rapport à ses voisines en la plaçant avant ou après l'une d'elles.</dd>
-</dl>
-
-</body>
-</html>
Index: ocales/fr/help/core_comments.html
===================================================================
--- locales/fr/help/core_comments.html	(revision 1874)
+++ 	(revision )
@@ -1,59 +1,0 @@
-<html>
-<head>
-  <title>Commentaires</title>
-</head>
-
-<body>
-<h4>Filtres de la liste des commentaires</h4>
-<dl>
-  <dt>Type :</dt>
-  <dd>Aucun ou commentaires ou rétroliens.</dd>
-  
-  <dt>État :</dt>
-  <dd><ul>
-    <li><strong>indésirable</strong> : reconnu comme spam ;</li>
-    <li><strong>en attente</strong> : en attente de modération ;</li>
-    <li><strong>non publié</strong> : hors ligne ;</li>
-    <li><strong>publié</strong> : en ligne.</li>
-  </ul></dd>
-  
-  <dt>Trier par :</dt>
-  <dd>Choisir : date, ou titre du billet, ou auteur ou état, puis indiquez si vous
-  souhaitez que les résultats s'affichent par ordre croissant ou décroissant.</dd>
-  
-  <dt>Trier</dt>
-  <dd>Indique l'ordre dans lequel on souhaite effectuer le tri.</dd>
-  
-  <dt>Auteur du commentaire.</dt>
-  <dd>Recherche indifféremment avec des minuscules ou majuscules. On peut chercher
-  sur une partie du nom en utilisant le caractère joker
-  <strong>*</strong>.</dd>
-  
-  <dt>Commentaires par page :</dt>
-  <dd>Détermine le nombre de commentaires affichés par page de cette liste.</dd>
-</dl>
-
-<h4>Modifier ou ajouter un commentaire</h4>
-<dl>
-  <dt>Auteur :</dt>
-  <dd>Nom de l'auteur. Ce champ est obligatoire.</dd>
-  
-  <dt>Email :</dt>
-  <dd>Adresse mail de l'auteur du commmentaire.</dd>
-  
-  <dt>Site web :</dt>
-  <dd>URL du site ou du blog de l'auteur du commentaire.</dd>
-  
-  <dt>État :</dt>
-  <dd><ul>
-    <li><strong>indésirable</strong> : reconnu comme spam ;</li>
-    <li><strong>en attente</strong> : en attente de modération ;</li>
-    <li><strong>non publié</strong> : hors ligne</li>
-    <li><strong>publié</strong> : en ligne</li>
-  </ul></dd>
-  
-  <dt>Commentaire :</dt>
-  <dd>Contenu du commentaire. Ce champ utilise la syntaxe HTML.</dd>
-</dl>
-</body>
-</html>
Index: ocales/fr/help/core_media.html
===================================================================
--- locales/fr/help/core_media.html	(revision 1874)
+++ 	(revision )
@@ -1,103 +1,0 @@
-<html>
-<head>
-  <title>Médiathèque</title>
-</head>
-
-<body>
-
-<h4>Liste des médias</h4>
-<p>La page principale de la médiathèque présente la liste des fichiers
-(médias) disponibles pour le blog en cours d'utilisation.</p>
-
-<p>Il est possible d'afficher les médias dans des répertoires ou sous
-répertoires en cliquant sur leurs icônes ou leurs noms.</p>
-
-<p>Les fichiers son au format MP3 sont présentés avec un lecteur permettant
-d'en prendre immédiatement connaissance. Ce lecteur nécessite un lecteur (ou
-plugin) Flash sur votre navigateur.</p>
-
-<p>Les images sont affichées avec une miniature quand cela est possible.</p>
-
-<h4>Ajouter des fichiers</h4>
-<dl>
-  <dt>Choisissez un fichier</dt>
-  <dd>Permet de choisir un fichier sur son disque dur pour l'envoyer sur le
-  blog. Si le fichier dépasse la taille maximale, il ne pourra être envoyé.</dd>
-  
-  <dt>Titre</dt>
-  <dd>Titre optionnel du fichier à envoyer.</dd>
-  
-  <dt>Privé</dt>
-  <dd>Indique que le fichier envoyé n'est visible que par son propriétaire tant
-  qu'il n'est pas publié sur le blog.</dd>
-</dl>
-
-<dl>
-  <dt>Interface avancée</dt>
-  <dd>Permet de choisir plusieurs fichiers à la fois sur son disque dur pour les envoyer sur le
-  blog. Si un des fichiers dépasse la taille maximale, il ne pourra être envoyé.</dd>
-</dl>
-
-<h4>Nouveau répertoire</h4>
-<p>Ce formulaire permet de créer un nouveau répertoire dans le répertoire en
-cours d'utilisation. Indiquez simplement un nom comme vous le feriez sur votre
-ordinateur.</p>
-
-<h4>Détails du média</h4>
-<p>La page individuelle d'un média présente un ensemble d'informations sur
-celui-ci et permet d'effectuer quelques opérations.</p>
-
-<dl>
-  <dt>Nom du fichier</dt>
-  <dd>Changer le nom du fichier en cours.</dd>
-  
-  <dt>Titre du fichier</dt>
-  <dd>Changer ou donner un titre au fichier en cours.</dd>
-  
-  <dt>Date du fichier</dt>
-  <dd>Changer la date du fichier.</dd>
-  
-  <dt>Privé</dt>
-  <dd>Changer le caractère privé ou non du média.</dd>
-  
-  <dt>Nouveau répertoire</dt>
-  <dd>Permet de changer l'emplacement du fichier.</dd>
-  
-  <dt>Changer le fichier</dt>
-  <dd>Ce formulaire permet de changer le fichier tout en conservant ses
-  attributs (nom, titre...). Comme toujours, il ne peut dépasser la taille
-  maximalle indiquée.</dd>
-</dl>
-
-<h4>Cas particulier des images</h4>
-<p>Lors de l'ajout d'une image, jusqu'à quatre versions de celle-ci peuvent
-être disponibles (selon la taille de l'image d'origine)&nbsp;:</p>
-<ul>
-  <li><strong>carrée</strong>&nbsp;: image carrée de 48 pixels de côté,</li>
-  <li><strong>miniature</strong>&nbsp;: image réduite à 100 pixels sur son plus grand côté,</li>
-  <li><strong>petite</strong>&nbsp;: image réduite à 240 pixels sur son plus grand côté,</li>
-  <li><strong>moyenne</strong>&nbsp;: image réduite à 500 pixes sur son plus grand côté,</li>
-  <li><strong>originale</strong>&nbsp;: image originale non transformée.</li>
-</ul>
-<p>Les tailles par défaut des versions miniature, petite et moyenne, peuvent être modifiées dans les paramètres du blog</p>
-
-<h4>Attacher un fichier à un billet</h4>
-<p>Vous pouvez attacher un fichier à un billet très facilement. Commencez par
-créer un nouveau billet et enregistrez-le. Cliquez alors sur "ajouter un fichier
-au billet" pour ouvrir la médiathèque.</p>
-
-<p>En cliquant sur l'icône [+] (Attacher un fichier au billet) vous pourrez
-joindre le fichier à votre billet.</p>
-
-<p>Les fichiers attachés à un billet seront visibles sur la page individuelle
-du billet, sous la forme d'une liste après le contenu du billet. Les fichiers
-MP3 seront automatiquement accompagnés d'un lecteur en Flash permettant la
-lecture directe du fichier.</p>
-
-<h4>Podcast et diffusion de fichiers musicaux</h4>
-<p>Tous les fichiers attachés à un billet seront présents dans les fils RSS de
-vos billets, vous permettant ainsi de réaliser des podcast de n'importe quel
-type de fichier.</p>
-
-</body>
-</html>
Index: ocales/fr/help/core_post.html
===================================================================
--- locales/fr/help/core_post.html	(revision 1874)
+++ 	(revision )
@@ -1,112 +1,0 @@
-<html>
-<head>
-  <title>Rédaction d'un billet</title>
-</head>
-
-<body>
-
-<h4>Rédaction du billet</h4>
-
-<dl>
-  <dt>Titre du billet</dt>
-  <dd>Inscrivez le titre du billet. Ce champ est obligatoire.</dd>
-  
-  <dt>Extrait</dt>
-  <dd>Le contenu de ce champ s'affichera dans les pages présentant les listes de
-  billets telles que la page d'accueil ou le tri sur une catégorie, suivi d'un
-  lien « Lire la suite ». Il figurera également au début du billet dans le
-  contexte de l'affichage du billet seul. Si vous ne remplissez pas ce champ, le
-  champ <em>Contenu</em> sera intégralement affiché dès la page d'accueil.</dd>
-  
-  <dt>Contenu</dt>
-  <dd>Le contenu du billet. Ce champ est obligatoire.</dd>
-  
-  <dt>Notes</dt>
-  <dd>Cette zone de texte sert à la prise de notes ou pense-bête divers. Elle ne
-  sera jamais affichée sur le blog.</dd>
-  
-  <dt>Catégorie</dt>
-  <dd>La catégorie de votre billet. Pour créer une nouvelle catégorie, rendez vous
-  dans la section "catégories". Vous pouvez n'affecter
-  votre billet à aucune catégorie en choisissant la ligne vide.</dd>
-  
-  <dt>État du billet</dt>
-  <dd>Permet de choisir l'état du billet après enregistrement&nbsp;:
-    <ul>
-    <li><strong>en attente</strong>&nbsp;: en attente de publication.</li>
-    <li><strong>programmé</strong>&nbsp;: le billet sera mis en ligne aux date et heure
-    indiquées dans le champ <em>Publié le</em>.</li>
-    <li><strong>non publié</strong>&nbsp;: billet hors ligne.</li>
-    <li><strong>publié</strong>&nbsp;: billet en ligne.</li>
-    </ul>
-  </dd>
-  
-  <dt>Publié le</dt>
-  <dd>Permet de modifier la date et l'heure de publication du billet. Si vous avez
-  choisi le statut <em>programmé</em> il sera mis en ligne aux date et heure
-  définis dans ce champ.</dd>
-  
-  <dt>Format du texte</dt>
-  <dd>Permet de choisir la syntaxe de saisie du billet. Le wiki est une syntaxe
-  simplifiée et sera converti en xhtml valide ; à moins que vous maîtrisiez
-  parfaitement le xhtml nous vous conseillons de la choisir de préférence.
-  Consultez la référence de la syntaxe Wiki pour plus
-  d'informations.</dd>
-  
-  <dt>Accepter les commentaires</dt>
-  <dd>Cochez ou décochez la case selon que vous souhaitez permettre ou interdire
-  les commentaires sur le billet en particulier. L'option pour permettre ou
-  autoriser de façon générale les commentaires se situe dans le menu Préférences
-  du blog.</dd>
-  
-  <dt>Accepter les rétroliens</dt>
-  <dd>Un rétrolien permet de signaler un billet dans les commentaires d'un autre
-  blog. Cochez ou décochez la case selon que vous souhaitez permettre ou interdire
-  les rétroliens sur le billet. L'option pour permettre ou autoriser de façon
-  générale les rétroliens se situe dans le menu Préférences du blog.</dd>
-  
-  <dt>Billet sélectionné</dt>
-  <dd>Les billets marqués comme sélectionnés apparaîtront dans le menu de votre
-  blog, sous l'intitulé « A retenir ».</dd>
-  
-  <dt>Mot de passe du billet</dt>
-  <dd>Permet de déterminer un mot de passe d'accès à un billet dans le blog. Un
-  billet protégé par mot de passe ne sera visible nulle part sur votre blog, vous
-  pourrez en donner l'adresse à vos lecteurs en vous rendant sur le lien
-  <em>voir le billet</em>.</dd>
-  
-  <dt>URL spécifique</dt>
-  <dd>Ce champ permet de choisir une URL pour un billet autre que celle par défaut
-  après avoir cliqué sur le petit verrou placé à sa droite. Si vous essayez
-  d'utiliser une URL déjà existante, celle-ci se verra incrémentée d'un chiffre.</dd>
-  
-  <dt>Langue du billet</dt>
-  <dd>Code langue de votre billet. Par défaut, il s'agit du code de votre
-  langue. Vous pouvez le changer, par le code d'une autre langue, par
-  exemple "en", "fr-qc". Ce code est libre, il sera utilisé lors de l'affichage
-  des billets.</dd>
-  
-  <dt>Pièces jointes</dt>
-  <dd>Les pièces jointes sont tous les médias attachés au billet. Le lien
-  d'ajout d'une pièce jointe permet de choisir un fichier à ajouter au billet.
-  Pensez à sauvegarder votre billet avant de choisir une pièce jointe. Consultez
-  l'aide de la médiathèque pour plus de détails.</dd>
-</dl>
-
-<h4>Commentaires</h4>
-<dl>
-  <dt>Liste les commentaires</dt>
-  <dd>Depuis l'onglets <em>Commentaires</em> vous pouvez lire et changer l'état
-  des commentaires de votre billet. Suivant vos permissions, vous pouvez modifier,
-  mettre en ligne ou hors ligne, supprimer ou classer comme commentaire
-  indésirable.</dd>
-  
-  <dt>Ajouter un commentaire</dt>
-  <dd>Depuis l'onglet <em>Ajouter un commentaire</em> vous pouvez répondre
-  directement à un commentaire sans passer par votre blog. Cette interface vous
-  permet également de saisir votre commentaire en xhtml, sans limitation. Vous
-  devrez remplir les champs de la même manière qu'en modifiant un commentaire</dd>
-</dl>
-
-</body>
-</html>
Index: ocales/fr/help/core_posts.html
===================================================================
--- locales/fr/help/core_posts.html	(revision 1874)
+++ 	(revision )
@@ -1,65 +1,0 @@
-<html>
-<head>
-  <title>Gestion des billets</title>
-</head>
-
-<body>
-
-<h4>Filtres de la liste des billets</h4>
-
-<dl>
-  <dt>Auteur</dt>
-  <dd>Permet de filtrer les billets par auteur.</dd>
-  
-  <dt>Catégorie</dt>
-  <dd>Filtrer les billets par catégorie.</dd>
-  
-  <dt>État</dt>
-  <dd><ul>
-    <li><strong>en attente</strong>&nbsp;: en attente de publication.</li>
-    <li><strong>programmé</strong>&nbsp;: le billet sera mis en ligne aux date et heure
-    indiquées dans le champ <em>Publié le</em>.</li>
-    <li><strong>non publié</strong>&nbsp;: billet hors ligne.</li>
-    <li><strong>publié</strong>&nbsp;: billet en ligne.</li>
-  </ul></dd>
-  
-  <dt>Sélectionné</dt>
-  <dd>Aucun, billet marqué comme sélectionné ou non sélectionné.</dd>
-  
-  <dt>Mois</dt>
-  <dd>Filtre les billets d'un mois d'une année donné.</dd>
-  
-  <dt>Langue</dt>
-  <dd>Filtre les billets selon la langue indiquée dans le champ langue du
-  billet.</dd>
-  
-  <dt>Trier par</dt>
-  <dd>Permet de trier les résultats de filtrage selon la date, le titre,
-  la catégorie, l'auteur, l'état de publication ou l'état de sélection.</dd>
-  
-  <dt>Trier</dt>
-  <dd>Indique l'ordre dans lequel on souhaite effectuer le tri.</dd>
-  
-  <dt>Billets par page</dt>
-  <dd>Nombre de billets à afficher par page de résultat.</dd>
-</dl>
-
-<h4>Actions par lot sur les billets</h4>
-<p>Il est possible d'effectuer un ensemble d'actions sur plusieurs billets, d'un
-seul coup. Les actions possibles dépendent des permissions de l'utilisateur.</p>
-
-<ul>
-  <li><strong>Publier</strong>&nbsp;: mettre le billet en ligne,</li>
-  <li><strong>Hors ligne</strong>&nbsp;: mettre le billet hors ligne,</li>
-  <li><strong>Programmer</strong>&nbsp;: programmer le billet pour mise en ligne à la date de
-  publication,</li>
-  <li><strong>En attente</strong>&nbsp;: en attente de publication,</li>
-  <li><strong>Changer de catégorie</strong>&nbsp;: envoie sur la liste des catégories pour
-  changer celle des billets sélectionnés,</li>
-  <li><strong>Changer l'auteur</strong>&nbsp;: permet de changer l'auteur du billet en indiquant
-  l'identifiant de l'utilisateur qui deviendra le nouvel auteur,</li>
-  <li><strong>Supprimer</strong>&nbsp;: supprime le billet (cette opération est irréversible).</li>
-</ul>
-
-</body>
-</html>
Index: ocales/fr/help/core_trackbacks.html
===================================================================
--- locales/fr/help/core_trackbacks.html	(revision 1874)
+++ 	(revision )
@@ -1,34 +1,0 @@
-<html>
-<head>
-  <title>Rédaction d'un billet</title>
-</head>
-
-<body>
-
-<h4>Rétroliens</h4>
-<p>Pour envoyer un rétrolien cliquez sur le lien <em>Faire des rétroliens</em>.
-Si vous ne voyez pas ce lien, vérifiez que votre billet est bien dans l'état
-<em>publié</em>.</p>
-
-<dl>
-  <dt>URLs à rétrolier</dt>
-  <dd>Indiquez ici la ou les URL que vous aurez relevé dans le billet vers lequel
-  vous souhaitez envoyer un rétrolien.</dd>
-  
-  
-  <dt>Envoyer l'extrait</dt>
-  <dd>Par défaut, ce champ comporte le début de votre billet. C'est ce qui sera
-  envoyé vers le blog que vous rétroliez avec un lien vers votre billet complet.
-  Vous pouvez modifier le contenu de cette "accroche" en saisissant directement le
-  texte de votre choix dans ce champ.</dd>
-  
-  
-  <dt>Découverte automatique des URLs à rétrolier</dt>
-  <dd>Si votre billet comporte des liens vers des billets précis et si la
-  plate-forme du blog destinataire est configurée pour le permettre, cette
-  fonction découvrira automatiquement les URLs spécifiques d'envoi de
-  rétrolien.</dd>
-</dl>
-
-</body>
-</html>
Index: ocales/fr/help/core_user.html
===================================================================
--- locales/fr/help/core_user.html	(revision 1874)
+++ 	(revision )
@@ -1,74 +1,0 @@
-<html>
-<head>
-  <title>Utilisateur</title>
-</head>
-
-<body>
-
-<h4>Informations utilisateur</h4>
-<dl>
-  <dt>Identifiant (login)</dt>
-  <dd>Il doit être composé d'au moins 2 caractères (lettres non accentuées, chiffres ou symboles, pas d'espace). Ce champ est obligatoire.</dd>
-
-  <dt>Mot de passe</dt>
-  <dd>Indiquez deux fois le mot de passe dans les champs <em>Mot de passe</em> et <em>Confirmer le mot de
-  passe</em>. Le mot de passe doit être long d'au moins 6 caractères.
-  Ces deux champs sont obligatoires.</dd>
-  
-  <dt>Nom, Prénom</dt>
-  <dd>Si le pseudonyme n'est pas renseigné, le nom de l'auteur qui sera affiché
-  sera composé des nom et prénom renseignés dans ces champs.</dd>
-
-  <dt>Pseudonyme</dt>
-  <dd>Vous pouvez choisir ici le pseudonyme sous lequel vos billets seront signés. S'il est renseigné, le pseudonyme se substitue au nom et au prénom.</dd>
-
-  <dt>Email</dt>
-  <dd>Cette adresse sera utilisée lors de la régénération du mot de passe depuis la fenêtre d'authentification de dotclear.</dd>
-
-  <dt>URL</dt>
-  <dd>Indique le site web de l'utilisateur. S'il est indiqué, le nom du rédacteur
-  d'un billet sera présenté comme un lien vers le site donné.</dd>
-  
-  <dt>Format d'édition préféré</dt>
-  <dd>Choix de la syntaxe par défaut pour la saisie des billets. Le wiki est une
-  syntaxe simplifiée et sera converti en xhtml valide&nbsp;; à moins que vous ne
-  maîtrisiez parfaitement le xhtml, nous vous conseillons le choix du wiki.</dd>
-  
-  <dt>État des billets par défaut</dt>
-  <dd>Le statut par défaut des billets peut être déterminé à&nbsp;:
-    <ul>
-      <li><strong>en attente :</strong> le statut de publication n'a pas encore
-      été décidé.</li>
-      <li><strong>programmé :</strong> le billet sera mis en ligne aux date et
-      heure indiquées dans le champ <em>Publié le</em>.</li>
-      <li><strong>non publié :</strong> billet hors ligne.</li>
-      <li><strong>publié :</strong> billet en ligne.</li>
-    </ul>
-  </dd>
-
-  <dt>Taille de la zone d'édition</dt>
-  <dd>Fixe la hauteur de la zone d'édtion du billet. Par défaut ce paramètre est
-  réglé à la valeur 24.</dd>
-  
-  <dt>Langue de l'utilisateur</dt>
-  <dd>Indique la langue dans laquelle on souhaite publier ses billets. Si la
-  traduction existe, l'interface sera également traduite dans cette langue.</dd>
-
-  <dt>Fuseau horaire de l'utilisateur</dt>
-  <dd>Ce choix déterminera l'affichage de l'heure de publication des billets.</dd>
-
-  <dt>Changement de mot de passe requis à la prochaine connexion</dt>
-  <dd>Cocher cette case permettra au nouvel utilisateur de choisir par lui-même son mot de passe à sa première connexion.</dd>
-
-  <dt>Super administrateur</dt>
-  <dd>Ce choix attribuera toutes les permissions au profil utilisateur sur l'ensemble des blogs de l'installation.</dd>
-</dl>
-
-<h4>Mots-clés</h4>
-<dl>
-  <dt>Format de la liste des mots-clés</dt>
-  <dd>Ce choix permet, dans la page d'édition d'un billet, d'afficher tous les mots-clés
-  disponibles ou seulement les plus utilisés.</dd>
-</dl>
-</body>
-</html>
Index: ocales/fr/help/core_user_pref.html
===================================================================
--- locales/fr/help/core_user_pref.html	(revision 1874)
+++ 	(revision )
@@ -1,91 +1,0 @@
-<html>
-<head>
-  <title>Préférences utilisateur</title>
-</head>
-
-<body>
-
-<h4>Mon profil</h4>
-<dl>
-  <dt>Nom, Prénom</dt>
-  <dd>Si le pseudonyme n'est pas renseigné, le nom de l'auteur qui sera affiché
-  sera composé des noms et prénoms renseignés dans ces champs.</dd>
-  
-  <dt>Pseudonyme</dt>
-  <dd>Vous pouvez choisir ici le nom sous lequel vos billets seront signés. S'il est renseigné, le pseudonyme se substitue au nom et au prénom.</dd>
-  
-  <dt>Email</dt>
-  <dd>Adresse à laquelle devront être envoyées les notifications de nouveaux
-  commentaires par email.</dd>
-  
-  <dt>URL</dt>
-  <dd>Indique le site web de l'utilisateur. S'il est indiqué, le nom du rédacteur
-  d'un billet sera présenté comme un lien vers le site donné.</dd>
-  
-  <dt>Langue de l'utilisateur</dt>
-  <dd>Indique la langue dans laquelle on souhaite publier ses billets. Si la
-  traduction existe, l'interface sera également traduite dans cette langue.</dd>
-  
-  <dt>Fuseau horaire de l'utilisateur</dt>
-  <dd>Ce choix déterminera l'affichage de l'heure de publication des billets.</dd>
-  
-  <dt>Changer le mot de passe</dt>
-  <dd>Pour changer votre mot de passe, indiquez deux fois le nouveau mot de passe 
-  dans les champs <em>Nouveau mot de passe</em> et <em>Confirmer le mot de 
-  passe</em>. Le mot de passe doit être long d'au moins 6 caractères. 
-  Si aucun mot de passe n'est spécifié, il ne sera pas changé.</dd>
-</dl>
-  
-<h4>Mes options</h4>
-<dl> 
-  <dt>Format d'édition préféré</dt>
-  <dd>Choix de la syntaxe par défaut pour la saisie des billets. Le wiki est une
-  syntaxe simplifiée et sera converti en xhtml valide&nbsp;; à moins que vous ne
-  maîtrisiez parfaitement le xhtml, nous vous conseillons le choix du wiki.</dd>
-  
-  <dt>État des billets par défaut</dt>
-  <dd>Le statut par défaut des billets peut être déterminé à&nbsp;:
-    <ul>
-      <li><strong>en attente :</strong> le statut de publication n'a pas encore
-      été décidé.</li>
-      <li><strong>programmé :</strong> le billet sera mis en ligne aux date et
-      heure indiquées dans le champ <em>Publié le</em>.</li>
-      <li><strong>non publié :</strong> billet hors ligne.</li>
-      <li><strong>publié :</strong> billet en ligne.</li>
-    </ul>
-  </dd>
-  
-  <dt>Taille de la zone d'édition</dt>
-  <dd>Fixe la hauteur de la zone d'édtion du billet. Par défaut ce paramètre est
-  réglé à la valeur 24.</dd>
-  
-  <dt>Activer l'éditeur visuel</dt>
-  <dd>Permet d'activer ou non l'éditeur visuel des billets et des catégories.</dd>
-  
-  <dt>Activer l'interface avancée de la médiathèque</dt>
-  <dd>Cette option permet d'envoyer plusieurs fichiers à la fois sur le serveur.
-  Nécessite la présence du plugin Flash dans votre navigateur.</dd>
-  
-  <dt>Modules du tableau de bord</dt>
-  <dd>Les choix opérés dans cette zone détermineront l'affichage de 
-  ces blocs sur le tableau de bord.</dd>
-  
-  <dt>Format de la liste de tags</dt>
-  <dd>Ce choix permet, dans la page d'édition d'un billet, d'afficher tous les tags 
-  disponibles ou seulement les plus utilisés.</dd>
-</dl>
-<h4>Mes favoris</h4>
-<dl>
-  <dt>Mes favoris</dt>
-  <dd>Cette zone affiche les favoris actuellement utilisés. Ils peuvent être réordonnés 
-  au moyen de la souris si javascript est activé dans votre navigateur. Sinon, une case 
-  permet d'attribuer à chaque favori un numéro d'ordre. Lorsque vous avez terminé, n'oubliez 
-  pas d'enregistrer vos modifications. Vous pouvez aussi sélectionner les favoris à supprimer
-  du tableau de bord.</dd>
-  
-  <dt>Favoris disponibles</dt>
-  <dd>Tous les plugins permettant d'être mis en favoris sont listés ici. 
-  Cochez les cases correspondantes aux favoris que vous souhaitez utiliser, puis ajoutez-les.</dd>
-</dl>
-</body>
-</html>
Index: ocales/fr/help/core_wiki.html
===================================================================
--- locales/fr/help/core_wiki.html	(revision 1874)
+++ 	(revision )
@@ -1,85 +1,0 @@
-<html>
-<head>
-  <title>Référence de la syntaxe Wiki</title>
-</head>
-
-<body>
-
-<h4>Référence de la syntaxe Wiki</h4>
-
-<p>La syntaxe Wiki est une manière d'écrire du texte avec un jeu de balises
-réduit au minimum, permettant de couvrir les besoins les plus courants
-(titres, paragraphes, citations, listes...).</p>
-
-<dl>
-<dt>Éléments de bloc</dt>
-<dd>
-<ul>
-  <li>Laissez une ligne vide entre chaque bloc de même nature.</li>
-  <li><strong>Paragraphe</strong>&nbsp;: texte libre, terminé par une ligne
-  vide si suivi d'un second paragraphe.</li>
-  <li><strong>Titre</strong>&nbsp;: <code>!!! titre</code>, <code>!! titre</code>
-  ou <code>! titre</code> pour des titres plus ou moins importants.</li>
-  <li><strong>Trait horizontal</strong>&nbsp;: <code>----</code></li>
-  <li><strong>Listes</strong>&nbsp;: lignes débutant par <code>*</code> pour des
-  listes à puce ou <code>#</code> pour des listes numérotées. Vous pouvez faire
-  des listes imbriquées en mélangeant les codes de liste. Par exemple&nbsp;:
-<pre>
-* item 1
-** item 1.1
-* item 2
-*# item 2.1
-...
-</pre>
-  </li>
-  <li><strong>Texte préformaté</strong>&nbsp;: espace avant chaque ligne de texte.</li>
-  <li><strong>Bloc de citation</strong>&nbsp;: <code>&gt;</code> devant chaque
-  ligne de texte.</li>
-</ul>
-</dd>
-
-<dt>Éléments de formatage</dt>
-<dd>
-<ul>
-  <li><strong>Emphase</strong>&nbsp;: deux apostrophes <code>''texte''</code></li>
-  <li><strong>Forte emphase</strong>&nbsp;: deux soulignés <code>__texte__</code></li>
-  <li><strong>Retour forcé à la ligne</strong>&nbsp;: <code>%%%</code></li>
-  <li><strong>Insertion</strong>&nbsp;: deux plus <code>++texte++</code></li>
-  <li><strong>Suppression</strong>&nbsp;: deux moins <code>--texte--</code></li>
-  <li><strong>Lien</strong>&nbsp;: <code>[url]</code>, <code>[nom|url]</code>,
-    <code>[nom|url|langue]</code> ou <code>[nom|url|langue|titre]</code></li>
-  <li><strong>Image</strong>&nbsp;:
-    <code>((url|texte alternatif))</code>,
-    <code>((url|texte alternatif|position))</code> ou
-    <code>((url|texte alternatif|position|description longue))</code>.
-    <br />La position peut prendre les valeurs L ou G (gauche), R ou D (droite) ou C (centré).</li>
-  <li><strong>Ancre</strong>&nbsp;: <code>~ancre~</code></li>
-  <li><strong>Acronyme</strong>&nbsp;: <code>??acronyme|titre??</code></li>
-  <li><strong>Code HTML en ligne</strong>: deux apostrophes inversées <code>``code html``</code></li>
-  <li><strong>Citation en ligne</strong>&nbsp;: <code>{{citation}}</code>,
-    <code>{{citation|langue}}</code> ou <code>{{citation|langue|url}}</code></li>
-  <li><strong>Code</strong>&nbsp;: <code>@@code ici@@</code></li>
-  <li><strong>Note de bas de page</strong>&nbsp;: <code>$$Corps de la note$$</code></li>
-</ul>
-</dd>
-
-<dt>Empêcher le formatage du texte</dt>
-<dd>Pour insérer un caractère sans que celui-ci soit reconnu comme un caractère
-de formatage, ajoutez le caractère <code>\</code> avant celui-ci. Par exemple&nbsp;:
-<code>\[texte entre crochet qui n'est pas un lien\]</code>
-</dd>
-
-<dt>Insérer du code HTML</dt>
-<dd>Vous pouvez ponctuellement avoir besoin d'insérer du code HTML dans votre
-texte au format Wiki. Pour cela, utilisez le code suivant&nbsp;:
-<pre>
-///html
-&lt;p style="color:red"&gt;mon texte en rouge&lt;/p&gt;
-///
-</pre>
-</dd>
-</dl>
-
-
-</body>
-</html>
Index: locales/fr/help/index.html
===================================================================
--- locales/fr/help/index.html	(revision 1869)
+++ locales/fr/help/index.html	(revision 1799)
@@ -6,59 +6,23 @@
 <body>
 
-<div class="multi-part legible" id="first-step" title="Premiers pas">
-	<h3>Découverte de l'interface</h3>
-	<h4 class="pretty-title">Aides contextuelles</h4>
-	<p>Outre les présentes pages d'aide générale, de nombreuses pages de l'administration disposent d'une aide contextuelle. Si javascript est disponible sur votre navigateur, elle se présente sur le côté de la page après avoir cliqué sur le lien <img src="images/menu/help.png" alt="" /> <strong>Aide pour cette page</strong> (en haut à droite) ; si javascript n'est pas activé elle s'affiche en bas de la page concernée.</p>
-
-	<h4 class="pretty-title">Réglages personnels</h4>
-	<p>Le lien vers les réglages de <a href="preferences.php">vos préférences</a> est disponible en haut de toutes les pages d'administration.</p>
-	<p><strong>Mon tableau de bord.</strong> Le tableau de bord est l'accueil de votre interface d'administration. Les grandes icônes de la partie centrale permettent un accès rapide aux pages favorites de l'administration. Sous ces icônes, figurent des modules d'information. Lors de votre première installation, les deux modules proposés sont les dernières nouvelles de Dotclear et des liens vers la documentation et le support. Pour organiser vos favoris et vos modules, allez sur l'onglet «&nbsp;Mon tableau de bord&nbsp;».</p>
-	<p><strong>Mon profil.</strong> Les deux autres onglets de la page Mes préférences permettent de modifier ou compléter vos informations personnelles.</p>
-	<p class="info"><strong>Astuce.</strong> Si le thème que vous utilisez le prévoit (c'est le cas de la plupart d'entre eux), indiquez la même <em>URL du blog</em> dans votre page de profil et dans le formulaire de commentaire sur votre blog pour obtenir une mise en valeur de vos propres commentaires.</p>
-	<p><strong>Mes options</strong>. Activez ou désactivez des fonctionnalités selon vos goûts ou votre contexte de navigation.</p>
-
-	<h4 class="pretty-title">Réglages du blog</h4>
-	<p><strong>Paramètres du blog</strong> (section «&nbsp;Blog&nbsp;» du menu). C'est ici que vous pouvez notamment changer le nom du blog, ajuster le fuseau horaire du blog, décider de la présentation des dates…</p>
-
-	<p><strong>Apparence du blog.</strong> Sélectionnez l'habillage (le <em>thème</em>) du blog. Certains thèmes offrent un configurateur de personnalisation. C'est le cas par exemple de Ductile ou Blowup. Dans ce cas, une fois le thème activé, cliquez sur le bouton "Configurer le thème" pour accéder à ses réglages. Outre les thèmes disponibles lors de l'installation, vous pouvez ajouter d'autres thèmes depuis l'onglet «&nbsp;Ajouter un thème&nbsp;» de cette page. </p>
-
-	<p><strong>Menu simple.</strong> Si le thème de votre blog a prévu son intégration, le menu principal du blog peut être renseigné sur cette page. Dans la plupart des thèmes il se présente sous forme d'une barre latérale sous l'entête du blog, comme sur Ductile par exemple.</p>
-
-	<p><strong>Widgets de présentation.</strong> Le menu du blog (souvent une barre latérale à droite ou à gauche du contenu principal) rassemble les widgets enregistrés sur cette page. Après avoir glissé le ou les widgets de votre choix dans leur zone d'accueil, vous pouvez les ouvrir en cliquant sur le triangle et compléter les champs et options.</p>
-
-	<h4 class="pretty-title">Aide aux grands débutants</h4>
-	<p>Si vous n'êtes pas familier avec l'univers des blogs, nous vous recommandons notre documentation (sommaire complet dans l'onglet Documentation de cette page) et les tutoriels qui vous sont spécialement dédiés sur le blog <a href="http://abc.dotaddict.org">abc Dotclear</a>. Vous serez peut-être intéressés par exemple par :</p>
-	<ul>
-		<li><a href="http://fr.dotclear.org/documentation/2.0/usage/beginners">Mon premier billet pas à pas</a></li>
-		<li><a href="http://abc.dotaddict.org/post/2009/07/08/13-Ma-premiere-sauvegarde">Ma première sauvegarde</a></li>
-		<li><a href="http://abc.dotaddict.org/post/1970/01/01/Choisir-un-theme">Choisir un thème</a></li>
-	</ul>
+<div class="multi-part" id="first-step" title="Prise en main de l'interface">
+<h3>Personnalisation de l'interface</h3>
+<p></p>
 </div>
 
-<div class="multi-part" id="doc" title="Documentation et tutoriels">
-	<h3>Documentation et tutoriels en ligne</h3>
-	<div class="three-boxes first-child">
-		<h4>Alimentation du blog</h4>
-			<ul><li><a href="/documentation/2.0/usage/entries">Billets</a><ul><li><a href="/documentation/2.0/usage/entries#creation-et-edition">Création et édition</a></li><li><a href="/documentation/2.0/usage/entries#informations-du-billet">Informations du billet</a></li><li><a href="/documentation/2.0/usage/entries#actions-sur-le-billet">Actions sur le billet</a></li><li><a href="/documentation/2.0/usage/entries#commentaires-et-retroliens-d-un-billet">Commentaires et rétroliens d&#039;un billet</a></li><li><a href="/documentation/2.0/usage/entries#traitement-par-lots-des-billets">Traitement par lots des billets</a></li></ul></li><li><a href="/documentation/2.0/usage/comments-trackbacks">Commentaires et rétroliens</a><ul><li><a href="/documentation/2.0/usage/comments-trackbacks#suivi">Suivi</a></li><li><a href="/documentation/2.0/usage/comments-trackbacks#gestion">Gestion</a></li></ul></li><li><a href="/documentation/2.0/usage/categories">Catégories</a><ul><li><a href="/documentation/2.0/usage/categories#creer-une-categorie">Créer une catégorie</a></li><li><a href="/documentation/2.0/usage/categories#editer-une-categorie">Éditer une catégorie</a></li><li><a href="/documentation/2.0/usage/categories#supprimer-une-categorie">Supprimer une catégorie</a></li><li><a href="/documentation/2.0/usage/categories#ordonner-la-liste-des-categories">Ordonner la liste des catégories</a></li></ul></li><li><a href="/documentation/2.0/usage/tags">Mots-clés (Tags)</a><ul><li><a href="/documentation/2.0/usage/tags#ajouter-des-mots-cles">Ajouter des mots-clés</a></li><li><a href="/documentation/2.0/usage/tags#gestion-des-mots-cles">Gestion des mots-clés</a></li><li><a href="/documentation/2.0/usage/tags#supprimer-des-mots-cles">Supprimer des mots-clés</a></li></ul></li><li><a href="/documentation/2.0/usage/media">Médias et pièces jointes</a><ul><li><a href="/documentation/2.0/usage/media#creer-un-sous-repertoire">Créer un sous-répertoire</a></li><li><a href="/documentation/2.0/usage/media#ajouter-des-fichiers">Ajouter des fichiers</a></li><li><a href="/documentation/2.0/usage/media#telecharger-une-archive-zip-du-dossier-courant">Télécharger une archive zip du dossier courant</a></li><li><a href="/documentation/2.0/usage/media#modifier-ou-completer-les-informations-d-un-fichier">Modifier ou compléter les informations d&#039;un fichier</a></li><li><a href="/documentation/2.0/usage/media#ajout-direct-de-fichiers">Ajout direct de fichiers</a></li><li><a href="/documentation/2.0/usage/media#types-de-fichier-particuliers">Types de fichier particuliers</a></li><li><a href="/documentation/2.0/usage/media#pieces-jointes">Pièces jointes</a></li></ul></li><li><a href="/documentation/2.0/usage/widgets">Contenu du menu du blog (widgets)</a><ul><li><a href="/documentation/2.0/usage/widgets#bandeau-de-navigation-bandeau-d-extra">Bandeau de navigation, bandeau d&#039;extra</a></li><li><a href="/documentation/2.0/usage/widgets#les-widgets-par-defaut">Les widgets par défaut</a></li><li><a href="/documentation/2.0/usage/widgets#ajoutersupprimer-un-widget">Ajouter/Supprimer un widget</a></li><li><a href="/documentation/2.0/usage/widgets#parametrage-des-widgets">Paramétrage des widgets</a></li></ul></li><li><a href="/documentation/2.0/usage/blogroll">Blogroll</a><ul><li><a href="/documentation/2.0/usage/blogroll#liste-des-liens">Liste des liens</a></li><li><a href="/documentation/2.0/usage/blogroll#ajouter-un-lien">Ajouter un lien</a></li><li><a href="/documentation/2.0/usage/blogroll#ajouter-une-categorie">Ajouter une catégorie</a></li><li><a href="/documentation/2.0/usage/blogroll#xfn">XFN</a></li><li><a href="/documentation/2.0/usage/blogroll#importer-depuis-un-fichier-opml-ou-xbel">Importer depuis un fichier OPML ou XBEL</a></li></ul></li></ul>
-	</div>
-	<div class="three-boxes">
-		<h4>Paramétrage et personnalisations</h4>
-		<h4>Annexes utilisation</h4>
-	</div>
-	<div class="three-boxes last-child">
-		<h4>Administration, gestion et maintenance</h4>
-	</div>
+<div class="multi-part" id="aides-pages" title="Ades contextuelles">
+<h3>Les aides contextuelles</h3>
 </div>
 
-	<div class="multi-part" id="a11y-ergo" title="Accessibilité et ergonomie">
-	<h3>Accessibilité et ergonomie</h3>
-	</div>
+<div class="multi-part" id="doc" title="Documentation">
+<h3>La documentation en ligne</h3>
+</div>
 
-	<div class="multi-part" id="guide-dev" title="Pour les développeurs">
-	<h3>Développeurs : charte de l'administration</h3>
-	<ul>
-		<li><a href="_charte.php">Charte des pages de l'administration</a></li>
-	</ul>
-	</div>
+<div class="multi-part" id="guide-dev" title="Pour les développeurs">
+<h3>Développeurs : charte de l'administration</h3>
+<ul>
+	<li><a href="_charte.html">Charte des pages de l'administration</a></li>
+</ul>
+</div>
 
 </body>
Index: ocales/fr/help/themeEditor.html
===================================================================
--- locales/fr/help/themeEditor.html	(revision 1874)
+++ 	(revision )
@@ -1,39 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<html>
-<head>
-  <title>Éditeur de thème</title>
-</head>
-
-<body>
-<p>L'éditeur de thème vous permet de modifier les fichiers template, les feuilles
-de style et les fichiers JavaScript de votre thème en cours d'utilisation.</p>
-
-<p>La liste des fichiers est divisée en trois parties&nbsp;:</p>
-<ul>
-  <li>Fichiers template : les templates</li>
-  <li>Fichiers CSS : les feuilles de style</li>
-  <li>Fichiers JavaScript</li>
-</ul>
-
-<p>Une puce jaune contre le nom de chaque fichier indique que celui-ci fait partie
-du thème. Une puce rouge indique qu'il se trouve dans le thème parent. 
-Une puce noire indique qu'il se trouve dans le thème "default".</p>
-
-<p>Si vous modifiez un fichier se trouvant dans le thème "default", celui-ci
-sera copié dans votre thème en cours d'utilisation.</p>
-
-<p>Pour modifier un fichier, cliquez sur son nom, le contenu s'affichera alors
-dans une zone d'édition. Si le fichier peut-être écrit vous pourrez sauvegarder
-celui-ci en cliquant sur "enregistrer".</p>
-
-<p>Les modifications sont immédiatement appliquées lors de la sauvegarde, soyez
-vigilants.</p>
-
-<p>Pour éditer vos templates, n'hésitez pas à consultez la
-<a href="http://doc.dotclear.net/2.0/resources/templates">liste des marqueurs
-de template</a>.</p>
-
-<p>Notez que vous pouvez activer la coloration syntaxique dans vos préférences (onglet « Mes options »).</p>
-
-</body>
-</html>
Index: locales/fr/main.po
===================================================================
--- locales/fr/main.po	(revision 1868)
+++ locales/fr/main.po	(revision 1793)
@@ -281,6 +281,6 @@
 msgstr "Format d'URL des nouveaux billets :"
 
-msgid "HTML tag for the title of the notes on the blog:"
-msgstr "Balise HTML pour le titre des notes sur le blog :"
+msgid "Note title HTML tag:"
+msgstr "Balise HTML pour le titre des notes :"
 
 msgid "Note"
@@ -359,5 +359,5 @@
 
 msgid "Generated image sizes (in pixels)"
-msgstr "Tailles des miniatures générées (largeur en pixels)"
+msgstr "Tailles des images générées (en pixels)"
 
 msgid "Thumbnails:"
@@ -373,9 +373,9 @@
 msgstr "Titres des images insérées"
 
-msgid "It is retrieved from the picture's metadata."
-msgstr "Ces informations sont obtenues depuis les métadonnées de l'image."
+msgid "This defines image tag title when you insert it in a post from the media manager. It is retrieved from the picture's metadata."
+msgstr "Ceci définit le titre de la balise d'une image insérée depuis la médiathèque. Les informations sont obtenues depuis les métadonnées de l'image."
 
 msgid "Use original media date if possible"
-msgstr "Utiliser la date originelle du média si possible"
+msgstr "Utiliser la date originale du média si possible"
 
 msgid "Search engines robots policy"
@@ -1359,9 +1359,6 @@
 msgstr "En tant qu'image uniquement"
 
-msgid "As a link to the original image"
+msgid "As a link to original image"
 msgstr "En tant que lien vers l'image originale"
-
-msgid "Insert a link to the original image"
-msgstr "Insérer le lien vers l'image originale"
 
 msgid "MP3 disposition"
@@ -2328,7 +2325,4 @@
 msgstr "Il y a des erreurs XHTML."
 
-msgid "Attention: an audit of a content not yet registered."
-msgstr "Attention : la vérification porte sur un contenu non encore enregistré."
-
 msgid "You have unsaved changes. Switch post format will loose these changes. Proceed anyway?"
 msgstr "Vous avez des modifications non sauvegardées. Changer de format vous fera perdre ces modifications. Continuer ?"
@@ -3372,14 +3366,2 @@
 msgid "Dashboard icons"
 msgstr "Icônes du tableau de bord"
-
-msgid "Go to dashboard"
-msgstr "Tableau de bord"
-
-msgid "Size of inserted image:"
-msgstr "Taille de l'image insérée :"
-
-msgid "Hide main menu"
-msgstr "Masquer le menu principal"
-
-msgid "Show main menu"
-msgstr "Afficher le menu principal"
Index: lugins/dclegacy/_admin.php
===================================================================
--- plugins/dclegacy/_admin.php	(revision 1905)
+++ 	(revision )
@@ -1,70 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & 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_CONTEXT_ADMIN')) { return; }
-
-$GLOBALS['core']->addBehavior('adminPostsActionsPage',array('dcLegacyPosts','adminPostsActionsPage'));
-$GLOBALS['core']->addBehavior('adminCommentsActionsPage',array('dcLegacyComments','adminCommentsActionsPage'));
-
-/* Handle deprecated behaviors : 
-    * adminPostsActionsCombo
-	* adminPostsActionsHeaders
-	* adminPostsActionsContent
-*/
-class dcLegacyPosts
-{
-	public static function adminPostsActionsPage($core, dcPostsActionsPage $as) {
-		$stub_actions = new ArrayObject();
-		$core->callBehavior('adminPostsActionsCombo',array($stub_actions));
-		if (!empty($stub_actions)) {
-			$as->addAction($stub_actions,array('dcLegacyPosts','onActionLegacy'));
-		}
-	}
-	
-	public static function onActionLegacy($core, dcPostsActionsPage $as, $post) {
-		$core->callBehavior('adminPostsActions',$core,$as->getRS(),$as->getAction(),$as->getRedirection());
-		$as->beginPage('',
-			dcPage::jsLoad('js/jquery/jquery.autocomplete.js').
-			dcPage::jsMetaEditor().
-			$core->callBehavior('adminPostsActionsHeaders'),'');
-		$core->callBehavior('adminPostsActionsContent',$core,$as->getAction(),$as->getHiddenFields(true));
-		$as->endPage();
-	
-	}
-}
-
-
-/* Handle deprecated behaviors : 
-    * adminCommentsActionsCombo
-	* adminCommentsActionsHeaders
-	* adminCommentsActionsContent
-*/
-class dcLegacyComments
-{
-	public static function adminCommentsActionsPage($core, dcCommentsActionsPage $as) {
-		$stub_actions = new ArrayObject();
-		$core->callBehavior('adminCommentsActionsCombo',array($stub_actions));
-		if (!empty($stub_actions)) {
-			$as->addAction($stub_actions,array('dcLegacyComments','onActionLegacy'));
-		}
-	}
-	
-	public static function onActionLegacy($core, dcCommentsActionsPage $as, $Comment) {
-		$core->callBehavior('adminCommentsActions',$core,$as->getRS(),$as->getAction(),$as->getRedirection());
-		$as->beginPage('',
-			dcPage::jsLoad('js/jquery/jquery.autocomplete.js').
-			dcPage::jsMetaEditor().
-			$core->callBehavior('adminCommentsActionsHeaders'),'');
-		$core->callBehavior('adminCommentsActionsContent',$core,$as->getAction(),$as->getHiddenFields(true));
-		$as->endPage();
-	
-	}
-}
Index: lugins/dclegacy/_define.php
===================================================================
--- plugins/dclegacy/_define.php	(revision 1806)
+++ 	(revision )
@@ -1,23 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2013 Olivier Meunier & 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; }
-
-$this->registerModule(
-	/* Name */			"dcLegacy",
-	/* Description*/		"Legacy modules for dotclear",
-	/* Author */			"dc Team",
-	/* Version */			'1.0',
-	array(
-		'priority' =>		500
-	)
-);
-?>
Index: plugins/importExport/inc/class.dc.export.flat.php
===================================================================
--- plugins/importExport/inc/class.dc.export.flat.php	(revision 1857)
+++ plugins/importExport/inc/class.dc.export.flat.php	(revision 1559)
@@ -196,5 +196,5 @@
 		
 		'<p><label for="file_name">'.__('File name:').'</label>'.
-		form::field(array('file_name','file_name'),50,255,date('Y-m-d-H-i-').html::escapeHTML($this->core->blog->id.'-backup.txt')).
+		form::field(array('file_name','file_name'),50,255,date('Y-m-d-').html::escapeHTML($this->core->blog->id.'-backup.txt')).
 		'</p>'.
 		
@@ -221,5 +221,5 @@
 			
 			'<p><label for="file_name2">'.__('File name:').'</label>'.
-			form::field(array('file_name','file_name2'),50,255,date('Y-m-d-H-i-').'dotclear-backup.txt').
+			form::field(array('file_name','file_name2'),50,255,date('Y-m-d-').'dotclear-backup.txt').
 			'</p>'.
 			
Index: plugins/pages/index.php
===================================================================
--- plugins/pages/index.php	(revision 1903)
+++ plugins/pages/index.php	(revision 1888)
@@ -17,4 +17,6 @@
 if ($act == 'page') {
 	include dirname(__FILE__).'/page.php';
+} else if ($act == 'actions') {
+	include dirname(__FILE__).'/pages_actions.php';
 } else {
 	include dirname(__FILE__).'/list.php';
Index: plugins/pages/list.php
===================================================================
--- plugins/pages/list.php	(revision 1903)
+++ plugins/pages/list.php	(revision 1893)
@@ -144,73 +144,30 @@
 }
 
-class dcPagesActionsPage extends dcPostsActionsPage {
-
-	public function __construct($core,$uri,$redirect_args=array()) {
-		parent::__construct($core,$uri,$redirect_args);
-		$this->redirect_fields = array();
-
-	}
-	
-	public function beginPage($breadcrumb='',$header='') {
-		echo '<html><head><title>'.__('Pages').'</title>'.
-			dcPage::jsLoad('index.php?pf=pages/list.js').
-			# --BEHAVIOR-- adminBeforePostDelete
-			$core->callBehavior('adminPagesActionsHeaders').
-			'<script type="text/javascript">'.
-			'//<![CDATA['.
-			dcPage::jsVar('dotclear.msg.confirm_delete_posts',__("Are you sure you want to delete selected pages?")).
-			'//]]>'.
-			'</script></head><body>';
-	}
-	
-	public function endPage() {
-		echo '</body></html>';
-	}
-	public function loadDefaults() {
-		parent::loadDefaults();
-		unset ($this->combos[__('Mark')]);
-		unset ($this->actions['selected']);
-		unset ($this->actions['unselected']);
-		$this->actions['reorder']=array('dcPagesActionsPage','doReorderPages');
-	}
-	public function process() {
-		// fake action for pages reordering
-		if (!empty($this->from['reorder'])) {
-			$this->from['action']='reorder';
-		}
-		parent::process();
-	}
-	
-	public static function doReorderPages($core, dcPostsActionsPage $ap, $post) {
-		foreach($post['order'] as $post_id => $value) {
-			if (!$core->auth->check('publish,contentadmin',$core->blog->id))
-				throw new Exception(__('You are not allowed to change this entry status'));
-			
-			$strReq = "WHERE blog_id = '".$core->con->escape($core->blog->id)."' ".
-					"AND post_id ".$core->con->in($post_id);
-			
-			#If user can only publish, we need to check the post's owner
-			if (!$core->auth->check('contentadmin',$core->blog->id))
-				$strReq .= "AND user_id = '".$core->con->escape($core->auth->userID())."' ";
-			
-			$cur = $core->con->openCursor($core->prefix.'post');
-			
-			$cur->post_position = (integer) $value-1;
-			$cur->post_upddt = date('Y-m-d H:i:s');
-			
-			$cur->update($strReq);
-			$core->blog->triggerBlog();
-			
-		}
-		$ap->redirect(array('reo'=>1),false);
-	}	
-}
-
 # Actions combo box
-
-$pages_actions_page = new dcPagesActionsPage($core,'plugin.php',array('p'=>'pages'));
-
-$pages_actions_page->process();
-
+$combo_action = array();
+if ($core->auth->check('publish,contentadmin',$core->blog->id))
+{
+	$combo_action[__('Status')] = array(
+		__('Publish') => 'publish',
+		__('Unpublish') => 'unpublish',
+		__('Schedule') => 'schedule',
+		__('Mark as pending') => 'pending'
+	);
+}
+	$combo_action[__('Change')] = array(
+		__('Change language') => 'lang'
+	);
+if ($core->auth->check('admin',$core->blog->id))
+{
+	$combo_action[__('Change')] = array_merge($combo_action[__('Change')], array(
+		__('Change author') => 'author')
+	);
+}
+if ($core->auth->check('delete,contentadmin',$core->blog->id))
+{
+	$combo_action[__('Delete')] = array(
+		__('Delete') => 'delete'
+	);
+}
 
 # --BEHAVIOR-- adminPagesActionsCombo
@@ -242,11 +199,4 @@
 	));
 
-if (!empty($_GET['upd'])) {
-	dcPage::success(__('Selected pages have been successfully updated.'));
-} elseif (!empty($_GET['del'])) {
-	dcPage::success(__('Selected pages have been successfully deleted.'));
-} elseif (!empty($_GET['reo'])) {
-	dcPage::success(__('Selected pages have been successfully reordered.'));
-}
 echo
 '<p class="top-add"><a class="button add" href="'.$p_url.'&amp;act=page">'.__('New page').'</a></p>';
@@ -256,5 +206,5 @@
 	# Show pages
 	$post_list->display($page,$nb_per_page,
-	'<form action="plugin.php" method="post" id="form-entries">'.
+	'<form action="plugin.php?p=pages&act=actions" method="post" id="form-entries">'.
 	
 	'%s'.
@@ -264,8 +214,8 @@
 	
 	'<p class="col right"><label for="action" class="classic">'.__('Selected pages action:').'</label> '.
-	form::combo('action',$pages_actions_page->getCombo()).
+	form::combo('action',$combo_action).
 	'<input type="submit" value="'.__('ok').'" /></p>'.
 	form::hidden(array('post_type'),'page').
-	form::hidden(array('p'),'pages').
+	form::hidden(array('redir'),html::escapeHTML($_SERVER['REQUEST_URI'])).
 	'</div>'.
 	$core->formNonce().
Index: plugins/pages/page.php
===================================================================
--- plugins/pages/page.php	(revision 1833)
+++ plugins/pages/page.php	(revision 1741)
@@ -406,7 +406,7 @@
 					'<p>'.form::combo('post_format',$formaters_combo,$post_format,'maximal').
 					'</p>'.
-					'<p class="format_control control_wiki">'.
-					'<a id="convert-xhtml" class="button'.($post_id && $post_format != 'wiki' ? ' hide' : '').'" href="post.php?id='.$post_id.'&amp;xconv=1">'.
-					__('Convert to XHTML').'</a></p></div>')),
+					'<p>'.($post_id && $post_format != 'xhtml' ? 
+					'<a id="convert-xhtml" class="button maximal" href="post.php?id='.$post_id.'&amp;xconv=1">'.
+					__('Convert to XHTML').'</a>' : '').'</p></div>')),
 		'metas-box' => array(
 			'title' => __('Ordering'),
@@ -473,5 +473,5 @@
 		
 		"post_content" =>
-			'<p class="area" id="content-area"><label class="required" '.
+			'<p class="area"><label class="required" '.
 			'for="post_content"><abbr title="'.__('Required field').'">*</abbr> '.__('Content:').'</label> '.
 			form::textarea('post_content',50,$core->auth->getOption('edit_size'),html::escapeHTML($post_content)).
@@ -494,5 +494,4 @@
 	echo '<div id="entry-wrapper">';
 	echo '<div id="entry-content"><div class="constrained">';
-	echo '<h3 class="out-of-screen-if-js">'.__('Edit page').'</h3>';
 	
 	
Index: plugins/pages/pages_actions.php
===================================================================
--- plugins/pages/pages_actions.php	(revision 1893)
+++ plugins/pages/pages_actions.php	(revision 1893)
@@ -0,0 +1,465 @@
+<?php
+# -- BEGIN LICENSE BLOCK ---------------------------------------
+#
+# This file is part of Dotclear 2.
+#
+# Copyright (c) 2003-2013 Olivier Meunier & 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_CONTEXT_ADMIN')) { return; }
+
+dcPage::check('usage,contentadmin');
+
+$params = array(
+	'post_type' => 'page'
+);
+
+/**
+* FieldsList - Compatibility class for hidden fields & entries[] fields
+*
+*/
+class FieldsList {
+	/** @var array list of hidden fields */
+	protected $hidden;
+	/** @var array list of selected entries */
+	protected $entries;
+
+
+   /**
+     * Class constructor
+	*/
+	public function __construct() {
+		$this->hidden=array();
+		$this->entries=array();
+	}
+
+    /**
+     * addHidden - adds a hidden field
+     * 
+     * @param string $name the field name.
+     * @param mixed $value the field value.
+     *
+     * @access public
+	 * @return the FieldsList instance, enabling to chain requests
+     */	
+	 public function addHidden($name,$value) {
+		$this->hidden[] = form::hidden($name,$value);
+		return $this;
+	}
+
+    /**
+     * addEntry - adds a antry field
+     * 
+     * @param string $id the entry id.
+     * @param mixed $title the entry title.
+     *
+     * @access public
+	 * @return the FieldsList instance, enabling to chain requests
+     */	
+	 public function addEntry($id,$title) {
+		$this->entries[$id]=$title;
+		return $this;
+	}
+
+    /**
+     * getHidden - returns the list of hidden fields, html encoded
+     *
+     * @access public
+	 * @return the list of hidden fields, html encoded
+     */
+	 public function getHidden() {
+		return join('',$this->hidden);
+	}
+	
+    /**
+     * getEntries - returns the list of entry fields, html encoded
+     *
+	 * @param boolean $hidden if set to true, returns entries as a list of hidden field
+	 *                if set to false, returns html code displaying the list of entries
+	 *                with a list of checkboxes to enable to select/deselect entries
+     * @access public
+	 * @return the list of entry fields, html encoded
+     */
+	public function getEntries ($hidden=false) {
+		$ret = '';
+		if ($hidden) {
+			foreach ($this->entries as $id=> $e) {
+				$ret .= form::hidden('entries[]',$id);
+			}
+		} else {
+			$ret = 
+				'<table class="pages-list"><tr>'.
+				'<th colspan="2">'.__('Title').'</th>'.
+				'</tr>';
+			foreach ($this->entries as $id=>$title) {
+				$ret .= 
+					'<tr><td>'.
+					form::checkbox(array('entries[]'),$id,true,'','').'</td>'.
+					'<td>'.	$title.'</td></tr>';
+			}
+			$ret .= '</table>';
+		}
+		return $ret;
+	}
+	
+    /**
+     * getEntriesQS - returns the list of entry fields as query string
+     *
+     * @access public
+	 * @return the list of entry fields, html encoded
+     */
+	public function getEntriesQS() {
+		$ret=array();
+		foreach ($this->entries as $id=>$title) {
+			$ret[] = 'entries[]='.$id;
+		}
+		return join('&',$ret);
+	}
+	
+    /**
+     * __toString - magic method. -- DEPRECATED here
+	 *              This method is only used to preserve compatibility with plugins 
+	 *				relying on previous versions of adminPostsActionsContent behavior, 
+	 *
+     * @access public
+	 * @return the list of hidden fields and entries (as hidden fields too), html encoded
+     */
+	public function __toString() {
+		return join('',$this->hidden).$this->getEntries(true);
+	}
+}
+
+$fields = new FieldsList();
+$pages_ids = array();
+
+if (isset($_POST['redir']) && strpos($_POST['redir'],'://') === false)
+{
+	$redir = $_POST['redir'];
+}
+else
+{
+	$redir ='plugin.php?p=pages';
+}
+$redir_sel = $redir;
+
+if (!empty($_POST['entries']))
+{
+	$entries = $_POST['entries'];
+	
+	foreach ($entries as $k => $v) {
+		$entries[$k] = (integer) $v;
+	}
+	
+	$params['sql'] = 'AND P.post_id IN('.implode(',',$entries).') ';
+	
+	if (!isset($_POST['full_content']) || empty($_POST['full_content'])) {
+		$params['no_content'] = true;
+	}
+	
+	if (isset($_POST['post_type'])) {
+		$params['post_type'] = $_POST['post_type'];
+	}
+	
+	$pages = $core->blog->getPosts($params);
+	while ($pages->fetch())	{
+		$pages_ids[] = $pages->post_id;
+		$fields->addEntry($pages->post_id,$pages->post_title);
+	}
+	// Redirection including selected entries
+	$redir_sel = $redir.'&'.$fields->getEntriesQS();
+
+} else {
+	$pages = $core->con->select("SELECT blog_id FROM ".$core->prefix."blog WHERE false");;
+}
+
+/* Actions
+-------------------------------------------------------- */
+if (!empty($_POST['reorder']))
+{
+ 	$action = 'reorder';
+}
+elseif (!empty($_POST['action']))
+{
+	$action = $_POST['action'];
+} 
+else
+{
+	$core->error->add(__('No action specified.'));
+	dcPage::open(
+		__('Pages'),'',dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			__('Pages') => 'plugin.php?p=pages',
+			'<span class="page-title">'.__('Entries actions').'</span>' => ''
+		))
+	);
+	
+	echo '<p><a class="back" href="'.html::escapeURL($redir_sel).'">'.__('Back to entries list').'</a></p>';
+
+	dcPage::close();
+	exit;
+}
+
+# --BEHAVIOR-- adminPagesActions
+$core->callBehavior('adminPagesActions',$core,$pages,$action,$redir);
+
+if (preg_match('/^(publish|unpublish|schedule|pending)$/',$action))
+{
+	switch ($action) {
+		case 'unpublish' : $status = 0; break;
+		case 'schedule' : $status = -1; break;
+		case 'pending' : $status = -2; break;
+		default : $status = 1; break;
+	}
+	
+	try
+	{
+		$core->blog->updPostsStatus($pages_ids,$status);
+		
+		http::redirect($redir_sel.'&upd=1');
+	}
+	catch (Exception $e)
+	{
+		$core->error->add($e->getMessage());
+	}
+}
+elseif ($action == 'delete')
+{
+	try
+	{
+		// Backward compatibility
+		foreach($pages_ids as $post_id)
+		{
+			# --BEHAVIOR-- adminBeforePostDelete
+			$core->callBehavior('adminBeforePagesDelete',(integer) $post_id);
+		}
+		
+		# --BEHAVIOR-- adminBeforePagesDelete
+		$core->callBehavior('adminBeforePagesDelete',$pages_ids);
+		
+		$core->blog->delPosts($pages_ids);
+		
+		http::redirect($redir."&del=1");
+	}
+	catch (Exception $e)
+	{
+		$core->error->add($e->getMessage());
+	}
+	
+}
+elseif ($action == 'author' && isset($_POST['new_auth_id']) && $core->auth->check('admin',$core->blog->id))
+{
+	$new_user_id = $_POST['new_auth_id'];
+	
+	try
+	{
+		if ($core->getUser($new_user_id)->isEmpty()) {
+			throw new Exception(__('This user does not exist'));
+		}
+		
+		$cur = $core->con->openCursor($core->prefix.'post');
+		$cur->user_id = $new_user_id;
+		$cur->update('WHERE post_id '.$core->con->in($pages_ids));
+		
+		http::redirect($redir_sel."&upd=1");
+	}
+	catch (Exception $e)
+	{
+		$core->error->add($e->getMessage());
+	}
+}
+elseif ($action == 'lang' && isset($_POST['new_lang']))
+{
+	$new_lang = $_POST['new_lang'];
+	try
+	{
+		$cur = $core->con->openCursor($core->prefix.'post');
+		$cur->post_lang = $new_lang;
+		$cur->update('WHERE post_id '.$core->con->in($posts_ids));
+		
+		http::redirect($redir_sel."&upd=1");
+	}
+	catch (Exception $e)
+	{
+		$core->error->add($e->getMessages());
+	}
+}
+elseif ( $action == 'reorder' && isset($_POST['order']))
+{
+	try {
+		
+		foreach($_POST['order'] as $post_id => $value) {
+			
+			if (!$core->auth->check('publish,contentadmin',$core->blog->id))
+				throw new Exception(__('You are not allowed to change this entry status'));
+			
+			$strReq = "WHERE blog_id = '".$core->con->escape($core->blog->id)."' ".
+					"AND post_id ".$core->con->in($post_id);
+			
+			#If user can only publish, we need to check the post's owner
+			if (!$core->auth->check('contentadmin',$core->blog->id))
+				$strReq .= "AND user_id = '".$core->con->escape($core->auth->userID())."' ";
+			
+			$cur = $core->con->openCursor($core->prefix.'post');
+			
+			$cur->post_position = (integer) $value-1;
+			$cur->post_upddt = date('Y-m-d H:i:s');
+			
+			$cur->update($strReq);
+			$core->blog->triggerBlog();
+			
+		}
+
+		http::redirect($redir."&reo=1");
+	} catch (Exception $e) {
+		$core->error->add($e->getMessage());
+	}
+}
+
+/* DISPLAY
+-------------------------------------------------------- */
+// Get current users list
+$usersList = '';
+if ($action == 'author' && $core->auth->check('admin',$core->blog->id)) {
+	$params = array(
+		'limit' => 100,
+		'order' => 'nb_post DESC'
+		);
+	$rs = $core->getUsers($params);
+	while ($rs->fetch())
+	{
+		$usersList .= ($usersList != '' ? ',' : '').'"'.$rs->user_id.'"';
+	}
+}
+?>
+
+<html>
+<head>
+  <title><?php echo __('Pages'); ?></title>
+  <?php
+  	echo '<script type="text/javascript">'."\n".
+	"//<![CDATA[\n".
+	'usersList = ['.$usersList.']'."\n".
+	"\n//]]>\n".
+	"</script>\n".
+	dcPage::jsLoad('js/jquery/jquery.autocomplete.js').
+	dcPage::jsLoad('index.php?pf=pages/list.js').
+	dcPage::jsMetaEditor().
+	# --BEHAVIOR-- adminBeforePostDelete
+	$core->callBehavior('adminPagesActionsHeaders');
+  ?>
+  <script type="text/javascript">
+  //<![CDATA[
+  <?php echo dcPage::jsVar('dotclear.msg.confirm_delete_posts',__("Are you sure you want to delete selected pages?")); ?>
+  //]]>
+  </script>
+</head>
+<body>
+
+<?php
+if (!isset($action)) {
+?>
+</body>
+</html>
+<?php
+	exit;
+}
+
+if (isset($_POST['redir']) && strpos($_POST['redir'],'://') === false)
+{
+	$fields->addHidden(array('redir'),html::escapeURL($_POST['redir']));
+}
+else
+{
+	$fields
+		->addHidden(array('user_id'),$_POST['user_id'])
+		->addHidden(array('cat_id'),$_POST['cat_id'])
+		->addHidden(array('status'),$_POST['status'])
+		->addHidden(array('selected'),$_POST['selected'])
+		->addHidden(array('month'),$_POST['month'])
+		->addHidden(array('lang'),$_POST['lang'])
+		->addHidden(array('sortby'),$_POST['sortby'])
+		->addHidden(array('order'),$_POST['order'])
+		->addHidden(array('page'),$_POST['page'])
+		->addHidden(array('nb'),$_POST['nb'])
+	;
+}
+
+if (isset($_POST['post_type'])) {
+	$fields->addHidden(array('post_type'),$_POST['post_type']);
+}
+
+# --BEHAVIOR-- adminPagesActionsContent
+$core->callBehavior('adminPagesActionsContent',$core,$action,$fields);
+
+if ($action == 'lang')
+{
+	echo dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			__('Entries') => 'posts.php',
+			'<span class="page-title">'.__('Change language for entries').'</span>' => ''
+	));
+	echo '<p><a class="back" href="'.html::escapeURL($redir_sel).'">'.__('Back to entries list').'</a></p>';
+
+	# lang list
+	# Languages combo
+	$rs = $core->blog->getLangs(array('order'=>'asc'));
+	$all_langs = l10n::getISOcodes(0,1);
+	$lang_combo = array('' => '', __('Most used') => array(), __('Available') => l10n::getISOcodes(1,1));
+	while ($rs->fetch()) {
+		if (isset($all_langs[$rs->post_lang])) {
+			$lang_combo[__('Most used')][$all_langs[$rs->post_lang]] = $rs->post_lang;
+			unset($lang_combo[__('Available')][$all_langs[$rs->post_lang]]);
+		} else {
+			$lang_combo[__('Most used')][$rs->post_lang] = $rs->post_lang;
+		}
+	}
+	unset($all_langs);
+	unset($rs);
+	
+	echo
+	'<form action="posts_actions.php" method="post">'.
+	$fields->getEntries().
+	
+	'<p><label for="new_lang" class="classic">'.__('Entry lang:').'</label> '.
+	form::combo('new_lang',$lang_combo,'');
+	
+	echo
+	$fields->getHidden().
+	$core->formNonce().
+	form::hidden(array('action'),'lang').
+	'<input type="submit" value="'.__('Save').'" /></p>'.
+	'</form>';
+
+}
+elseif ($action == 'author' && $core->auth->check('admin',$core->blog->id))
+{
+	echo dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			__('Pages') => 'plugin.php?p=pages',
+			'<span class="page-title">'.__('Change author for this selection').'</span>' => ''
+	));
+	echo '<p><a class="back" href="'.html::escapeURL($redir_sel).'">'.__('Back to entries list').'</a></p>';
+
+	echo
+	'<form action="plugin.php?p=pages&act=actions" method="post">'.
+	$fields->getEntries().
+	'<p><label for="new_auth_id" class="classic">'.__('New author (author ID):').'</label> '.
+	form::field('new_auth_id',20,255);
+	
+	echo
+	$fields->getHidden().
+	$core->formNonce().
+	form::hidden(array('action'),'author').
+	'<input type="submit" value="'.__('Save').'" /></p>'.
+	'</form>';
+}
+?>
+</body>
+</html>
Index: plugins/pings/lib.pings.php
===================================================================
--- plugins/pings/lib.pings.php	(revision 1818)
+++ plugins/pings/lib.pings.php	(revision 1398)
@@ -65,5 +65,5 @@
 			$item .=
 			'<p class="ping-services"><label for="pings_do-'.$i.'" class="classic">'.
-			form::checkbox(array('pings_do[]','pings_do-'.$i),html::escapeHTML($v),in_array($v,$pings_do), 'check-ping-services').' '.
+			form::checkbox(array('pings_do[]','pings_do-'.$i),html::escapeHTML($v),in_array($v,$pings_do)).' '.
 			html::escapeHTML($k).'</label></p>';
 			$i++;
Index: plugins/pings/post.js
===================================================================
--- plugins/pings/post.js	(revision 1818)
+++ plugins/pings/post.js	(revision 1699)
@@ -4,6 +4,11 @@
 			p = $('<p></p>');
 			p.addClass('ping-services');
-			$('p.ping-services:last').after(p);
-			dotclear.checkboxesHelpers($('p.ping-services:last').get(0), $('.check-ping-services'));
+			a = $('<a href="#"></a>');
+			a.text(dotclear.msg.check_all);
+			a.click(function() {
+				$('p.ping-services input[type="checkbox"]').attr('checked','checked');
+				return false;
+			});
+			$('p.ping-services:last').after(p.append(a));
 		}
 		$('h5.ping-services').toggleWithLegend($('p.ping-services'),{
Index: plugins/tags/_admin.php
===================================================================
--- plugins/tags/_admin.php	(revision 1874)
+++ plugins/tags/_admin.php	(revision 1609)
@@ -236,9 +236,9 @@
 			)).
 			'<form action="'.$form_uri.'" method="post">'.
-			//$hidden_fields->getEntries().
+			$hidden_fields->getEntries().
 			'<div><label for="new_tags" class="area">'.__('Tags to add:').'</label> '.
 			form::textarea('new_tags',60,3).
 			'</div>'.
-			$hidden_fields.
+			$hidden_fields->getHidden().
 			$core->formNonce().
 			form::hidden(array('action'),'tags').
@@ -321,5 +321,5 @@
 		
 		echo
-		'<p><label for="user_tag_list_format" class="classic">'.__('Tags list format:').'</label> '.
+		'<p><label for="user_tag_list_format">'.__('Tags list format:').'</label> '.
 		form::combo('user_tag_list_format',$combo,$value).
 		'</p>';
Index: plugins/tags/style.css
===================================================================
--- plugins/tags/style.css	(revision 1820)
+++ plugins/tags/style.css	(revision 0)
@@ -99,12 +99,2 @@
 	color: white;
 }
-#post_meta_input {
-    margin: 0 0.5em 0 0;
-    width: 13em;
-}
-#post_meta_input:focus {
-	-moz-box-sizing: content-box;
-}
-#tags-edit input[type=button] {
-	width: 3.5em;
-}
Index: tests/functional/fixtures/form_media_disabled.html
===================================================================
--- tests/functional/fixtures/form_media_disabled.html	(revision 1854)
+++ tests/functional/fixtures/form_media_disabled.html	(revision 1724)
@@ -14,5 +14,5 @@
       <p>
 	<label for="upfile"><span class="add-label one-file">Choose file</span></label>
-	<button class="button choose_files">Choose files</button>
+	<button class="button add">Choose files</button>
 	<input type="file" id="upfile" name="upfile[]" data-url="media.php?popup=0&amp;post_id=" />
       </p>
Index: tests/functional/fixtures/form_media_enabled.html
===================================================================
--- tests/functional/fixtures/form_media_enabled.html	(revision 1854)
+++ tests/functional/fixtures/form_media_enabled.html	(revision 1724)
@@ -14,5 +14,5 @@
       <p>
 	<label for="upfile"><span class="add-label one-file">Choose file</span></label>
-	<button class="button choose_files">Choose files</button>
+	<button class="button add">Choose files</button>
 	<input type="file" id="upfile" name="upfile[]" multiple="mutiple" data-url="media.php?popup=0&amp;post_id=" />
       </p>
