improve echart exporting

This commit is contained in:
timurgordon
2025-02-20 06:40:19 +03:00
parent 0704c9421d
commit eb80294b0a
7 changed files with 277 additions and 151 deletions

View File

@@ -92,7 +92,7 @@ pub fn playmacro(action Action) !string {
content = sh.wiki(args) or { panic(err) }
}
'graph_title_row' {
content = sh.wiki_title_chart(args)
content = sh.wiki_title_chart(args)!
}
'graph_line_row' {
content = sh.wiki_line_chart(args)!

View File

@@ -260,7 +260,9 @@ pub fn (mut s Sheet) json() string {
// find row, report error if not found
pub fn (s Sheet) row_get(name string) !&Row {
row := s.rows[name] or { return error('could not find row with name: ${name}, available rows: ${s.rows.keys()}') }
row := s.rows[name] or {
return error('could not find row with name: ${name}, available rows: ${s.rows.keys()}')
}
return row
}

View File

@@ -4,7 +4,7 @@ import freeflowuniverse.herolib.core.texttools
import freeflowuniverse.herolib.ui.console
// format a sheet properly in wiki format
pub fn (mut s Sheet) wiki(args_ RowGetArgs) !string {
pub fn (s Sheet) wiki(args_ RowGetArgs) !string {
mut args := args_
_ := match args.period_type {

View File

@@ -3,22 +3,12 @@ module spreadsheet
import freeflowuniverse.herolib.data.markdownparser.elements
import freeflowuniverse.herolib.ui.console
pub fn (mut s Sheet) wiki_title_chart(args RowGetArgs) string {
if args.title.len > 0 {
titletxt := "
title: {
text: '${args.title}',
subtext: '${args.title_sub}',
left: 'center'
},
"
return titletxt
}
return ''
pub fn (s Sheet) wiki_title_chart(args RowGetArgs) !string {
return s.title_chart(args).markdown()
}
pub fn (mut s_ Sheet) wiki_row_overview(args RowGetArgs) !string {
mut s := s_.filter(args)!
pub fn (s_ Sheet) wiki_row_overview(args RowGetArgs) !string {
s := s_.filter(args)!
rows_values := s.rows.values().map([it.name, it.description, it.tags])
mut rows := []elements.Row{}
@@ -43,146 +33,18 @@ pub fn (mut s_ Sheet) wiki_row_overview(args RowGetArgs) !string {
// produce a nice looking bar chart see
// https://echarts.apache.org/examples/en/editor.html?c=line-stack
pub fn (mut s Sheet) wiki_line_chart(args_ RowGetArgs) !string {
mut args := args_
rownames := s.rownames_get(args)!
header := s.header_get_as_string(args.period_type)!
mut series_lines := []string{}
for rowname in rownames {
data := s.data_get_as_string(RowGetArgs{
...args
rowname: rowname
})!
series_lines << '{
name: \'${rowname}\',
type: \'line\',
stack: \'Total\',
data: [${data}]
}'
}
// TODO: need to implement the multiple results which can come back from the args, can be more than 1
// header := s.header_get_as_string(args.period_type)!
// data := s.data_get_as_string(args)!
// console.print_debug('HERE! ${header}')
// console.print_debug('HERE!! ${data}')
template := "
${s.wiki_title_chart(args)}
tooltip: {
trigger: 'axis'
},
legend: {
data: ${rownames}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
toolbox: {
feature: {
saveAsImage: {}
}
},
xAxis: {
type: 'category',
boundaryGap: false,
data: [${header}]
},
yAxis: {
type: 'value'
},
series: [${series_lines.join(',')}]
"
out := remove_empty_line('```echarts\n{${template}\n};\n```\n')
return out
pub fn (s Sheet) wiki_line_chart(args_ RowGetArgs) !string {
return s.line_chart(args_)!.markdown()
}
// produce a nice looking bar chart see
// https://echarts.apache.org/examples/en/index.html#chart-type-bar
pub fn (mut s Sheet) wiki_bar_chart(args_ RowGetArgs) !string {
mut args := args_
args.rowname = s.rowname_get(args)!
header := s.header_get_as_string(args.period_type)!
data := s.data_get_as_string(args)!
bar1 := "
${s.wiki_title_chart(args)}
xAxis: {
type: 'category',
data: [${header}]
},
yAxis: {
type: 'value'
},
series: [
{
data: [${data}],
type: 'bar',
showBackground: true,
backgroundStyle: {
color: 'rgba(180, 180, 180, 0.2)'
}
}
]
"
out := remove_empty_line('```echarts\n{${bar1}\n};\n```\n')
return out
pub fn (s Sheet) wiki_bar_chart(args_ RowGetArgs) !string {
return s.bar_chart(args_)!.markdown()
}
// produce a nice looking bar chart see
// https://echarts.apache.org/examples/en/index.html#chart-type-bar
pub fn (mut s Sheet) wiki_pie_chart(args_ RowGetArgs) !string {
mut args := args_
args.rowname = s.rowname_get(args)!
header := s.header_get_as_list(args.period_type)!
data := s.data_get_as_list(args)!
mut radius := ''
if args.size.len > 0 {
radius = "radius: '${args.size}',"
}
if header.len != data.len {
return error('data and header lengths must match.\n${header}\n${data}')
}
mut data_lines := []string{}
for i, _ in data {
data_lines << '{ value: ${data[i]}, name: ${header[i]}}'
}
data_str := '[${data_lines.join(',')}]'
bar1 := "
${s.wiki_title_chart(args)}
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
left: 'left'
},
series: [
{
name: 'Access From',
type: 'pie',
${radius}
data: ${data_str},
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
"
out := remove_empty_line('```echarts\n{${bar1}\n};\n```\n')
return out
pub fn (s Sheet) wiki_pie_chart(args_ RowGetArgs) !string {
return s.pie_chart(args_)!.markdown()
}