You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.7 KiB
72 lines
1.7 KiB
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
|
|
|