@@ -3,6 +3,9 @@ var plan = false;
3
3
var selectedMajor = "Comp. Sci." ;
4
4
var selectedCatalogYear = 2017 ;
5
5
var catalogLoaded = false ;
6
+ var draggedCourse = false ;
7
+ var draggedReqOrigin = false ;
8
+ var draggedPlanOrigin = false ;
6
9
7
10
$ ( getPlans ) ;
8
11
@@ -68,6 +71,10 @@ function getPlans(){
68
71
} ) ;
69
72
$ ( '.dataTables_scrollHeadInner' ) . css ( 'padding' , '0' ) ;
70
73
catalogLoaded = true ;
74
+ $ ( 'tr.odd' ) . attr ( 'draggable' , 'true' ) ;
75
+ $ ( 'tr.odd' ) . attr ( 'ondragstart' , 'dragFromCat(event)' ) ;
76
+ $ ( 'tr.even' ) . attr ( 'draggable' , 'true' ) ;
77
+ $ ( 'tr.even' ) . attr ( 'ondragstart' , 'dragFromCat(event)' ) ;
71
78
}
72
79
73
80
@@ -79,16 +86,66 @@ function getPlans(){
79
86
80
87
$ ( '#accordion' ) . empty ( ) ;
81
88
for ( let i in requirements ) {
82
- let courses = requirements [ i ] . courses ;
89
+ let reqCourses = requirements [ i ] . courses ;
83
90
let itemHtml = "" ;
84
- for ( let c in courses ) {
85
- itemHtml += '<li>' + courses [ c ] + ': ' + plan . catalog . courses [ courses [ c ] ] . name + '</li>' ;
91
+ for ( let reqC in reqCourses ) {
92
+ if ( ! courseInPlan ( reqCourses [ reqC ] ) ) {
93
+ itemHtml += '<li draggable="true" ondragstart="dragFromReq(event)">' + reqCourses [ reqC ] + ': ' + plan . catalog . courses [ reqCourses [ reqC ] ] . name + '</li>' ;
94
+ }
95
+ else {
96
+ itemHtml += '<li draggable="true" ondragstart="dragFromReq(event)" hidden="true">' + reqCourses [ reqC ] + ': ' + plan . catalog . courses [ reqCourses [ reqC ] ] . name + '</li>' ;
97
+ }
86
98
}
87
99
$ ( '#accordion' ) . append ( '<h3><a href="#">' + requirements [ i ] . name + '</a></h3><div>' + itemHtml + '</div>' ) . accordion ( 'refresh' ) ;
88
100
}
89
101
} ) ;
90
102
}
91
103
104
+ function courseInPlan ( designator ) {
105
+ let c = plan . courses [ designator ] ;
106
+ return c !== undefined ;
107
+ }
108
+
109
+ window . dragFromReq = function ( event ) {
110
+ let desig = event . target . innerText . split ( ": " ) [ 0 ] ;
111
+ draggedCourse = plan . catalog . courses [ desig ] ;
112
+ draggedPlanOrigin = null ;
113
+ draggedReqOrigin = event . target ;
114
+ }
115
+
116
+ window . dragFromCat = function ( event ) {
117
+ let desig = event . target . children [ 0 ] . innerText
118
+ draggedCourse = plan . catalog . courses [ desig ] ;
119
+ draggedPlanOrigin = null ;
120
+ draggedReqOrigin = null ;
121
+ }
122
+
123
+ window . dragFromPlan = function ( event ) {
124
+ let desig = event . target . innerText . split ( ": " ) [ 0 ] ;
125
+ draggedCourse = plan . catalog . courses [ desig ] ;
126
+ draggedReqOrigin = null ;
127
+ draggedPlanOrigin = event . target ;
128
+ }
129
+
130
+ window . hoverOverPlan = function ( event ) {
131
+ event . preventDefault ( ) ;
132
+ }
133
+
134
+ window . dropOnPlan = function ( event ) {
135
+ event . target . children [ 1 ] . innerHTML += "<li draggable='true' ondragstart='dragFromPlan(event)'>" + draggedCourse . designator + ": " + draggedCourse . name + "</li>" ;
136
+ if ( draggedReqOrigin !== null ) {
137
+ draggedReqOrigin . hidden = true ;
138
+ draggedReqOrigin = null ;
139
+ }
140
+ else if ( draggedPlanOrigin !== null ) {
141
+ draggedPlanOrigin . remove ( ) ;
142
+ draggedPlanOrigin = null ;
143
+ }
144
+
145
+ draggedCourse = null ;
146
+
147
+ }
148
+
92
149
class Course {
93
150
constructor ( desig , year , term ) {
94
151
this . term = term ;
@@ -151,7 +208,7 @@ class Plan {
151
208
else {
152
209
urHTML += " notStarted" ;
153
210
}
154
- urHTML += "'>" ;
211
+ urHTML += "' ondragover='hoverOverPlan(event)' ondrop='dropOnPlan(event)' >" ;
155
212
urHTML += "<header><span class='termHeader'>Fall " + ( year . name - 1 ) + "</span><span class='termHours'>Hours: " + year . fallHrs + "</span></header>" ;
156
213
urHTML += "<ul class='courses'>" ;
157
214
for ( let j = 0 ; j < year . fall . length ; j ++ ) {
@@ -160,7 +217,7 @@ class Plan {
160
217
if ( beforeCurrent ) {
161
218
this . hrsCompleted += course . hours ;
162
219
}
163
- urHTML += "<li>" + course . id + " " + course . name + "</li>" ;
220
+ urHTML += "<li draggable='true' ondragstart='dragFromPlan(event)' >" + course . id + ": " + course . name + "</li>" ;
164
221
}
165
222
urHTML += "</ul></div>" ;
166
223
@@ -175,7 +232,7 @@ class Plan {
175
232
else {
176
233
urHTML += " notStarted" ;
177
234
}
178
- urHTML += "'>" ;
235
+ urHTML += "' ondragover='hoverOverPlan(event)' ondrop='dropOnPlan(event)' >" ;
179
236
urHTML += "<header><span class='termHeader'>Spring " + year . name + "</span><span class='termHours'>Hours: " + year . springHrs + "</span></header>" ;
180
237
urHTML += "<ul class='courses'>" ;
181
238
for ( let j = 0 ; j < year . spring . length ; j ++ ) {
@@ -184,7 +241,7 @@ class Plan {
184
241
if ( beforeCurrent ) {
185
242
this . hrsCompleted += course . hours ;
186
243
}
187
- urHTML += "<li>" + course . id + " " + course . name + "</li>" ;
244
+ urHTML += "<li draggable='true' ondragstart='dragFromPlan(event)' >" + course . id + ": " + course . name + "</li>" ;
188
245
}
189
246
urHTML += "</ul></div>" ;
190
247
@@ -199,15 +256,15 @@ class Plan {
199
256
else {
200
257
urHTML += " notStarted" ;
201
258
}
202
- urHTML += "'>" ;
259
+ urHTML += "' ondragover='hoverOverPlan(event)' ondrop='dropOnPlan(event)' >" ;
203
260
urHTML += "<header><span class='termHeader'>Summer " + year . name + "</span><span class='termHours'>Hours: " + year . summerHrs + "</span></header><ul class='courses'>" ;
204
261
for ( let j = 0 ; j < year . summer . length ; j ++ ) {
205
262
let course = year . summer [ j ] ;
206
263
this . hrsPlanned += course . hours ;
207
264
if ( beforeCurrent ) {
208
265
this . hrsCompleted += course . hours ;
209
266
}
210
- urHTML += "<li>" + course . id + " " + course . name + "</li>" ;
267
+ urHTML += "<li draggable='true' ondragstart='dragFromPlan(event)' >" + course . id + ": " + course . name + "</li>" ;
211
268
}
212
269
urHTML += "</ul></div></div>" ;
213
270
}
0 commit comments