Cleaned export.
authorgibus
Mon, 06 Aug 2012 13:42:15 +0200
changeset 454 b7a092a52eae
parent 453 1d314f629611
child 455 33c7e20efcb7
Cleaned export.
README.txt
src/cm/converters/abi_converters.py
src/cm/locale/bg/LC_MESSAGES/djangojs.po
src/cm/locale/en/LC_MESSAGES/djangojs.po
src/cm/locale/es/LC_MESSAGES/djangojs.po
src/cm/locale/fr/LC_MESSAGES/djangojs.po
src/cm/locale/no/LC_MESSAGES/djangojs.po
src/cm/locale/pt_BR/LC_MESSAGES/djangojs.po
src/cm/media/js/client/f_client-min.js
src/cm/media/js/client/f_printDialog.js
src/cm/templates/site/macros/text_comments.html
src/cm/templates/site/text_view_comments.html
src/cm/templates/site/text_view_frame.html
src/cm/utils/comment_positioning.py
src/cm/views/export.py
src/cm/views/texts.py
--- a/README.txt	Tue Jul 31 16:37:23 2012 +0200
+++ b/README.txt	Mon Aug 06 13:42:15 2012 +0200
@@ -34,6 +34,7 @@
 - python development headers
 - python setuptools
 - python pexpect
+- python cssutils
 - pandoc
 - abiword (or headless openoffice and python uno)
 - git
@@ -43,7 +44,7 @@
 Installation (development install)
 ============
 1. Install python2.5+ and all required libraries
-	(ubuntu users : 'sudo apt-get install python python-magic python-setuptools python-uno libyaml-0-1 python-yaml python-dev git-core python-utidylib python-pexpect')
+	(ubuntu users : 'sudo apt-get install python python-magic python-setuptools python-uno libyaml-0-1 python-yaml python-dev git-core python-utidylib python-pexpect python-cssutils')
 2. Install pandoc
 	(ubuntu users : 'sudo apt-get install pandoc')
 3. Install abiword
@@ -137,6 +138,8 @@
 - python-uno
 - python-utidylib
 - python-yaml
+- python-pexpect
+- python-cssutils
 
 Icons 
 -----
--- a/src/cm/converters/abi_converters.py	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/converters/abi_converters.py	Mon Aug 06 13:42:15 2012 +0200
@@ -270,7 +270,10 @@
         Add an HTML header to an HTML body
         """
 
-        return """
+        if '<html' in body and '<body' in body:
+          full_html = body
+        else:
+          full_html = """
 <html xmlns="http://www.w3.org/1999/xhtml">
     <head>
         <meta http-equiv="content-type" content="text/html; charset=utf-8" />
@@ -281,3 +284,24 @@
 </html>
 """ %body
 
+        # Adds some style to fix Abiword default margins for paragraphs.
+        from BeautifulSoup import BeautifulSoup
+        import cssutils
+        soup = BeautifulSoup(full_html)
+        for p in soup.findAll(['p', 'div', 'ul', 'ol', 'dl']):
+          try:
+            css = p['style']
+            s = cssutils.parseStyle(css)
+            if s.getProperty('margin') == None:
+              if s.getProperty('margin-top') == None:
+                s.setProperty('margin-top', '10pt')
+              if s.getProperty('margin-bottom') == None:
+                s.setProperty('margin-bottom', '10pt')
+            p['style'] = s.cssText
+
+          except KeyError:
+            p['style'] = 'margin-top: 10pt; margin-bottom: 10pt;';
+
+        # for some reason having DOCTYPE declaration makes soup unhappy
+        output = re.sub(r'<!(<!DOCTYPE html[^>]*>)>', r'\1', unicode(soup))
+        return output
--- a/src/cm/locale/bg/LC_MESSAGES/djangojs.po	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/locale/bg/LC_MESSAGES/djangojs.po	Mon Aug 06 13:42:15 2012 +0200
@@ -256,6 +256,10 @@
 msgid "download ebook (.epub)"
 msgstr "Изтегляне на ebook (.epub)"
 
+#: media/js/client/f_client-min.js:1 media/js/client/f_printDialog.js:21
+msgid "download XML file for re-importing text and comments"
+msgstr "изтеглите XML файл за повторен внос текст и коментари"
+
 #: media/js/client/f_client-min.js:1 media/js/client/f_printDialog.js:13
 msgid "Print text"
 msgstr "Отпечатване на текстa"
--- a/src/cm/locale/en/LC_MESSAGES/djangojs.po	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/locale/en/LC_MESSAGES/djangojs.po	Mon Aug 06 13:42:15 2012 +0200
@@ -253,6 +253,10 @@
 msgid "download ebook (.epub)"
 msgstr ""
 
+#: media/js/client/f_client-min.js:1 media/js/client/f_printDialog.js:21
+msgid "download XML file for re-importing text and comments"
+msgstr ""
+
 #: media/js/client/f_client-min.js:1 media/js/client/f_printDialog.js:13
 msgid "Print text"
 msgstr ""
--- a/src/cm/locale/es/LC_MESSAGES/djangojs.po	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/locale/es/LC_MESSAGES/djangojs.po	Mon Aug 06 13:42:15 2012 +0200
@@ -257,6 +257,10 @@
 msgid "download ebook (.epub)"
 msgstr "descargar archivo en formato ebook (.epub)"
 
+#: media/js/client/f_client-min.js:1 media/js/client/f_printDialog.js:21
+msgid "download XML file for re-importing text and comments"
+msgstr "descargar archivo XML para la re-importación de texto y comentarios"
+
 #: media/js/client/f_client-min.js:1 media/js/client/f_printDialog.js:13
 msgid "Print text"
 msgstr "Imprimir texto"
--- a/src/cm/locale/fr/LC_MESSAGES/djangojs.po	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/locale/fr/LC_MESSAGES/djangojs.po	Mon Aug 06 13:42:15 2012 +0200
@@ -259,6 +259,10 @@
 msgid "download ebook (.epub)"
 msgstr "télécharger un ebook (.epub)"
 
+#: media/js/client/f_client-min.js:1 media/js/client/f_printDialog.js:21
+msgid "download XML file for re-importing text and comments"
+msgstr "télécharger le fichier XML pour re-importer le texte et les commentaires"
+
 #: media/js/client/f_client-min.js:1 media/js/client/f_printDialog.js:13
 msgid "Print text"
 msgstr "Impression du texte"
--- a/src/cm/locale/no/LC_MESSAGES/djangojs.po	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/locale/no/LC_MESSAGES/djangojs.po	Mon Aug 06 13:42:15 2012 +0200
@@ -258,6 +258,10 @@
 msgid "download ebook (.epub)"
 msgstr "last ned fil i ebok (.epub)"
 
+#: media/js/client/f_client-min.js:1 media/js/client/f_printDialog.js:21
+msgid "download XML file for re-importing text and comments"
+msgstr "last ned XML-fil for re-importere tekst og kommentarer"
+
 #: media/js/client/f_client-min.js:1 media/js/client/f_printDialog.js:13
 msgid "Print text"
 msgstr "Skriv ut tekst"
--- a/src/cm/locale/pt_BR/LC_MESSAGES/djangojs.po	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/locale/pt_BR/LC_MESSAGES/djangojs.po	Mon Aug 06 13:42:15 2012 +0200
@@ -255,6 +255,10 @@
 msgid "download ebook (.epub)"
 msgstr "baixar arquivo ebook (.epub)"
 
+#: media/js/client/f_client-min.js:1 media/js/client/f_printDialog.js:21
+msgid "download XML file for re-importing text and comments"
+msgstr "baixar arquivo XML para a re-importação o texto e comentários"
+
 #: media/js/client/f_client-min.js:1 media/js/client/f_printDialog.js:13
 msgid "Print text"
 msgstr "Imprimir texto"
--- a/src/cm/media/js/client/f_client-min.js	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/media/js/client/f_client-min.js	Mon Aug 06 13:42:15 2012 +0200
@@ -1,1 +1,1 @@
-gFormats=[{actions:["print"],extension:"html",label:gettext("print from the browser")},{actions:["export"],extension:"html",label:gettext("download html file (.html)")},{actions:["print","export"],extension:"markdown",label:gettext("download markdown file (.mkd)")},{actions:["print","export"],extension:"pdf",label:gettext("download portable object format file (.pdf)")},{actions:["print","export"],extension:"latex",label:gettext("download latex file (.tex)")},{actions:["print","export"],extension:"odt",label:gettext("download open document file (.odt)")},{actions:["print","export"],extension:"doc",label:gettext("download microsoft word file (.doc)")},{actions:["print","export"],extension:"docx",label:gettext("download microsoft word 2007 file (.docx)")}];var pandoc_version_ary=sv_pandoc_version.split(".");if(parseInt(pandoc_version_ary[0])>1||(parseInt(pandoc_version_ary[0])==1&&parseInt(pandoc_version_ary[1])>8)){gFormats.push({actions:["print","export"],extension:"epub",label:gettext("download ebook (.epub)")});}gActions={print:{dialogTitle:gettext("Print text"),chooseFormatLabel:gettext("How do you want to print?"),defaultMethod:"pdf",defaultWithColors:"no",defaultWhichComments:"all"},"export":{dialogTitle:gettext("Export text"),chooseFormatLabel:gettext("Choose file format"),defaultMethod:"pdf",defaultWithColors:"no",defaultWhichComments:"all"}};gCurrentAction=null;_populateMethod=function(g){var f=$("#p_method").val();$("#p_method").html("");for(var d=0,c=gFormats.length;d<c;d++){var e=gFormats[d]["actions"];for(var b=0,a=gFormats.length;b<a;b++){if(e[b]==gCurrentAction){$("<option value='"+gFormats[d]["extension"]+"'>"+gFormats[d]["label"]+"</option>").appendTo("#p_method");}}}if(f){$("#p_method").val(f);}else{$("#p_method").val(gActions[gCurrentAction]["defaultMethod"]);}};_populateMarkersColorsChoice=function(b){var a=$("#p_color").val();$("#p_color").html("");$("<option value='0'>"+gettext("using markers only, no background colors")+"</option>").appendTo("#p_color");$("<option value='1'>"+gettext("using markers and background colors")+"</option>").appendTo("#p_color");if(a){$("#p_color").val(a);}else{$("#p_color").val(gActions[gCurrentAction]["defaultWithColors"]);}};_populateWhichComments=function(){var c=$("#p_comments").val();$("#p_comments").html("");var a=interpolate(gettext("all (%(nb_comments)s)"),{nb_comments:frames.text_view_comments.gDb.getCommentsNb(true)},true);var b=interpolate(gettext("current filtered ones (%(nb_comments)s)"),{nb_comments:frames.text_view_comments.gDb.getCommentsNb(false)},true);$("<option value='all' >"+a+"</option>").appendTo($("#p_comments"));$("<option value='none' >"+gettext("none (0)")+"</option>").appendTo($("#p_comments"));$("<option value='filtered' >"+b+"</option>").appendTo($("#p_comments"));if(c){$("#p_comments").val(c);}else{$("#p_comments").val(gActions[gCurrentAction]["defaultWhichComments"]);}};_manageMarkersColorsChoice=function(){var c=$("#p_method").val();var b=$("#p_comments").val();var a;if(gCurrentAction=="print"){a=((b=="none")||(c=="markdown")||(c=="html"));}if(gCurrentAction=="export"){a=((b=="none")||(c=="markdown"));}if(a){$("#p_color").val("no");}$("#p_color").attr("disabled",a);};_initPrintDialog=function(){$("#p_comments").add($("#p_method")).change(function(){_manageMarkersColorsChoice();_prepareOpenInNewWindow();});var a={};a[gettext("Go !")]=function(){var d=$("#p_comments").val();var c=$("#p_color").val();var e=$("#p_method").val();var b=(gCurrentAction=="export")?"1":(e=="html")?"0":"1";var f=$("#print_export_form").attr("target_action").replace(/FoRmAt/,e).replace(/DoWnLoAd/,b).replace(/WhIcHCoMmEnT/,d).replace(/WiThCoLoR/,c);$("#print_export_form").attr("action",f);document.print_export_form.submit();$(this).dialog("close");};a[gettext("Cancel")]=function(){$(this).dialog("close");};$("#dialog_print_export").dialog({bgiframe:true,autoOpen:false,width:450,modal:true,buttons:a,close:function(){}});};openPrintDialog=function(){_openPrintExportDialog("print");};openExportDialog=function(){_openPrintExportDialog("export");};_prepareOpenInNewWindow=function(){var a=$("#p_method").val();if((a=="html")&&(gCurrentAction=="print")){$("#print_export_form").attr("target","_blank");}else{$("#print_export_form").removeAttr("target");}};_openPrintExportDialog=function(a){gCurrentAction=a;$("#ui-dialog-title-dialog_print_export").html(gActions[gCurrentAction]["dialogTitle"]);$("#how").html(gActions[gCurrentAction]["chooseFormatLabel"]);$("#print_export_action").val(a);_populateWhichComments();_populateMarkersColorsChoice();_populateMethod();_manageMarkersColorsChoice();_prepareOpenInNewWindow();$("#dialog_print_export").dialog("open");};onFadeEnd=function(){$(this).remove();};gLoadingMsg=null;enqueueLoadingMsg=function(){gLoadingMsg=_enqueueMsg(gettext("loading..."),"",null);};removeLoadingMsg=function(){if(gLoadingMsg!=null){gLoadingMsg.remove();gLoadingMsg=null;}};_enqueueMsg=function(d,b,c){var a=$("<span>"+d+"</span>").appendTo("#c-msg-wrapper").addClass("f-msg-cls").addClass(b);if(c){a.animate({opacity:0.95},c).fadeOut(2000,onFadeEnd);}return a;};enqueueMsg=function(c){var a="f-msg";var b=8000;_enqueueMsg(c,a,b);};enqueueErrorMsg=function(c){var a="f-msg-e";var b=4000;_enqueueMsg(c,a,b);};var gResetOtherFieldsOnFilterFieldChange=true;var myDefaultOuterLayoutSettings={center:{paneSelector:".outer-center"},north:{size:50,spacing_open:0,closable:false,resizable:false}};var innerNorthPaneDefaults={innerNorthPaneOpened:"0",selectedTab:"0"};onInnerNorthPaneClose=function(){_setCookie("innerNorthPaneOpened","0");$("#add_comment_btn").css("top",63);if(document.getElementById("text_view_comments").contentDocument!=null){document.getElementById("text_view_comments").contentDocument.getElementById("the-toc").style.height=(parseInt(document.getElementById("text_view_comments").clientHeight)-50).toString()+"px";}return true;};onInnerNorthPaneOpen=function(){_setCookie("innerNorthPaneOpened","1");$("#add_comment_btn").css("top",149);if(document.getElementById("text_view_comments").contentDocument!=null){document.getElementById("text_view_comments").contentDocument.getElementById("the-toc").style.height=(parseInt(document.getElementById("text_view_comments").clientHeight)-50).toString()+"px";}return true;};var myDefaultInnerLayoutSettings={north:{size:88,spacing_open:8,spacing_closed:8,slidable:false,resizable:false,togglerLength_closed:"100%",togglerLength_open:"100%",togglerAlign_closed:"center",togglerTip_closed:gettext("click to show options"),togglerTip_open:gettext("click to hide options"),togglerContent_open:"<img alt='arrow up' src='"+sv_media_url+"img/arrow-up.png' />",togglerContent_closed:"<img alt='arrow down' src='"+sv_media_url+"img/arrow-down.png' />",initClosed:false,paneSelector:".inner-north",onopen:"onInnerNorthPaneOpen",onclose:"onInnerNorthPaneClose"}};var outerLayout,innerLayout;layoutFrames=function(){var a=$.cookie("innerNorthPaneOpened");myDefaultInnerLayoutSettings.north.initClosed=(a===null)?(innerNorthPaneDefaults.innerNorthPaneOpened=="0"):(a=="0");outerLayout=$("body").layout(myDefaultOuterLayoutSettings);innerLayout=$("div.outer-center").layout(myDefaultInnerLayoutSettings);if(myDefaultInnerLayoutSettings.north.initClosed){onInnerNorthPaneClose();}else{onInnerNorthPaneOpen();}};fillFilterTab=function(){var b=$("#c_filter");var a='<div style="float:right"><table><tr><td style="text-align:right;">'+gettext("Text")+'<td>&nbsp;</td><td><input id="filter_text" type="text"></input><input id="c_filter_btn" type="button" value="'+gettext("Search")+'"></input></td></tr><tr><td colspan="3" style="text-align:right;"><input id="c_filterreset_btn" type="button" value="'+gettext("Reset")+'"></input><input id="c_filterhideall_btn" type="button" value="'+gettext("Hide all Comments")+'"></input></td></tr></table></div><table><tr><td style="text-align:right;">'+gettext("Authors")+'</td><td>&nbsp;</td><td><select id="filter_name"></select></td><td>&nbsp;</td><td style="text-align:right;">'+gettext("States")+'</td><td>&nbsp;</td><td><select id="filter_state"></select></td></tr><tr><td style="text-align:right;">'+gettext("Dates")+'</td><td>&nbsp;</td><td><select id="filter_date"></select></td><td>&nbsp;</td><td style="text-align:right;">'+gettext("Tags")+'</td><td>&nbsp;</td><td><select id="filter_tag"></select></td></tr></table>';b.append($(a));$("#c_filter input[type='text']").add("#c_filter select").addClass("c_filter_field");$("#filter_name").add("#filter_date").add("#filter_tag").add("#filter_state").change(function(){if(frames.text_view_comments.readyForAction()){var c=$(this);frames.text_view_comments.checkForOpenedDialog(null,function(){applyFilter(c);});}});$("#c_filter_btn").click(function(){if(frames.text_view_comments.readyForAction()){var c=$("#filter_text");frames.text_view_comments.checkForOpenedDialog(null,function(){applyFilter(c);});}});$("#filter_text").keyup(function(c){if(c.keyCode==13){$("#c_filter_btn").click();}});$("#c_filterreset_btn").click(function(){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){resetFilter();});}});$("#c_filterhideall_btn").click(function(){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){frames.text_view_comments.hideAll();});}});};fillTopToolbar=function(){var l=$("#outer-north");var g=gettext("view previous comment");var h=gettext("view next comment");var k=gettext("view first comment");var b=gettext("view last next comment");var d=gettext("view all comments");var p=gettext("view all detached comments");var m=gettext("toggle advance interface");var r=gettext("toggle table of contents");var c=gettext("print document with/without comments");var q=gettext("export document with/without comments");var a=gettext("toggle full screen view");var i=gettext("text feed");var j=gettext("add a comment");var n='<div id="c-right-btn"><img id="c_fullscreen_btn" src="'+sv_media_url+'/img/arrow_out.png" title="'+a+'" alt="'+a+'"/><img id="c_print_btn" src="'+sv_media_url+'/img/printer.png" title="'+c+'" alt="'+c+'"/><img id="c_export_btn" src="'+sv_media_url+'/img/page_go.png" title="'+q+'" alt="'+q+'"/><a target="_blank" href="'+frames.text_view_comments.sv_text_feed_url+'"><img id="c_feed_btn" src="'+sv_media_url+'/img/feed.png" title="'+i+'" alt="'+i+'"/></a></div><div id="c-msg-wrapper"></div><table style="margin-bottom:.3em;"><tbody><tr><td><span id="c_filter_results" ><b>&nbsp;<span id="c_f_res_nb_dis"></span></b>&nbsp;<span id="c_f_res_nb_dis_txt"></span><span id="c_f_res_details">&nbsp;('+gettext("filter:")+'&nbsp;<span id="c_f_res_nb_com"></span>/<span id="c_f_res_nb_tot_com"></span>&nbsp;<span id="c_f_res_nb_com_txt"></span>&nbsp;<span id="c_f_res_nb_rep"></span>/<span id="c_f_res_nb_tot_rep"></span><span id="c_f_res_nb_rep_txt"></span>)</span></span></td><td><span id="browse_section">, '+gettext("browse by:")+' <select id="browse_by"><option value="scope">'+gettext("location")+'</option><option value="modif_thread">'+gettext("modification")+'</option></select></span></td><td width="40" align="right"><a href="#" id="c_browse_first"><img title="'+k+'" alt="'+k+'" src="'+sv_media_url+'/img/control_fastbackward_blue.png"/></a><a href="#" id="c_browse_prev"><img title="'+g+'" alt="'+g+'" src="'+sv_media_url+'/img/control_playback_blue.png"/></a></td><td width="50" align="center"><span id="c_browse_indx_scope">-</span><span id="c_browse_indx_modif_thread" style="display: none;">-</span>/<span id="c_browse_indx_total"></span></td><td width="40" align="left"><a href="#" id="c_browse_next"><img title="'+h+'" alt="'+h+'" src="'+sv_media_url+'/img/control_play_blue.png"/></a><a href="#" id="c_browse_last"><img title="'+b+'" alt="'+b+'" src="'+sv_media_url+'/img/control_fastforward_blue.png"/></a></td><td width="20" align="left"><a href="#" id="c_browse_all"><img title="'+d+'" alt="'+d+'" src="'+sv_media_url+'/img/view_all.png"/></a></td><td width="20" align="left"><a href="#" id="c_browse_scope_removed"><img title="'+p+'" alt="'+p+'" src="'+sv_media_url+'/img/view_scope_removed2.png"/></a></td><td width="20" align="left"><a href="#" id="c_advanced_btn"><img title="'+m+'" alt="'+m+'" src="'+sv_media_url+'/img/application_split.png"/></a></td><td width="20" align="left"><a href="#" id="c_thread_unthread"><img id="c_thread_unthread_img"/></a></td><td width="20" align="left"><a href="#" id="c_toc_btn"><img title="'+r+'" alt="'+r+'" src="'+sv_media_url+'/img/document_index.png"/></a></td></tr></tbody></table>';l.prepend($(n));$("#add_comment_btn").click(function(){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){frames.text_view_comments.gSync.showCommentForm(null);});}});var f=function(){$("#browse_by option").each(function(){$("#c_browse_indx_"+this.value).hide();});$("#c_browse_indx_"+$("#browse_by").val()).show();};var e=$.cookie("browse_by");e=(e==null)?"location":e;_setCookie("browse_by",$("#browse_by").val());$("#browse_by option[value="+e+"]").attr("selected",true);f();$("#browse_by").change(function(){_setCookie("browse_by",$("#browse_by").val());f();});var o=function(s){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){frames.text_view_comments.browse($("#browse_by").val(),s);});}};$("#c_browse_prev").click(function(){o("prev");});$("#c_browse_next").click(function(){o("next");});$("#c_browse_first").click(function(){o("first");});$("#c_browse_last").click(function(){o("last");});$("#c_browse_all").click(function(){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){frames.text_view_comments.gSync.showAllComments();});}});$("#c_browse_scope_removed").click(function(){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){frames.text_view_comments.gSync.showScopeRemovedComments();});}});$("#c_print_btn").click(function(){if(frames.text_view_comments.readyForAction()){var s=frames.text_view_comments.gDb.getFilteredCommentIdsAsString();frames.text_view_comments.CY.log($("#filteredIds").val(s));openPrintDialog();}});$("#c_export_btn").click(function(){if(frames.text_view_comments.readyForAction()){var s=frames.text_view_comments.gDb.getFilteredCommentIdsAsString();frames.text_view_comments.CY.log($("#filteredIds").val(s));openExportDialog();}});if(frames.text_view_comments.gLayout.isInComentSite()){$("#c_fullscreen_btn").click(function(){toggleFrameSize();});}$("#c_advanced_btn").click(function(){$(".ui-layout-toggler").click();});setThreadPref=function(){var t=frames.text_view_comments.c_readPreference("comments","threadpad");var u=sv_media_url+"/img/unthread_box.png";var s=gettext("unthread discussions");if(t=="0"){u=sv_media_url+"/img/thread_box.png";s=gettext("thread discussions");}$("#c_thread_unthread_img").attr("src",u).attr("alt",s).attr("title",s);};setThreadPref();$("#c_thread_unthread").click(function(){var t=frames.text_view_comments.c_readPreference("comments","threadpad");var s=(t=="0")?"1":"0";frames.text_view_comments.c_persistPreference("comments","threadpad",s);setThreadPref();frames.text_view_comments.gSync.animateToTop();});$("#c_toc_btn").click(function(){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){frames.text_view_comments.toggleTocFn();});}});};onSliderStop=function(){var a=$("#c_slider").slider("value");if(a>(frames.text_view_comments.gConf.sliderFixedMin*100)){$("#c_slider").slider("value",[90]);}if(a<(frames.text_view_comments.gConf.sliderFixedMax*100)){$("#c_slider").slider("value",[10]);}frames.text_view_comments.c_setCommentsColWidth(a);frames.text_view_comments.c_persistPreference("layout","comments_col_width",a);};fillTextPreferencesTab=function(){var d=$("#c_text_preferences");d.append($("<table><tr><td>"+gettext("Text style")+'</td><td>&nbsp;</td><td><select id="c_textpref_style"></select></td></tr></table>'));var e=frames.text_view_comments.gTextStyles;for(var c in e){$("#c_textpref_style").append($("<option value='"+c+"'>"+e[c]+"</option>"));}var a=function(){var g=frames.text_view_comments.gTextStyles;var h=$("#c_textpref_style").val();for(var f in g){if(f==h){frames.text_view_comments.CY.get("#textcontainer").addClass(g[f]);}else{frames.text_view_comments.CY.get("#textcontainer").removeClass(g[f]);}}};var b=function(){var f=frames.text_view_comments.c_readPreference("text","style");$("#c_textpref_style").val(f);};$("#c_textpref_style").change(function(f){frames.text_view_comments.c_persistPreference("text","style",$("#c_textpref_style").val());a();});b();a();};fillPreferencesTab=function(){var b=$("#c_preferences");var a='<div style="float:right"><input id="c_pref_save_btn" type="button" value="'+gettext("Save")+'"></input><input id="c_pref_reset_btn" type="button" value="'+gettext("Reset")+'"></input></div><table><tr><td>'+gettext("Animation duration")+'</td><td>&nbsp;</td><td><input id="c_pref_animduration" type="text" style="width:3em" value="" /></td></tr><tr><td><span class="frame_helptext">'+gettext("(0.001 to 1 second)")+"</span></td><td></td><td></td></tr></table>";b.append($(a));setPreferencesFieldsValue=function(){var c=frames.text_view_comments.c_readPreference("general","animduration");$("#c_pref_animduration").val(c);};setPreferencesFieldsValue();$("#c_pref_animduration").blur(function(){var c=parseFloat($(this).val());if(isNaN(c)||(c<=0)||(c>1)){c=frames.text_view_comments.c_readDefaultPreference("general","animduration");}$(this).val(c);});$("#c_pref_reset_btn").click(function(){frames.text_view_comments.c_resetPreferences(["general"]);setPreferencesFieldsValue();enqueueMsg(gettext("preferences reset (will apply on next load)"));});$("#c_pref_save_btn").click(function(){frames.text_view_comments.c_persistPreference("general","animduration",$("#c_pref_animduration").val());enqueueMsg(gettext("preferences saved (will apply on next load)"));});};initFrame=function(){_initYesNoDialog();_initPrintDialog();$(window).resize(function(){onSliderStop();});$("#c_slider").slider({animate:true,range:"min",value:frames.text_view_comments.c_readPreference("layout","comments_col_width"),min:1,iframeFix:true,max:100,slide:function(a,b){var c=b.value;frames.text_view_comments.c_setCommentsColWidth(c);},stop:function(a,b){onSliderStop();}});_initTabs();f_interfaceFreeze();};_initTabs=function(){$(".inner-north").tabs();var a=$.cookie("selectedTab");a=(a===null)?innerNorthPaneDefaults.selectedTab:parseInt(a);$(".inner-north").tabs("select",a);$(".inner-north").bind("tabsselect",function(b,c){_setCookie("selectedTab",c.index);});};_initYesNoDialog=function(){$("#dialog_h").dialog({autoOpen:false,modal:true});};_setCookie=function(a,c){var b=new Date();b.setFullYear(2100,0,1);$.cookie(a,c,{expires:b,path:"/"});};f_getFrameFilterData=function(){var c=$("#filter_name").val();var b=$("#filter_date").val();var e=$("#filter_text").val();var a=$("#filter_tag").val();var d=$("#filter_state").val();return{name:c,date:b,text:e,tag:a,state:d};};f_setFilterValue=function(a){for(key in a){if(key.indexOf("filter_")==0){$("#"+key).val(a[key]);}}};f_isFrameFilterFieldsInit=function(){var b=f_getFrameFilterData();var a=true;for(key in b){a=a&&(b[key]=="");}return a;};initFilterFields=function(){$(".c_filter_field").val("");};resetFilter=function(){initFilterFields();frames.text_view_comments.reinit();enqueueMsg(gettext("filter reset"));};applyFilter=function(a){var b=a.val();if(gResetOtherFieldsOnFilterFieldChange){initFilterFields();a.val(b);}frames.text_view_comments.reinit();enqueueMsg(gettext("filter applied"));};f_updateFilterCountResult=function(d,a,b,e,c){$("#c_f_res_nb_dis").html(d);$("#c_f_res_nb_dis_txt").html(ngettext("discussion","discussions",d));$("#c_f_res_nb_com").html(a);$("#c_f_res_nb_tot_com").html(e);$("#c_f_res_nb_com_txt").html(ngettext("comment","comments",a));$("#c_f_res_nb_rep").html(b);$("#c_f_res_nb_tot_rep").html(c);$("#c_f_res_nb_rep_txt").html("&nbsp;"+ngettext("reply","replies",b));$("#c_browse_indx_total").html(d);$("#c_filter_results").show();};f_updateFilterCountDetailed=function(a){if(a){$("#c_f_res_details").show();$("c_browse_all").val("View all (filtered) comments");}else{$("#c_f_res_details").hide();$("#c_browse_all").val("View all comments");}};f_updateFilterData=function(e){var g=$("#filter_name option:selected").attr("name");var k=gettext("all");$("#filter_name option").remove();$("#filter_name").append($("<option name='c_f2_user_all' value=''>"+k+"</option>"));for(var c=0,b=e.names.length;c<b;c++){var l=e.names[c];$("#filter_name").append($("<option name='c_f2_user_"+l.name+"' value='"+l.name+"'>"+l.display+" ("+l.nb_comments+")</option>"));}$("#filter_name option[name="+g+"]").attr("selected",true);var a=$("#filter_date option:selected").attr("name");$("#filter_date option").remove();$("#filter_date").append($("<option name='c_f_date_all' value=''>"+k+"</option>"));for(var c=0,b=e.dates.length;c<b;c++){var l=e.dates[c];var f=ngettext("last 24 hours (%(nb_comments)s)","last %(nb_days)s days (%(nb_comments)s)",l.nb_day);var j=interpolate(f,{nb_days:l.nb_day,nb_comments:l.nb_comments},true);$("#filter_date").append($("<option name='c_f_date_"+l.nb_day+"' value='"+l.nb_day_date+"'>"+j+"</option>"));}$("#filter_date option[name="+a+"]").attr("selected",true);var h=$("#filter_tag option:selected").attr("name");$("#filter_tag option").remove();$("#filter_tag").append($("<option name='c_f2_tag_all' value=''>"+k+"</option>"));for(var c=0,b=e.tags.length;c<b;c++){var l=e.tags[c];$("#filter_tag").append($("<option name='c_f2_tag_"+l.name+"' value='"+l.name+"'>"+l.name+" ("+l.nb_comments+")</option>"));}$("#filter_tag option[name="+h+"]").attr("selected",true);var d=$("#filter_state option:selected").attr("state");$("#filter_state option").remove();$("#filter_state").append($("<option name='c_f2_state_all' value=''>"+k+"</option>"));for(var c=0,b=e.states.length;c<b;c++){var l=e.states[c];$("#filter_state").append($("<option name='c_f2_state_"+l.state+"' value='"+l.state+"'>"+gettext(l.state)+" ("+l.nb_comments+")</option>"));}$("#filter_state option[name="+d+"]").attr("selected",true);};f_interfaceUnfreeze=function(){for(var b=0,a=$(".c_tab").length;b<a;b++){$(".inner-north").tabs("enable",b);}$(".inner-north select").add(".inner-north input").add("#outer-north select").add("#outer-north input").each(function(){$(this).attr("disabled",false);});$("#c_slider").slider("enable");};f_interfaceFreeze=function(){for(var b=0,a=$(".c_tab").length;b<a;b++){$(".inner-north").tabs("disable",b);}$(".inner-north select").add(".inner-north input").add("#outer-north select").add("#outer-north input").each(function(){$(this).attr("disabled",true);});$("#c_slider").slider("disable");};f_enqueueMsg=function(a){enqueueMsg(a);};f_enqueueErrorMsg=function(a){enqueueErrorMsg(a);};f_removeLoadingMsg=function(){removeLoadingMsg();};f_initFrame=function(){initFrame();};f_layoutFrames=function(){layoutFrames();};f_fillTextPreferencesTab=function(){fillTextPreferencesTab();};f_fillPreferencesTab=function(){fillPreferencesTab();};f_fillBrowseSection=function(){fillBrowseSection();};f_fillFilterTab=function(){fillFilterTab();};f_fillTopToolbar=function(){fillTopToolbar();};f_yesNoDialog=function(d,g,e,b,c,h,a,j){$("#dialog_h").html(d);$("#dialog_h").dialog("option","title",g);function k(){if(e!=null){e.call(b,c);}}function i(){if(h!=null){h.call(a,j);}}var f={};f[gettext("No")]=function(){$(this).dialog("close");k();};f[gettext("Yes")]=function(){$(this).dialog("close");i();};$("#dialog_h").dialog("option","buttons",f);$("#dialog_h").dialog("open");};f_setCookie=function(a,b){_setCookie(a,b);};gInFullScreen=false;_setFrameSize=function(){if(parent!=window){if(gInFullScreen){var b=parent.$("#header").height();var f=parent.$(parent).height();var c=(f-b-2)+"px";var d=parent.$(parent).width();var a=(d-2)+"px";parent.$("#text_view_frame").css({position:"absolute",left:"0px",top:b,width:a,height:c});}else{var e=Math.ceil(parent.$("#autoexpand_text_view_frame_container").position()["top"]);var f=parent.$(parent).height();var c=(f-e-2)+"px";var d=parent.$(parent).width();var a=(d-2)+"px";parent.$("#text_view_frame").css({position:"relative",width:"99.9%",height:c,top:"0px"});}}};_toFullScreenSize=function(){gInFullScreen=true;_setFrameSize();$("#c_fullscreen_btn").attr("src",sv_media_url+"/img/arrow_in.png");f_setCookie("fullscreen","1");};_toNormalSize=function(){gInFullScreen=false;_setFrameSize();$("#c_fullscreen_btn").attr("src",sv_media_url+"img/arrow_out.png");f_setCookie("fullscreen","0");};_toInitialSize=function(){var a=($.cookie("fullscreen")=="1");if(a){_toFullScreenSize();}else{_toNormalSize();}};toInitialSize=function(){_toInitialSize();parent.$(parent).resize(function(){_setFrameSize();});};toggleFrameSize=function(){if(gInFullScreen){_toNormalSize();}else{_toFullScreenSize();}};
\ No newline at end of file
+gFormats=[{actions:["print"],extension:"html",label:gettext("print from the browser")},{actions:["export"],extension:"html",label:gettext("download html file (.html)")},{actions:["export"],extension:"markdown",label:gettext("download markdown file (.mkd)")},{actions:["print"],extension:"pdf",label:gettext("print in PDF format")},{actions:["export"],extension:"pdf",label:gettext("download portable object format file (.pdf)")},{actions:["export"],extension:"latex",label:gettext("download latex file (.tex)")},{actions:["export"],extension:"odt",label:gettext("download open document file (.odt)")},{actions:["export"],extension:"doc",label:gettext("download microsoft word file (.doc)")},{actions:["export"],extension:"docx",label:gettext("download microsoft word 2007 file (.docx)")},];var pandoc_version_ary=sv_pandoc_version.split(".");if(parseInt(pandoc_version_ary[0])>1||(parseInt(pandoc_version_ary[0])==1&&parseInt(pandoc_version_ary[1])>8)){gFormats.push({actions:["export"],extension:"epub",label:gettext("download ebook (.epub)")});}gFormats.push({actions:["export"],extension:"xml",label:gettext("download XML file for re-importing text and comments")});gActions={print:{dialogTitle:gettext("Print text"),chooseFormatLabel:gettext("How do you want to print?"),defaultMethod:"pdf",defaultWithColors:"no",defaultWhichComments:"all"},"export":{dialogTitle:gettext("Export text"),chooseFormatLabel:gettext("Choose file format"),defaultMethod:"pdf",defaultWithColors:"no",defaultWhichComments:"all"}};gCurrentAction=null;_populateMethod=function(g){var f=$("#p_method").val();$("#p_method").html("");for(var d=0,c=gFormats.length;d<c;d++){var e=gFormats[d]["actions"];for(var b=0,a=gFormats.length;b<a;b++){if(e[b]==gCurrentAction){$("<option value='"+gFormats[d]["extension"]+"'>"+gFormats[d]["label"]+"</option>").appendTo("#p_method");}}}if(f){$("#p_method").val(f);}else{$("#p_method").val(gActions[gCurrentAction]["defaultMethod"]);}};_populateMarkersColorsChoice=function(b){var a=$("#p_color").val();$("#p_color").html("");$("<option value='0'>"+gettext("using markers only, no background colors")+"</option>").appendTo("#p_color");$("<option value='1'>"+gettext("using markers and background colors")+"</option>").appendTo("#p_color");if(a){$("#p_color").val(a);}else{$("#p_color").val(gActions[gCurrentAction]["defaultWithColors"]);}};_populateWhichComments=function(){var c=$("#p_comments").val();$("#p_comments").html("");var a=interpolate(gettext("all (%(nb_comments)s)"),{nb_comments:frames.text_view_comments.gDb.getCommentsNb(true)},true);var b=interpolate(gettext("current filtered ones (%(nb_comments)s)"),{nb_comments:frames.text_view_comments.gDb.getCommentsNb(false)},true);$("<option value='all' >"+a+"</option>").appendTo($("#p_comments"));$("<option value='none' >"+gettext("none (0)")+"</option>").appendTo($("#p_comments"));$("<option value='filtered' >"+b+"</option>").appendTo($("#p_comments"));if(c){$("#p_comments").val(c);}else{$("#p_comments").val(gActions[gCurrentAction]["defaultWhichComments"]);}};_manageMarkersColorsChoice=function(){var f=$("#p_method").val();var e=$("#p_comments").val();var c=frames.text_view_comments.gDb.getCommentsNb(true);var d=frames.text_view_comments.gDb.getCommentsNb(false);var b=(e=="all")?c:d;var a;if(gCurrentAction=="print"){a=((b==0)||(e=="none"));}if(gCurrentAction=="export"){a=((b==0)||(e=="none")||(f=="markdown")||(f=="latex")||(f=="epub")||(f=="odt")||(f=="doc"));}if(a){$("#p_color").val("no");}$("#p_color").attr("disabled",a);};_initPrintDialog=function(){$("#p_comments").add($("#p_method")).change(function(){_manageMarkersColorsChoice();_prepareOpenInNewWindow();});var a={};a[gettext("Go !")]=function(){var d=$("#p_comments").val();var c=$("#p_color").val();var e=$("#p_method").val();var b=(gCurrentAction=="export")?"1":(e=="html")?"0":"1";var f=$("#print_export_form").attr("target_action").replace(/FoRmAt/,e).replace(/DoWnLoAd/,b).replace(/WhIcHCoMmEnT/,d).replace(/WiThCoLoR/,c);$("#print_export_form").attr("action",f);document.print_export_form.submit();$(this).dialog("close");};a[gettext("Cancel")]=function(){$(this).dialog("close");};$("#dialog_print_export").dialog({bgiframe:true,autoOpen:false,width:500,modal:true,buttons:a,close:function(){}});};openPrintDialog=function(){_openPrintExportDialog("print");};openExportDialog=function(){_openPrintExportDialog("export");};_prepareOpenInNewWindow=function(){var a=$("#p_method").val();if((a=="html")&&(gCurrentAction=="print")){$("#print_export_form").attr("target","_blank");}else{$("#print_export_form").removeAttr("target");}};_openPrintExportDialog=function(a){gCurrentAction=a;$("#ui-dialog-title-dialog_print_export").html(gActions[gCurrentAction]["dialogTitle"]);$("#how").html(gActions[gCurrentAction]["chooseFormatLabel"]);$("#print_export_action").val(a);_populateWhichComments();_populateMarkersColorsChoice();_populateMethod();_manageMarkersColorsChoice();_prepareOpenInNewWindow();$("#dialog_print_export").dialog("open");};onFadeEnd=function(){$(this).remove();};gLoadingMsg=null;enqueueLoadingMsg=function(){gLoadingMsg=_enqueueMsg(gettext("loading..."),"",null);};removeLoadingMsg=function(){if(gLoadingMsg!=null){gLoadingMsg.remove();gLoadingMsg=null;}};_enqueueMsg=function(d,b,c){var a=$("<span>"+d+"</span>").appendTo("#c-msg-wrapper").addClass("f-msg-cls").addClass(b);if(c){a.animate({opacity:0.95},c).fadeOut(2000,onFadeEnd);}return a;};enqueueMsg=function(c){var a="f-msg";var b=8000;_enqueueMsg(c,a,b);};enqueueErrorMsg=function(c){var a="f-msg-e";var b=4000;_enqueueMsg(c,a,b);};var gResetOtherFieldsOnFilterFieldChange=true;var myDefaultOuterLayoutSettings={center:{paneSelector:".outer-center"},north:{size:50,spacing_open:0,closable:false,resizable:false}};var innerNorthPaneDefaults={innerNorthPaneOpened:"0",selectedTab:"0"};onInnerNorthPaneClose=function(){_setCookie("innerNorthPaneOpened","0");$("#add_comment_btn").css("top",63);if(document.getElementById("text_view_comments").contentDocument!=null){document.getElementById("text_view_comments").contentDocument.getElementById("the-toc").style.height=(parseInt(document.getElementById("text_view_comments").clientHeight)-50).toString()+"px";}return true;};onInnerNorthPaneOpen=function(){_setCookie("innerNorthPaneOpened","1");$("#add_comment_btn").css("top",149);if(document.getElementById("text_view_comments").contentDocument!=null){document.getElementById("text_view_comments").contentDocument.getElementById("the-toc").style.height=(parseInt(document.getElementById("text_view_comments").clientHeight)-50).toString()+"px";}return true;};var myDefaultInnerLayoutSettings={north:{size:88,spacing_open:8,spacing_closed:8,slidable:false,resizable:false,togglerLength_closed:"100%",togglerLength_open:"100%",togglerAlign_closed:"center",togglerTip_closed:gettext("click to show options"),togglerTip_open:gettext("click to hide options"),togglerContent_open:"<img alt='arrow up' src='"+sv_media_url+"img/arrow-up.png' />",togglerContent_closed:"<img alt='arrow down' src='"+sv_media_url+"img/arrow-down.png' />",initClosed:false,paneSelector:".inner-north",onopen:"onInnerNorthPaneOpen",onclose:"onInnerNorthPaneClose"}};var outerLayout,innerLayout;layoutFrames=function(){var a=$.cookie("innerNorthPaneOpened");myDefaultInnerLayoutSettings.north.initClosed=(a===null)?(innerNorthPaneDefaults.innerNorthPaneOpened=="0"):(a=="0");outerLayout=$("body").layout(myDefaultOuterLayoutSettings);innerLayout=$("div.outer-center").layout(myDefaultInnerLayoutSettings);if(myDefaultInnerLayoutSettings.north.initClosed){onInnerNorthPaneClose();}else{onInnerNorthPaneOpen();}};fillFilterTab=function(){var b=$("#c_filter");var a='<div style="float:right"><table><tr><td style="text-align:right;">'+gettext("Text")+'<td>&nbsp;</td><td><input id="filter_text" type="text"></input><input id="c_filter_btn" type="button" value="'+gettext("Search")+'"></input></td></tr><tr><td colspan="3" style="text-align:right;"><input id="c_filterreset_btn" type="button" value="'+gettext("Reset")+'"></input><input id="c_filterhideall_btn" type="button" value="'+gettext("Hide all Comments")+'"></input></td></tr></table></div><table><tr><td style="text-align:right;">'+gettext("Authors")+'</td><td>&nbsp;</td><td><select id="filter_name"></select></td><td>&nbsp;</td><td style="text-align:right;">'+gettext("States")+'</td><td>&nbsp;</td><td><select id="filter_state"></select></td></tr><tr><td style="text-align:right;">'+gettext("Dates")+'</td><td>&nbsp;</td><td><select id="filter_date"></select></td><td>&nbsp;</td><td style="text-align:right;">'+gettext("Tags")+'</td><td>&nbsp;</td><td><select id="filter_tag"></select></td></tr></table>';b.append($(a));$("#c_filter input[type='text']").add("#c_filter select").addClass("c_filter_field");$("#filter_name").add("#filter_date").add("#filter_tag").add("#filter_state").change(function(){if(frames.text_view_comments.readyForAction()){var c=$(this);frames.text_view_comments.checkForOpenedDialog(null,function(){applyFilter(c);});}});$("#c_filter_btn").click(function(){if(frames.text_view_comments.readyForAction()){var c=$("#filter_text");frames.text_view_comments.checkForOpenedDialog(null,function(){applyFilter(c);});}});$("#filter_text").keyup(function(c){if(c.keyCode==13){$("#c_filter_btn").click();}});$("#c_filterreset_btn").click(function(){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){resetFilter();});}});$("#c_filterhideall_btn").click(function(){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){frames.text_view_comments.hideAll();});}});};fillTopToolbar=function(){var l=$("#outer-north");var g=gettext("view previous comment");var h=gettext("view next comment");var k=gettext("view first comment");var b=gettext("view last next comment");var d=gettext("view all comments");var p=gettext("view all detached comments");var m=gettext("toggle advance interface");var r=gettext("toggle table of contents");var c=gettext("print document with/without comments");var q=gettext("export document with/without comments");var a=gettext("toggle full screen view");var i=gettext("text feed");var j=gettext("add a comment");var n='<div id="c-right-btn"><img id="c_fullscreen_btn" src="'+sv_media_url+'/img/arrow_out.png" title="'+a+'" alt="'+a+'"/><img id="c_print_btn" src="'+sv_media_url+'/img/printer.png" title="'+c+'" alt="'+c+'"/><img id="c_export_btn" src="'+sv_media_url+'/img/page_go.png" title="'+q+'" alt="'+q+'"/><a target="_blank" href="'+frames.text_view_comments.sv_text_feed_url+'"><img id="c_feed_btn" src="'+sv_media_url+'/img/feed.png" title="'+i+'" alt="'+i+'"/></a></div><div id="c-msg-wrapper"></div><table style="margin-bottom:.3em;"><tbody><tr><td><span id="c_filter_results" ><b>&nbsp;<span id="c_f_res_nb_dis"></span></b>&nbsp;<span id="c_f_res_nb_dis_txt"></span><span id="c_f_res_details">&nbsp;('+gettext("filter:")+'&nbsp;<span id="c_f_res_nb_com"></span>/<span id="c_f_res_nb_tot_com"></span>&nbsp;<span id="c_f_res_nb_com_txt"></span>&nbsp;<span id="c_f_res_nb_rep"></span>/<span id="c_f_res_nb_tot_rep"></span><span id="c_f_res_nb_rep_txt"></span>)</span></span></td><td><span id="browse_section">, '+gettext("browse by:")+' <select id="browse_by"><option value="scope">'+gettext("location")+'</option><option value="modif_thread">'+gettext("modification")+'</option></select></span></td><td width="40" align="right"><a href="#" id="c_browse_first"><img title="'+k+'" alt="'+k+'" src="'+sv_media_url+'/img/control_fastbackward_blue.png"/></a><a href="#" id="c_browse_prev"><img title="'+g+'" alt="'+g+'" src="'+sv_media_url+'/img/control_playback_blue.png"/></a></td><td width="50" align="center"><span id="c_browse_indx_scope">-</span><span id="c_browse_indx_modif_thread" style="display: none;">-</span>/<span id="c_browse_indx_total"></span></td><td width="40" align="left"><a href="#" id="c_browse_next"><img title="'+h+'" alt="'+h+'" src="'+sv_media_url+'/img/control_play_blue.png"/></a><a href="#" id="c_browse_last"><img title="'+b+'" alt="'+b+'" src="'+sv_media_url+'/img/control_fastforward_blue.png"/></a></td><td width="20" align="left"><a href="#" id="c_browse_all"><img title="'+d+'" alt="'+d+'" src="'+sv_media_url+'/img/view_all.png"/></a></td><td width="20" align="left"><a href="#" id="c_browse_scope_removed"><img title="'+p+'" alt="'+p+'" src="'+sv_media_url+'/img/view_scope_removed2.png"/></a></td><td width="20" align="left"><a href="#" id="c_advanced_btn"><img title="'+m+'" alt="'+m+'" src="'+sv_media_url+'/img/application_split.png"/></a></td><td width="20" align="left"><a href="#" id="c_thread_unthread"><img id="c_thread_unthread_img"/></a></td><td width="20" align="left"><a href="#" id="c_toc_btn"><img title="'+r+'" alt="'+r+'" src="'+sv_media_url+'/img/document_index.png"/></a></td></tr></tbody></table>';l.prepend($(n));$("#add_comment_btn").click(function(){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){frames.text_view_comments.gSync.showCommentForm(null);});}});var f=function(){$("#browse_by option").each(function(){$("#c_browse_indx_"+this.value).hide();});$("#c_browse_indx_"+$("#browse_by").val()).show();};var e=$.cookie("browse_by");e=(e==null)?"location":e;_setCookie("browse_by",$("#browse_by").val());$("#browse_by option[value="+e+"]").attr("selected",true);f();$("#browse_by").change(function(){_setCookie("browse_by",$("#browse_by").val());f();});var o=function(s){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){frames.text_view_comments.browse($("#browse_by").val(),s);});}};$("#c_browse_prev").click(function(){o("prev");});$("#c_browse_next").click(function(){o("next");});$("#c_browse_first").click(function(){o("first");});$("#c_browse_last").click(function(){o("last");});$("#c_browse_all").click(function(){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){frames.text_view_comments.gSync.showAllComments();});}});$("#c_browse_scope_removed").click(function(){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){frames.text_view_comments.gSync.showScopeRemovedComments();});}});$("#c_print_btn").click(function(){if(frames.text_view_comments.readyForAction()){var s=frames.text_view_comments.gDb.getFilteredCommentIdsAsString();frames.text_view_comments.CY.log($("#filteredIds").val(s));openPrintDialog();}});$("#c_export_btn").click(function(){if(frames.text_view_comments.readyForAction()){var s=frames.text_view_comments.gDb.getFilteredCommentIdsAsString();frames.text_view_comments.CY.log($("#filteredIds").val(s));openExportDialog();}});if(frames.text_view_comments.gLayout.isInComentSite()){$("#c_fullscreen_btn").click(function(){toggleFrameSize();});}$("#c_advanced_btn").click(function(){$(".ui-layout-toggler").click();});setThreadPref=function(){var t=frames.text_view_comments.c_readPreference("comments","threadpad");var u=sv_media_url+"/img/unthread_box.png";var s=gettext("unthread discussions");if(t=="0"){u=sv_media_url+"/img/thread_box.png";s=gettext("thread discussions");}$("#c_thread_unthread_img").attr("src",u).attr("alt",s).attr("title",s);};setThreadPref();$("#c_thread_unthread").click(function(){var t=frames.text_view_comments.c_readPreference("comments","threadpad");var s=(t=="0")?"1":"0";frames.text_view_comments.c_persistPreference("comments","threadpad",s);setThreadPref();frames.text_view_comments.gSync.animateToTop();});$("#c_toc_btn").click(function(){if(frames.text_view_comments.readyForAction()){frames.text_view_comments.checkForOpenedDialog(null,function(){frames.text_view_comments.toggleTocFn();});}});};onSliderStop=function(){var a=$("#c_slider").slider("value");if(a>(frames.text_view_comments.gConf.sliderFixedMin*100)){$("#c_slider").slider("value",[90]);}if(a<(frames.text_view_comments.gConf.sliderFixedMax*100)){$("#c_slider").slider("value",[10]);}frames.text_view_comments.c_setCommentsColWidth(a);frames.text_view_comments.c_persistPreference("layout","comments_col_width",a);};fillTextPreferencesTab=function(){var d=$("#c_text_preferences");d.append($("<table><tr><td>"+gettext("Text style")+'</td><td>&nbsp;</td><td><select id="c_textpref_style"></select></td></tr></table>'));var e=frames.text_view_comments.gTextStyles;for(var c in e){$("#c_textpref_style").append($("<option value='"+c+"'>"+e[c]+"</option>"));}var a=function(){var g=frames.text_view_comments.gTextStyles;var h=$("#c_textpref_style").val();for(var f in g){if(f==h){frames.text_view_comments.CY.get("#textcontainer").addClass(g[f]);}else{frames.text_view_comments.CY.get("#textcontainer").removeClass(g[f]);}}};var b=function(){var f=frames.text_view_comments.c_readPreference("text","style");$("#c_textpref_style").val(f);};$("#c_textpref_style").change(function(f){frames.text_view_comments.c_persistPreference("text","style",$("#c_textpref_style").val());a();});b();a();};fillPreferencesTab=function(){var b=$("#c_preferences");var a='<div style="float:right"><input id="c_pref_save_btn" type="button" value="'+gettext("Save")+'"></input><input id="c_pref_reset_btn" type="button" value="'+gettext("Reset")+'"></input></div><table><tr><td>'+gettext("Animation duration")+'</td><td>&nbsp;</td><td><input id="c_pref_animduration" type="text" style="width:3em" value="" /></td></tr><tr><td><span class="frame_helptext">'+gettext("(0.001 to 1 second)")+"</span></td><td></td><td></td></tr></table>";b.append($(a));setPreferencesFieldsValue=function(){var c=frames.text_view_comments.c_readPreference("general","animduration");$("#c_pref_animduration").val(c);};setPreferencesFieldsValue();$("#c_pref_animduration").blur(function(){var c=parseFloat($(this).val());if(isNaN(c)||(c<=0)||(c>1)){c=frames.text_view_comments.c_readDefaultPreference("general","animduration");}$(this).val(c);});$("#c_pref_reset_btn").click(function(){frames.text_view_comments.c_resetPreferences(["general"]);setPreferencesFieldsValue();enqueueMsg(gettext("preferences reset (will apply on next load)"));});$("#c_pref_save_btn").click(function(){frames.text_view_comments.c_persistPreference("general","animduration",$("#c_pref_animduration").val());enqueueMsg(gettext("preferences saved (will apply on next load)"));});};initFrame=function(){_initYesNoDialog();_initPrintDialog();$(window).resize(function(){onSliderStop();});$("#c_slider").slider({animate:true,range:"min",value:frames.text_view_comments.c_readPreference("layout","comments_col_width"),min:1,iframeFix:true,max:100,slide:function(a,b){var c=b.value;frames.text_view_comments.c_setCommentsColWidth(c);},stop:function(a,b){onSliderStop();}});_initTabs();f_interfaceFreeze();};_initTabs=function(){$(".inner-north").tabs();var a=$.cookie("selectedTab");a=(a===null)?innerNorthPaneDefaults.selectedTab:parseInt(a);$(".inner-north").tabs("select",a);$(".inner-north").bind("tabsselect",function(b,c){_setCookie("selectedTab",c.index);});};_initYesNoDialog=function(){$("#dialog_h").dialog({autoOpen:false,modal:true});};_setCookie=function(a,c){var b=new Date();b.setFullYear(2100,0,1);$.cookie(a,c,{expires:b,path:"/"});};f_getFrameFilterData=function(){var c=$("#filter_name").val();var b=$("#filter_date").val();var e=$("#filter_text").val();var a=$("#filter_tag").val();var d=$("#filter_state").val();return{name:c,date:b,text:e,tag:a,state:d};};f_setFilterValue=function(a){for(key in a){if(key.indexOf("filter_")==0){$("#"+key).val(a[key]);}}};f_isFrameFilterFieldsInit=function(){var b=f_getFrameFilterData();var a=true;for(key in b){a=a&&(b[key]=="");}return a;};initFilterFields=function(){$(".c_filter_field").val("");};resetFilter=function(){initFilterFields();frames.text_view_comments.reinit();enqueueMsg(gettext("filter reset"));};applyFilter=function(a){var b=a.val();if(gResetOtherFieldsOnFilterFieldChange){initFilterFields();a.val(b);}frames.text_view_comments.reinit();enqueueMsg(gettext("filter applied"));};f_updateFilterCountResult=function(d,a,b,e,c){$("#c_f_res_nb_dis").html(d);$("#c_f_res_nb_dis_txt").html(ngettext("discussion","discussions",d));$("#c_f_res_nb_com").html(a);$("#c_f_res_nb_tot_com").html(e);$("#c_f_res_nb_com_txt").html(ngettext("comment","comments",a));$("#c_f_res_nb_rep").html(b);$("#c_f_res_nb_tot_rep").html(c);$("#c_f_res_nb_rep_txt").html("&nbsp;"+ngettext("reply","replies",b));$("#c_browse_indx_total").html(d);$("#c_filter_results").show();};f_updateFilterCountDetailed=function(a){if(a){$("#c_f_res_details").show();$("c_browse_all").val("View all (filtered) comments");}else{$("#c_f_res_details").hide();$("#c_browse_all").val("View all comments");}};f_updateFilterData=function(e){var g=$("#filter_name option:selected").attr("name");var k=gettext("all");$("#filter_name option").remove();$("#filter_name").append($("<option name='c_f2_user_all' value=''>"+k+"</option>"));for(var c=0,b=e.names.length;c<b;c++){var l=e.names[c];$("#filter_name").append($("<option name='c_f2_user_"+l.name+"' value='"+l.name+"'>"+l.display+" ("+l.nb_comments+")</option>"));}$("#filter_name option[name="+g+"]").attr("selected",true);var a=$("#filter_date option:selected").attr("name");$("#filter_date option").remove();$("#filter_date").append($("<option name='c_f_date_all' value=''>"+k+"</option>"));for(var c=0,b=e.dates.length;c<b;c++){var l=e.dates[c];var f=ngettext("last 24 hours (%(nb_comments)s)","last %(nb_days)s days (%(nb_comments)s)",l.nb_day);var j=interpolate(f,{nb_days:l.nb_day,nb_comments:l.nb_comments},true);$("#filter_date").append($("<option name='c_f_date_"+l.nb_day+"' value='"+l.nb_day_date+"'>"+j+"</option>"));}$("#filter_date option[name="+a+"]").attr("selected",true);var h=$("#filter_tag option:selected").attr("name");$("#filter_tag option").remove();$("#filter_tag").append($("<option name='c_f2_tag_all' value=''>"+k+"</option>"));for(var c=0,b=e.tags.length;c<b;c++){var l=e.tags[c];$("#filter_tag").append($("<option name='c_f2_tag_"+l.name+"' value='"+l.name+"'>"+l.name+" ("+l.nb_comments+")</option>"));}$("#filter_tag option[name="+h+"]").attr("selected",true);var d=$("#filter_state option:selected").attr("state");$("#filter_state option").remove();$("#filter_state").append($("<option name='c_f2_state_all' value=''>"+k+"</option>"));for(var c=0,b=e.states.length;c<b;c++){var l=e.states[c];$("#filter_state").append($("<option name='c_f2_state_"+l.state+"' value='"+l.state+"'>"+gettext(l.state)+" ("+l.nb_comments+")</option>"));}$("#filter_state option[name="+d+"]").attr("selected",true);};f_interfaceUnfreeze=function(){for(var b=0,a=$(".c_tab").length;b<a;b++){$(".inner-north").tabs("enable",b);}$(".inner-north select").add(".inner-north input").add("#outer-north select").add("#outer-north input").each(function(){$(this).attr("disabled",false);});$("#c_slider").slider("enable");};f_interfaceFreeze=function(){for(var b=0,a=$(".c_tab").length;b<a;b++){$(".inner-north").tabs("disable",b);}$(".inner-north select").add(".inner-north input").add("#outer-north select").add("#outer-north input").each(function(){$(this).attr("disabled",true);});$("#c_slider").slider("disable");};f_enqueueMsg=function(a){enqueueMsg(a);};f_enqueueErrorMsg=function(a){enqueueErrorMsg(a);};f_removeLoadingMsg=function(){removeLoadingMsg();};f_initFrame=function(){initFrame();};f_layoutFrames=function(){layoutFrames();};f_fillTextPreferencesTab=function(){fillTextPreferencesTab();};f_fillPreferencesTab=function(){fillPreferencesTab();};f_fillBrowseSection=function(){fillBrowseSection();};f_fillFilterTab=function(){fillFilterTab();};f_fillTopToolbar=function(){fillTopToolbar();};f_yesNoDialog=function(d,g,e,b,c,h,a,j){$("#dialog_h").html(d);$("#dialog_h").dialog("option","title",g);function k(){if(e!=null){e.call(b,c);}}function i(){if(h!=null){h.call(a,j);}}var f={};f[gettext("No")]=function(){$(this).dialog("close");k();};f[gettext("Yes")]=function(){$(this).dialog("close");i();};$("#dialog_h").dialog("option","buttons",f);$("#dialog_h").dialog("open");};f_setCookie=function(a,b){_setCookie(a,b);};gInFullScreen=false;_setFrameSize=function(){if(parent!=window){if(gInFullScreen){var b=parent.$("#header").height();var f=parent.$(parent).height();var c=(f-b-2)+"px";var d=parent.$(parent).width();var a=(d-2)+"px";parent.$("#text_view_frame").css({position:"absolute",left:"0px",top:b,width:a,height:c});}else{var e=Math.ceil(parent.$("#autoexpand_text_view_frame_container").position()["top"]);var f=parent.$(parent).height();var c=(f-e-2)+"px";var d=parent.$(parent).width();var a=(d-2)+"px";parent.$("#text_view_frame").css({position:"relative",width:"99.9%",height:c,top:"0px"});}}};_toFullScreenSize=function(){gInFullScreen=true;_setFrameSize();$("#c_fullscreen_btn").attr("src",sv_media_url+"/img/arrow_in.png");f_setCookie("fullscreen","1");};_toNormalSize=function(){gInFullScreen=false;_setFrameSize();$("#c_fullscreen_btn").attr("src",sv_media_url+"img/arrow_out.png");f_setCookie("fullscreen","0");};_toInitialSize=function(){var a=($.cookie("fullscreen")=="1");if(a){_toFullScreenSize();}else{_toNormalSize();}};toInitialSize=function(){_toInitialSize();parent.$(parent).resize(function(){_setFrameSize();});};toggleFrameSize=function(){if(gInFullScreen){_toNormalSize();}else{_toFullScreenSize();}};
\ No newline at end of file
--- a/src/cm/media/js/client/f_printDialog.js	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/media/js/client/f_printDialog.js	Mon Aug 06 13:42:15 2012 +0200
@@ -11,13 +11,15 @@
             {'actions':['export'], 'extension':'odt', 'label': gettext('download open document file (.odt)')},
             {'actions':['export'], 'extension':'doc', 'label': gettext('download microsoft word file (.doc)')},
             {'actions':['export'], 'extension':'docx', 'label': gettext('download microsoft word 2007 file (.docx)')},
-            {'actions':['export'], 'extension':'xml', 'label': gettext('download XML file for re-import')}];
+            ];
 
 var pandoc_version_ary = sv_pandoc_version.split('.');
 if (parseInt(pandoc_version_ary[0]) > 1 || (parseInt(pandoc_version_ary[0]) == 1 && parseInt(pandoc_version_ary[1]) > 8)) {
   gFormats.push({'actions':['export'], 'extension':'epub', 'label': gettext('download ebook (.epub)')});
 }
 
+gFormats.push({'actions':['export'], 'extension':'xml', 'label': gettext('download XML file for re-importing text and comments')});
+
 gActions = {'print':{'dialogTitle':gettext('Print text'), 'chooseFormatLabel':gettext('How do you want to print?'), 'defaultMethod':'pdf', 'defaultWithColors':"no", 'defaultWhichComments':'all'}, 
       'export':{'dialogTitle':gettext('Export text'), 'chooseFormatLabel':gettext('Choose file format'), 'defaultMethod':'pdf', 'defaultWithColors':"no", 'defaultWhichComments':'all'}} ; 
 gCurrentAction = null ; 
@@ -74,12 +76,15 @@
 _manageMarkersColorsChoice = function() {
   var method = $("#p_method").val();
   var which = $("#p_comments").val();
+  var all = frames['text_view_comments'].gDb.getCommentsNb(true);
+  var currents = frames['text_view_comments'].gDb.getCommentsNb(false);
+  var nb_comments = (which == 'all') ? all : currents;
   
   var disableMarkersColorsChoice ;
   if (gCurrentAction == 'print') 
-    disableMarkersColorsChoice = ((which == 'none') || (method == 'markdown') || (method == 'html')) ;
+    disableMarkersColorsChoice = ((nb_comments == 0) || (which == 'none'));
   if (gCurrentAction == 'export') 
-    disableMarkersColorsChoice = ((which == 'none') || (method == 'markdown')) ;
+    disableMarkersColorsChoice = ((nb_comments == 0) || (which == 'none') || (method == 'markdown') || (method == 'latex') || (method == 'epub') || (method == 'odt') || (method == 'doc')) ;
   
   if (disableMarkersColorsChoice)
     $("#p_color").val('no');
@@ -114,7 +119,7 @@
   $("#dialog_print_export").dialog({
     bgiframe: true,
     autoOpen: false,
-    width: 450,
+    width: 500,
 /*    height: 300,
     autoResize: false,*/    
     modal: true,
--- a/src/cm/templates/site/macros/text_comments.html	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/templates/site/macros/text_comments.html	Mon Aug 06 13:42:15 2012 +0200
@@ -1,30 +1,24 @@
 {% load com %}
 {% load i18n %}
-<div class="pagebreakhere">
-{% for comment in comments %} <!--  TODO check DATABASE QUERY IMPACT (select for each user ? -->
-<table>
-<tr>
-	<td style="vertical-align: top;">
-
+<div class="pagebreakhere" style="font-size: 10pt;">
+<hr />
+{% for comment in comments %}
+	<div>
     {% if comment.is_reply %}
     	({{ comment.num }}) 
     {% else %}
         <b>[{{ comment.num }}]</b> 
     {% endif %}
-	</td>
-	<td>
-	{{ comment.title }}
-	<br />
-	{% blocktrans with comment.get_name as name and comment.created|local_date:tz as date %}by {{ name }} on {{ date }}{% endblocktrans %}
-	<br />
-	{{ comment.content }}
-  {% if comment.tags %}
-  <br />&nbsp;<br />
-    tags: {{ comment.tags }}
-  {% endif %}
-	</td>
-</tr>
-</table>
-<hr>
+	</div>
+	<div style="border-bottom: thin solid black; margin-bottom: 5pt; padding-bootom: 2pt; padding-left: 10pt;">
+    <p>
+      {{ comment.title }}<br />
+  	  {% blocktrans with comment.get_name as name and comment.created|local_date:tz as date %}by {{ name }} on {{ date }}{% endblocktrans %}<br />
+  	  {{ comment.content }}
+    </p>
+    {% if comment.tags %}
+      <p style="font-size: 8pt;">tags: {{ comment.tags }}</p>
+    {% endif %}
+	</div>
 {% endfor %}
 </div>
--- a/src/cm/templates/site/text_view_comments.html	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/templates/site/text_view_comments.html	Mon Aug 06 13:42:15 2012 +0200
@@ -110,7 +110,7 @@
 <script type="text/javascript" src="{{ CM_MEDIA_PREFIX }}js/site/c_text_view_comments.js"></script> 
 <script type="text/javascript" src="{{ CM_MEDIA_PREFIX }}js/lib/asciimathtml/ASCIIMathML.js"></script>
 {% else %}
-<script type="text/javascript" src="{{ CM_MEDIA_PREFIX }}js/client/c_client-min.js?1337867890"></script> 
+<script type="text/javascript" src="{{ CM_MEDIA_PREFIX }}js/client/c_client-min.js?1344241734"></script> 
 <script type="text/javascript" src="{{ CM_MEDIA_PREFIX }}js/lib/asciimathtml/ASCIIMathML.min.js"></script>
 {% endif %}
 
--- a/src/cm/templates/site/text_view_frame.html	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/templates/site/text_view_frame.html	Mon Aug 06 13:42:15 2012 +0200
@@ -37,7 +37,7 @@
     <script type="text/javascript" src="{{ CM_MEDIA_PREFIX }}js/client/f_printDialog.js"></script>
     <script type="text/javascript" src="{{ CM_MEDIA_PREFIX }}js/site/f_text_view_frame.js"></script>
 {% else %}
-    <script type="text/javascript" src="{{ CM_MEDIA_PREFIX }}js/client/f_client-min.js?1337867890"></script> 
+    <script type="text/javascript" src="{{ CM_MEDIA_PREFIX }}js/client/f_client-min.js?1344241734"></script> 
 {% endif %}
     <style type="text/css">
         /*
--- a/src/cm/utils/comment_positioning.py	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/utils/comment_positioning.py	Mon Aug 06 13:42:15 2012 +0200
@@ -82,40 +82,6 @@
     return [c for c in commentList if c.valid], \
            [c for c in commentList if not c.valid]
 
-## no colors, just markers           
-#def insert_comment_markers_and_nocolors(htmlcontent, comments):
-#    
-#    parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
-#    html = parser.parse(htmlcontent.encode("utf8"), encoding="utf8")
-#    
-#    cpt = 1
-#    
-#    # key : node id, value : indexes of added markers
-#    # to remember index of inserted markers
-#    rememberMarkerOffsets = {}
-#    
-#    #O(n²) ?
-#    for comment in comments :
-#        for i in [0,1] :
-#            wrapper = comment.start_wrapper if i == 0 else comment.end_wrapper
-#            offset =  comment.start_offset if i == 0 else comment.end_offset
-#            marker = "[%d>"%cpt if i == 0 else "<%d]"%cpt
-#            marker_length = len(marker)
-#            content = html.find(id = "sv-%d"%wrapper).contents[0]
-##            import pdb;pdb.set_trace()
-#            smallerIndexes = rememberMarkerOffsets.get(wrapper, [])
-#            original_offset =  offset
-#            offset += marker_length * len([index for index in smallerIndexes if index <= offset])
-#        
-#            smallerIndexes.append(original_offset)
-#            rememberMarkerOffsets[wrapper] = smallerIndexes
-#        
-#            content.replaceWith(content[:offset]+marker+content[offset:])
-#                
-#        cpt = cpt + 1
-#    
-#    return unicode(html)
-
 def add_marker(text, color, start_ids, end_ids, with_markers, with_colors):
 # TODO
 # THESE 3 LINES ARE REALLY JUST FOR TESTING THIS IS COPIED FROM C-TEXT.CSS AND SHOULD BE DONE DIFFERENTLY
@@ -142,11 +108,8 @@
 # comments are comments and replies :
 def insert_comment_markers(htmlcontent, comments, with_markers, with_colors) :
 
-#    parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
-#    html = parser.parse(htmlcontent.encode("utf8"), encoding="utf8")
     html = get_the_soup(htmlcontent) ;
     
-#    import pdb;pdb.set_trace()
     if comments :
         max_wrapper = max([comment.end_wrapper for comment in comments])
         min_wrapper = min([comment.start_wrapper for comment in comments])
@@ -158,12 +121,10 @@
         if comment.is_reply() :
             continue ;
         
-        #import pdb;pdb.set_trace()
         # start 
         wrapper_data = datas.get(comment.start_wrapper, {'start_color':0, 'offsets':{}})
         offset = wrapper_data.get('offsets').get(comment.start_offset, [[],[]])
         offset[0].append(cpt)
-        #offset[0].append(comment.id)
         wrapper_data['offsets'][comment.start_offset] = offset
         datas[comment.start_wrapper] = wrapper_data
             
@@ -171,7 +132,6 @@
         wrapper_data = datas.get(comment.end_wrapper, {'start_color':0, 'offsets':{}})
         offset = wrapper_data.get('offsets').get(comment.end_offset, [[],[]])
         offset[1].append(cpt)
-        #offset[1].append(comment.id)
         wrapper_data['offsets'][comment.end_offset] = offset
         datas[comment.end_wrapper] = wrapper_data
             
@@ -201,7 +161,6 @@
             start_ids = []
             end_ids = []
             
-#            for offset, nbs in offsets :
             for offset, ids in offsets :
                 
                 end_ids = ids[1]
@@ -222,30 +181,3 @@
         content.replaceWith(spans)
 
     return unicode(html)
-
-#def output_comment_line(comment) :
-#    ret = "<tr>"
-#    for i in range(comment.depth()) : 
-#        ret = ret + """<td width="1 em"></td>"""
-#    
-#    ret = ret + """<td width="1 em">[%d]</td><td>"""
-#    
-#
-#def output_comments(comments) :
-#
-#    max_depth = max([comment.depth() for comment in comments])
-#    top_comments = [comment for comment in comments if comment.reply_to_id == None]
-#    top_comment_cpt = 0
-#    html_comments = ""
-#    
-#    for top_comment in top_comments :
-#        html_comments = html_comments + """<table>"""
-#         
-#        html_comments = html_comments + "<table><tr>"
-#         
-#        html_comments = html_comments + "</table>" 
-#
-#        top_comment_cpt = top_comment_cpt + 1
-#    
-#    ret = "%s%s%s"%("""<div class="pagebreakhere">""", html_comments, """</div>""")
-#    return ret
--- a/src/cm/views/export.py	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/views/export.py	Mon Aug 06 13:42:15 2012 +0200
@@ -12,6 +12,7 @@
 import mimetypes
 import simplejson
 from cm.cm_settings import USE_ABI
+
 EXPORT2_INFOS = {
 # key -> { mimetype, extension}
 's5' :   {},
@@ -26,6 +27,20 @@
 'raw' : {'mimetype': 'text/plain', 'extension':'txt'},
 'xml' : {'mimetype': 'text/xml', 'extension':'xml'},
 }
+
+HTML_HEADER = u"""
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<STYLE TYPE='text/css'>
+div.pagebreakhere {
+    page-break-before: always ;
+}
+</STYLE>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/></head>
+<body>%s</body>
+</html>
+"""
+ 
 def content_export2(request, content, title, content_format, format, use_pandoc, download_response):
     # TODO : formats must be imported from converters
 #    import pdb;pdb.set_trace()
@@ -38,12 +53,11 @@
     else:
         if use_pandoc :
           # markdown2pdf is buggy => convert to HTML and use abiword to export in PDF
-          if format == 'pdf' and USE_ABI:
+          if format in ('pdf', 'odt', 'docx', 'doc') and USE_ABI:
             html_content = pandoc_convert(content, content_format, 'html', full=True)
             from cm.converters.abi_converters import AbiFileConverter
             converter = AbiFileConverter()
-            full_content = converter.add_html_header(html_content)
-            fix_content = do_tidy(full_content)
+            fix_content = converter.add_html_header(html_content)
             export_content = converter.convert_from_html(fix_content, format)
           else:
             export_content = pandoc_convert(content, content_format, format, full=True)
@@ -53,8 +67,7 @@
                 if USE_ABI:
                   from cm.converters.abi_converters import AbiFileConverter
                   converter = AbiFileConverter()
-                  full_content = converter.add_html_header(content)
-                  fix_content = do_tidy(full_content)
+                  fix_content = converter.add_html_header(content)
                 else:
                   from cm.converters.oo_converters import combine_css_body                
                   fix_content = combine_css_body(content, '')
@@ -85,59 +98,7 @@
     else:
         return _response_write(export_content)    
     
-def content_export_new(request, content, title, src_format, format, use_pandoc, download_response):
-    # TODO : formats must be imported from converters
-    if format == 'raw' :
-        export_content = content
-    elif src_format == format and format == 'html':
-        export_content = HTML_HEADER % content
-    else:
-        if use_pandoc :
-            export_content = pandoc_convert(content, src_format, format, full=True)
-        else :
-            fix_content = content
-            if src_format == 'html':
-                from cm.converters.oo_converters import combine_css_body                
-                fix_content = combine_css_body(content, '')
-            from cm.converters.oo_converters import convert_html as oo_convert                
-            export_content = oo_convert(fix_content, format)
-    
-    export_infos = EXPORT_INFOS[format]
-    format_download = export_infos[0] 
-     
-    if download_response:
-        return _response_download(export_content, export_infos[1], export_infos[2]) ;
-    else:
-        return _response_write(export_content)    
-    
 
-# read conversion chain 
-# execute chain 
-# ready to send response
-#    # TODO : formats must be imported from converters
-#    if format == 'raw' :
-#        export_content = content
-#    elif src_format == format and format == 'html':
-#        export_content = HTML_HEADER % content
-#    else:
-#        if use_pandoc :
-#            export_content = pandoc_convert(content, src_format, format, full=True)
-#        else :
-#            fix_content = content
-#            if src_format == 'html':
-#                fix_content = combine_css_body(content, '')
-#            export_content = oo_convert(fix_content, format)
-#    
-## send response
-#    export_infos = EXPORT_INFOS[format]
-#    mimetype = export_infos['mimetype']
-#    extension = export_infos['extension']
-#    
-#    if download:
-#        return _response_download(export_content, mimetype, extension)
-#    else :
-#        return _response_write(export_content)
-#
 def _response_download(content, title, mimetype, extension):
     response = HttpResponse(mimetype=mimetype)
     file_title = title + '.' + extension
@@ -154,88 +115,9 @@
     response.write(content)
     return response
 
-
-EXPORT_INFOS = {
-# key -> [ download?, mimetype, extension]
-'s5' :   [False , ],
-'pdf' :  [True , 'application/pdf' , 'pdf'],
-'markdown' :  [True , 'text/plain' , 'mkd'],
-'odt' :  [True , 'application/vnd.oasis.opendocument.text', 'odt'],
-'doc' :  [True , 'application/msword', 'odt'],
-'docx' :  [True , 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'docx'],
-'latex' :[True , 'text/x-tex', 'tex'],
-'html' :[True , 'text/html', 'html'],
-'epub' :[True , 'application/epub+zip', 'epub'],
-# raw export
-'raw' : [True, 'text/plain', 'txt']
-}
-HTML_HEADER = u"""
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html><head>
-<STYLE TYPE='text/css'>
-div.pagebreakhere {
-    page-break-before: always ;
-}
-</STYLE>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/></head>
-<body>%s</body>
-</html>
-"""
-EXPORT_FORMATS = EXPORT_INFOS.keys()
- 
-def content_export(request, content, title, src_format, format, use_pandoc):
-    # TODO : formats must be imported from converters
-    if format == 'raw' :
-        export_content = content
-    elif src_format == format and format == 'html':
-        export_content = HTML_HEADER % content
-    else:
-        if use_pandoc :
-            export_content = pandoc_convert(content, src_format, format, full=True)
-        else :
-            fix_content = content
-            if src_format == 'html':
-                from cm.converters.oo_converters import combine_css_body                
-                fix_content = combine_css_body(content, '')
-            from cm.converters.oo_converters import convert_html as oo_convert                
-            export_content = oo_convert(fix_content, format)
-    
-    export_infos = EXPORT_INFOS[format]
-    format_download = export_infos[0] 
-     
-    if format_download:
-        format_mimetype = export_infos[1]
-        format_extension = export_infos[2]
-        
-        response = HttpResponse(mimetype=format_mimetype)
-        file_title = title + '.' + format_extension
-        from email.header import Header
-        encoded_name = str(Header(file_title.encode('utf8'), charset='utf8', maxlinelen=500))
-        response['Content-Disposition'] = u'attachment; filename=%s' % encoded_name
-        response.write(export_content)
-        return response        
-    else:
-        response = HttpResponse()
-        response.write(export_content)
-        return response    
-    
-
-def text_export(request, key, format):
-    # TODO : formats must be imported from converters
-    format = format.lower()
-    if format not in EXPORT_FORMATS:
-        raise Exception("Unsupported format %s (supported formats %s)" % (format, ' '.join(EXPORT_FORMATS)))
-    text = Text.objects.get(key=key)
-    text_version = text.get_latest_version()
-    
-    return content_export(request, text_version.content, text_version.title, text_version.format, format)
-
-def text_feed(request, key):
-    return ""
-
 def xml_export(request, text_version, whichcomments):
   # Text version infos
-  template_dict = { 'title': text_version.title, 'date': text_version.modified, 'format': text_version.format, 'content': text_version.get_content(), 'tags': text_version.tags, }
+  template_dict = { 'title': text_version.title, 'date': text_version.modified, 'format': text_version.format, 'content': text_version.content, 'tags': text_version.tags, }
   
   # Comments
   comments = [] # whichcomments=="none"
--- a/src/cm/views/texts.py	Tue Jul 31 16:37:23 2012 +0200
+++ b/src/cm/views/texts.py	Mon Aug 06 13:42:15 2012 +0200
@@ -16,7 +16,7 @@
     insert_comment_markers
 from cm.utils.spannifier import spannify
 from cm.views import get_keys_from_dict, get_textversion_by_keys_or_404, get_text_by_keys_or_404, redirect
-from cm.views.export import content_export2, content_export, xml_export
+from cm.views.export import content_export2, xml_export
 from cm.views.user import AnonUserRoleForm, cm_login
 from difflib import unified_diff
 from django import forms
@@ -324,9 +324,6 @@
     comments = [] # whichcomments=="none"
     
     if whichcomments == "filtered" or whichcomments == "all":
-        #comments = text_version.comment_set.filter(reply_to__isnull=True)# whichcomments=="all"
-        #comments = get_viewable_comments(request, text_version.comment_set.filter(reply_to__isnull=True), text, order_by=('start_wrapper','start_offset','end_wrapper','end_offset'))# whichcomments=="all"
-        
         _comments = text_version.comment_set.all()
         if whichcomments == "filtered" :
             filteredIds = []
@@ -338,36 +335,34 @@
         comments = get_viewable_comments(request, _comments, text, order_by=('start_wrapper','start_offset','end_wrapper','end_offset'))# whichcomments=="all"
         
     # decide to use pandoc or not
-    if with_color :
-        use_pandoc = False  # pandoc wouldn't preserve comments scope background colors
-    else :
-        if format in ('markdown', 'latex', 'epub') : 
-            use_pandoc = True
-        elif format in ('pdf', 'odt') : 
-            use_pandoc = (original_format == "markdown")
-        elif format in ('docx', 'doc', 'html', 'xml') :
-            use_pandoc = False
+    if format in ('markdown', 'latex', 'epub') : 
+      use_pandoc = True
+    else:
+      use_pandoc = (original_format == 'markdown' or original_format == 'rst')
 
     # correct attach path => real path
-    if format in ('pdf','odt') :        
+    if format in ('pdf', 'odt', 'doc', 'docx') :        
         original_content = from_html_links_to_abs_links(original_content)
             
     if len(comments) == 0 : #want to bypass html conversion in this case
-        return content_export2(request, original_content, text_version.title, original_format, format, use_pandoc, download_response)
+      # Prepends title
+      if original_format == 'html':
+        original_content = "<h1>%s</h1>%s" %(text_version.title, original_content)
+      elif original_format == 'markdown':
+        original_content = "%s\n======\n%s" %(text_version.title, original_content)
+      elif original_format == 'rst':
+        underline = '=' * len(text_version.title)
+        original_content = "%s\n%s\n%s" %(text_version.title, underline, original_content)
+
+      return content_export2(request, original_content, text_version.title, original_format, format, use_pandoc, download_response)
     else : # case comments to be added  
-        #comments = comments.order_by('start_wrapper','start_offset','end_wrapper','end_offset')
         html = pandoc_convert(original_content, original_format, 'html')
         wrapped_text_version, _ , _ = spannify(html)
         with_markers = True
         marked_content = insert_comment_markers(wrapped_text_version, comments, with_markers, with_color)
-    
+        # Prepends title
+        marked_content = "<h1>%s</h1>%s" %(text_version.title, marked_content)
         viewable_comments = comments_thread(request, text_version, text) 
-    #        viewable_commentsnoreply = get_viewable_comments(request, commentsnoreply, text, order_by = ('start_wrapper','start_offset','end_wrapper','end_offset'))
-    #        viewable_comments = []
-    #        for cc in viewable_commentsnoreply :
-    #            viewable_comments += list_viewable_comments(request, [cc], text)
-            
-        # numerotation{  id --> numbered as a child}
         extended_comments = {}
         nb_children = {}
         for cc in viewable_comments :
@@ -384,85 +379,13 @@
             if cc.is_reply() :
                 cc.num = "%s.%s"%(extended_comments[cc.reply_to_id].num, cc.num)
         
-    #        viewable_comments += list_viewable_comments(request, viewable_commentsnoreply, text)
         html_comments=render_to_string('site/macros/text_comments.html',{'comments':viewable_comments }, context_instance=RequestContext(request))
         
         content = "%s%s"%(marked_content, html_comments)
         content_format = "html" 
-        # impossible to satisfy because of color then no colors instead:
-        if with_color and format in ('markdown', 'tex') : #TODO : add S5
-            with_color = False  
         
         return content_export2(request, content, text_version.title, content_format, format, use_pandoc, download_response)
 
-def text_print(request, key, adminkey=None):
-    text, admin = get_text_and_admin(key, adminkey)
-    
-    text_version = text.get_latest_version()
-
-#    chosen default url behaviour is export all comments + bckcolor + pdf  
-    comments = Comment.objects.filter(text_version=text_version, reply_to__isnull=True)
-
-    with_markers = True
-    with_colors = True 
-    download_requested = True   
-    action = 'export' # client origine dialog
-    requested_format = 'pdf' # requested output format
-
-    if request.method == 'POST':
-        # colors or not ?
-        with_colors = (u'yes' == request.POST.get('p_color', u'no'))
-
-        # restrict comments to ones that should be exported / printed          
-        p_comments = request.POST.get('p_comments')
-        if p_comments == "filtered" or p_comments == "none" : 
-            filteredIds = [] # "none" case  
-            if p_comments == "filtered" : 
-                ll = request.POST.get('filteredIds').split(",")
-                filteredIds = [ int(l) for l in ll if l]
-  
-            comments = comments.filter(id__in=filteredIds)
-
-        # print or export ?
-        action = request.POST.get('print_export_action')
-        requested_format = request.POST.get('p_method')
-
-    comments = comments.order_by('start_wrapper','start_offset','end_wrapper','end_offset')
-
-    download_requested = (action == 'export') or (action == 'print' and requested_format != 'html')   
-
-    ori_format = text_version.format # BD : html or markdown for  now ...
-    src_format = ori_format # as expected by convert functions ...
-    src = text_version.content
-    
-    if len(comments) > 0 and (with_markers or with_colors) :
-        html = text_version.get_content()
-        wrapped_text_version, _ , _ = spannify(html)
-        marked_text_version = insert_comment_markers(wrapped_text_version, comments, with_markers, with_colors)
-
-        src_format = 'html'
-        src = marked_text_version
-        html_comments=render_to_string('site/macros/text_comments.html',{'comments':comments}, context_instance=RequestContext(request))
-        src += html_comments
-        
-    if download_requested :
-        use_pandoc = (requested_format == 'html' or requested_format == 'markdown')
-        return content_export(request, src, text_version.title, src_format, requested_format, use_pandoc)
-    else : # action == 'print' and requested_format == 'html' (no colors)
-        template_dict = {'text' : text,
-                       'text_version' : text_version,
-                       'title' : text_version.title, # TODO use it ...
-                       'comments': comments,
-                       'content' : marked_text_version,
-                       'client_date_fmt' : settings.CLIENT_DATE_FMT
-                       }
-        if admin:
-            template_dict['adminkey'] = text.adminkey   
-            template_dict['admin'] = True       
-        return render_to_response('site/text_print.html',
-                                  template_dict,
-                                  context_instance=RequestContext(request))
-
 @has_perm_on_text('can_view_text')
 def text_view_frame(request, key, version_key=None, adminkey=None):
     text = get_text_by_keys_or_404(key)