Skip to main content
Go to Latest
File
import flexSpec from "./flex-spec.js";import Declaration from "../declaration.js";
class FlexDirection extends Declaration { /** * Return property name by final spec */ normalize() { return "flex-direction"; }
/** * Use two properties for 2009 spec */ insert(decl, prefix, prefixes) { let spec; [spec, prefix] = flexSpec(prefix); if (spec !== 2009) { return super.insert(decl, prefix, prefixes); } let already = decl.parent.some( (i) => i.prop === prefix + "box-orient" || i.prop === prefix + "box-direction", ); if (already) { return undefined; }
let v = decl.value; let orient, dir; if (v === "inherit" || v === "initial" || v === "unset") { orient = v; dir = v; } else { orient = v.includes("row") ? "horizontal" : "vertical"; dir = v.includes("reverse") ? "reverse" : "normal"; }
let cloned = this.clone(decl); cloned.prop = prefix + "box-orient"; cloned.value = orient; if (this.needCascade(decl)) { cloned.raws.before = this.calcBefore(prefixes, decl, prefix); } decl.parent.insertBefore(decl, cloned);
cloned = this.clone(decl); cloned.prop = prefix + "box-direction"; cloned.value = dir; if (this.needCascade(decl)) { cloned.raws.before = this.calcBefore(prefixes, decl, prefix); } return decl.parent.insertBefore(decl, cloned); }
/** * Clean two properties for 2009 spec */ old(prop, prefix) { let spec; [spec, prefix] = flexSpec(prefix); if (spec === 2009) { return [prefix + "box-orient", prefix + "box-direction"]; } else { return super.old(prop, prefix); } }}
FlexDirection.names = ["flex-direction", "box-direction", "box-orient"];
export default FlexDirection;