ajklein/webkit

ref needs to look in template owner document too

arv opened this issue · 5 comments

arv commented

In HTMLTemplateElement.cpp near line 214:

Element* element = m_template->treeScope()->getElementById(m_template->fastGetAttribute(refAttr));

This does not work correctly since we might need to check both the ownerDocument of the template element as well as the template contents owner

Maybe an example will show what I mean.

<template id=a>...</template>
<template>
<template id=b>...</template>
<template ref=a>...</template>
<template ref=b>...</template>
</template>

Also see https://code.google.com/p/mdv/source/browse/template_element.js#510

Yeah, template ref is a bit broken at the moment. I don't think looking at
the template contents owner will work, though, since none of the elements
are in the Document (and thus none of them actually have IDs, even if they
have an "id" attribute). The whole feature might need some rethinking given
the Template spec.

On Mon, Jan 7, 2013 at 11:01 AM, Erik Arvidsson notifications@github.comwrote:

In HTMLTemplateElement.cpp near line 214:

Element* element =
m_template->treeScope()->getElementById(m_template->fastGetAttribute(refAttr));

This does not work correctly since we might need to check both the
ownerDocument of the template element as well as the template contents owner

Maybe an example will show what I mean.

...

...
...
...

Also see
https://code.google.com/p/mdv/source/browse/template_element.js#510


Reply to this email directly or view it on GitHubhttps://github.com//issues/20.

arv commented

You are right. I wonder how the polyfill ever worked?

The polyfill had all templates in the same document and users of the
polyfill just needed to avoid doing anything that depended upon inertness
(the only trick was making templates display:none).

On Mon, Jan 7, 2013 at 1:38 PM, Erik Arvidsson notifications@github.comwrote:

You are right. I wonder how the polyfill ever worked?


Reply to this email directly or view it on GitHubhttps://github.com//issues/20#issuecomment-11973019.

arv commented

On Mon, Jan 7, 2013 at 4:41 PM, Adam Klein notifications@github.com wrote:

The polyfill had all templates in the same document and users of the
polyfill just needed to avoid doing anything that depended upon inertness
(the only trick was making templates display:none).

No, it worked after I moved stuff into .content too.

erik

I think the original idea of the feature was that ref would refer to elements in the top-level document (the one with a frame) only.

The branch could walk up the host-chain to make sure it was doing getElementById on that document. The shim can probably know by way of its top-down processing.