|  |  | @@ -1,5 +1,7 @@ | 
		
	
		
			
			|  |  |  | let selected = null; | 
		
	
		
			
			|  |  |  | let prevSelected = null; | 
		
	
		
			
			|  |  |  | let selectedEntity = null; | 
		
	
		
			
			|  |  |  | let prevSelectedEntity = null; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | let entityIndex = 0; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -527,8 +529,42 @@ function updateEntityElement(entity, element) { | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function updateRatios() { | 
		
	
		
			
			|  |  |  | if (config.showRatios) { | 
		
	
		
			
			|  |  |  | if (selectedEntity !== null && prevSelectedEntity !== null && selectedEntity !== prevSelectedEntity) { | 
		
	
		
			
			|  |  |  | let first = selectedEntity.currentView.height; | 
		
	
		
			
			|  |  |  | let second = prevSelectedEntity.currentView.height; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | let text = "" | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if (first.toNumber("meters") < second.toNumber("meters")) { | 
		
	
		
			
			|  |  |  | text += selectedEntity.name + " is " + math.format(math.divide(second, first), { precision: 5 }) + " times smaller than " + prevSelectedEntity.name; | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | text += selectedEntity.name + " is " + math.format(math.divide(first, second), { precision: 5 })+ " times taller than " + prevSelectedEntity.name; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | text += "\n"; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | let apparentHeight = math.multiply(math.divide(second, first), math.unit(6, "feet")); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (config.units === "metric") { | 
		
	
		
			
			|  |  |  | apparentHeight = apparentHeight.to("meters"); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | text += prevSelectedEntity.name + " looks " + math.format(apparentHeight, { precision: 3}) + " tall to " + selectedEntity.name; | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | document.querySelector(".ratio-info").innerText = text; | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | document.querySelector(".ratio-info").innerText = ""; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function updateSizes(dirtyOnly = false) { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updateRatios(); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (config.lockYAxis) { | 
		
	
		
			
			|  |  |  | config.y = 0; | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -1173,6 +1209,9 @@ function deselect(e) { | 
		
	
		
			
			|  |  |  | if (selected) { | 
		
	
		
			
			|  |  |  | selected.classList.remove("selected"); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (prevSelected) { | 
		
	
		
			
			|  |  |  | prevSelected.classList.remove("prevSelected"); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | document.getElementById("options-selected-entity-none").selected = "selected"; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -1191,12 +1230,24 @@ function deselect(e) { | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function select(target) { | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | if (prevSelected !== null) { | 
		
	
		
			
			|  |  |  | prevSelected.classList.remove("prevSelected"); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | prevSelected = selected; | 
		
	
		
			
			|  |  |  | prevSelectedEntity = selectedEntity; | 
		
	
		
			
			|  |  |  | deselect(); | 
		
	
		
			
			|  |  |  | selected = target; | 
		
	
		
			
			|  |  |  | selectedEntity = entities[target.dataset.key]; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | updateRatios(); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | document.getElementById("options-selected-entity-" + target.dataset.key).selected = "selected"; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (prevSelected !== null && config.showRatios && selected !== prevSelected) { | 
		
	
		
			
			|  |  |  | prevSelected.classList.add("prevSelected"); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | selected.classList.add("selected"); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | displayAttribution(selectedEntity.views[selectedEntity.view].image.source); | 
		
	
	
		
			
				|  |  | @@ -2188,6 +2239,23 @@ const settingsData = { | 
		
	
		
			
			|  |  |  | config.autoFitSize = param; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | }, | 
		
	
		
			
			|  |  |  | "show-ratios": { | 
		
	
		
			
			|  |  |  | name: "Show Ratios", | 
		
	
		
			
			|  |  |  | desc: "Show the proportions between the current selection and the most recent selection.", | 
		
	
		
			
			|  |  |  | type: "toggle", | 
		
	
		
			
			|  |  |  | default: true, | 
		
	
		
			
			|  |  |  | get value() { | 
		
	
		
			
			|  |  |  | return config.showRatios; | 
		
	
		
			
			|  |  |  | }, | 
		
	
		
			
			|  |  |  | set value(param) { | 
		
	
		
			
			|  |  |  | config.showRatios = param; | 
		
	
		
			
			|  |  |  | if (param) { | 
		
	
		
			
			|  |  |  | document.body.querySelector(".ratio-info").style.display = "block"; | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | document.body.querySelector(".ratio-info").style.display = "none"; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | }, | 
		
	
		
			
			|  |  |  | "units": { | 
		
	
		
			
			|  |  |  | name: "Default Units", | 
		
	
		
			
			|  |  |  | desc: "Which kind of unit to use by default", | 
		
	
	
		
			
				|  |  | @@ -2204,6 +2272,7 @@ const settingsData = { | 
		
	
		
			
			|  |  |  | }, | 
		
	
		
			
			|  |  |  | set value(param) { | 
		
	
		
			
			|  |  |  | config.units = param; | 
		
	
		
			
			|  |  |  | updateSizes(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | }, | 
		
	
		
			
			|  |  |  | "names": { | 
		
	
	
		
			
				|  |  | 
 |