1/* @license GPL-2.0-or-later https://www.drupal.org/licensing/faq */ 2const term_selection=document.getElementById("term-selection");term_selection.addEventListener("change",()=>{const selectedTerm=term_selection.value;const majorInputs=document.querySelectorAll(`[data-term]`);console.log(selectedTerm);reset_program_selection();majorInputs.forEach((input)=>{if(input.dataset.term===selectedTerm){input.removeAttribute("hidden");input.setAttribute("data-active","true");}else{input.setAttribute("hidden","hidden");input.setAttribute("data-active","false");}});});function reset_program_selection(reset_selector=true){if(reset_selector)document.querySelectorAll(".program-selector").forEach((input)=>{input.value="";});jQuery("#apply-note").remove();jQuery("#apply-link").attr("href","");jQuery("#apply-link").attr("hidden","hidden");}const csvStringToArray=(data)=>{const pattern=/(,|\r?\n|\r|^)(?:"([^"]*(?:""[^"]*)*)"|([^,\r\n]*))/gi;const result=[[]];let matches;while((matches=pattern.exec(data))){if(matches[1].length&&matches[1]!==",")result.push([]);const value=matches[2]!==undefined?matches[2].replace(/""/g,'"').trim():(matches[3]||"").trim();result[result.length-1].push(value);}return result;};function build_program_options_from_csv(){let csv=false;
2let filepath="/sites/default/files/2026-07/grad-program-apply-links.csv?"+Date.now();jQuery.ajax({url:filepath,async:false,success:function(csv_data){csv=csv_data;},error:function(){console.log("Failed to load calendar "+filename);csv=false;}});if(!csv)return false;let csv_array=csvStringToArray(csv);csv_array.shift();let unique_terms=get_unique_terms(csv_array);jQuery("#program-options").html("");unique_terms.forEach((term)=>{let term_value=term.replace(" ","-");let term_program_list=get_full_program_list(csv_array,term);let term_options=build_term_options(term_program_list);jQuery("#term-selection").append('<option value="'+term_value+'">'+term+"</option>");jQuery("#program-options").append('\ 3 <div data-term="'+term_value+'" hidden="">\ 4 <select class="program-selector" id="'+term_value+'" name="'+term_value+'" aria-labelledby="academic-program-label">\ 5 '+term_options+"\ 6 </select>\ 7 </div>");});document.querySelectorAll(".program-selector").forEach((input)=>{input.addEventListener("change",()=>{let target_url=input.value;let target_note=input.selectedOptions[0].getAttribute("data-note");reset_program_selection(false);if(target_url=="")return;if(target_note!=="")target_note='<p id="apply-note">'+target_note+"</p>";jQuery("#apply-output").prepend(target_note);jQuery("#apply-link").attr("href",target_url);jQuery("#apply-link").removeAttr("hidden");});});}function get_unique_terms(csv_array){let terms_list=[...new Set(csv_array.map((row)=>row[1]))];terms_list=terms_list.filter((item)=>item!=="All");return sort_terms(terms_list);}const seasonOrder={Winter:1,Spring:2,Summer:3,Fall:4};function parseSeasonYear(str){const [season,yearStr]=str.split(" ");return {year:parseInt(yearStr,10),seasonValue:seasonOrder[season]||0};}function sort_terms(terms_list){terms_list.sort((a,b)=>{const dateA=parseSeasonYear(a);const dateB=parseSeasonYear(b);if(dateA.year!==dateB.year)return dateA.year-dateB.year;return dateA.seasonValue-dateB.seasonValue;});return terms_list;}function get_full_program_list(csv_array,term){let return_array=csv_array.filter((row)=>row.includes(term));return return_array.concat(csv_array.filter((row)=>row.includes("All")));}function build_term_options(term){let term_data='<option value="" data-note="">Select a program...</option>';term.forEach((option)=>{let program_name=option[0];let application_url=option[2]?option[2]:"https://apply.ccsu.edu/apply";let apply_note=option[3]?option[3]:"";term_data+=`<option value="${application_url}" data-note="${apply_note}">${program_name}</option>`;});return term_data;}build_program_options_from_csv();;
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.