solar / FTV / bin / ui.js
ui.js
Raw
var fs  = nw.require('fs');
var programPath = process.cwd();
var horizonData = null;

document.on('DOMContentLoaded', function(event) {

	loadDataFromFile(programPath + "/ftv/" + "horizon_hamry.json", function(data) {

		horizonData = data;
		//var cl = findClosest(horizonData, 20);
		//console.log(cl);

		let points = [];

		horizonData.loopEach(function(val) {

			points.push([val["A"], val["H_hor"]]);

		});

		drawGraph(
			$('#horizont'), 
			[
				{
					name: "hor", 
					unit: "deg", 
					style: {
						color: "#a31cda", 
						label: "all",
						labelVisibility: "pop"
					},
					points: points
				}
			], 
			0, {
				yMin: 0,
				yMax: 45,
				xMin: -180,
				xMax: 180
			}
		);

	});

	// *** UI *** //
	$(".c--collapse-button").on("click", function(event) {

		event.preventDefault();

		this.getSiblings('.c--content').classList.toggle('hidden');

	});

	$(".t--tab").on("click", function(event) {

		event.preventDefault();

		$(".t--head .active").classList.remove("active");
		this.classList.add("active");
		let tab = this.getAttribute('href').substring(1);
		//console.log(tab, document.getElementById(tab));

		$(".t--content.active").classList.remove("active");
		
		document.getElementById(tab).classList.add("active");

	});

	/*var citySel = $('select[name="mesto"]');
	var option = document.createElement("OPTION");    

	Object.entries(places).forEach(function(val, key) {

		let cln = option.cloneNode(true);

		cln.setAttribute("value", val[0]);
		cln.innerText = val[1].title;

		citySel.append(cln);

	});*/

	var elem = parseHTML([{ 
	            cat: "city"
	        }].map(tpl.advSelCity).join(''));

	$('#popup').append(elem);

	var elemFV = parseHTML([{ 
	            cat: "fv-model"
	        }].map(tpl.advSelCity).join(''));

	$('#popup').append(elemFV);

	var citySel = $('.as--option-content')[0];
	var fvSel = $('.as--option-content')[1];
	var option = document.createElement("div");    

	Object.entries(pd.places).forEach(function(val, key) {

		let cln = option.cloneNode(true);

		cln.setAttribute("class", "as--option");
		cln.setAttribute("data-value", val[0]);
		cln.innerText = val[1].title;

		citySel.append(cln);

	});

	pd.FVModels.forEach(function(val, key) {

		let manufacturer = val['manufacturer'];
		let mKey = key;

		if(val.models) {

			val.models.forEach(function(val, key) {

				let cln = option.cloneNode(true);

				cln.setAttribute("class", "as--option");
				cln.setAttribute("data-value", mKey);
				cln.setAttribute("data-model", key);
				cln.innerText = manufacturer + " " + val['model'];

				fvSel.append(cln);

			});

		}


	});

	$('.as--search-container input').on('keyup', function(event) {

		if(event.keyCode == 13) {

			let options = this.parentNode.parentNode.find(".as--option-content").children;

			for(opt in options) {

				if(!options[opt].classList.contains('hidden')) {

					options[opt].trigger('click');

					break;

				}
			};

		}

	});

	$('.as--search-container input').on('input', function(event) {
		
		var input, filter, table, tr, td, i, txtValue;
		input  = this;
		filter = input.value.toUpperCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
		table  = this.parentNode.parentNode.find(".as--option-content");
		tr     = table.getElementsByClassName("as--option");

		// Loop through all table rows, and hide those who don't match the search query
		for(i = 0; i < tr.length; i++) {

			txtValue = tr[i].textContent || tr[i].innerText;

			if(txtValue.toUpperCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").indexOf(filter) > -1) {

				tr[i].classList.remove("hidden");

			}else{

				tr[i].classList.add("hidden");

			}

		}

	});

	$('.btn.catalog.city').on('click', function(event) {

		let pos = this.getBoundingClientRect();

		$('.advanced-select.city').style.left = (pos.left + pos.width) + "px";
		$('.advanced-select.city').style.top  = (pos.top - 4) + "px";
		$('.advanced-select.city').classList.toggle("hidden");

		$('.advanced-select.city input[type="search"]').focus();

	});

	$('.btn.catalog.fv-model').on('click', function(event) {

		let pos = this.getBoundingClientRect();

		$('.advanced-select.fv-model').style.left = (pos.left + pos.width) + "px";
		$('.advanced-select.fv-model').style.top  = (pos.top - 4) + "px";
		$('.advanced-select.fv-model').classList.toggle("hidden");

		$('.advanced-select.fv-model input[type="search"]').focus();

	});

	$('.city .as--option').on('mouseover', function() {

		let val = this.getAttribute('data-value');
		let place = pd.places[val];
		let c = $('.advanced-select.city');
		let elem = c.find('.as--content');

		elem.find('input[name="title"]').value  = place.title;
		elem.find('input[name="z_f"]').value    = place.cord[0];
		elem.find('input[name="z_g"]').value    = place.cord[1];
		elem.find('input[name="nvyska"]').value = place.elev;
		elem.find('input[name="tau_year"]').value = place.tau_skut_year;

		if(place.tau_skut_day) {
			elem.find('input[name="sundur_daily"]').checked = true;
		}else{
			elem.find('input[name="sundur_daily"]').checked = false;
		}

		if(place.tau_skut_month) {
			elem.find('input[name="sundur_monthly"]').checked = true;
		}else{
			elem.find('input[name="sundur_monthly"]').checked = false;
		}

		if(place.t_es_day) {
			elem.find('input[name="temp_daily"]').checked = true;
		}else{
			elem.find('input[name="temp_daily"]').checked = false;
		}

		if(place.t_es) {
			elem.find('input[name="temp_monthly"]').checked = true;
		}else{
			elem.find('input[name="temp_monthly"]').checked = false;
		}

		if(place.pressure) {
			elem.find('input[name="pressure_monthly"]').checked = true;
		}else{
			elem.find('input[name="pressure_monthly"]').checked = false;
		}

	});

	$('.city .as--option').on('click', function() {

		let val = this.getAttribute('data-value');
		let place = pd.places[val];

		$('input[name="mesto_nazev"]').value  = place.title;
		$('input[name="mesto_name"]').value   = val;
		$('input[name="mesto_zsirka"]').value = place.cord[0];
		$('input[name="mesto_zdelka"]').value = place.cord[1];
		$('input[name="mesto_nvyska"]').value = place.elev;

		for(let m = 0; m < 12; ++m) {

			$('input[name="mesto_tau_skut-' + (m + 1) + '"]').value = place.tau_skut_month[m];

		}

		if(place.pressure) {

			for(let m = 0; m < 12; ++m) {

				$('input[name="pressure-' + (m + 1) + '"]').value = place.pressure[m];

			}

		}else{

			let p_0 = 101.325;
			let pressureRatioAprox = Math.exp(-place.elev/8434.5);
			let pressureValAprox = (p_0 * pressureRatioAprox * 10).toFixed(2);

			for(let m = 0; m < 12; ++m) {

				$('input[name="pressure-' + (m + 1) + '"]').value = pressureValAprox;

			}

		}

		if(place.t_es) {

			for(let m = 0; m < 12; ++m) {

				$('input[name="tes-' + (m + 1) + '"]').value = place.t_es[m];

			}

		}else{

			for(let m = 0; m < 12; ++m) {

				$('input[name="tes-' + (m + 1) + '"]').value = pd.temp.t_es[m];

			}

		}

		$('.advanced-select.city').classList.add("hidden");

		$('.advanced-select.city input[type="search"]').value = "";
		$('.advanced-select.city input[type="search"]').trigger("input");

	});

	$('.fv-model .as--option').on('click', function() {

		let mKey = this.getAttribute('data-value');
		let key = parseInt(this.getAttribute('data-model'));
		let gModel = pd.FVModels[mKey];
		let model = gModel.models[key];

		$('input[name="fv-name"]').value = 	gModel.manufacturer + " " + model.model;
		$('input[name="eta_ref"]').value = 	model.atSTC.EFF;
		$('input[name="gamma"]').value = 	gModel.TCoPMAX;
		$('input[name="t_FV"]').value = 	gModel.NOCT;
		$('input[name="A_FV_s"]').value = 	gModel.A;

		$('.advanced-select.fv-model').classList.add("hidden");

		$('.advanced-select.fv-model input[type="search"]').value = "";
		$('.advanced-select.fv-model input[type="search"]').trigger("input");

	});

	$('#calc').on('click', function() {

		mainCalc();

	});

	$('select[name="Z"]').on(['input', 'click'], function(event) {

		let val = this.value;

		for(let m = 0; m < 12; ++m) {

			$('input[name="Z-' + (m + 1) + '"]').value = pd.Z[val][m];

		}

	});

	$('select[name="albedo"]').on(['input', 'click'], function(event) {

		let val = this.value;

		for(let m = 0; m < 12; ++m) {

			$('input[name="albedo-' + (m + 1) + '"]').value = pd.albedo[val][m];

		}

	});

	// 
	$('.city .as--option')[20].trigger('click');
	$('.fv-model .as--option')[6].trigger('click');
	//$('select[name="Z"]').children[1].children[2].setAttribute('selected', 'selected');
	$('select[name="Z"]').children[0].children[3].setAttribute('selected', 'selected');
	$('select[name="Z"]').trigger("click");
	$('select[name="albedo"]').children[1].children[1].setAttribute('selected', 'selected');
	$('select[name="albedo"]').trigger("click");

	setTimeout(function() {

		$('#calc').trigger('click');
		
	}, 100)

});