Skip to content

Commit bf21b4c

Browse files
committed
started dragndrop
1 parent 030c951 commit bf21b4c

File tree

4 files changed

+74
-15
lines changed

4 files changed

+74
-15
lines changed

app/javascript/packs/myjs.js

Lines changed: 66 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ var plan = false;
33
var selectedMajor = "Comp. Sci.";
44
var selectedCatalogYear = 2017;
55
var catalogLoaded = false;
6+
var draggedCourse = false;
7+
var draggedReqOrigin = false;
8+
var draggedPlanOrigin = false;
69

710
$(getPlans);
811

@@ -68,6 +71,10 @@ function getPlans(){
6871
});
6972
$('.dataTables_scrollHeadInner').css('padding', '0');
7073
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)');
7178
}
7279

7380

@@ -79,16 +86,66 @@ function getPlans(){
7986

8087
$('#accordion').empty();
8188
for (let i in requirements){
82-
let courses = requirements[i].courses;
89+
let reqCourses = requirements[i].courses;
8390
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+
}
8698
}
8799
$('#accordion').append('<h3><a href="#">' + requirements[i].name + '</a></h3><div>' + itemHtml + '</div>').accordion('refresh');
88100
}
89101
});
90102
}
91103

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+
92149
class Course {
93150
constructor(desig, year, term){
94151
this.term = term;
@@ -151,7 +208,7 @@ class Plan {
151208
else{
152209
urHTML += " notStarted";
153210
}
154-
urHTML += "'>";
211+
urHTML += "' ondragover='hoverOverPlan(event)' ondrop='dropOnPlan(event)'>";
155212
urHTML += "<header><span class='termHeader'>Fall " + (year.name - 1) + "</span><span class='termHours'>Hours: " + year.fallHrs + "</span></header>";
156213
urHTML += "<ul class='courses'>";
157214
for (let j = 0; j < year.fall.length; j++){
@@ -160,7 +217,7 @@ class Plan {
160217
if (beforeCurrent){
161218
this.hrsCompleted += course.hours;
162219
}
163-
urHTML += "<li>" + course.id + " " + course.name + "</li>";
220+
urHTML += "<li draggable='true' ondragstart='dragFromPlan(event)'>" + course.id + ": " + course.name + "</li>";
164221
}
165222
urHTML += "</ul></div>";
166223

@@ -175,7 +232,7 @@ class Plan {
175232
else{
176233
urHTML += " notStarted";
177234
}
178-
urHTML += "'>";
235+
urHTML += "' ondragover='hoverOverPlan(event)' ondrop='dropOnPlan(event)'>";
179236
urHTML += "<header><span class='termHeader'>Spring " + year.name + "</span><span class='termHours'>Hours: " + year.springHrs + "</span></header>";
180237
urHTML += "<ul class='courses'>";
181238
for (let j = 0; j < year.spring.length; j++){
@@ -184,7 +241,7 @@ class Plan {
184241
if (beforeCurrent){
185242
this.hrsCompleted += course.hours;
186243
}
187-
urHTML += "<li>" + course.id + " " + course.name + "</li>";
244+
urHTML += "<li draggable='true' ondragstart='dragFromPlan(event)'>" + course.id + ": " + course.name + "</li>";
188245
}
189246
urHTML += "</ul></div>";
190247

@@ -199,15 +256,15 @@ class Plan {
199256
else{
200257
urHTML += " notStarted";
201258
}
202-
urHTML += "'>";
259+
urHTML += "' ondragover='hoverOverPlan(event)' ondrop='dropOnPlan(event)'>";
203260
urHTML += "<header><span class='termHeader'>Summer " + year.name + "</span><span class='termHours'>Hours: " + year.summerHrs + "</span></header><ul class='courses'>";
204261
for (let j = 0; j < year.summer.length; j++){
205262
let course = year.summer[j];
206263
this.hrsPlanned += course.hours;
207264
if (beforeCurrent){
208265
this.hrsCompleted += course.hours;
209266
}
210-
urHTML += "<li>" + course.id + " " + course.name + "</li>";
267+
urHTML += "<li draggable='true' ondragstart='dragFromPlan(event)'>" + course.id + ": " + course.name + "</li>";
211268
}
212269
urHTML += "</ul></div></div>";
213270
}

app/views/layouts/application.html.erb

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,10 @@
77
<%= csrf_meta_tags %>
88
<%= csp_meta_tag %>
99

10-
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
11-
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
1210
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"/>
1311
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
14-
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
15-
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
16-
<script type="text/javascript" src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js"></script>
12+
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
13+
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
1714

1815
</head>
1916

app/views/plans/_plan.json.jbuilder

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ json.catalog do
2020
json.year plan.catalog.year
2121
json.courses do
2222
plan.catalog.catalog_courses.each{ |catalogCourse| json.set! catalogCourse.course.designator do
23-
json.id catalogCourse.course.id
2423
json.designator catalogCourse.course.designator
2524
json.name catalogCourse.course.name
2625
json.description catalogCourse.course.description

db/seeds.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -955,6 +955,12 @@
955955
planCourse39.term = "Spring"
956956
planCourse39.year = 2021
957957
planCourse39.save!
958+
planCourse40 = PlanCourse.new
959+
planCourse40.plan_id = 4
960+
planCourse40.course_id = 33
961+
planCourse40.term = "Spring"
962+
planCourse40.year = 2018
963+
planCourse40.save!
958964

959965

960966
#alternate syntax

0 commit comments

Comments
 (0)