Cleaned export.
--- 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> </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> </td><td><select id="filter_name"></select></td><td> </td><td style="text-align:right;">'+gettext("States")+'</td><td> </td><td><select id="filter_state"></select></td></tr><tr><td style="text-align:right;">'+gettext("Dates")+'</td><td> </td><td><select id="filter_date"></select></td><td> </td><td style="text-align:right;">'+gettext("Tags")+'</td><td> </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> <span id="c_f_res_nb_dis"></span></b> <span id="c_f_res_nb_dis_txt"></span><span id="c_f_res_details"> ('+gettext("filter:")+' <span id="c_f_res_nb_com"></span>/<span id="c_f_res_nb_tot_com"></span> <span id="c_f_res_nb_com_txt"></span> <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> </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> </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(" "+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> </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> </td><td><select id="filter_name"></select></td><td> </td><td style="text-align:right;">'+gettext("States")+'</td><td> </td><td><select id="filter_state"></select></td></tr><tr><td style="text-align:right;">'+gettext("Dates")+'</td><td> </td><td><select id="filter_date"></select></td><td> </td><td style="text-align:right;">'+gettext("Tags")+'</td><td> </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> <span id="c_f_res_nb_dis"></span></b> <span id="c_f_res_nb_dis_txt"></span><span id="c_f_res_details"> ('+gettext("filter:")+' <span id="c_f_res_nb_com"></span>/<span id="c_f_res_nb_tot_com"></span> <span id="c_f_res_nb_com_txt"></span> <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> </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> </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(" "+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 /> <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)