-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* innerHTML / light DOM support * refactor
- Loading branch information
1 parent
9642a2e
commit 6e2f0ee
Showing
5 changed files
with
166 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
/* | ||
* Use Case | ||
* Run wcc against nested custom elements using just innerHTML to intentionally NOT render Shadow DOM. | ||
* | ||
* User Result | ||
* Should return the expected HTML with no template tags or Shadow Roots. | ||
* | ||
* User Workspace | ||
* src/ | ||
* components/ | ||
* navigation.js | ||
* header.js | ||
* pages/ | ||
* index.js | ||
*/ | ||
import chai from 'chai'; | ||
import { JSDOM } from 'jsdom'; | ||
import { renderToString } from '../../../src/wcc.js'; | ||
|
||
const expect = chai.expect; | ||
|
||
describe('Run WCC For ', function() { | ||
const LABEL = 'Nested Custom Element using only innerHTML (no Shadow DOM)'; | ||
let dom; | ||
|
||
before(async function() { | ||
const { html } = await renderToString(new URL('./src/pages/index.js', import.meta.url)); | ||
|
||
dom = new JSDOM(html); | ||
}); | ||
|
||
describe(LABEL, function() { | ||
it('should not have any <template> tags within the document', function() { | ||
expect(dom.window.document.querySelectorAll('template').length).to.equal(0); | ||
}); | ||
|
||
describe('static page content', function() { | ||
it('should have the expected static content for the page', function() { | ||
expect(dom.window.document.querySelector('h1').textContent).to.equal('Home Page'); | ||
}); | ||
}); | ||
|
||
describe('custom header element with nested navigation element', function() { | ||
let headerContentsDom; | ||
|
||
before(function() { | ||
headerContentsDom = new JSDOM(dom.window.document.querySelectorAll('header')[0].innerHTML); | ||
}); | ||
|
||
it('should have a <header> tag within the document', function() { | ||
expect(dom.window.document.querySelectorAll('header').length).to.equal(1); | ||
}); | ||
|
||
it('should have expected content within the <header> tag', function() { | ||
const content = headerContentsDom.window.document.querySelector('a h4').textContent; | ||
|
||
expect(content).to.contain('My Personal Blog'); | ||
}); | ||
|
||
describe('nested navigation element', function() { | ||
let navigationContentsDom; | ||
|
||
before(function() { | ||
navigationContentsDom = new JSDOM(dom.window.document.querySelectorAll('wcc-navigation')[0].innerHTML); | ||
}); | ||
|
||
it('should have a <nav> tag within the <template> shadowroot', function() { | ||
expect(navigationContentsDom.window.document.querySelectorAll('nav').length).to.equal(1); | ||
}); | ||
|
||
it('should have three links within the <nav> element', function() { | ||
const links = navigationContentsDom.window.document.querySelectorAll('nav ul li a'); | ||
|
||
expect(links.length).to.equal(3); | ||
}); | ||
}); | ||
}); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
import './navigation.js'; | ||
|
||
class Header extends HTMLElement { | ||
connectedCallback() { | ||
this.innerHTML = this.render(); | ||
} | ||
|
||
render() { | ||
return ` | ||
<header> | ||
<div> | ||
<a href="/"> | ||
<img src="/www/assets/greenwood-logo.jpg" alt="Greenwood logo"/> | ||
<h4>My Personal Blog</h4> | ||
</a> | ||
</div> | ||
<wcc-navigation></wcc-navigation> | ||
<div class="social"> | ||
<a href="https://github.com/ProjectEvergreen/greenwood"> | ||
<img | ||
src="https://img.shields.io/github/stars/ProjectEvergreen/greenwood.svg?style=social&logo=github&label=github" | ||
alt="Greenwood GitHub badge" | ||
class="github-badge"/> | ||
</a> | ||
</div> | ||
</header> | ||
`; | ||
} | ||
} | ||
|
||
export { | ||
Header | ||
}; | ||
|
||
customElements.define('wcc-header', Header); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
const template = document.createElement('template'); | ||
|
||
template.innerHTML = ` | ||
<nav> | ||
<ul> | ||
<li><a href="/">Home</a></li> | ||
<li><a href="/about">About</a></li> | ||
<li><a href="/artists">Artists</a></li> | ||
<ul> | ||
</nav> | ||
`; | ||
|
||
class Navigation extends HTMLElement { | ||
connectedCallback() { | ||
this.appendChild(template.content.cloneNode(true)); | ||
} | ||
} | ||
|
||
export { | ||
Navigation | ||
}; | ||
|
||
customElements.define('wcc-navigation', Navigation); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
import '../components/header.js'; | ||
|
||
export default class HomePage extends HTMLElement { | ||
|
||
connectedCallback() { | ||
this.innerHTML = this.getTemplate(); | ||
} | ||
|
||
getTemplate() { | ||
return ` | ||
<wcc-header></wcc-header> | ||
<h1>Home Page</h1> | ||
`; | ||
} | ||
} |