Index: openacs-4/packages/xotcl-core/xotcl-core.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xotcl-core/xotcl-core.info,v diff -u -r1.106.2.33 -r1.106.2.34 --- openacs-4/packages/xotcl-core/xotcl-core.info 16 Sep 2021 08:52:58 -0000 1.106.2.33 +++ openacs-4/packages/xotcl-core/xotcl-core.info 20 Dec 2021 17:42:31 -0000 1.106.2.34 @@ -10,7 +10,7 @@ t xotcl - + Gustaf Neumann XOTcl library functionality (e.g. thread handling, online documentation, Generic Form and List Classes) 2021-09-16 @@ -42,7 +42,7 @@ BSD-Style 2 - + Index: openacs-4/packages/xotcl-core/tcl/30-widget-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xotcl-core/tcl/30-widget-procs.tcl,v diff -u -r1.70.2.27 -r1.70.2.28 --- openacs-4/packages/xotcl-core/tcl/30-widget-procs.tcl 19 Oct 2021 17:35:53 -0000 1.70.2.27 +++ openacs-4/packages/xotcl-core/tcl/30-widget-procs.tcl 20 Dec 2021 17:42:30 -0000 1.70.2.28 @@ -387,10 +387,11 @@ # Define an abstract ::xo::Table # Class create ::xo::Table -superclass OrderedComposite \ - -parameter [expr {[apm_version_names_compare [ad_acs_version] 5.3.0] == 1 - ? {{no_data "#xotcl-core.No_Data#"} {renderer TABLE3} name} - : {{no_data "#xotcl-core.No_Data#"} {renderer TABLE2} name} - }] + -parameter { + {no_data "#xotcl-core.No_Data#"} + {renderer TABLE3} + name + } Table instproc destroy {} { #:log "-- " @@ -461,7 +462,7 @@ :init_renderer } - Table instproc write_csv { + Table instproc format_csv { {-delimiter ","} } { set output "" @@ -489,12 +490,18 @@ } append output [join $line $delimiter] \n } + return $output + } + + Table instproc write_csv { + {-delimiter ","} + } { if {![info exists :name]} { set :name "table" } set fn [xo::backslash_escape \" ${:name}.csv] ns_set put [ns_conn outputheaders] Content-Disposition "attachment;filename=\"$fn\"" - ns_return 200 text/csv $output + ns_return 200 "text/csv; charset=utf-8" [:format_csv -delimiter $delimiter] ad_script_abort }