// Oauth 2.0 Authentication var access_token = ''; var token_type = ''; function get_auth() { jQuery.ajax({ type: "GET", url: "https://mywccapps.waubonsee.edu/apps/career-coach/index.php", async: false, success : function(response) { access_token = response["access_token"]; token_type = response["token_type"]; } }); } //const region = 'us/county/17201,17007,17111,17097,17037,17089,17043,17031,17099,17011,17155,17105,17093,17063,17197,17091,55059,18089,18127,18111,18073/'; const region = 'us/msa/16980,28100,36837,38700,40420/'; /* 16980 - Chicago-Naperville-Elgin 28100 - Kankakee 36837 - Ottawa 38700 - Pontiac 40420 - Rockford */ const emp_start_year = new Date().getFullYear().toString(); const emp_end_year = (parseInt(emp_start_year) + 10).toString(); // Remove wysiwyg br after form label jQuery('#careerCoachMenu').find('br').remove(); // Disable Select Box jQuery('#careerCoachSelect').prop('disabled', 'disabled'); jQuery('#careerCoachSelect').addClass('disabled'); // need to keep track of actually excluded careers var realExcludedCareers = []; function get_careers(pathways, excludedCareers, includedCareers) { /* Get Access Token */ jQuery.when(get_auth()).done(function(){ if ( pathways.length > 0 ) { for (i = 0; i < pathways.length; i++) { var url = "https://cc.emsiservices.com/careers/pathways/" + pathways[i]; axios.get(url, {headers: {Authorization: token_type + ' ' + access_token}}) .then(function (response) { //console.log("working") //console.log(response); var careerCount = response["data"]["data"]["attributes"]["onets"].length; var pathwayID = response["data"]["data"]["id"]; //console.log('pathway ' + pathwayID + ': ' + careerCount); jQuery('#careerCoachSelect').data( 'pathway' + pathwayID, careerCount ); build_career_list(response, excludedCareers); //console.log("done"); }) .catch(function (error) { console.log(error); }); } } if( includedCareers.length > 0 ) { for (i = 0; i < includedCareers.length; i++) { build_career_options_menu(includedCareers[i]); } } // Sort the options sort_career_options(pathways, includedCareers); }); } function build_career_list(response, excludedCareers) { //console.log('excluded careers: ' + excludedCareers); var onets = response["data"]["data"]["attributes"]["onets"]; if ( onets.length > 0 ) { for (i = 0; i < onets.length; i++) { var onetCode = onets[i]; //console.log('career in pathway: ' + onetCode); // if this career is not being specifically excluded... if ( jQuery.inArray(onetCode, excludedCareers) == -1 ) { // add to dropdown menu build_career_options_menu(onetCode); //console.log('added to dropdown menu: ' + onetCode); } // otherwise, add to actually excluded list else { //console.log('removed from exclusion list bc it does not exist: ' + onetCode); realExcludedCareers.push(onetCode); //console.log('excluded careers: ' + realExcludedCareers); } } } } function build_career_options_menu(onetCode) { var url = "https://cc.emsiservices.com/careers/" + region + onetCode + "?fields=humanized-title"; axios.get(url, {headers: {Authorization: token_type + ' ' + access_token}}) .then(function (response) { //console.log("working") //console.log(response); var career = response["data"]["data"]["attributes"]; if ( typeof career['humanized-title'] !== 'undefined' ) { jQuery('#careerCoachSelect').append(jQuery('').val(onetCode).text(career['humanized-title'] + ' (' +onetCode + ')')); } //console.log("done"); }) .catch(function (error) { //console.log(error); }); } function sort_career_options(pathways, includedCareers) { // Calculate number of careers retrieved var totalCareerCount = 0 - realExcludedCareers.length + includedCareers.length; if ( pathways.length > 0 ) { for (i = 0; i < pathways.length; i++) { var pathwayID = pathways[i]; var careerCount = jQuery('#careerCoachSelect').data( 'pathway' + pathwayID ); totalCareerCount += careerCount; } } //console.log('total exclusions when sorting: ' + realExcludedCareers.length); //console.log('total inclusions when sorting: ' + includedCareers.length); // How many options are loaded in dropdown? var totalCareerOptions = jQuery('#careerCoachSelect option').length; //console.log('total: ' + totalCareerCount); //console.log('options: ' + totalCareerOptions); // If total options (minus default select) match what was retrieved, then it is loaded and we can sort if( totalCareerCount == totalCareerOptions-1 ) { // remove "select" option jQuery("#careerCoachSelect option[value='']").remove(); var options = jQuery('#careerCoachSelect option'); var arr = options.map(function(_, o) { return { t: jQuery(o).text(), v: o.value }; }).get(); arr.sort(function(o1, o2) { return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0; }); options.each(function(i, o) { o.value = arr[i].v; jQuery(o).text(arr[i].t); }); //console.log('done sorting'); // Enabled Select Box jQuery('#careerCoachSelect').prop('disabled', false); jQuery('#careerCoachSelect').removeClass('disabled'); // Listen for changes jQuery('#careerCoachSelect').on('change', function() { jQuery.when(get_auth()).done(get_career_details(jQuery(this).val())); }); // Load first option get_career_details(jQuery("#careerCoachSelect option").first().val()); return true; } else { setTimeout(function() { sort_career_options(pathways, includedCareers) }, 250); //console.log('delay sorting'); return false; } } function get_career_details(onetCode) { var url = "https://cc.emsiservices.com/careers/" + region + onetCode + "?fields=humanized-title%2Cdescription%2Ctitle-slug"; axios.get(url, {headers: {Authorization: token_type + ' ' + access_token}}) .then(function (response) { //console.log("working") //console.log(response); var details = response["data"]["data"]["attributes"]; if ( typeof details['humanized-title'] !== 'undefined' ) { var title = details['humanized-title']; var slug = details['title-slug']; var desc = details['description']; jQuery('#careerCoachDesc').closest('.paragraph--type-p-icon-column').find('.title-wrapper h3').first().text(title); jQuery('#careerCoachDesc').html('
' + desc + '
Visit Career Coach for more details.
'); //jQuery('#careerCoachDesc').html('' + desc + '
Visit Career Coach for more details.
'); } // Load Annual Earnings Table jQuery('#careerCoachEarnings').empty(); query_earnings_table(onetCode); // Load Employment Projections Graph jQuery('#careerCoachEmployment').empty(); query_employment_graph(onetCode, title); //console.log("done"); }) .catch(function (error) { //console.log(error); }); } function query_earnings_table(onetCode) { var url = "https://cc.emsiservices.com/careers/" + region + onetCode + "?fields=annual-earnings"; axios.get(url, {headers: {Authorization: token_type + ' ' + access_token}}) .then(function (response) { //console.log("working") build_earnings_table(response); //console.log("done"); }) .catch(function (error) { //console.log(error); }); } function build_earnings_table(response) { var color_1 = "#c41230"; var color_2 = "#CCCCCC"; var color_3 = "#000000"; var color_4 = "#ececec"; var module_space = document.getElementById("careerCoachEarnings"); //this is the element that we shove everything into /* table_title = document.createElement("h4"); table_title.innerHTML = "Annual Earnings for " + career_title; table_title.style.color = color_1; table_title.style.textAlign = "center"; module_space.appendChild(table_title); */ var data_table = document.createElement("table"); data_table.id = "output-table" data_table.style.borderCollapse = "collapse"; data_table.style.width = "100%"; module_space.appendChild(data_table); var table_head = document.createElement("thead"); data_table.appendChild(table_head); var header_row = document.createElement("tr"); table_head.appendChild(header_row); var percentile_header = document.createElement("th"); percentile_header.innerHTML = "Percentile"; percentile_header.style.border = "1px solid " + color_2; percentile_header.style.color = color_3; percentile_header.style.padding = "8px"; var wage_header = document.createElement("th"); wage_header.innerHTML = "Annual Wage"; wage_header.style.border = "1px solid " + color_2; wage_header.style.color = color_3; wage_header.style.padding = "8px"; header_row.appendChild(percentile_header); header_row.appendChild(wage_header); var table_body = document.createElement("tbody"); data_table.appendChild(table_body); var data_points = response["data"]["data"]["attributes"]["annual-earnings"]; // This loop sorts the response so the data points are in order final_data = [[],[],[],[],[]] for (iterations = 0; iterations < data_points.length; iterations++) { if (data_points[iterations]["percentile"] == "10") { final_data[0] = [data_points[iterations]["percentile"], data_points[iterations]["earnings"].toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })] } else if (data_points[iterations]["percentile"] == "25") { final_data[1] = [data_points[iterations]["percentile"], data_points[iterations]["earnings"].toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })] } else if (data_points[iterations]["percentile"] == "50") { final_data[2] = [data_points[iterations]["percentile"], data_points[iterations]["earnings"].toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })] } else if (data_points[iterations]["percentile"] == "75") { final_data[3] = [data_points[iterations]["percentile"], data_points[iterations]["earnings"].toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })] } else if (data_points[iterations]["percentile"] == "90") { final_data[4] = [data_points[iterations]["percentile"], data_points[iterations]["earnings"].toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })] } } for (iterations = 0; iterations < final_data.length; iterations++) { var table_row = document.createElement("tr"); var percentile_cell = document.createElement("td"); percentile_cell.innerHTML = final_data[iterations][0] + "th"; percentile_cell.style.border = "1px solid " + color_2; percentile_cell.style.color = color_3; percentile_cell.style.padding = "8px"; if (iterations % 2 == 1) { percentile_cell.style.backgroundColor = color_4; } var wage_cell = document.createElement("td"); wage_cell.innerHTML = "$" + String(final_data[iterations][1]); wage_cell.style.border = "1px solid " + color_2; wage_cell.style.color = color_3; wage_cell.style.padding = "8px"; if (iterations % 2 == 1) { wage_cell.style.backgroundColor = color_4; } table_row.appendChild(percentile_cell); table_row.appendChild(wage_cell); table_body.appendChild(table_row); } /* powered_by = document.createElement("span"); powered_by.innerHTML = "Powered By" powered_by.style.color = "#6f6f70"; powered_by.style.fontSize = "10px"; powered_by.style.fontWeight = "300"; powered_by.style.textTransform = "uppercase"; powered_by.style.letterSpacing = "2px"; powered_by.style.marginRight = "4px"; powered_by.style.padding = "3px 0px"; powered_by.style.fontFamily = "Sailec,Acto,Avenir,Helvetica,Arial,Sans-Serif"; module_space.appendChild(powered_by) hyper_logo = document.createElement("a"); hyper_logo.href = "https://www.economicmodeling.com/" hyper_logo.target = "_blank" emsi_logo = document.createElement("img"); emsi_logo.src = "https://s3-us-west-2.amazonaws.com/emsi-api-build-files/Icon/logo-green.png" emsi_logo.style.width = "68px" emsi_logo.style.height = "16px" hyper_logo.appendChild(emsi_logo) module_space.appendChild(hyper_logo); */ } function query_employment_graph(onetCode, title) { var url = "https://cc.emsiservices.com/careers/" + region + onetCode + "?fields=employment"; axios.get(url, {headers: {Authorization: token_type + ' ' + access_token}}) .then(function (response) { //console.log("working") build_employment_graph(response, title); //console.log("done"); }) .catch(function (error) { //console.log(error); }); } function build_employment_graph(response, title) { var color_1 = "#c41230"; var color_2 = "#000000"; var color_3 = "#CCCCCC"; var color_4 = "#c41230"; var module_space = document.getElementById("careerCoachEmployment"); var graph_canvas = document.createElement("canvas"); graph_canvas.id = "employment-graph"; graph_canvas.style.width = 400; graph_canvas.style.height = 400; module_space.appendChild(graph_canvas); var data_points = response["data"]["data"]["attributes"]["employment"]; //console.log(data_points); var x_axis = []; var y_axis = []; for (iterations = emp_start_year; iterations <= emp_end_year; iterations++) { for (data_iterations = 0; data_iterations < data_points.length; data_iterations++) { if (iterations == data_points[data_iterations]["year"]) { x_axis.push(data_points[data_iterations]["year"]); y_axis.push(data_points[data_iterations]["number"]); } } } var ctx = document.getElementById('employment-graph').getContext('2d'); //console.log(y_axis) var myLineChart = new Chart(ctx, { type: 'line', data: { labels: x_axis, datasets: [{ data: y_axis, fill: false, borderColor: color_4 }], }, options: { legend: {display: false}, responsive:true, maintainAspectRatio: true, title: {display: false, text: `Employment for ${title}`, fontColor: color_1}, scales: { xAxes: [{ scaleLabel: { labelString: 'Year', display: true, fontColor: color_1 }, ticks: { fontColor: color_2, }, gridLines: { color: color_3 } }], yAxes: [{ scaleLabel: { labelString: 'Employment', display: true, fontColor: color_1 }, ticks: { fontColor: color_2 }, gridLines: { color: color_3 } }] } } }); /* powered_by = document.createElement("span"); powered_by.innerHTML = "Powered By" powered_by.style.color = "#6f6f70"; powered_by.style.fontSize = "10px"; powered_by.style.fontWeight = "300"; powered_by.style.textTransform = "uppercase"; powered_by.style.letterSpacing = "2px"; powered_by.style.marginRight = "4px"; powered_by.style.padding = "3px 0px"; powered_by.style.fontFamily = "Sailec,Acto,Avenir,Helvetica,Arial,Sans-Serif"; module_space.appendChild(powered_by) hyper_logo = document.createElement("a"); hyper_logo.href = "https://www.economicmodeling.com/" hyper_logo.target = "_blank" emsi_logo = document.createElement("img"); emsi_logo.src = "https://s3-us-west-2.amazonaws.com/emsi-api-build-files/Icon/logo-green.png" emsi_logo.style.width = "68px" emsi_logo.style.height = "16px" hyper_logo.appendChild(emsi_logo) module_space.appendChild(hyper_logo); */ }