@@ -20,7 +20,6 @@ class CSSFunctionRuleImpl extends CSSGroupingRuleImpl {
2020 super ( globalObject , args , privateData )
2121 const { parentStyleSheet } = this
2222 const { prelude : [ { name, value : parameters } , returnType ] , value } = privateData
23- const type = isOmitted ( returnType ) ? '*' : serializeCSSComponentValue ( returnType [ 1 ] )
2423 const rules = parseBlockContents ( value , this ) . map ( rule => {
2524 if ( Array . isArray ( rule ) ) {
2625 return CSSFunctionDeclarations . createImpl ( globalObject , undefined , {
@@ -32,8 +31,8 @@ class CSSFunctionRuleImpl extends CSSGroupingRuleImpl {
3231 return rule
3332 } )
3433 this . _parameters = parameters
34+ this . _returnType = returnType
3535 this . name = serializeIdentifier ( { value : name } )
36- this . returnType = type === 'type(*)' ? '*' : type
3736 this . cssRules = CSSRuleList . createImpl ( globalObject , undefined , { rules } )
3837 }
3938
@@ -42,24 +41,39 @@ class CSSFunctionRuleImpl extends CSSGroupingRuleImpl {
4241 * @see {@link https://drafts.csswg.org/cssom-1/#dom-cssrule-csstext }
4342 */
4443 get cssText ( ) {
45- const { _parameters, cssRules , name , returnType } = this
44+ const { _parameters, _returnType , cssRules , returnType, name } = this
4645 const rules = cssRules . _rules . map ( rule => rule . cssText ) . join ( ' ' )
4746 let string = `@function ${ name } (${ serializeCSSComponentValue ( _parameters ) } ) `
4847 if ( returnType !== '*' ) {
49- string += `returns ${ returnType } `
48+ string += `returns ${ serializeCSSComponentValue ( _returnType [ 1 ] ) } `
5049 }
5150 string += rules ? `{ ${ rules } }` : '{}'
5251 return string
5352 }
5453
54+ /**
55+ * @returns {string }
56+ * @see {@link https://drafts.csswg.org/css-mixins-1/#dom-cssfunctionrule-returntype }
57+ */
58+ get returnType ( ) {
59+ const { _returnType } = this
60+ if ( isOmitted ( _returnType ) ) {
61+ return '*'
62+ }
63+ const type = _returnType [ 1 ]
64+ if ( type . types [ 0 ] === '<function>' ) {
65+ return serializeCSSComponentValue ( type . value )
66+ }
67+ return serializeCSSComponentValue ( type )
68+ }
69+
5570 /**
5671 * @returns {FunctionParameter[] }
5772 * @see {@link https://drafts.csswg.org/css-mixins-1/#dom-cssfunctionrule-getparameters }
5873 */
5974 getParameters ( ) {
6075 const parameters = [ ]
6176 this . _parameters . forEach ( ( [ name , type , defaultValue ] ) => {
62- defaultValue = isOmitted ( defaultValue ) ? null : serializeCSSComponentValue ( defaultValue [ 1 ] ) ,
6377 name = serializeIdentifier ( name )
6478 if ( isOmitted ( type ) ) {
6579 type = '*'
@@ -68,6 +82,7 @@ class CSSFunctionRuleImpl extends CSSGroupingRuleImpl {
6882 } else {
6983 type = serializeCSSComponentValue ( type )
7084 }
85+ defaultValue = isOmitted ( defaultValue ) ? null : serializeCSSComponentValue ( defaultValue [ 1 ] )
7186 parameters . push ( { defaultValue, name, type } )
7287 } )
7388 return parameters
0 commit comments