diff --git a/app/controllers/calculator_controller.rb b/app/controllers/calculator_controller.rb index f2148af..a3a6ffd 100644 --- a/app/controllers/calculator_controller.rb +++ b/app/controllers/calculator_controller.rb @@ -16,20 +16,43 @@ class CalculatorController < ApplicationController ingredient = Ingredient.find_by_ingredient_id(ingredient_id) end - data = {errors: [], output: ''} + data = {errors: Hash.new { |h, k| h[k] = [] }, output: ''} - begin - UnitConversion::with_custom_units(ingredient ? ingredient.custom_units : []) do - unit = UnitConversion.parse(input) + UnitConversion::with_custom_units(ingredient ? ingredient.custom_units : []) do + density_unit = nil + begin + if density + density_unit = UnitConversion.parse(density) + unless density_unit.density? + data[:errors][:density] << 'not a density unit' + density_unit = nil + end + end + rescue UnitConversion::UnparseableUnitError => e + data[:errors][:density] << 'invalid string' + end + + begin + input_unit = UnitConversion.parse(input) + rescue UnitConversion::UnparseableUnitError => e + data[:errors][:input] << 'invalid string' + end + + if !input_unit.nil? if output_unit.present? - unit = unit.convert(output_unit, density) - data[:output] = unit.to_s + begin + input_unit = input_unit.convert(output_unit, density_unit) + rescue UnitConversion::UnparseableUnitError => e + data[:errors][:output_unit] << e.message + end else - data[:output] = unit.auto_unit.to_s + input_unit = input_unit.auto_unit end end - rescue UnitConversion::UnparseableUnitError => e - data[:errors] << e.message + + if data[:errors].empty? + data[:output] = input_unit.to_s + end end render json: data diff --git a/app/javascript/components/App.vue b/app/javascript/components/App.vue index f77e325..595f614 100644 --- a/app/javascript/components/App.vue +++ b/app/javascript/components/App.vue @@ -18,6 +18,7 @@ import { mapMutations, mapState } from "vuex"; import api from "../lib/Api"; + import TWEEN from '@tweenjs/tween.js'; export default { data() { @@ -44,9 +45,15 @@ }, created() { + // Setup global animation loop + function animate () { + TWEEN.update(); + requestAnimationFrame(animate); + } + animate(); + if (this.user === null && this.authChecked === false) { this.checkAuthentication(); - } }, diff --git a/app/javascript/components/AppExpandTransition.vue b/app/javascript/components/AppExpandTransition.vue index 21d8cbd..d272200 100644 --- a/app/javascript/components/AppExpandTransition.vue +++ b/app/javascript/components/AppExpandTransition.vue @@ -1,55 +1,98 @@