PageSourceSearch

https://www.collegefactual.com/assets/js/dp.js?v=1784216646

js collegefactual.com collected 2026-09-24 09:09:47 UTC 7,499 bytes, 248 lines download raw bytes

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]&current_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.