Kanban board — version history
A board of cards sorted into columns, the stages of a piece of work, that the user drags from one column to another. Introduced in 5.0.
5.0 #
New #
- Columns added in the order of the work (
of_add_column), cards added at the bottom of a column (of_add_card); the key of a card is unique on the whole board, so it keeps it — and its handle stays valid — when it changes column. - The user drags a card to another column or up and down in its own: a ghost follows the pointer, the target column lights up and an accent bar shows where the card will land; the board and the column scroll near their edges, and Escape cancels.
ue_card_moved(as_key, as_from_column, as_to_column, al_position)reports each move, the place counted from 1;of_move_cardmoves a card from the code and raises the same event. Withib_veto_moves,ue_card_movingis asked first and can refuse the move, for a drag, the keyboard andof_move_cardalike (which then returns-4).- A work-in-progress limit per column (
il_limit): the header counts3/5and the column turns red past it, also while a card is dragged over a full column. A column folds into a narrow strip (ib_collapsed,ue_column_toggled), hides (ib_visible), andib_donemarks the column of finished work. - Each card shows a title, a text, coloured tags (
is_tags, tones given byis_tag_tones), the round avatar of its assignee (is_assignee), a due date that turns red once late and orange on the day (is_due, compared withis_todayor the date of the workstation) and a badge; title, text and badge accept rich text markup. - The body of every card can be written by a template (
is_card_template): fields of your own (of_set_field,of_get_field), dates written your way ({due:d mmm}) and pieces shown only when a field says something ({?x}…{/x}). - The board is fed from a DataStore (
of_from_datastore): one card per row, its key the RowID of the row; a column plays a role when it is named like it or whenof_mapsays so (the column of the board, the title, the tags, the assignee, the due date, the colour, the rank…), dates are read in the regional order of the workstation, and a value no column holds gets a column of its own. - With
ib_write_back, a move writes the new column and the ranks into the DataStore beforeue_card_moved; a value the DataStore refuses puts the card back and raisesue_write_back_failed.of_reload_rowsends a row changed by your code to the board again. - Selection by click, keyboard or code (
of_select_card,of_clear_selection,of_selected_key,ue_selection_changed);ue_card_clicked,ue_card_opened(double click or Enter),ue_card_rclickedandue_column_rclickedfor your menus;ue_delete_requestedon Delete;ue_new_requestedfrom the+ Add a cardbutton (ib_add_button) or a double click in a column. - Keyboard: arrows to move the selection, Home and End in a column, Ctrl + arrows to move the card, Enter to open it; the board is one stop of the Tab key, and right-to-left applications are followed, arrows included.
- A search (
is_filter), in a toolbar (ib_toolbar) and from the code, on the title, the body, the tags, the assignee and the badge; read-only boards (ib_read_only) and cards; the width of the columns (ii_column_width); a tooltip and five colours on every column and card, the accent of a card drawing a stripe on its edge. - Columns the user rearranges, on option (
ib_reorderable, off by default): he drags the header of a column — a ghost follows the pointer, a vertical accent bar shows where it will land, the other columns slide to their new place, the board scrolls near its edges and Escape cancels — or presses Ctrl + Shift + Left / Right on a card or a header, inverted right to left.ue_column_moved(as_key, al_from, al_to)reports each move, places counted from 1;of_move_columnmoves a column from the code and raises the same event; withib_veto_moves,ue_column_movingis asked first and can refuse it (of_move_columnthen returns-4). A column handle reads its place (of_position). - The layout the user arranged — the order of the columns and their fold — is read by
of_get_layoutand given back byof_set_layout;ue_layout_changedcarries the whole layout after every change, to store it and find the board again at the next start. of_remove_card,of_remove_column,of_clear_cards,of_clearandof_resetremove what was added and free the handles; a column handle walks its cards in their order (of_count,of_keys_at,of_has), and a card handle reads where it stands (of_column,of_position).