2
2
3
3
< head >
4
4
< title > Test</ title >
5
- < script src ="/js/index.js "> </ script >
5
+ < script type =" module " src ="/js/index.js "> </ script >
6
6
</ head >
7
7
8
8
< body >
9
- <!-- NAV -->
10
9
< nav class ="navbar sticky-top navbar navbar-dark navbar-expand-md bg-primary " id ="nav ">
11
10
< div class ="container-fluid ">
12
11
< a class ="navbar-brand " href ="/ "> < strong > The VFX Cooperative</ strong > </ a >
35
34
</ div >
36
35
</ div >
37
36
</ nav >
38
-
39
- <!-- TABLE -->
40
- < div class ="container ">
41
- < table class ="table table-hover ">
42
- < thead >
43
- < tr >
44
- < th > Project</ th >
45
- </ tr >
46
- </ thead >
47
- < tbody id ="table ">
48
- < tr class ="_template ">
49
- < td class ="_name "> Project</ td >
50
- </ tr >
51
- </ tbody >
52
- </ table >
53
- </ div >
54
-
55
- <!-- PLUS BUTTON -->
56
- < div class ="fixed-bottom d-flex flex-row-reverse ">
57
- < button id ="plus " class ="btn btn-circle bg-danger text-white onclick-item " title ="Add "> +</ button >
58
- </ div >
59
-
60
- <!-- TOAST -->
61
- < div class ="toast-container position-absolute bottom-0 end-0 p-3 d-none " style ="z-index: 9999; ">
62
- < div class ="toast " id ="toast " role ="alert ">
63
- < div class ="toast-header ">
64
- < strong class ="me-auto _title "> </ strong >
65
- < small class ="text-muted _code "> </ small >
66
- < button type ="button " class ="btn-close " data-bs-dismiss ="toast " aria-label ="Close "> </ button >
67
- </ div >
68
- < div class ="toast-body _reason "> </ div >
69
- </ div >
70
- </ div >
71
-
72
-
73
- <!-- FORM -->
74
- < div class ="modal fade " id ="form " tabindex ="-1 " role ="dialog " aria-hidden ="true ">
75
- < div class ="modal-dialog " role ="document ">
76
- < div class ="modal-content ">
77
- < form class ="needs-validation " novalidate >
78
- < div class ="modal-header ">
79
- < h5 class ="modal-title "> Create New Project</ h5 >
80
- < button type ="button " class ="btn-close " data-bs-dismiss ="modal " aria-label ="Close "> </ button >
81
- </ div >
82
- < div class ="modal-body ">
83
- < div class ="row mb-3 ">
84
- < label for ="new-name " class ="col-sm-4 col-form-label "> Title</ label >
85
- < div class ="col-sm-8 ">
86
- < input class ="form-control " name ="name " id ="new-name " required >
87
- < div class ="form-text "> The name of the project</ div >
88
- </ div >
89
- </ div >
90
- < div class ="row mb-3 ">
91
- < label class ="col-sm-4 col-form-label "> Radio Buttons</ label >
92
- < div class ="col-sm-8 ">
93
- < div class ="form-check form-check-inline ">
94
- < input class ="form-check-input " type ="radio " name ="radio " id ="inlineRadio1 "
95
- value ="option1 ">
96
- < label class ="form-check-label " for ="inlineRadio1 "> 1</ label >
97
- </ div >
98
- < div class ="form-check form-check-inline ">
99
- < input class ="form-check-input " type ="radio " name ="radio " id ="inlineRadio2 "
100
- value ="option2 ">
101
- < label class ="form-check-label " for ="inlineRadio2 "> 2</ label >
102
- </ div >
103
- </ div >
104
- </ div >
105
- < div class ="row mb-3 ">
106
- < label for ="range " class ="col-sm-4 col-form-label "> Range</ label >
107
- < div class ="col-sm-6 ">
108
- < input type ="range " class ="form-range " id ="range " name ="range ">
109
- </ div >
110
- < div class ="col-sm-2 _range ">
111
- [V]
112
- </ div >
113
- </ div >
114
- < div class ="row mb-3 ">
115
- < label for ="range " class ="col-sm-4 col-form-label "> Select</ label >
116
- < div class ="col-sm-8 ">
117
- < select class ="form-select " name ="select " aria-label ="Default select example " required >
118
- < option value ="" selected > Open this select menu</ option >
119
- < option value ="1 "> One</ option >
120
- < option value ="2 "> Two</ option >
121
- < option value ="3 "> Three</ option >
122
- </ select >
123
- </ div >
124
- </ div >
125
- </ div >
126
- < div class ="modal-footer ">
127
- < button type ="submit " id ="create " class ="btn btn-primary "> Create</ button >
128
- </ div >
129
- </ form >
130
- </ div >
131
- </ div >
132
- </ div >
133
-
134
- <!-- APPLICATION -->
135
- < script >
136
- window . addEventListener ( "DOMContentLoaded" , ( event ) => {
137
- var app = mvc . Controller . New ( ) ;
138
-
139
- // Models
140
- class Project extends mvc . Model {
141
- constructor ( data ) {
142
- super ( data ) ;
143
- console . log ( data ) ;
144
- }
145
- } ;
146
- mvc . Model . define ( Project , {
147
- key : "_id string" ,
148
- name : "string" ,
149
- status : "string" ,
150
- createdDate : "created_date date" ,
151
- updatedDate : "updated_date date" ,
152
- tags : "{}string" ,
153
- } ) ;
154
-
155
- // Add objects to the application
156
- app . Add ( 'nav' , new mvc . Nav ( document . querySelector ( "#nav" ) ) ) ;
157
- app . Add ( 'toast' , new mvc . Toast ( document . querySelector ( "#toast" ) ) ) ;
158
- app . Add ( 'plus' , new mvc . Button ( document . querySelector ( "#plus" ) ) ) ;
159
- app . Add ( 'form' , new mvc . Form ( document . querySelector ( "#form" ) ) ) ;
160
- app . Add ( 'projects' , new mvc . Provider ( Project , 'https://rpi4b.mutablelogic.com' ) ) ;
161
- app . Add ( 'table' , new mvc . List ( document . querySelector ( "#table" ) , "_template" ) ) ;
162
-
163
- // Show toast when button pressed
164
- app . plus . addEventListener ( 'mvc.button.click' , ( sender , target ) => {
165
- app . form . replace ( "._range" , '' ) ;
166
- app . form . show ( {
167
- name : 'default' ,
168
- radio : 'option2' ,
169
- range : '0' ,
170
- select : '3' ,
171
- } ) ;
172
- } ) ;
173
-
174
- // Hide form when submitted
175
- app . form . addEventListener ( 'mvc.form.submit' , ( sender , target ) => {
176
- // Hide form
177
- app . form . hide ( ) ;
178
-
179
- // Show toast of values
180
- app . toast . show ( JSON . stringify ( app . form . values ) , target . id ) ;
181
- } ) ;
182
-
183
- // Form range value
184
- app . form . addEventListener ( 'mvc.form.change' , ( sender , target ) => {
185
- if ( target . name == "range" ) {
186
- app . form . replace ( "._range" , target . value ) ;
187
- }
188
- } ) ;
189
-
190
- // Set active row
191
- app . table . addEventListener ( 'mvc.list.click' , ( sender , target , key ) => {
192
- app . table . setClassForKey ( key , 'table-active' ) ;
193
- } ) ;
194
-
195
- // Projects
196
- app . projects . addEventListener ( 'mvc.provider.error' , ( sender , error ) => {
197
- app . toast . show ( error ) ;
198
- } ) ;
199
- app . projects . addEventListener ( 'mvc.provider.added' , ( sender , project ) => {
200
- app . table . set ( project , project . key ) . replace ( '._name' , project . $json ) ;
201
- } ) ;
202
- app . projects . addEventListener ( 'mvc.provider.changed' , ( sender , project ) => {
203
- app . table . set ( project , project . key ) . replace ( '._name' , project . $json ) ;
204
- } ) ;
205
- app . projects . addEventListener ( 'mvc.provider.deleted' , ( sender , project ) => {
206
- app . table . deleteForKey ( project . key ) ;
207
- } ) ;
208
- app . projects . addEventListener ( 'mvc.provider.completed' , ( sender , changed ) => {
209
- // Resort table if changed
210
- console . log ( "Projects loaded, changed=" , changed ) ;
211
- } ) ;
212
-
213
- // Request projects every 30 secs
214
- app . projects . request ( '/api/project/' , null , null , 30 * 1000 ) ;
215
-
216
- } ) ;
217
- </ script >
218
37
</ body >
219
38
220
39
</ html >
0 commit comments