1 2// add listeners to each instance of degree picker widget 3const dpForms = document.querySelectorAll(".degreePicker"); 4const dpCip2Divs = document.querySelectorAll("#cip2div"); 5const dpCip6Divs = document.querySelectorAll("#cip6div"); 6 7function cip2Fill(val, j) { 8 var slug1s = degreePickerMapping[val]; 9 dpForms[j].cip2.innerHTML = "<option value=''>Choose a major</option>" 10 11 // For each first level slug (cip2) 12 var slug1_count = Object.keys(slug1s).length; 13 for (var slug1 in slug1s) { 14 var slug2s = slug1s[slug1]; 15 16 // create optgroup for use later in case more than 1 first level slugs 17 var optgroup = document.createElement("optgroup"); 18 if(slug1=='other') { 19 optgroup.label = "Other " + cipSlugNames[val]; 20 } else { 21 optgroup.label = cipSlugNames[slug1]; 22 } 23 24 // For each second level slug (cip4) 25 for (var slug2 in slug2s) { 26 var option = document.createElement("option"); 27 option.value = slug2.replace("1", slug1); 28 option.text = slug2s[slug2]; 29 30 if (slug1_count > 1) { 31 optgroup.appendChild(option); 32 } else { 33 dpForms[j].cip2.appendChild(option); 34 } 35 36 } 37 38 if (slug1_count > 1) { 39 dpForms[j].cip2.appendChild(optgroup); 40 } 41 42 } 43} 44 45function cip6Fill(val, j) { 46 cip0 = dpForms[j].cip0.value; 47 48 for (slug1 in dpLevel3) { 49 let has_concentrations = false; 50 for (slug2 in dpLevel3[slug1]) { 51 52 if (slug2.replace("1", slug1) == val) { 53 has_concentrations = true; 54 55 for (slug3 in dpLevel3[slug1][slug2]) { 56 var option = document.createElement("option"); 57 option.value = slug3.replace("2", slug2).replace("1", slug1); 58 option.text = dpLevel3[slug1][slug2][slug3]; 59 dpForms[j].cip6.appendChild(option); 60 } 61 } 62 } 63 } 64 65 // if no concentrations found 66 if (dpForms[j].cip6.options.length == 1) { 67 for (var k = 0; k < dpCip6Divs.length; k++) { 68 dpCip6Divs[k].style.display = "none"; 69 } 70 dpForms[j].cip6.disabled = true; 71 72 } else { // concentrations found 73 for (var k = 0; k < dpCip6Divs.length; k++) { 74 dpCip6Divs[k].style.display = "block"; 75 } 76 dpForms[j].cip6.disabled = false; 77 } 78 79 dpForms[j].dpBtn.disabled = false; 80 dpOffersFetch(dpForms[j].cip2.value); 81} 82 83 84for (var i = 0; i < dpForms.length; i++) { 85 86 dpForms[i].cip0.addEventListener("change", function() { 87 for (var j = 0; j < dpForms.length; j++) { 88 dpForms[j].cip0.value = this.value; 89 90 // Reset lower elements of form till cip2 selected 91 for (var k = 0; k < dpCip6Divs.length; k++) { 92 dpCip6Divs[k].style.display = "none"; 93 } 94 document.getElementById("cip6").innerHTML = "<option value=''>No concentrations for this major</option>"; 95 document.getElementById("cip6").disabled = true; 96 dpForms[j].dpBtn.disabled = true; 97 98 if (this.value != '') { 99 cip2Fill(this.value, j) 100 101 dpLevel3Fetch(this.value); 102 103 dpForms[j].cip2.disabled = false; 104 for (var k = 0; k < dpCip2Divs.length; k++) { 105 dpCip2Divs[k].style.display = "block"; 106 } 107 108 109 } else { 110 dpForms[j].cip2.disabled = true; 111 dpForms[j].cip2.value = ""; 112 for (var k = 0; k < dpCip2Divs.length; k++) { 113 dpCip2Divs[k].style.display = "none"; 114 } 115 } 116 } 117 }); 118 119 dpForms[i].cip2.addEventListener("change", function() { 120 for (var j = 0; j < dpForms.length; j++) { 121 dpForms[j].cip2.value = this.value; 122 dpForms[j].cip6.innerHTML = "<option value=''>Choose an emphasis (optional)</option>"; 123 124 if (this.value != '') { 125 cip6Fill(this.value, j); 126 dpOffersFetch(dpForms[j].cip2.value); 127 } else { 128 dpForms[j].cip6.disabled = true; 129 dpForms[j].dpBtn.disabled = true; 130 } 131 } 132 }); 133 134 dpForms[i].cip6.addEventListener("change", function() { 135 for (var j = 0; j < dpForms.length; j++) { 136 dpForms[j].cip6.value = this.value; 137 if (this.value != '') { 138 dpOffersFetch(dpForms[j].cip6.value); 139 } else { 140 dpOffersFetch(dpForms[j].cip2.value); 141 } 142 } 143 }); 144 145 function dpSubmit(e) { 146 if (e.preventDefault) e.preventDefault(); 147 var formData = new FormData(e.target); 148 var formValues = Object.fromEntries(formData.entries()); 149 150 var major_slug = formValues.cip2; 151 if (formValues.cip6 != "" && typeof formValues.cip6 !== 'undefined') { 152 major_slug=formValues.cip6 153 } 154 155 // if major_slug starts with 'popular-majors', redirect to popular offers page 156 if (major_slug.startsWith("popular-majors/")) { 157 redirectToPopularOffers(major_slug); 158 return false;
159 } 160 var template = ""; 161 if (formValues.template) { 162 template = formValues.template; 163 } else if (Object.keys(dpOffers).length > 0) { 164 var offers = dpOffers["offers"].filter(item => item.relevance >= 0.7) 165 if (offers.length >= 1) { 166 template = "offers.html" 167 } 168 } 169 location.href="https://www.collegefactual.com/majors/" + major_slug + "/" + template; 170 return false; 171 } 172 173 if (dpForms[i].attachEvent) { 174 dpForms[i].attachEvent("submit", dpSubmit); 175 } else { 176 dpForms[i].addEventListener("submit", dpSubmit); 177 } 178} 179 180function redirectToPopularOffers(major_slug) { 181 categoriesIds = major_slug.replace("popular-majors/", ""); 182 var linkTemplate = "https://www.esyoh.com/find-schools/?widget_program_option=[category_ids]¤t_page_url=[current_page_url]&domain_id=collegefactual.com&src=custom_drop_down&placement=custom_drop_down"; 183 var current_page_url = encodeURIComponent(window.location.href); 184 var link = linkTemplate.replace("[category_ids]", categoriesIds).replace("[current_page_url]", current_page_url); 185 window.location.href = link; 186} 187 188 189let dpLevel3 = {}; 190function dpLevel3Fetch(slug0) { 191 if (slug0 != "general") { 192 fetch('/assets/js/dp/'+slug0+'.json') 193 .then(response => response.json()) 194 .then(data => { 195 dpLevel3Update(data); 196 }) 197 .catch(error => { 198 dpLevel3Update({}); 199 }); 200 } else { 201 dpLevel3Update({}); 202 } 203 function dpLevel3Update(response) { 204 dpLevel3 = response; 205 } 206} 207 208let dpOffers = {}; 209function dpOffersFetch(major_slug) { 210 var url = '/majors/' + major_slug + '/offers.json' 211 fetch(url) 212 .then(response => response.json()) 213 .then(data => { 214 dpOfferUpdate(data); 215 }) 216 .catch(error => { 217 dpOfferUpdate({}); 218 }); 219 220 function dpOfferUpdate(response) { 221 dpOffers = response; 222 } 223} 224 225// Preset degree picker dropdown. 226if (typeof metaValues !== 'undefined' && metaValues["mf_cip0_slug"]) { 227 for (var i = 0; i < dpForms.length; i++) { 228 if(metaValues["mf_cip0_slug"] != ""){ 229 dpForms[i].cip0.value = metaValues["mf_cip0_slug"]; 230 cip2Fill(dpForms[i].cip0.value, i); 231 dpForms[i].cip2.disabled = false 232 dpLevel3Fetch(dpForms[i].cip0.value); 233 if(metaValues["mf_cip4_slug"] != ""){ 234 dpForms[i].cip2.value = metaValues["mf_cip2_slug"] + "/" + metaValues["mf_cip4_slug"]; 235 dpForms[i].dpBtn.disabled = false 236 cip6Fill(dpForms[i].cip2.value, i); 237 for (var k = 0; k < dpCip6Divs.length; k++) { 238 dpCip6Divs[k].style.display = "block"; 239 } 240 dpForms[i].cip6.disabled = false 241 242 if(metaValues["mf_cip6_slug"] != ""){ 243 dpForms[i].cip6.value = metaValues["mf_major_slug"]; 244 } 245 } 246 } 247 } 248}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.