> > > (defun svg--append (svg node) > > + ;; id is expected to be unique. > > (let ((old (and (dom-attr node 'id) > > (dom-by-id svg > > (concat "\\`" (regexp-quote (dom-attr node > 'id)) > > "\\'"))))) > > (if old > > - ;; FIXME: This was (dom-set-attributes old (dom-attributes > node)) > > - ;; and got changed by commit > f7ea7aa11f6211b5142bbcfc41c580d75485ca56 > > - ;; without any explanation. > > - (setcdr (car old) (cdr node)) > > - (dom-append-child svg node))) > > + ;; Remove old node. New node might be a different type. > > + (mapc (lambda (a) > > + (dom-remove-node svg a)) > > + old)) > > + (dom-append-child svg node)) > > Hm... I think this is basically correct, but it's a behaviour change -- > previously svg--append wouldn't append if the ID already existed, but > would keep the save place in the structure, but with this change, it > really always appends. > > So I don't think that's quite right -- the old behaviour was OK, I think > (but undocumented). > Existing code doesn't ensure ids are unique. Furthermore, in case id is duplicated, only the attributes on the first tag gets replaced. That's a little unpredictable behaviour from an API perspective.