mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
48 lines
1.9 KiB
CoffeeScript
48 lines
1.9 KiB
CoffeeScript
angular.module("ofn.admin").directive "ofnDisplayAs", (OptionValueNamer) ->
|
|
link: (scope, element, attrs) ->
|
|
|
|
scope.$watchCollection ->
|
|
return [
|
|
scope.$eval(attrs.ofnDisplayAs).unit_value_with_description
|
|
scope.variant.variant_unit_name
|
|
scope.variant.variant_unit_with_scale
|
|
]
|
|
, ->
|
|
[variant_unit, variant_unit_scale] = productUnitProperties()
|
|
[unit_value, unit_description] = variantUnitProperties(variant_unit_scale)
|
|
variant_object =
|
|
unit_value: unit_value
|
|
unit_description: unit_description
|
|
variant_unit_scale: variant_unit_scale
|
|
variant_unit: variant_unit
|
|
variant_unit_name: scope.variant.variant_unit_name
|
|
|
|
scope.placeholder_text = new OptionValueNamer(variant_object).name()
|
|
|
|
productUnitProperties = ->
|
|
# get relevant product properties
|
|
if scope.variant.variant_unit_with_scale?
|
|
match = scope.variant.variant_unit_with_scale.match(/^([^_]+)_([\d\.]+)$/)
|
|
if match
|
|
variant_unit = match[1]
|
|
variant_unit_scale = parseFloat(match[2])
|
|
else
|
|
variant_unit = scope.variant.variant_unit_with_scale
|
|
variant_unit_scale = null
|
|
else
|
|
variant_unit = variant_unit_scale = null
|
|
|
|
[variant_unit, variant_unit_scale]
|
|
|
|
variantUnitProperties = (variant_unit_scale)->
|
|
# get relevant variant properties
|
|
variant = scope.$eval(attrs.ofnDisplayAs) # Like this so we can switch between 'master' and 'variant'
|
|
if variant.unit_value_with_description?
|
|
match = variant.unit_value_with_description.match(/^([\d\.\,]+(?= |$)|)( |)(.*)$/)
|
|
if match
|
|
unit_value = parseFloat(match[1].replace(",", "."))
|
|
unit_value = null if isNaN(unit_value)
|
|
unit_value *= variant_unit_scale if unit_value && variant_unit_scale
|
|
unit_description = match[3]
|
|
[unit_value, unit_description]
|