Line data Source code
1 : // @ts-check 2 : 3 : import Vue from "vue"; 4 : import { parser } from "@cern/ssvg-engine"; 5 : import { findIndex, isEmpty, map } from "lodash"; 6 : import { BaseLogger as logger } from "@cern/base-vue"; 7 : import d from "debug"; 8 : import { transformArgsStr } from "../../utils/ssvg"; 9 : 10 1 : const debug = d("app:edit"); 11 : 12 : /** 13 : * @typedef {any} EndEvent 14 : */ 15 : 16 1 : const component = /** @type {V.Constructor<any, any>} */ (Vue).extend({ 17 : name: "TransformEditValues", 18 : props: { value: { type: String, default: "" } }, 19 : /** 20 : * @return {{ 21 : * transformList: ssvg.$Transform[]|null, showReset: boolean 22 : * }} 23 : */ 24 1 : data() { return { transformList: null, showReset: false }; }, 25 : watch: { 26 : value() { 27 0 : try { 28 0 : this.transformList = parser.parseTTransform(this.value); 29 : } 30 : catch (e) { 31 0 : logger.error("failed to parse transform: " + e); 32 : } 33 : } 34 : }, 35 : methods: { 36 : onEdit() { 37 0 : if (!this.transformList) { return; } 38 0 : this.showReset = true; 39 0 : const idx = findIndex(this.transformList, 40 0 : (t) => (isEmpty(t.transform) || isEmpty(t.args))); 41 0 : if (idx >= 0) { 42 0 : debug("invalid transformation: %j", this.transformList[idx]); 43 : } 44 : else { 45 0 : this.$emit("edit", this.editValue()); 46 : } 47 : }, 48 : editValue() { 49 0 : return map(this.transformList, 50 0 : (transform) => `${transform.transform}(${transformArgsStr(transform.args, transform.units)})`).join(" "); 51 : }, 52 : /** 53 : * @param {ssvg.$Transform} transform 54 : * @param {number} index 55 : * @param {number} value 56 : */ 57 : setValue(transform, index, value) { 58 0 : transform.args[index] = value; 59 0 : this.onEdit(); 60 : }, 61 : /** 62 : * @param {ssvg.$Transform} transform 63 : * @param {number} index 64 : * @param {string} value 65 : */ 66 : setUnit(transform, index, value) { 67 0 : transform.units[index] = value; 68 0 : this.onEdit(); 69 : }, 70 : /** 71 : * @param {number[]} args 72 : * @param {(string|null)[]} units 73 : * @return {string} 74 : */ 75 : transformArgsStr(args, units) { 76 0 : return transformArgsStr(args, units); 77 : }, 78 : doReset() { 79 0 : this.showReset = false; 80 0 : this.$emit("reset"); 81 : } 82 : } 83 : }); 84 : export default component;