| 1 | module main |
| 2 | |
| 3 | import js.dom |
| 4 | |
| 5 | fn get_canvas(elem JS.HTMLElement) JS.HTMLCanvasElement { |
| 6 | // error: `JS.HTMLElement` doesn't implement method `getContext` of interface `JS.HTMLCanvasElement` |
| 7 | match elem { |
| 8 | JS.HTMLCanvasElement { |
| 9 | return elem |
| 10 | } |
| 11 | else { |
| 12 | JS.console.log('Not canvas') |
| 13 | return JS.HTMLCanvasElement{} |
| 14 | } |
| 15 | } |
| 16 | } |
| 17 | |
| 18 | struct DrawState { |
| 19 | mut: |
| 20 | context JS.CanvasRenderingContext2D |
| 21 | drawing bool |
| 22 | x f64 |
| 23 | y f64 |
| 24 | } |
| 25 | |
| 26 | struct FrameworkPlatform { |
| 27 | mut: |
| 28 | v_sqlite_memory []int |
| 29 | // v_sqlite_file []int |
| 30 | typescript_sqlite_memory []int |
| 31 | } |
| 32 | |
| 33 | fn (mut state DrawState) draw_bench_chart(color string, time_array []int, max_time int) ? { |
| 34 | max_height := f64(480) |
| 35 | max_width := f64(720) |
| 36 | |
| 37 | state.drawing = true |
| 38 | state.x = f64(0) |
| 39 | state.y = f64(max_height) |
| 40 | state.context.strokeStyle = color.str |
| 41 | state.context.lineWidth = JS.Number(1) |
| 42 | |
| 43 | for i := 0; i <= time_array.len; i++ { |
| 44 | state.context.beginPath() |
| 45 | state.context.moveTo(JS.Number(state.x), JS.Number(state.y)) |
| 46 | state.x = max_width / f64(time_array.len) * i + 1.0 |
| 47 | state.y = max_height - (max_height / f64(max_time) * f64(time_array[i])) |
| 48 | state.context.lineTo(JS.Number(state.x), JS.Number(state.y)) |
| 49 | state.context.stroke() |
| 50 | state.context.closePath() |
| 51 | } |
| 52 | |
| 53 | state.drawing = false |
| 54 | } |
| 55 | |
| 56 | fn main() { |
| 57 | document := dom.document |
| 58 | |
| 59 | mut canvas_elem := map[string]JS.HTMLElement{} |
| 60 | mut canvas := map[string]JS.HTMLCanvasElement{} |
| 61 | |
| 62 | canvas_elem['insert'] = document.getElementById('canvas_insert_id'.str)? |
| 63 | JS.console.log('canvas_insert_id') |
| 64 | |
| 65 | canvas_elem['select'] = document.getElementById('canvas_select_id'.str)? |
| 66 | JS.console.log('canvas_select_id') |
| 67 | |
| 68 | canvas_elem['update'] = document.getElementById('canvas_update_id'.str)? |
| 69 | JS.console.log('canvas_update_id') |
| 70 | |
| 71 | // for orm_stmt_kind in ["insert", "select", "update"]{ |
| 72 | for orm_stmt_kind in ['insert', 'select', 'update'] { |
| 73 | // type HTMLElement |
| 74 | |
| 75 | canvas[orm_stmt_kind] = get_canvas(canvas_elem[orm_stmt_kind]) |
| 76 | |
| 77 | ctx := canvas[orm_stmt_kind].getContext('2d'.str, js_undefined())? |
| 78 | |
| 79 | mut context := JS.CanvasRenderingContext2D{} |
| 80 | match ctx { |
| 81 | JS.CanvasRenderingContext2D { |
| 82 | context = ctx |
| 83 | } |
| 84 | else { |
| 85 | panic('can not get 2d context') |
| 86 | } |
| 87 | } |
| 88 | |
| 89 | mut state := DrawState{context, false, 0, 0} |
| 90 | |
| 91 | mut inserts_from_framework := |
| 92 | canvas_elem[orm_stmt_kind].getAttribute('inserts_from_framework'.str)? |
| 93 | |
| 94 | mut max_benchmark := canvas_elem[orm_stmt_kind].getAttribute('max_benchmark'.str)? |
| 95 | |
| 96 | // ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 97 | mut obj := FrameworkPlatform{} |
| 98 | obj = JS.JSON.parse(tos(inserts_from_framework)) |
| 99 | |
| 100 | // Waiting for v implement for loop getting key and value of object in v.js |
| 101 | mut attribute_int_values := []int{} |
| 102 | |
| 103 | //* v framework |
| 104 | for variable in obj.v_sqlite_memory { |
| 105 | attribute_int_values << variable |
| 106 | } |
| 107 | |
| 108 | state.draw_bench_chart('gray', attribute_int_values, tos(max_benchmark).int())? |
| 109 | attribute_int_values = [] |
| 110 | |
| 111 | //* typescript framework |
| 112 | |
| 113 | for variable in obj.typescript_sqlite_memory { |
| 114 | attribute_int_values << variable |
| 115 | } |
| 116 | |
| 117 | state.draw_bench_chart('red', attribute_int_values, tos(max_benchmark).int())? |
| 118 | |
| 119 | attribute_int_values = [] |
| 120 | } |
| 121 | } |
| 122 | |