Skip to content

Instantly share code, notes, and snippets.

@trecouvr
Created November 9, 2011 22:29
Show Gist options
  • Save trecouvr/1353348 to your computer and use it in GitHub Desktop.
Save trecouvr/1353348 to your computer and use it in GitHub Desktop.
CTable demo
import stdlib.widgets.core
import stdlib.components.table
import stdlib.interactions.editable
type table.value = int
type key_row = int
type key_col = int
onready() =
row_to_string(row) = "{row}"
col_to_string(col) = "{col}"
cell_widget(coord : CTable.coordinates(key_row, key_col), table : CTable.t(table.value, 'state, key_row, key_col)) : (CTable.Cell.widget(table.value), WStyler.styler, bool) =
html(conf : CTable.Cell.config(table.value), s : string, content : IEditable.content(table.value)) : xhtml =
<>cell widget</>
do_open(conf : CTable.Cell.config(table.value), s : string) : void =
jlog("do open")
do_close(conf : CTable.Cell.config(table.value), s : string) : void =
jlog("close")
parse(conf : CTable.Cell.config(table.value), s : string) : IEditable.content(table.value) =
do jlog("parse {s}")
/*rule = parser
| "mon_id_" row=Rule.integer "_" col=Rule.integer .* -> (String.to_int("{row}"),String.to_int("{col}"))
end
match Parser.try_parse(rule, s) with
| {none} -> {invalid_value=none}
| {some=(r,c)} -> {value=r*c}
end*/
{missing_value}
set_value(conf : CTable.Cell.config(table.value), s : string, v : 'a) : void =
do jlog("set value {s} {v}")
Dom.transform([#{s} <- <>{v}</>])
set_invalid_value(conf : CTable.Cell.config(table.value), s : string, v : option('a)) : void =
jlog("set invalid value")
clear_value(conf : CTable.Cell.config(table.value), s : string) : void=
jlog("clear value")
(
{
~html
~do_open
~do_close
~parse
~set_value
~set_invalid_value
~clear_value
}
,
WStyler.empty
,
false
)
config = CTable.default_config(
row_to_string,
col_to_string,
cell_widget
)
fetch(row : key_row, col : key_col) =
some(row+col)
callbacks = CTable.default_callback(fetch)
display = {
top_row_index=0
left_col_index=0
row_header_size=30
col_header_size=30
row_page_size=300
col_page_size=300
}
table = CTable.create(config, "mon_id", callbacks, [0,1,2], [0,1], []/*[(0,0,0),(0,1,1),(1,0,2),(1,1,3),(2,0,4),(2,1,5)]*/, display)
Dom.transform([#onready <- CTable.generate_page(table, "mon_id2")])
main() =
<div id=#onready onready={_->onready()}>Loading</div>
server = Server.one_page_server("test", main)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment