123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- let flexSpec = require('./flex-spec')
- let Declaration = require('../declaration')
- 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']
- module.exports = FlexDirection
|