open-nomad/ui/app/utils/properties/glimmer-style-string.js
2023-04-10 15:36:59 +00:00

39 lines
945 B
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: MPL-2.0
*/
import { htmlSafe } from '@ember/template';
// A decorator for transforming an object into an html
// compatible style attribute string.
//
// ex. @styleString
// get styleStr() {
// return { color: '#FF0', 'border-width': '1px' }
// }
export default function styleString(target, name, descriptor) {
if (!descriptor.get) throw new Error('styleString only works on getters');
const orig = descriptor.get;
descriptor.get = function () {
const styles = orig.apply(this);
let str = '';
if (styles) {
str = Object.keys(styles)
.reduce(function (arr, key) {
const val = styles[key];
arr.push(
key + ':' + (typeof val === 'number' ? val.toFixed(2) + 'px' : val)
);
return arr;
}, [])
.join(';');
}
return htmlSafe(str);
};
return descriptor;
}