@@ -65,12 +65,7 @@ public extension HTMLElementAttribute {
6565 case " disinherit " : self = . disinherit( string ( ) )
6666 case " encoding " : self = . encoding( string ( ) )
6767 case " ext " : self = . ext( string ( ) )
68- case " headers " : // TODO: fix
69- //let dictionary = expression.dictionary!
70- var js : Bool = false
71- var headers : [ String : String ] = [ : ]
72- self = . headers( js: js, headers)
73- break
68+ case " headers " : self = . headers( js: boolean ( ) ?? false , arguments. last!. expression. dictionary_string_string ( context: context, key: key) )
7469 case " history " : self = . history( enumeration ( ) )
7570 case " historyElt " : self = . historyElt( boolean ( ) )
7671 case " include " : self = . include( string ( ) )
@@ -118,46 +113,20 @@ public extension HTMLElementAttribute {
118113 }
119114 self = .request(js: javascript, timeout: timeout, credentials: credentials, noHeaders: noHeaders)
120115 break*/
121- case " sync " : // TODO: fix
122- return nil
123- /*
124- let string:String = literal()
125- let values:[Substring] = string.split(separator: ",")
126- var key:Substring = values[0]
127- key.removeLast() // "
128- var strategy:SyncStrategy? = nil
129- var strategy_string:Substring = values[1].split(separator: ":")[1]
130- if !strategy_string.hasSuffix("nil") {
131- while (strategy_string.first?.isWhitespace ?? false) || strategy_string.first == "." {
132- strategy_string.removeFirst()
133- }
134- strategy = SyncStrategy(rawValue: String(strategy_string))
135- }
136- self = .sync(String(key), strategy: strategy)
137- break*/
116+ case " sync " :
117+ guard let s: String = string ( ) else { return nil }
118+ self = . sync( s, strategy: arguments. last!. expression. enumeration ( context: context, key: key, arguments: arguments) )
138119 case " validate " : self = . validate( enumeration ( ) )
139120
140121 case " get " : self = . get( string ( ) )
141122 case " post " : self = . post( string ( ) )
142- case " on " , " onevent " : // TODO: fix
143- return nil
144- /*
145- let string:String = literal()
146- let values:[Substring] = string.split(separator: ",")
147- let event_string:String = String(values[0])
148- var value:String = String(string[values[1].startIndex...])
149- while (value.first?.isWhitespace ?? false) || value.first == "\"" {
150- value.removeFirst()
151- }
152- value.removeLast()
123+ case " on " , " onevent " :
124+ guard let s: String = arguments. last!. expression. string ( context: context, key: key) else { return nil }
153125 if key == " on " {
154- let event:Event = Event(rawValue: event_string)!
155- self = .on(event, value)
126+ self = . on( enumeration ( ) , s)
156127 } else {
157- let event:HTMLElementAttribute.Extra.event = .init(rawValue: event_string)!
158- self = .onevent(event, value)
128+ self = . onevent( enumeration ( ) , s)
159129 }
160- break*/
161130 case " pushURL " : self = . pushURL( enumeration ( ) )
162131 case " select " : self = . select( string ( ) )
163132 case " selectOOB " : self = . selectOOB( string ( ) )
@@ -230,7 +199,7 @@ public extension HTMLElementAttribute {
230199 case . encoding( let value) : return value
231200 case . ext( let value) : return value
232201 case . headers( let js, let headers) :
233- return ( js ? " js: " : " " ) + " { " + headers. map ( { " \\ \" " + $0 . key + " \\ \ ": \\ \" " + $0 . value + " \\ \" " } ) . joined ( separator: " , " ) + " } "
202+ return ( js ? " js: " : " " ) + " { " + headers. map ( { item in #"\" \#( item . key) \ ":\" \#( item . value) \""# } ) . joined ( separator: " , " ) + " } "
234203 case . history( let value) : return value? . rawValue
235204 case . historyElt( let value) : return value ?? false ? " " : nil
236205 case . include( let value) : return value
@@ -273,5 +242,19 @@ public extension HTMLElementAttribute {
273242 case . ws( let value) : return value? . htmlValue
274243 }
275244 }
245+
246+ public var htmlValueIsVoidable : Bool {
247+ switch self {
248+ case . disable( _) , . historyElt( _) , . preserve( _) :
249+ return true
250+ case . ws( let value) :
251+ switch value {
252+ case . send( _) : return true
253+ default : return false
254+ }
255+ default :
256+ return false
257+ }
258+ }
276259 }
277260}
0 commit comments