Commit graph

1462 commits

Author SHA1 Message Date
Alexander Wang
4b72b65380
Merge pull request #741 from alixander/bold-tests
update code fonts
2023-01-29 14:24:08 -08:00
Alexander Wang
dc1679b872
changelog 2023-01-29 14:21:01 -08:00
Alexander Wang
8b141d37f0
use bold and italic for code snippets 2023-01-29 14:17:34 -08:00
Alexander Wang
629845fcb0
Merge branch 'terrastruct:master' into master 2023-01-29 14:14:18 -08:00
Alexander Wang
b05ec48843
Merge pull request #710 from kevin-david/fonts
render: fonts: add bold + italic styles for Source Code Pro
2023-01-29 14:13:31 -08:00
Alexander Wang
ea5db1d424
[ci-base] add icons to readme 2023-01-29 12:19:48 -08:00
Alexander Wang
2d129437cf
Merge branch 'terrastruct:master' into master 2023-01-27 10:59:57 -08:00
gavin-ts
9cdce24122
Merge pull request #728 from gavin-ts/seq-diagram-group-with-self-edge
sequence diagram: group overlap with self edge
2023-01-27 10:21:11 -08:00
Gavin Nishizawa
fd72e10dbc
rename lastGroup to prevGroup 2023-01-27 10:09:38 -08:00
Alexander Wang
256ce2d51e
Merge branch 'terrastruct:master' into master 2023-01-27 08:01:06 -08:00
Anmol Sethi
38fcaa1aa3
Merge pull request #733 from nhooyr/fmt-many-44a0
fmt: Accept multiple files to be formatted
2023-01-27 07:38:33 -08:00
Anmol Sethi
0507946672
fmt: Accept multiple files to be formatted
Closes #718
2023-01-27 07:31:12 -08:00
Gavin Nishizawa
c4efe2812f
check message ref is group 2023-01-26 18:39:33 -08:00
Gavin Nishizawa
22231aa8e4
changelog 2023-01-26 18:08:37 -08:00
Gavin Nishizawa
a54a0324c3
update test 2023-01-26 18:02:33 -08:00
Gavin Nishizawa
74b0ed2064
only add message offset after loops in another group 2023-01-26 18:02:32 -08:00
Gavin Nishizawa
576c8df2c8
update message offset for self messages 2023-01-26 18:02:32 -08:00
Gavin Nishizawa
46f3b31742
add sequence_diagram_self_edge_group_overlap regression test 2023-01-26 18:02:32 -08:00
Alexander Wang
12ee7ae278
[ci-base] double-circle -> double-border 2023-01-26 16:42:41 -08:00
Alexander Wang
9b0f942c05
[ci-base] update 2023-01-26 16:35:22 -08:00
Alexander Wang
6f1b674537
Merge branch 'terrastruct:master' into master 2023-01-26 16:30:32 -08:00
Alexander Wang
bea8a47ece
Merge pull request #565 from OneRain233/master
Implement the `double_circle` shape including basic shape and the sketch.
2023-01-26 16:30:17 -08:00
OneRain2333
6aef38a55c Delete .idea 2023-01-26 09:33:53 +08:00
Kevin David
9ba1d85d21
d2graph: check that font family is entirely loaded before using it
I tested this by removing the changes I added in `d2fonts`, which led to:
```
[21:23:54] info: compiling GetUniqueColumnName-fix.d2...
[21:23:54] err: failed to compile: ruler does not have entire font family SourceCodePro loaded, is a style missing?
```

The error was also rendered in the UI.
2023-01-24 21:25:01 -05:00
Kevin David
500e3e179e
SourceCodePro bold/italic: use .woff for encoded fonts instead of .ttf
Sourced from: https://github.com/adobe-fonts/source-code-pro/releases/tag/2.038R-ro%2F1.058R-it%2F1.018R-VAR

Translated with the following commands:
```
base64 -i ~/Downloads/WOFF-source-code-pro-2.038R-ro-1.058R-it/TTF/SourceCodePro-It.ttf.woff -o ./d2renderers/d2fonts/encoded/SourceCodePro-Italic.txt
base64 -i ~/Downloads/WOFF-source-code-pro-2.038R-ro-1.058R-it/TTF/SourceCodePro-Bold.ttf.woff -o ./d2renderers/d2fonts/encoded/SourceCodePro-Bold.txt
```

I used the `.ttf.woff` files because that seemed "closer" to the original `.ttf` files included, but I'm not sure if that's correct.
2023-01-24 21:20:16 -05:00
Anmol Sethi
335d925b7c
deps: update [ci-force] 2023-01-24 15:27:12 -08:00
Anmol Sethi
c77b4acc4e
deps: update [ci-force] 2023-01-24 15:25:18 -08:00
Anmol Sethi
afd2768880
docs/flow.d2: Update [ci-base] 2023-01-24 15:14:53 -08:00
Anmol Sethi
46ccb5de87
ci: Update [ci-force] 2023-01-24 15:07:42 -08:00
Anmol Sethi
73c6e57998
deps: update [ci-force] 2023-01-24 15:00:25 -08:00
Alexander Wang
5a1cf0270c
Merge branch 'terrastruct:master' into master 2023-01-24 15:00:17 -08:00
Anmol Sethi
ca84d9e152
install.sh: Regen [ci-force] 2023-01-24 14:59:43 -08:00
Anmol Sethi
1373655894
install.sh: Regen 2023-01-24 14:57:51 -08:00
Alexander Wang
4ed989b114
Merge pull request #715 from alixander/empty-class
fix empty labels with class & sql_tables w/ premeasured texts
2023-01-24 14:57:38 -08:00
Alexander Wang
5059085f3c
fix empty labels with class & sql_tables w/ premeasured texts 2023-01-24 14:52:15 -08:00
Anmol Sethi
4c0ee82ca7
deps: update [ci-force] 2023-01-24 14:33:37 -08:00
Anmol Sethi
4afd33c4ec
Merge pull request #713 from nhooyr/docker-png-b6d1
Dockerfile: Add playwright support for rendering PNGs
2023-01-24 11:50:44 -08:00
Anmol Sethi
ccabee9e7d
next.md: Add Dockerfile release note 2023-01-24 05:33:26 -08:00
OneRain2333
fafc542cfe update tests 2023-01-24 17:52:05 +08:00
OneRain2333
eb4e074151 Update 2023-01-24 17:37:16 +08:00
OneRain2333
1355184291 Fix typo 2023-01-24 17:35:23 +08:00
OneRain2333
194dfac8d2 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	d2renderers/d2sketch/testdata/all_shapes/sketch.exp.svg
#	d2renderers/d2sketch/testdata/basic/sketch.exp.svg
#	d2renderers/d2sketch/testdata/child_to_child/sketch.exp.svg
#	d2renderers/d2sketch/testdata/class/sketch.exp.svg
#	d2renderers/d2sketch/testdata/connection_label/sketch.exp.svg
#	d2renderers/d2sketch/testdata/sql_tables/sketch.exp.svg
#	d2renderers/d2sketch/testdata/twitter/sketch.exp.svg
#	d2renderers/d2svg/appendix/testdata/diagram_wider_than_tooltip/sketch.exp.svg
#	d2renderers/d2svg/appendix/testdata/links/sketch.exp.svg
#	d2renderers/d2svg/appendix/testdata/tooltip_wider_than_diagram/sketch.exp.svg
#	d2renderers/d2svg/d2svg.go
#	e2etests/testdata/regression/dagre_edge_label_spacing/dagre/sketch.exp.svg
#	e2etests/testdata/regression/dagre_edge_label_spacing/elk/sketch.exp.svg
#	e2etests/testdata/regression/dagre_special_ids/dagre/sketch.exp.svg
#	e2etests/testdata/regression/dagre_special_ids/elk/sketch.exp.svg
#	e2etests/testdata/regression/elk_alignment/dagre/sketch.exp.svg
#	e2etests/testdata/regression/elk_alignment/elk/sketch.exp.svg
#	e2etests/testdata/regression/elk_img_empty_label_panic/dagre/sketch.exp.svg
#	e2etests/testdata/regression/elk_img_empty_label_panic/elk/sketch.exp.svg
#	e2etests/testdata/regression/elk_order/dagre/sketch.exp.svg
#	e2etests/testdata/regression/elk_order/elk/sketch.exp.svg
#	e2etests/testdata/regression/empty_sequence/dagre/sketch.exp.svg
#	e2etests/testdata/regression/empty_sequence/elk/sketch.exp.svg
#	e2etests/testdata/regression/only_header_class_table/dagre/sketch.exp.svg
#	e2etests/testdata/regression/only_header_class_table/elk/sketch.exp.svg
#	e2etests/testdata/regression/query_param_escape/dagre/sketch.exp.svg
#	e2etests/testdata/regression/query_param_escape/elk/sketch.exp.svg
#	e2etests/testdata/regression/sequence_diagram_name_crash/dagre/sketch.exp.svg
#	e2etests/testdata/regression/sequence_diagram_name_crash/elk/sketch.exp.svg
#	e2etests/testdata/regression/sequence_diagram_no_message/dagre/sketch.exp.svg
#	e2etests/testdata/regression/sequence_diagram_no_message/elk/sketch.exp.svg
#	e2etests/testdata/regression/sequence_diagram_span_cover/dagre/sketch.exp.svg
#	e2etests/testdata/regression/sequence_diagram_span_cover/elk/sketch.exp.svg
#	e2etests/testdata/regression/sql_table_overflow/dagre/sketch.exp.svg
#	e2etests/testdata/regression/sql_table_overflow/elk/sketch.exp.svg
#	e2etests/testdata/regression/unnamed_class_table_code/dagre/sketch.exp.svg
#	e2etests/testdata/regression/unnamed_class_table_code/elk/sketch.exp.svg
#	e2etests/testdata/sanity/1_to_2/dagre/sketch.exp.svg
#	e2etests/testdata/sanity/1_to_2/elk/sketch.exp.svg
#	e2etests/testdata/sanity/basic/dagre/sketch.exp.svg
#	e2etests/testdata/sanity/basic/elk/sketch.exp.svg
#	e2etests/testdata/sanity/child_to_child/dagre/sketch.exp.svg
#	e2etests/testdata/sanity/child_to_child/elk/sketch.exp.svg
#	e2etests/testdata/sanity/connection_label/dagre/sketch.exp.svg
#	e2etests/testdata/sanity/connection_label/elk/sketch.exp.svg
#	e2etests/testdata/stable/all_shapes/dagre/sketch.exp.svg
#	e2etests/testdata/stable/all_shapes/elk/sketch.exp.svg
#	e2etests/testdata/stable/all_shapes_multiple/dagre/sketch.exp.svg
#	e2etests/testdata/stable/all_shapes_multiple/elk/sketch.exp.svg
#	e2etests/testdata/stable/all_shapes_shadow/dagre/sketch.exp.svg
#	e2etests/testdata/stable/all_shapes_shadow/elk/sketch.exp.svg
#	e2etests/testdata/stable/arrowhead_adjustment/dagre/sketch.exp.svg
#	e2etests/testdata/stable/arrowhead_adjustment/elk/sketch.exp.svg
#	e2etests/testdata/stable/arrowhead_labels/dagre/sketch.exp.svg
#	e2etests/testdata/stable/arrowhead_labels/elk/sketch.exp.svg
#	e2etests/testdata/stable/binary_tree/dagre/sketch.exp.svg
#	e2etests/testdata/stable/binary_tree/elk/sketch.exp.svg
#	e2etests/testdata/stable/chaos1/dagre/sketch.exp.svg
#	e2etests/testdata/stable/chaos1/elk/sketch.exp.svg
#	e2etests/testdata/stable/chaos2/dagre/sketch.exp.svg
#	e2etests/testdata/stable/chaos2/elk/sketch.exp.svg
#	e2etests/testdata/stable/child_parent_edges/dagre/sketch.exp.svg
#	e2etests/testdata/stable/child_parent_edges/elk/sketch.exp.svg
#	e2etests/testdata/stable/circular_dependency/dagre/sketch.exp.svg
#	e2etests/testdata/stable/circular_dependency/elk/sketch.exp.svg
#	e2etests/testdata/stable/class/dagre/sketch.exp.svg
#	e2etests/testdata/stable/class/elk/sketch.exp.svg
#	e2etests/testdata/stable/code_snippet/dagre/sketch.exp.svg
#	e2etests/testdata/stable/code_snippet/elk/sketch.exp.svg
#	e2etests/testdata/stable/connected_container/dagre/sketch.exp.svg
#	e2etests/testdata/stable/connected_container/elk/sketch.exp.svg
#	e2etests/testdata/stable/constant_near_stress/dagre/board.exp.json
#	e2etests/testdata/stable/constant_near_stress/dagre/sketch.exp.svg
#	e2etests/testdata/stable/constant_near_stress/elk/board.exp.json
#	e2etests/testdata/stable/constant_near_stress/elk/sketch.exp.svg
#	e2etests/testdata/stable/constant_near_title/dagre/sketch.exp.svg
#	e2etests/testdata/stable/constant_near_title/elk/sketch.exp.svg
#	e2etests/testdata/stable/container_edges/dagre/sketch.exp.svg
#	e2etests/testdata/stable/container_edges/elk/sketch.exp.svg
#	e2etests/testdata/stable/dense/dagre/sketch.exp.svg
#	e2etests/testdata/stable/dense/elk/sketch.exp.svg
#	e2etests/testdata/stable/different_subgraphs/dagre/sketch.exp.svg
#	e2etests/testdata/stable/different_subgraphs/elk/sketch.exp.svg
#	e2etests/testdata/stable/direction/dagre/sketch.exp.svg
#	e2etests/testdata/stable/direction/elk/sketch.exp.svg
#	e2etests/testdata/stable/font_colors/dagre/sketch.exp.svg
#	e2etests/testdata/stable/font_colors/elk/sketch.exp.svg
#	e2etests/testdata/stable/font_sizes/dagre/sketch.exp.svg
#	e2etests/testdata/stable/font_sizes/elk/sketch.exp.svg
#	e2etests/testdata/stable/giant_markdown_test/dagre/sketch.exp.svg
#	e2etests/testdata/stable/giant_markdown_test/elk/sketch.exp.svg
#	e2etests/testdata/stable/hr/dagre/sketch.exp.svg
#	e2etests/testdata/stable/hr/elk/sketch.exp.svg
#	e2etests/testdata/stable/icon-label/dagre/sketch.exp.svg
#	e2etests/testdata/stable/icon-label/elk/sketch.exp.svg
#	e2etests/testdata/stable/images/dagre/sketch.exp.svg
#	e2etests/testdata/stable/images/elk/sketch.exp.svg
#	e2etests/testdata/stable/investigate/dagre/sketch.exp.svg
#	e2etests/testdata/stable/investigate/elk/sketch.exp.svg
#	e2etests/testdata/stable/large_arch/dagre/sketch.exp.svg
#	e2etests/testdata/stable/large_arch/elk/sketch.exp.svg
#	e2etests/testdata/stable/latex/dagre/sketch.exp.svg
#	e2etests/testdata/stable/latex/elk/sketch.exp.svg
#	e2etests/testdata/stable/li1/dagre/sketch.exp.svg
#	e2etests/testdata/stable/li1/elk/sketch.exp.svg
#	e2etests/testdata/stable/li2/dagre/sketch.exp.svg
#	e2etests/testdata/stable/li2/elk/sketch.exp.svg
#	e2etests/testdata/stable/li3/dagre/sketch.exp.svg
#	e2etests/testdata/stable/li3/elk/sketch.exp.svg
#	e2etests/testdata/stable/li4/dagre/sketch.exp.svg
#	e2etests/testdata/stable/li4/elk/sketch.exp.svg
#	e2etests/testdata/stable/links/dagre/sketch.exp.svg
#	e2etests/testdata/stable/links/elk/sketch.exp.svg
#	e2etests/testdata/stable/lone_h1/dagre/sketch.exp.svg
#	e2etests/testdata/stable/lone_h1/elk/sketch.exp.svg
#	e2etests/testdata/stable/markdown/dagre/sketch.exp.svg
#	e2etests/testdata/stable/markdown/elk/sketch.exp.svg
#	e2etests/testdata/stable/markdown_stroke_fill/dagre/sketch.exp.svg
#	e2etests/testdata/stable/markdown_stroke_fill/elk/sketch.exp.svg
#	e2etests/testdata/stable/md_2space_newline/dagre/sketch.exp.svg
#	e2etests/testdata/stable/md_2space_newline/elk/sketch.exp.svg
#	e2etests/testdata/stable/md_backslash_newline/dagre/sketch.exp.svg
#	e2etests/testdata/stable/md_backslash_newline/elk/sketch.exp.svg
#	e2etests/testdata/stable/md_code_block_fenced/dagre/sketch.exp.svg
#	e2etests/testdata/stable/md_code_block_fenced/elk/sketch.exp.svg
#	e2etests/testdata/stable/md_code_block_indented/dagre/sketch.exp.svg
#	e2etests/testdata/stable/md_code_block_indented/elk/sketch.exp.svg
#	e2etests/testdata/stable/md_code_inline/dagre/sketch.exp.svg
#	e2etests/testdata/stable/md_code_inline/elk/sketch.exp.svg
#	e2etests/testdata/stable/multiline_text/dagre/sketch.exp.svg
#	e2etests/testdata/stable/multiline_text/elk/sketch.exp.svg
#	e2etests/testdata/stable/multiple_trees/dagre/sketch.exp.svg
#	e2etests/testdata/stable/multiple_trees/elk/sketch.exp.svg
#	e2etests/testdata/stable/n22_e32/dagre/sketch.exp.svg
#	e2etests/testdata/stable/n22_e32/elk/sketch.exp.svg
#	e2etests/testdata/stable/number_connections/dagre/sketch.exp.svg
#	e2etests/testdata/stable/number_connections/elk/sketch.exp.svg
#	e2etests/testdata/stable/one_container_loop/dagre/sketch.exp.svg
#	e2etests/testdata/stable/one_container_loop/elk/sketch.exp.svg
#	e2etests/testdata/stable/one_three_one_container/dagre/sketch.exp.svg
#	e2etests/testdata/stable/one_three_one_container/elk/sketch.exp.svg
#	e2etests/testdata/stable/overlapping_image_container_labels/dagre/sketch.exp.svg
#	e2etests/testdata/stable/overlapping_image_container_labels/elk/sketch.exp.svg
#	e2etests/testdata/stable/p/dagre/sketch.exp.svg
#	e2etests/testdata/stable/p/elk/sketch.exp.svg
#	e2etests/testdata/stable/pre/dagre/sketch.exp.svg
#	e2etests/testdata/stable/pre/elk/sketch.exp.svg
#	e2etests/testdata/stable/self-referencing/dagre/sketch.exp.svg
#	e2etests/testdata/stable/self-referencing/elk/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_actor_distance/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_actor_distance/elk/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_all_shapes/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_all_shapes/elk/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_distance/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_distance/elk/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_groups/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_groups/elk/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_long_note/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_long_note/elk/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_nested_groups/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_nested_groups/elk/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_nested_span/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_nested_span/elk/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_note/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_note/elk/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_real/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_real/elk/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_self_edges/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_self_edges/elk/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_simple/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_simple/elk/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_span/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagram_span/elk/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagrams/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sequence_diagrams/elk/sketch.exp.svg
#	e2etests/testdata/stable/sql_tables/dagre/sketch.exp.svg
#	e2etests/testdata/stable/sql_tables/elk/sketch.exp.svg
#	e2etests/testdata/stable/square_3d/dagre/sketch.exp.svg
#	e2etests/testdata/stable/square_3d/elk/sketch.exp.svg
#	e2etests/testdata/stable/straight_hierarchy_container/dagre/sketch.exp.svg
#	e2etests/testdata/stable/straight_hierarchy_container/elk/sketch.exp.svg
#	e2etests/testdata/stable/stylish/dagre/sketch.exp.svg
#	e2etests/testdata/stable/stylish/elk/sketch.exp.svg
#	e2etests/testdata/stable/text_font_sizes/dagre/sketch.exp.svg
#	e2etests/testdata/stable/text_font_sizes/elk/sketch.exp.svg
#	e2etests/testdata/stable/tooltips/dagre/sketch.exp.svg
#	e2etests/testdata/stable/tooltips/elk/sketch.exp.svg
#	e2etests/testdata/stable/transparent_3d/dagre/sketch.exp.svg
#	e2etests/testdata/stable/transparent_3d/elk/sketch.exp.svg
#	e2etests/testdata/stable/unnamed_only_height/dagre/sketch.exp.svg
#	e2etests/testdata/stable/unnamed_only_height/elk/sketch.exp.svg
#	e2etests/testdata/stable/unnamed_only_width/dagre/sketch.exp.svg
#	e2etests/testdata/stable/unnamed_only_width/elk/sketch.exp.svg
#	e2etests/testdata/stable/us_map/dagre/sketch.exp.svg
#	e2etests/testdata/stable/us_map/elk/sketch.exp.svg
#	e2etests/testdata/todo/container_child_edge/dagre/sketch.exp.svg
#	e2etests/testdata/todo/container_child_edge/elk/sketch.exp.svg
#	e2etests/testdata/todo/font_sizes_containers_large/dagre/sketch.exp.svg
#	e2etests/testdata/todo/font_sizes_containers_large/elk/sketch.exp.svg
#	e2etests/testdata/todo/font_sizes_large/dagre/sketch.exp.svg
#	e2etests/testdata/todo/font_sizes_large/elk/sketch.exp.svg
#	e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/dagre/sketch.exp.svg
#	e2etests/testdata/todo/sequence_diagram_actor_padding_nested_groups/elk/sketch.exp.svg
#	e2etests/testdata/todo/shape_set_width_height/dagre/sketch.exp.svg
#	e2etests/testdata/todo/shape_set_width_height/elk/sketch.exp.svg
#	e2etests/testdata/todo/tall_edge_label/dagre/sketch.exp.svg
#	e2etests/testdata/todo/tall_edge_label/elk/sketch.exp.svg
2023-01-24 17:30:28 +08:00
OneRain2333
c0821de872 rebase and bug fix 2023-01-24 17:29:38 +08:00
Anmol Sethi
fe16543a6d
Dockerfile: Add playwright support for rendering PNGs
Closes #594
2023-01-24 01:14:30 -08:00
OneRain2333
ca08c8937d update constant 2023-01-24 16:25:29 +08:00
OneRain2333
21b84a3908 Use constant to define offset of double-bordered shape 2023-01-24 16:24:32 +08:00
OneRain2333
9302a14e02 fix typo 2023-01-24 16:24:32 +08:00
OneRain2333
e588b86c04 add borderOffset variable 2023-01-24 16:24:32 +08:00
OneRain2333
e858d355a3 update test using go 1.18 2023-01-24 16:24:32 +08:00
OneRain2333
9a1fed3077 update d2svg.go 2023-01-24 16:24:26 +08:00