si-m07 commited on
Commit
8e24e6d
verified
1 Parent(s): f16022b

textboxes_for_assignments

Browse files
Files changed (1) hide show
  1. textbox +133 -0
textbox ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+
3
+
4
+ def add_assignment(assignments):
5
+ """
6
+ add one blank assignment to the saved list
7
+ """
8
+ assignments = assignments or []
9
+ return assignments + [""]
10
+
11
+
12
+ def delete_assignment(assignments, index):
13
+ """
14
+ delete one assignment using its position in the list
15
+ """
16
+ assignments = assignments or []
17
+
18
+ if 0 <= index < len(assignments):
19
+ assignments.pop(index)
20
+
21
+ return assignments
22
+
23
+
24
+ def update_assignment(assignments, new_text, index):
25
+ """
26
+ save the updated text for one assignment
27
+ """
28
+ assignments = assignments or []
29
+
30
+ if 0 <= index < len(assignments):
31
+ assignments[index] = new_text
32
+
33
+ return assignments
34
+
35
+
36
+ def clear_all():
37
+ """
38
+ delete every assignment
39
+ """
40
+ return []
41
+
42
+
43
+ with gr.Blocks(title="Assignment Tracker") as demo:
44
+ gr.Markdown("# Assignment Tracker")
45
+ gr.Markdown(
46
+ "Click **Add assignment** whenever you need another textbox."
47
+ )
48
+
49
+ # Start with no assignments.
50
+ # The assignments are saved in the user's browser.
51
+ saved_assignments = gr.BrowserState(
52
+ value=[],
53
+ key="assignment_tracker_data"
54
+ )
55
+
56
+ with gr.Row():
57
+ add_button = gr.Button(
58
+ "Add assignment",
59
+ variant="primary"
60
+ )
61
+
62
+ clear_button = gr.Button("Clear all")
63
+
64
+ status = gr.Markdown()
65
+
66
+ # This section redraws itself whenever saved_assignments changes.
67
+ @gr.render(inputs=saved_assignments)
68
+ def display_assignments(assignments):
69
+ assignments = assignments or []
70
+
71
+ if len(assignments) == 0:
72
+ gr.Markdown(
73
+ "You currently have no assignments. "
74
+ "Click **Add assignment** to create one."
75
+ )
76
+
77
+ for index, assignment_text in enumerate(assignments):
78
+ with gr.Row():
79
+ assignment_box = gr.Textbox(
80
+ value=assignment_text,
81
+ label=f"Assignment {index + 1}",
82
+ placeholder="Enter an assignment...",
83
+ lines=2,
84
+ key=f"assignment-{index}"
85
+ )
86
+
87
+ delete_button = gr.Button(
88
+ "Delete",
89
+ size="sm",
90
+ key=f"delete-{index}"
91
+ )
92
+
93
+ # Save whenever the user finishes editing the textbox.
94
+ assignment_box.change(
95
+ fn=lambda text, current_assignments, i=index:
96
+ update_assignment(
97
+ current_assignments,
98
+ text,
99
+ i
100
+ ),
101
+ inputs=[
102
+ assignment_box,
103
+ saved_assignments
104
+ ],
105
+ outputs=saved_assignments
106
+ )
107
+
108
+ # Delete this particular assignment.
109
+ delete_button.click(
110
+ fn=lambda current_assignments, i=index:
111
+ delete_assignment(
112
+ current_assignments,
113
+ i
114
+ ),
115
+ inputs=saved_assignments,
116
+ outputs=saved_assignments
117
+ )
118
+
119
+ add_button.click(
120
+ fn=add_assignment,
121
+ inputs=saved_assignments,
122
+ outputs=saved_assignments
123
+ )
124
+
125
+ clear_button.click(
126
+ fn=clear_all,
127
+ inputs=None,
128
+ outputs=saved_assignments
129
+ )
130
+
131
+
132
+ if __name__ == "__main__":
133
+ demo.launch()