on master help sign in
Merge pull request #64 from fitzgen/className

Set `element.className = ".."` rather than call `element.setAttribute("class", "..")`

commit1aa4600a218be1947d3f818e1da3476a04d71db9 authorNick Fitzgerald <fitzgen@gmail.com> dateTue 23 Apr 2019, 15:13 (8 years ago) parente643100c326a80
3 files changed+29−6
js/change-list-interpreter.js+8 src/change_list/emitter.rs+9 src/change_list/mod.rs+12−6
js/change-list-interpreter.js+8
@@ -251,6 +251,14 @@ const OP_TABLE = [
251251 const child = parent.childNodes[n];
252252 child.remove();
253253 return i;
254+ },
255+
256+ // 23
257+ function setClass(interpreter, mem8, mem32, i) {
258+ const classId = mem32[i++];
259+ const className = interpreter.getCachedString(classId);
260+ top(interpreter.stack).className = className;
261+ return i;
254262 }
255263];
256264
src/change_list/emitter.rs+9
@@ -263,4 +263,13 @@ define_change_list_instructions! {
263263 /// child.remove()
264264 /// ```
265265 remove_child(n) = 22,
266+
267+ /// Stack: `[... Node] -> [... Node]`
268+ ///
269+ /// ```text
270+ /// class = getCachedString(class)
271+ /// node = stack.top()
272+ /// node.className = class
273+ /// ```
274+ set_class(class) = 23,
266275}
src/change_list/mod.rs+12−6
@@ -229,12 +229,18 @@ impl ChangeListBuilder<'_> {
229229
230230 pub fn set_attribute(&mut self, name: &str, value: &str) {
231231 debug_assert!(self.traversal_is_committed());
232− debug!("emit: set_attribute({:?}, {:?})", name, value);
233− let name_id = self.ensure_string(name);
234− let value_id = self.ensure_string(value);
235− self.state
236− .emitter
237− .set_attribute(name_id.into(), value_id.into());
232+ if name == "class" {
233+ let class_id = self.ensure_string(value);
234+ debug!("emit: set_class({:?})", value);
235+ self.state.emitter.set_class(class_id.into());
236+ } else {
237+ let name_id = self.ensure_string(name);
238+ let value_id = self.ensure_string(value);
239+ debug!("emit: set_attribute({:?}, {:?})", name, value);
240+ self.state
241+ .emitter
242+ .set_attribute(name_id.into(), value_id.into());
243+ }
238244 }
239245
240246 pub fn remove_attribute(&mut self, name: &str) {