Skip to content

Ordering

Ordering Widget for Marimo

OrderingWidget

Bases: BaseWidget

An ordering question widget where students arrange items in sequence using drag-and-drop.

Attributes:

Name Type Description
question str

The question text to display

items list

Items in the correct order

shuffle bool

Whether to shuffle items initially

value dict

Current state with 'order' and 'correct' keys

Source code in src/marimo_learn/ordering.py
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class OrderingWidget(BaseWidget):
    """
    An ordering question widget where students arrange items in sequence using drag-and-drop.

    Attributes:
        question (str): The question text to display
        items (list): Items in the correct order
        shuffle (bool): Whether to shuffle items initially
        value (dict): Current state with 'order' and 'correct' keys
    """

    _esm = Path(__file__).parent / "static" / "ordering.js"

    question = traitlets.Unicode("").tag(sync=True)
    items = traitlets.List(trait=traitlets.Unicode()).tag(sync=True)
    current_order = traitlets.List(trait=traitlets.Unicode()).tag(sync=True)
    shuffle = traitlets.Bool(True).tag(sync=True)

    def __init__(
        self,
        question: str,
        items: list[str],
        shuffle: bool = True,
        lang: str = "en",
        **kwargs,
    ):
        current = items.copy()
        if shuffle:
            random.shuffle(current)
        super().__init__(
            question=question,
            items=items,
            shuffle=shuffle,
            current_order=current,
            lang=lang,
            **kwargs,
        )

Example

ordering