From ae72ca56462a3487995ed28096d0c385d79aefa9 Mon Sep 17 00:00:00 2001 From: Erik Isaksen Date: Sun, 15 Jan 2017 17:40:51 -0500 Subject: [PATCH 01/41] [podcasts] Adds TWP 121 - WebComponents.org Relaunch (#28) --- authors.js | 6 ++++++ .../121-the-webcomponentsorg-relaunch.html.md | 12 ++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 documents/podcasts/121-the-webcomponentsorg-relaunch.html.md diff --git a/authors.js b/authors.js index f7e5197..b9c44b3 100755 --- a/authors.js +++ b/authors.js @@ -665,6 +665,12 @@ module.exports = { gravatar:"e1709218ec4ecc612e5c9a6d5d59e68f", twitter: "EisenbergEffect" }, + sam_li: { + name: "Sam Li", + bio: "Sam is a Software Engineer on the Google Chrome team", + github: "787668", + twitter: "samdotli" + }, scott_miles: { name: "Scott Miles", bio: "Scott is a Software engineer in the Polymer team. He currently lives in Napa, CA.", diff --git a/documents/podcasts/121-the-webcomponentsorg-relaunch.html.md b/documents/podcasts/121-the-webcomponentsorg-relaunch.html.md new file mode 100644 index 0000000..096b372 --- /dev/null +++ b/documents/podcasts/121-the-webcomponentsorg-relaunch.html.md @@ -0,0 +1,12 @@ +--- +title: "121 The WebComponents.org Relaunch" +authors: [taylor_savage, sam_li, danny_blue, leon_revill] +podcast: "The Web Platform Podcast" +date: 2017-01-13 +original_date: 2017-01-13 +link: "http://thewebplatformpodcast.com/121-the-webcomponentsorg-relaunch" +category: podcasts +layout: single +--- + +WebComponents.org has long been a great resource for learning and understanding web components. Recently, Google & the Web Components community have worked hard to make the site a place not only to consume information on Web Components, but also to share your own components and consume others. \ No newline at end of file From d8381a26ba518284de9f48696a4492dc41a98f60 Mon Sep 17 00:00:00 2001 From: Sam Li Date: Tue, 17 Jan 2017 15:30:39 +1100 Subject: [PATCH 02/41] Add custom tag skate article (#29) * Add custom tag skate article * Add author * json :( --- ...uilding-a-custom-tag-input-with-skate-js.png | Bin 0 -> 39656 bytes authors.js | 5 +++++ ...ing-a-custom-tag-input-with-skate-js.html.md | 13 +++++++++++++ 3 files changed, 18 insertions(+) create mode 100644 assets/images/building-a-custom-tag-input-with-skate-js.png create mode 100644 documents/articles/building-a-custom-tag-input-with-skate-js.html.md diff --git a/assets/images/building-a-custom-tag-input-with-skate-js.png b/assets/images/building-a-custom-tag-input-with-skate-js.png new file mode 100644 index 0000000000000000000000000000000000000000..b0aa4757e1d4f67ee56308791f96f9f8a81654d0 GIT binary patch literal 39656 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%0Ai+ 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 literal 0 HcmV?d00001 diff --git a/authors.js b/authors.js index b9c44b3..d0c99c4 100755 --- a/authors.js +++ b/authors.js @@ -311,6 +311,11 @@ module.exports = { github: "598730", twitter: "guybedford" }, + hector_zarco: { + name: "Hector Zarco", + github: "1194982", + twitter: "zzarcon" + }, hidde_de_vries: { name: "Hidde de Vries", bio: "Hidde is web designer and developer, experienced with things like responsive web design, front-end development and progressive enhancement.", diff --git a/documents/articles/building-a-custom-tag-input-with-skate-js.html.md b/documents/articles/building-a-custom-tag-input-with-skate-js.html.md new file mode 100644 index 0000000..aea8cdb --- /dev/null +++ b/documents/articles/building-a-custom-tag-input-with-skate-js.html.md @@ -0,0 +1,13 @@ +--- +title: Building a custom tag input with Skate.js +authors: [hector_zarco] +date: 2017-1-4 +original_date: 2017-1-4 +image: building-a-custom-tag-input-with-skate-js.png +link: https://hackernoon.com/building-a-custom-tag-input-with-skate-js-fbd4cdf744f#.ytkckk3gc +category: articles +--- + +Are you lost trying to build and use Web Components? Skate.js uses the platform and sheds some light on it. + + From 7af8be0bede4354ca00a9a993c416a642ac6ee27 Mon Sep 17 00:00:00 2001 From: Sam Li Date: Thu, 19 Jan 2017 12:00:25 +1100 Subject: [PATCH 03/41] Fix skate link (#30) --- static/libraries.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/libraries.md b/static/libraries.md index e2e3ee2..8d28d7d 100644 --- a/static/libraries.md +++ b/static/libraries.md @@ -16,6 +16,6 @@ When choosing a web component library, make sure it has a large enough featurese * [Polymer](https://www.polymer-project.org/) is a web component library built by Google, with a simple element creation API. Polymer offers one- and two-way data binding into element templates, and provides shims for better cross-browser performance. - * [Skate.js](http://skate.js.org/) is a library built on top of the W3C web component specs that enables you to write functional and performant web components with a very small footprint. Skate is Inherently cross-framework compatible. For example, it works seamlessly with - and complements - React and other frameworks. + * [Skate.js](https://skatejs.gitbooks.io/skatejs/content/) is a library built on top of the W3C web component specs that enables you to write functional and performant web components with a very small footprint. Skate is Inherently cross-framework compatible. For example, it works seamlessly with - and complements - React and other frameworks. * [X-Tag](http://x-tag.github.io/) is a Microsoft supported, open source, JavaScript library that wraps the W3C standard Web Components family of APIs to provide a compact, feature-rich interface for rapid component development. While X-Tag offers feature hooks for all Web Component APIs (Custom Elements, Shadow DOM, Templates, and HTML Imports), it only requires Custom Element support to operate. In the absence of native Custom Element support, X-Tag uses a set of polyfills shared with Google's Polymer framework. From 5c55d46e15be6a736962d4c0dab7132a09ccaa8c Mon Sep 17 00:00:00 2001 From: Sam Li Date: Thu, 19 Jan 2017 14:03:57 +1100 Subject: [PATCH 04/41] Support filtering results by author --- app.js | 20 +++++++++++++++++++- gen.js | 2 +- mock-gen.js | 8 ++++---- test/test.js | 13 +++++++++++++ 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/app.js b/app.js index 892b043..abe9666 100644 --- a/app.js +++ b/app.js @@ -60,7 +60,7 @@ app.get('/content/*', function(request, response) { // Return full author metadata if (metadata.authors) { - for (var author of metadata.authors) + for (let author of metadata.authors) Object.assign(author, authors[author.id]); } @@ -98,6 +98,24 @@ app.get('/resources', function(request, response) { response.status(200).send(createResult(metadata.all, offset, limit)); }); +app.get('/resources/author/:author', function(request, response) { + response.header('Access-Control-Allow-Origin', '*'); + const offset = parseInt(request.query.offset) || 0; + const limit = parseInt(request.query.limit) || 10; + + let filtered = metadata.all.filter(function(item) { + if (!item.authors) + return false; + for (let author of item.authors) { + if (author.id == request.params.author) + return true; + } + return false; + }); + response.status(200).send( + createResult(filtered, offset, limit)); +}); + app.get('/resources/:bucket', function(request, response) { response.header('Access-Control-Allow-Origin', '*'); if (!metadata[request.params.bucket]) { diff --git a/gen.js b/gen.js index edb8958..3eed702 100644 --- a/gen.js +++ b/gen.js @@ -29,7 +29,7 @@ function processFiles(err, files) { let expandedAuthors = []; if (attributes.authors) { - for (var id of attributes.authors) { + for (let id of attributes.authors) { let author = authors[id]; if (!author) continue; diff --git a/mock-gen.js b/mock-gen.js index fad5c87..2e55ee2 100644 --- a/mock-gen.js +++ b/mock-gen.js @@ -2,7 +2,7 @@ module.exports = [ { 'title': 'test-article', 'authors': [ - { id: 'an_author' }, + {id: 'an_author'}, ], 'category': 'articles', 'relativePath': 'articles/test-article', @@ -10,8 +10,8 @@ module.exports = [ { 'title': 'excerpt-article', 'authors': [ - { id: 'first_author' }, - { id: 'second_author' }, + {id: 'first_author'}, + {id: 'second_author'}, ], 'category': 'articles', 'relativePath': 'articles/has-excerpt', @@ -19,7 +19,7 @@ module.exports = [ { 'title': 'valid-author', 'authors': [ - { id: 'aaron_frost' }, + {id: 'aaron_frost'}, ], 'category': 'articles', 'relativePath': 'articles/valid-author', diff --git a/test/test.js b/test/test.js index c5f0ca7..abf1587 100644 --- a/test/test.js +++ b/test/test.js @@ -143,4 +143,17 @@ describe('api/resources', function() { done(); }); }); + + it('should return filtered list by author', function(done) { + chai.request(server) + .get('/resources/author/aaron_frost') + .end(function(err, response) { + const header = response.header; + header.should.have.property('access-control-allow-origin', '*'); + response.should.have.status(200); + response.should.be.json; + JSON.parse(response.text).should.have.property('count', 1); + done(); + }); + }); }); From 26ef59a649a4ad1c68db49a23fc870fcef0167c7 Mon Sep 17 00:00:00 2001 From: Jordan Last Date: Thu, 16 Mar 2017 11:34:50 -0600 Subject: [PATCH 05/41] Universal Web Components article (#32) --- documents/articles/universal-web-components.html.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 documents/articles/universal-web-components.html.md diff --git a/documents/articles/universal-web-components.html.md b/documents/articles/universal-web-components.html.md new file mode 100644 index 0000000..253bdce --- /dev/null +++ b/documents/articles/universal-web-components.html.md @@ -0,0 +1,12 @@ +--- +title: Universal Web Components +authors: [jordan_last] +date: 2017-03-13 +original_date: 2017-03-06 +link: https://scotch.io/bar-talk/universal-web-components +category: articles +layout: single +tags: ['Custom Elements'] +--- + +Applications built from web components can be easy to understand, grow, and refactor, because they are easy to break up into modular and declarative pieces. They work well in the browser, but I believe there is far greater potential as they begin to spill out of the browser, into the desktop, server, and even embedded applications. From 87fed00c3f572e023ddd2d29e829ac3c94d9004b Mon Sep 17 00:00:00 2001 From: Sam Li Date: Thu, 16 Mar 2017 11:09:09 -0700 Subject: [PATCH 06/41] Add 2 articles (#34) --- .../images/custom-elements-interop-angular.png | Bin 0 -> 25279 bytes authors.js | 6 ++++++ .../custom-elements-interop-angular.html.md | 12 ++++++++++++ .../polymer-in-legacy-production.html.md | 12 ++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 assets/images/custom-elements-interop-angular.png create mode 100644 documents/articles/custom-elements-interop-angular.html.md create mode 100644 documents/articles/polymer-in-legacy-production.html.md diff --git a/assets/images/custom-elements-interop-angular.png b/assets/images/custom-elements-interop-angular.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ec7f025f9f1abf1cc4667994b01462e86e07b5 GIT binary patch literal 25279 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 t#r}Vl{U_l6x`qE*b=BU9ARsE!OY{H$ literal 0 HcmV?d00001 diff --git a/authors.js b/authors.js index d0c99c4..12b2284 100755 --- a/authors.js +++ b/authors.js @@ -293,6 +293,12 @@ module.exports = { github: "189541", twitter: "filipearaujo" }, + gerwin_sturm: { + name: "Gerwin Sturm", + bio: "Gerwin is a Google Developer Expert from Vienna, Austria.", + github: "809528", + twitter: "scarygami" + }, gil_fink: { name: "Gil Fink", bio: "Gil is a web developer and the founder of sparXys", diff --git a/documents/articles/custom-elements-interop-angular.html.md b/documents/articles/custom-elements-interop-angular.html.md new file mode 100644 index 0000000..a0b9894 --- /dev/null +++ b/documents/articles/custom-elements-interop-angular.html.md @@ -0,0 +1,12 @@ +--- +title: Custom Element Inter-op with Angular 2 +authors: [danny_blue] +date: 2017-03-16 +original_date: 2016-06-30 +link: https://medium.com/@dee_bloo/custom-element-inter-op-with-angular-2-ed75f013a9ba +category: articles +--- + +Learn how to use custom elements in Angular 2 + + diff --git a/documents/articles/polymer-in-legacy-production.html.md b/documents/articles/polymer-in-legacy-production.html.md new file mode 100644 index 0000000..2c3360a --- /dev/null +++ b/documents/articles/polymer-in-legacy-production.html.md @@ -0,0 +1,12 @@ +--- +title: Polymer in Production +authors: [gerwin_sturm] +date: 2017-03-16 +original_date: 2017-03-13 +link: https://codingwithgerwin.blogspot.com.au/2017/03/polymer-in-production.html +category: articles +--- + +Gerwin provides insight on how to bring web components & Polymer to a large legacy application. + + From c474958b6864f3ec3521ff8888237312bfb1952d Mon Sep 17 00:00:00 2001 From: Sam Li Date: Thu, 16 Mar 2017 11:09:20 -0700 Subject: [PATCH 07/41] Don't attempt to extract secure env variables on PRs (#33) * Only extract secure env variables on deploys * Fix build --- .travis.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 07d33ac..46ac545 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,10 +4,8 @@ node_js: cache: directories: - node_modules -before_install: -- openssl aes-256-cbc -K $encrypted_b0dab8baefe0_key -iv $encrypted_b0dab8baefe0_iv - -in client-secret.json.enc -out client-secret.json -d before_deploy: + - openssl aes-256-cbc -K $encrypted_b0dab8baefe0_key -iv $encrypted_b0dab8baefe0_iv -in client-secret.json.enc -out client-secret.json -d - node gen.js deploy: provider: gae From 776faa6f0cf31b758e6799530a00c8003b35d45a Mon Sep 17 00:00:00 2001 From: Sam Li Date: Thu, 16 Mar 2017 11:38:28 -0700 Subject: [PATCH 08/41] Update custom-elements-interop-angular.html.md --- documents/articles/custom-elements-interop-angular.html.md | 1 + 1 file changed, 1 insertion(+) diff --git a/documents/articles/custom-elements-interop-angular.html.md b/documents/articles/custom-elements-interop-angular.html.md index a0b9894..df5daa2 100644 --- a/documents/articles/custom-elements-interop-angular.html.md +++ b/documents/articles/custom-elements-interop-angular.html.md @@ -5,6 +5,7 @@ date: 2017-03-16 original_date: 2016-06-30 link: https://medium.com/@dee_bloo/custom-element-inter-op-with-angular-2-ed75f013a9ba category: articles +image: custom-elements-interop-angular.png --- Learn how to use custom elements in Angular 2 From 1e0e2a2cfd8bc44b66b1221ae5ea7bf394af05ca Mon Sep 17 00:00:00 2001 From: Avichay Eyal Date: Sat, 8 Apr 2017 02:13:04 +0300 Subject: [PATCH 09/41] Add slim.js to libraries.md (#37) --- static/libraries.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/static/libraries.md b/static/libraries.md index 8d28d7d..808e611 100644 --- a/static/libraries.md +++ b/static/libraries.md @@ -19,3 +19,5 @@ When choosing a web component library, make sure it has a large enough featurese * [Skate.js](https://skatejs.gitbooks.io/skatejs/content/) is a library built on top of the W3C web component specs that enables you to write functional and performant web components with a very small footprint. Skate is Inherently cross-framework compatible. For example, it works seamlessly with - and complements - React and other frameworks. * [X-Tag](http://x-tag.github.io/) is a Microsoft supported, open source, JavaScript library that wraps the W3C standard Web Components family of APIs to provide a compact, feature-rich interface for rapid component development. While X-Tag offers feature hooks for all Web Component APIs (Custom Elements, Shadow DOM, Templates, and HTML Imports), it only requires Custom Element support to operate. In the absence of native Custom Element support, X-Tag uses a set of polyfills shared with Google's Polymer framework. + + * [Slim.js](http://slimjs.com) Slim.js is a lightweight web component library that provides extended capabilities for components, such as data binding, using es6 native class inheritance. This library is focused for providing the developer the ability to write robust and native web components without the hassle of dependencies and an overhead of a framework. From 8560fe8768ed14479b883deca79dcfd41b2eaea9 Mon Sep 17 00:00:00 2001 From: Avichay Eyal Date: Mon, 10 Apr 2017 20:02:03 +0300 Subject: [PATCH 10/41] Adding slim.js also to libraries list on intro page (#38) --- static/introduction.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/static/introduction.md b/static/introduction.md index e91809b..0fa26d6 100644 --- a/static/introduction.md +++ b/static/introduction.md @@ -95,4 +95,5 @@ Many libraries already exist that make it easier to build web components. To div * [Bosonic](https://bosonic.github.io/) is a collection of components designed to meet the everyday needs of web developers. * [Polymer](https://www.polymer-project.org) provides a set of features for creating custom elements. * [SkateJS](https://github.com/skatejs/skatejs) is a JavaScript library for writing web components with a small footprint. - * [X-Tag](https://x-tag.github.io/) is an open source JavaScript library that provides an interface for component development. \ No newline at end of file + * [X-Tag](https://x-tag.github.io/) is an open source JavaScript library that provides an interface for component development. + * [Slim.js](http://slimjs.com) Slim.js is an opensource lightweight web component library that provides data-binding and extended capabilities for components, using es6 native class inheritance. From f0c0d46ff8bd22b7dd57c42c24dcc20f7649d16e Mon Sep 17 00:00:00 2001 From: Christoph Leimbrock Date: Thu, 27 Apr 2017 19:11:12 +0200 Subject: [PATCH 11/41] Add closing parenthesis in css example (#39) --- static/polyfills.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/polyfills.md b/static/polyfills.md index cdae0b7..2babdd4 100644 --- a/static/polyfills.md +++ b/static/polyfills.md @@ -98,7 +98,7 @@ To support this kind of behavior the event dispatching in the browser has to be * No live `NodeLists`. All node lists are snapshotted upon read. * `document`, window`, document.body`, document.head` and others are non configurable and cannot be overridden. We are trying to make these work as seamlessly as possible but there will doubtlessly be cases where there will be problems; for those cases you can use wrapand unwrap to get unblocked. * Cross window/frame access is not implemented. - * CSS `:host()` rules can only have (at most) one level of nested parentheses in their argument selectors. For example, `:host(.zot)` and `:host(.zot:not(.bar)` both work, but `:host(.zot:not(.bar:nth-child(2)))` does not. + * CSS `:host()` rules can only have (at most) one level of nested parentheses in their argument selectors. For example, `:host(.zot)` and `:host(.zot:not(.bar))` both work, but `:host(.zot:not(.bar:nth-child(2)))` does not. # Custom Elements polyfill The Custom Elements polyfill provides support for v0 of the Custom Elements spec. A polyfill for v1 is in progress at https://github.com/webcomponents/custom-elements. From 36fcbcec6024edfcb975bcb7394caa351fe0b939 Mon Sep 17 00:00:00 2001 From: Avichay Eyal Date: Tue, 2 May 2017 23:30:30 +0300 Subject: [PATCH 12/41] Update documentation link for Skate, add Slim (#40) --- static/resources.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/static/resources.md b/static/resources.md index 758d7fe..cb3846c 100644 --- a/static/resources.md +++ b/static/resources.md @@ -4,7 +4,8 @@ The WebComponents.org Resources section is a place to showcase useful tools and Web Components is a set of specs that introduce powerful new capabilities to the web platform. Before getting started with your first custom element, it will be helpful to understand the scope of these new features. The [Introduction](/introduction) section contains an overview of these APIs. The [Community](/community) section is also a great way to catch up on the latest goings-on in the Web Components world. We’d also recommend starting out by reading the Getting Started sections of: * [Polymer's documentation;](https://www.polymer-project.org/) - * [SkateJS's documentation.](http://skate.js.org/) + * [Slim.js's documentation.](http://slim.js.org/) + * [Skate.js's documentation.](https://skatejs.gitbooks.io/skatejs/content/) * [X-Tag's documentation.](http://x-tag.github.io/docs) These will give you an idea on how these libraries for building web components work and what might be best for you. From 71774c02d4fcfd6162d0f697cbe8ed4e9658301d Mon Sep 17 00:00:00 2001 From: Sam Li Date: Fri, 12 May 2017 10:03:07 -0700 Subject: [PATCH 13/41] Add webcomponents.org update (#35) --- .../web-components-org-update.html.md | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 documents/articles/web-components-org-update.html.md diff --git a/documents/articles/web-components-org-update.html.md b/documents/articles/web-components-org-update.html.md new file mode 100644 index 0000000..5c524b6 --- /dev/null +++ b/documents/articles/web-components-org-update.html.md @@ -0,0 +1,54 @@ +--- +title: What's new on webcomponents.org +authors: [sam_li] +date: 2017-05-11 +original_date: 2017-05-11 +category: articles +--- + +A roundup of what's new in the web components world in the short few months since webcomponents.org has launched. + + +In the short few months since webcomponents.org has launched, we have seen: + * almost 900 elements have been added + * reached an incredible milestone of 1 million page views each month + * a new web components library, [slim.js](https://github.com/eavichay/slim.js) + * [Safari 10.1 and iOS Safari 10.3](http://caniuse.com/#feat=custom-elementsv1) shipped Custom Elements v1 + * stable v1.0.0 release of [webcomponents.js polyfills](https://github.com/webcomponents/webcomponentsjs) + +## webcomponents.org changes + +### Vanilla custom element support +Vanilla custom elements using v1 class syntax now supported by documentation generation. + +### Polymer 2.0 support +Polymer 2.0 elements now supported by documentation generation in the same fashion Polymer 1.0 was supported. + +### Custom pages +In addition to your README & automatically generated documentation pages, you can now specify custom pages. You can use custom pages to provide usage guides, contribution guides or documentation. Specify custom pages under the `pages` attribute in your `bower.json`. These pages are markdown pages inside your repository and support inline demos like the README.md. + +Sample change: +```json +{ + "pages": { + "Contributing guide": "contributing.md", + "Usage with Angular": "folder/page.md" + } +} +``` + +### Specifying demo files +Not using Polymer and want full-sized demos? You can now specify a list of demos in your `bower.json` file. Just ensure all necessary dependencies are specified in your `bower.json`. + +Sample change: +```json +{ + "demos": { + "My simple demo": "path/simple-demo.html", + "A complex demo": "my-complex-demo.html" + } +} +``` + +### ES2015 (ES6) automatic transpilation +All demos, including inline demos are now automatically transpiled for browsers that don't support ES2015 syntax. From 0653d47973d1fac20abbc43b732e032df1b43f3b Mon Sep 17 00:00:00 2001 From: Ra'Shaun Stovall Date: Tue, 30 May 2017 14:52:33 -0400 Subject: [PATCH 14/41] =?UTF-8?q?=F0=9F=93=96=20Fix=20spelling=20error.=20?= =?UTF-8?q?Change=20`me`=20=E2=9E=A1=EF=B8=8F=20`be`=20(#41)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9cf6014..c4f19f5 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ # Adding or modifying content 1. Decide what the content type is: - * Evergreen pages such as Polyfills, Specifications should me modified in [/static] + * Evergreen pages such as Polyfills, Specifications should be modified in [/static] * Posts such as articles/podcasts/presentations should be added to [/documents] 1. Send a PR with the changes. 1. Done! Once it's merged, the site will update with the latest content. From 488a9185ee2438a7a92578ab3418e4e99955a5ca Mon Sep 17 00:00:00 2001 From: Abraham Williams <4braham@gmail.com> Date: Mon, 28 Aug 2017 16:28:02 -0500 Subject: [PATCH 15/41] Add Stencil to Introduction page (#42) --- static/introduction.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/static/introduction.md b/static/introduction.md index 0fa26d6..428a475 100644 --- a/static/introduction.md +++ b/static/introduction.md @@ -95,5 +95,6 @@ Many libraries already exist that make it easier to build web components. To div * [Bosonic](https://bosonic.github.io/) is a collection of components designed to meet the everyday needs of web developers. * [Polymer](https://www.polymer-project.org) provides a set of features for creating custom elements. * [SkateJS](https://github.com/skatejs/skatejs) is a JavaScript library for writing web components with a small footprint. + * [Slim.js](http://slimjs.com) is an opensource lightweight web component library that provides data-binding and extended capabilities for components, using es6 native class inheritance. + * [Stencil](https://stenciljs.com/) is an opensource compiler that generates standards-compliant web components. * [X-Tag](https://x-tag.github.io/) is an open source JavaScript library that provides an interface for component development. - * [Slim.js](http://slimjs.com) Slim.js is an opensource lightweight web component library that provides data-binding and extended capabilities for components, using es6 native class inheritance. From 45c63c13bd44a6998b6fa41bed62be42a4a28b84 Mon Sep 17 00:00:00 2001 From: Sam Li Date: Tue, 29 Aug 2017 11:01:46 -0700 Subject: [PATCH 16/41] Regenerate service account keys for CI deployment (#43) --- .travis.yml | 8 +++++--- client-secret.json.enc | Bin 2352 -> 2384 bytes 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 46ac545..2f76d98 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,10 +3,9 @@ node_js: - '6' cache: directories: - - node_modules + - node_modules before_deploy: - - openssl aes-256-cbc -K $encrypted_b0dab8baefe0_key -iv $encrypted_b0dab8baefe0_iv -in client-secret.json.enc -out client-secret.json -d - - node gen.js +- node gen.js deploy: provider: gae skip_cleanup: true @@ -15,3 +14,6 @@ deploy: config: app.yaml version: 1 default: true +before_install: +- openssl aes-256-cbc -K $encrypted_5ae6bda58156_key -iv $encrypted_5ae6bda58156_iv + -in client-secret.json.enc -out client-secret.json -d diff --git a/client-secret.json.enc b/client-secret.json.enc index d6e289c71bb36521fab3bb81829bb23861dddb49..f0ef137e869b28730cad504a829012eaf6014f17 100644 GIT binary patch literal 2384 zcmV-W39t4^5w>3}cz8&#n=rsfV15SEu1-uG@vi96(#B>OuP^X|l?>6P+#Dbvib+I= zb>HXH0Fmue$Ft4u=DJBFg{kz~C{bYZlwyml)UXjdxGL>fNwEWw?&vcg1@%LE{%qak zOpxTJ?-4>OErG90$>pJ=az}tGd9@DX=<;)rklC6pMvr>(#5`!|nfY`mxZ(+{mZDlo96r%dw#fyD#&JQGU2ot)##h4_~jwJ}tJlTk6y=I=xZIXyf zhCek|xmIHcy0?`8Dztn`1aD5~5HVLmPjdM!W}#&rN3+J}|HS&m(8U!>Taf`X^8OKU zFmquOh1?`gp?8Vh#UUuo><1;nC#>M7XNNSef{gmKOBkV9>QPvcXAULpN{D_yA&K8(s zICWgi?ZodnZ8tSUu6{^39EQpV;wI@WOfN9MV74 z&VtlU9k&Q+cRirTI0#*uG0mJi620kR+&aq;8j4m% z7Q>EJ3;b6UswWe8{WYqLfj7!H55C5o=P(9)>;LH6T3(xztj4YIn=_a6&rJ&tfkCMX zq>&N(9+N&7dN2vW)JeFM3<6Ap7dK*hZr@4*`1$)iSjVPsJoqxqU^>8PNhjTWSOWIk zmE*e(fcZ45Aut)Xax#u)?k?WX{{NHvE-2t%eiVw+OD|PXq52>B~do;R$+&j)Kk25E}iVXAdBJwhn+nQ|WJM^DCrX z^e7aG@(0~$hSOSTX`gvl1qfvBRF0F-?>tbOY%)?ON)7=)_R07HN5dk#bclCg7`2s; zgseGLPs?A)HT_0!M#>wJRe?_f>v_Xyku?~o7>xW*9A(U(cKri!IcacF#Le-``g{BX zw#W9igdzFrUu)6j&`^D&4y0W#i{j$8)dW>#Wq4Y|(3v9aysiCpLdb=6<=5WoM4e=q zCIoSzVNQj}p}14l9mi1w30aC|k-?&%wcA5@^$p<>wO>EGbCD!!f1f&l5DKkEwoP?d4Ra;I4T5J{7{1#WQ*Dw`+hQgn_S%4ueZ0u z-3%?{F3+zV{W#h=F1CfWFJrx4pf=N+GV@9^NkSyjzZlTWHJCiD8q51?aFUC|MH^lroTzCr7k?OHIq7f%0B#TH$WWxAIVTuYNHRYNg23l710VQ`E^ zNe&h4j>z9H*KT2(qaN$LNWU{Qp);AM6ut9uB>O?gSQ-n91>xe3%8{Y$n*mVK36Ac> z(=Wh`%n;>mUG!`QGo<<`F}Ggk ziBm610*E}ntJ^EI=8S5pF>udXeq9u<`X^gJmbe%!*Yx%}6k=9c5duWQk z$)HQjte`Lsa%)<(*7YWohm_8VPE`(V0(F*A7rV3h4A zyNq`wVW%8(hY&(?Cp{ZGJ8`wnXK<*THq3c&VG!IN}y;>wHT2gV`h5=@P#ksYCPV#$OX}HepTdIDv$-fL~OLIXN$w%LE*e8@GO9%oZs_7Z?f# z>D_ycY<+>BjQ}fkXZEKR0#ik%EQ5CorQo*N6_*WIO%2dFb<#sN98c4HHHlmEdHyZ%aBDoO}o4K&<9AaeA#i_cOE+x~xbgvpTY0`MlM3b$-Gbor| zYn6>CKIot0gC6vOT|5Wm3_Qt`n2Jn!l}li99Z}oWvB4(bR_?Wv0}k!y{?_VwB}a0` ze(%cFBMJ|)Cxx<)TLI$V1PD-PFur*$hLfIp8u@AW*!!nT92KGmsK< literal 2352 zcmV-03D5Q>6Xh*+WfY|A;!Vlvlhq$1go3+9 zzsgN($0oUYB^=DPz>;}}I%K77P5cVxII7yNv~28*MyZsF=_!!|Z*Wj-+_ZC$PhBBP zG2=GLeKNJP9i8h^3dLs1^b;`5Rcg-MM#lb8jjh@r0YGFuYF8+9)`UR;;rm_NhG5SF za2crPvObs=>xUc<(lpeymp*RwnN!5?^T46xao4ug>WJcwCc(tCwv|HRnK3r zOD3@9c=!Qh9TfMwt<6w{`N3*7XtUxbxs%6Nb0h

<9 zHadUf8#a9k?VZ(LIQZ}0Oexni7*IV`dIAYz{^5)RqK~$JH4Xf1{$lw$1l3W+LJF2I z^|@vEC+ZUNGFH9t(UFd!Rj`jhh`Y28wmIs_r7v%vW>lSd9&VE;oGadcH zRe8Syv-Jr%WQ6LN1jUJul%NZGwFJ%5!A({SohV=X%3r33M%DnS=;iUYWXH|` z4=HTqS}n@em}X8Qqfh#YSGSp+mBb(Xf#~_=FXX=nen^dwe~)(3tkG+VI{Cv2s*WeL zhB!m~xdK;jerNIZEF9y_~bZ+RC_)D?8g9$hq^~rZDqllT7_X!&`OG~WZ%!nMKpKd`CIgtD8OLopt&EohRa=ZVwG$N{h0_?=yB@2(Rw?@v<+DJigbz z{W^;m05@VKc&gxfX&saNe=nw6)CC}s?ap$jf0kn=6jM=-_XO~72H=t-xEe|VRx*lm z?2h@YA2v4pKNdr(dHn-`+OeK7sX7{at&uco-iBJWUMowe3B>tz%S$#hQL@cwvn{^S zk*Z8$p__WHFc2Vh`N#fMNc|rrPr##pYsg9_-a_C7ZNop-Ihi2stnn3pk`_5+f$s~- z-GE8Pwp-!hpjWzHRa`p{y>F^!Z%7|L&qHYdiHxYtUa7CWO_#3a2pUII>0{4iDS5Q2 zm=pcMrq5jM+*BAe3IqJQ&}bp8_satwk@DUx`jehGDocSaY?%pDLYH_x;I5TFYi55W zbB`JUK3ZscB}UYjsG)uh;JMqwTW9Pu*m#Uzqv*80V{-+cL$qZzDD!NITo>UX$@zG8 z#;X6Ge1DD7A{PoB6(>=^Tm1R-aHUHRcn<&9k9<=gBldfjira-UWTx(1BGj7 z1iO<^sZAJ$&!lIdRuJ!K$FxSeHU6T%4;`bQEE`%FR+}2I2?tqe{?u5sde2F!?oo#* zqv<$Kem2l_c$%|&orGt%a|{SK-WJzHGBUQu5QMmcosD9y=*;mu`lHXcYVMyfW(N#eC5ZFUTBfJ!K8h2Y`51vkY@MVwoqWNiWPZT|c z2f!~g9te?bq~k132^D+{YeCT8?mye%YFX34^B7s9$-D4$SnuZNAH{@%YWIDqW)uPvc!CE-x>asaG2d1E8`$7BlA0eIu(e~NQ~c)Dk1Lmtl# zM+p@dhUYq*VJdI&9KY-Y(OwVWe_YyY>=@aC5kA4^&-o2r0IKkT#Jap#L$(nyN0*xt z+nf9_RSu>FU15Ch1u?0mi{eSFDs3*Ml|jXAaD;*<;SawKU;lv&s%GPRV+K}v7Y`1& zg-V?H>r*g(uT?|Lu*>V?vHzRFn(uQ~qtZlYVckrY$-@!;k+2BJMNDq}_KUD`8OI|+ z9QgRkC=da*xh<;=QOM5t-k&BR zPW>=*QW{j!bcBjb=A!5OdM|Ey5+<7)vy}RWfvKhm56`uPq@Freb9>`ibx98K%#_$EL(aiLv*KK$kNg55*cs8ro3^z(A} zyy)nmHF*qDo~1)(q_f4>s`&xrJe{3k-_`XF}PXy%>T;w=WnB zwmmj^lYvh}BptA3wL6bZa$5n%CZI%*In&}=p`Y>qp2A;^5Sn+EX6)1qkisjJ`;ER3aUa`dCV&a4e*OGDOWQ5sQvw0wNw!N{9DbU2io$g z$-sKPZzbgI2PrTq)WHVDSK*@z&3Al1yz^1Xo1P7@ zMTjizK`uPBNdI zN`@Y8tc2wJGj4Hr6uDptoBINON9*@i)W)}1&SI@4!v1j%0%;OusSAAvVSH86`;aun z8C$&mVjF(`Squc}Bw<1ccjWv)cn?!75^x=uRwTHhIJj+8jE9Jcq WV^|x{)@cgZJi&cOKzOC@xNU8D_=jHr From 7aa09ef87d4d2aec5a323846533c2552ae02e1b9 Mon Sep 17 00:00:00 2001 From: Sam Li Date: Tue, 29 Aug 2017 11:32:58 -0700 Subject: [PATCH 17/41] Fix travis deployment (#44) * Fix travis deployment * Change from deploy * Trying again --- .travis.yml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2f76d98..b0581b8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,16 +4,14 @@ node_js: cache: directories: - node_modules -before_deploy: -- node gen.js +before_install: +- openssl aes-256-cbc -K $encrypted_5ae6bda58156_key -iv $encrypted_5ae6bda58156_iv + -in client-secret.json.enc -out client-secret.json -d +script: +- echo "No Script to run" deploy: provider: gae skip_cleanup: true keyfile: client-secret.json project: web-components-resources - config: app.yaml - version: 1 default: true -before_install: -- openssl aes-256-cbc -K $encrypted_5ae6bda58156_key -iv $encrypted_5ae6bda58156_iv - -in client-secret.json.enc -out client-secret.json -d From 5390d4217be31a6c8554e9c92f55db9268fd5795 Mon Sep 17 00:00:00 2001 From: Sam Li Date: Tue, 29 Aug 2017 12:08:35 -0700 Subject: [PATCH 18/41] Generate metadata for deployment (#45) --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b0581b8..57d5a82 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,7 @@ before_install: - openssl aes-256-cbc -K $encrypted_5ae6bda58156_key -iv $encrypted_5ae6bda58156_iv -in client-secret.json.enc -out client-secret.json -d script: -- echo "No Script to run" +- node gen.js deploy: provider: gae skip_cleanup: true From 761558eff1dc993af3d9eac9e0ad30156ab96a63 Mon Sep 17 00:00:00 2001 From: Erik Isaksen Date: Mon, 2 Oct 2017 12:32:31 -0400 Subject: [PATCH 19/41] Updates to podcast content (#46) * [podcasts] Adds TWP 121 - WebComponents.org Relaunch * [no_story] Adds podcasts for 2017 * [no_story] Updatess grammar/content as per PR comments * [no_story] Removes layout key for podcasts --- .gitignore | 2 + authors.js | 84 +++++++++++++++++++ .../podcasts/1-history-of-polymer.html.md | 1 - .../110-the-amp-mobile-revolution.html.md | 1 - .../111-extensible-web-components.html.md | 1 - ...-and-web-components-with-angular-2.html.md | 1 - .../121-the-webcomponentsorg-relaunch.html.md | 1 - .../123-universal-web-components.html.md | 11 +++ ...ponents-typescript-and-bears-oh-my.html.md | 11 +++ ...ndard-checklist-for-web-components.html.md | 11 +++ documents/podcasts/129-elix-project.html.md | 11 +++ .../133-ionic-and-web-components.html.md | 11 +++ .../podcasts/136-polymer-summit-recap.html.md | 11 +++ documents/podcasts/2-polymer-io.html.md | 1 - ...t-based-systems-with-josh-crowther.html.md | 1 - documents/podcasts/3-testing-polymer.html.md | 1 - documents/podcasts/4-polymer-1-review.html.md | 1 - ...ushar-mathur-and-monica-dinculescu.html.md | 1 - ...-web-components-with-john-rogerson.html.md | 1 - documents/podcasts/5-polymer-summit.html.md | 1 - documents/podcasts/6-component-show.html.md | 1 - .../podcasts/65-strand-web-components.html.md | 1 - .../66-custom-elements-and-skatejs.html.md | 1 - .../podcasts/7-chrome-dev-summit.html.md | 1 - .../70-web-components-at-microsoft.html.md | 1 - documents/podcasts/71-vaadin-elements.html.md | 1 - ...-web-components-and-best-practices.html.md | 1 - .../82-are-web-components-ready-now.html.md | 1 - .../podcasts/97-predix-ui-and-polymer.html.md | 1 - .../98-server-side-web-components.html.md | 1 - documents/podcasts/99-polymer-native.html.md | 1 - ...polymer-and-webcomponents-vs-frameworks.md | 11 +++ .../are-web-components-ready-yet.html.md | 1 - ...b-with-rob-dodson-on-the-web-ahead.html.md | 1 - ...eric-bidelman-on-javascript-jabber.html.md | 1 - .../marcy-sutton-on-shop-talk-show.html.md | 1 - ...he-web-on-the-web-platform-podcast.html.md | 1 - ...rt-beer-three-parts-web-components.html.md | 11 +++ documents/podcasts/polymer-10.html.md | 1 - .../react-and-reactive-elements.html.md | 1 - .../rob-dodson-on-shop-talk-show.html.md | 1 - ...roject-on-the-web-platform-podcast.html.md | 1 - .../podcasts/the-return-of-bosonic.html.md | 1 - ...munity-on-the-web-platform-podcast.html.md | 1 - ...roject-on-the-web-platform-podcast.html.md | 1 - ...tanding-web-components-and-polymer.html.md | 1 - ...ements-on-the-web-platform-podcast.html.md | 1 - .../web-accessibility-in-polymer.html.md | 1 - ...b-components-and-wtf-is-shadow-dom.html.md | 11 +++ ...olymer-on-the-web-platform-podcast.html.md | 1 - ...ts-with-cory-house-on-dotnet-rocks.html.md | 1 - ...ith-peter-gasston-on-the-web-ahead.html.md | 1 - ...ration-on-the-web-platform-podcast.html.md | 1 - 53 files changed, 185 insertions(+), 42 deletions(-) create mode 100644 .gitignore create mode 100644 documents/podcasts/123-universal-web-components.html.md create mode 100644 documents/podcasts/124-web-components-typescript-and-bears-oh-my.html.md create mode 100644 documents/podcasts/126-gold-standard-checklist-for-web-components.html.md create mode 100644 documents/podcasts/129-elix-project.html.md create mode 100644 documents/podcasts/133-ionic-and-web-components.html.md create mode 100644 documents/podcasts/136-polymer-summit-recap.html.md create mode 100644 documents/podcasts/S04E02-polymer-and-webcomponents-vs-frameworks.md create mode 100644 documents/podcasts/one-part-beer-three-parts-web-components.html.md create mode 100644 documents/podcasts/web-components-and-wtf-is-shadow-dom.html.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6d70bf8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +content-gen.js diff --git a/authors.js b/authors.js index 12b2284..13d4d53 100755 --- a/authors.js +++ b/authors.js @@ -11,6 +11,12 @@ module.exports = { github: "1240073", twitter: "onishiweb" }, + alex_sexton: { + name: "Alex Sexton", + bio: "Alex is a Front-end Infrastructure at Stripe", + github: "96554", + twitter: "SlexAxton" + }, amal_hussein: { name: "Amal Hussein", bio: "Amal Hussein is a software developer in Boston, MA & a panelist on The Web Platform Podcast", @@ -113,6 +119,18 @@ module.exports = { github: "17178", twitter: "pixelhandler" }, + ben_lesh: { + name: "Ben Lesh", + bio: "Ben is a Software engineer at Google, a RxJS core team member, and moderndotweb podcast penelist.", + github: "1540597", + twitter: "BenLesh" + }, + brian_holt: { + name: "Brian Holt", + bio: "Brian is a staff engineer at LinkedIn and a teacher for Frontend Masters", + github: "999523", + twitter: "holtbt" + }, bruce_lawson: { name: "Bruce Lawson", bio: "Bruce is co-author of Introducing HTML5 and Opera employee.", @@ -293,6 +311,12 @@ module.exports = { github: "189541", twitter: "filipearaujo" }, + fred_schott: { + name: "Fred Schott", + bio: "Fred is an Engineer at Google", + github: "622227", + twitter: "FredKSchott" + }, gerwin_sturm: { name: "Gerwin Sturm", bio: "Gerwin is a Google Developer Expert from Vienna, Austria.", @@ -370,6 +394,12 @@ module.exports = { github: "1749548", twitter: "jeffposnick" }, + jem_young: { + name: "Jem Young", + bio: "Jem is a Senior Software Engineer at Netflix and a panelist on @FrontendHH", + github: "984983", + twitter: "JemYoung" + }, jen_simmons: { name: "Jen Simmons", bio: "Jen is a professional designer and developer in the New York City area. She is host of The Web Ahead Podcast.", @@ -460,6 +490,12 @@ module.exports = { github: "2549335", twitter: "jcmmit" }, + justin_willis: { + name: "Justin Willis", + bio: "Justin is a developer at Ionic", + github: "8823093", + twitter: "justinwillis96" + }, kaelig: { name: "Kaelig Deloumeau-Prigent", bio: "Kaelig is a french blogger, author and front-end web developer working in London at FT Labs. Previously, he worked on the responsive sites of the BBC News and the Guardian.", @@ -478,6 +514,12 @@ module.exports = { github: "1500684", twitter: "kentcdodds" }, + kenneth_christiansen: { + name: "Kenneth Christiansen", + bio: "Kenneth is a Web Platform hacker at Intel", + github: "1101339", + twitter: "kennethrohde" + }, kevin_gleason: { name: "Kevin Gleason", bio: "Kevin is an Embedded Systems and Internet of Things Intern at Pubnub", @@ -490,6 +532,18 @@ module.exports = { github: "1354932", twitter: "kevinpschaaf" }, + kito_mann: { + name: "Kito Mann", + bio: "Kito is a Principal Consultant at Virtua", + github: "3187538", + twitter: "kito99" + }, + lars_knudsen: { + name: "Lars Knudsen", + bio: "Lars is the founder of IT Knows and a web platform and hardware connectivity evangelist", + github: "1014678", + twitter: "denladeside" + }, lea_alcantara: { name: "Lea Alcantara", bio: " Lea is a lead designer of Bright Umbrella, designs websites with sass, and hosts the Ctrl+Click Podcast", @@ -580,6 +634,12 @@ module.exports = { gravatar: "255122f396049d1c7fb264cfa6ec584c", twitter: "ModusSchwartz" }, + mikeal_rogers: { + name: "Mikeal Rogers", + bio: "Mikeal is creator of NodeConf and request", + github: "579", + twitter: "Mikeal" + }, monica_dinculescu: { name: "Monica Dinculescu", bio: "Monica is a Software Engineer working on Polymer and Chrome for Google", @@ -646,6 +706,12 @@ module.exports = { github: "1043291", twitter: "morewry" }, + rachel_white: { + name: "Rachel White", + bio: "Rachel is a tech evangelist at Microsoft", + github: "228230", + twitter: "ohhoe" + }, raphael_rougeron: { name: "Raphaël Rougeron", bio: "Raphael is creator of The Bosonic Project, entrepreneur, and software engineer.", @@ -664,6 +730,12 @@ module.exports = { github: "1779253", twitter: "richcampbell" }, + rob_bearman: { + name: "Rob Bearman", + bio: "Rob is co-founder of Component Kitchen & Elix", + github: "1823198", + twitter: "robbearman" + }, rob_dodson: { name: "Rob Dodson", bio: "Rob is a Developer Advocate on the Google Chrome team. He is currently helping to educate developers about web components and Polymer. Though he's originally from the South, these days he divides his time between Mountain View and San Francisco.", @@ -676,6 +748,12 @@ module.exports = { gravatar:"e1709218ec4ecc612e5c9a6d5d59e68f", twitter: "EisenbergEffect" }, + ryan_anklam:{ + name: 'Ryan Anklam', + bio: 'Ryan is a Senior UI Engineer at Netflix.', + github: '392624', + twitter: 'bittersweetryan' + }, sam_li: { name: "Sam Li", bio: "Sam is a Software Engineer on the Google Chrome team", @@ -706,6 +784,12 @@ module.exports = { github: "36964", twitter: "theefer" }, + stacy_london: { + name: "Stacy London", + bio: "Stacy is a front-end engineer at Atlassian Bitbucket and a panelist on Frontend Happy Hour podcast", + github: "1217129", + twitter: "stacylondoner" + }, steve_faulkner: { name: "Steve Faulkner", bio: "Steve is Principal Accessibility Engineer at Paciello Group and Web Components Accessibility Expert.", diff --git a/documents/podcasts/1-history-of-polymer.html.md b/documents/podcasts/1-history-of-polymer.html.md index 1c52764..f3a7b03 100644 --- a/documents/podcasts/1-history-of-polymer.html.md +++ b/documents/podcasts/1-history-of-polymer.html.md @@ -6,7 +6,6 @@ date: 2015-05-28 original_date: 2015-05-28 link: "http://www.stitcher.com/podcast/polymer-podcasst/polymer-podcast/e/history-of-polymer-38325109" category: podcasts -layout: single --- In this episode, we talk with Rob Dodson, developer evangelist for the Polymer Project, about the history of Polymer. We also get to to hear Rob's thoughts on the future of the web and the role Polymer will play in it. diff --git a/documents/podcasts/110-the-amp-mobile-revolution.html.md b/documents/podcasts/110-the-amp-mobile-revolution.html.md index 97e012d..4706df3 100644 --- a/documents/podcasts/110-the-amp-mobile-revolution.html.md +++ b/documents/podcasts/110-the-amp-mobile-revolution.html.md @@ -6,7 +6,6 @@ date: 2016-10-14 original_date: 2016-10-11 link: "http://thewebplatformpodcast.com/110-the-amp-mobile-revolution" category: podcasts -layout: single --- Paul Bakaus, Google Engineer, has recently been leading the AMP Project which is an open source initiative to optimize content for mobile devices using the web. \ No newline at end of file diff --git a/documents/podcasts/111-extensible-web-components.html.md b/documents/podcasts/111-extensible-web-components.html.md index cc70dcd..5ce0180 100644 --- a/documents/podcasts/111-extensible-web-components.html.md +++ b/documents/podcasts/111-extensible-web-components.html.md @@ -6,7 +6,6 @@ date: 2016-10-21 original_date: 2016-10-18 link: "http://thewebplatformpodcast.com/111-extensible-web-components" category: podcasts -layout: single --- Jeremy Keith, web guru & co-founder of ClearLeft, talks with us about the potential pitfalls and hopes on Progressive Enhancement with Web Components. \ No newline at end of file diff --git a/documents/podcasts/115-aia-polymer-and-web-components-with-angular-2.html.md b/documents/podcasts/115-aia-polymer-and-web-components-with-angular-2.html.md index 5890cda..3e854e6 100644 --- a/documents/podcasts/115-aia-polymer-and-web-components-with-angular-2.html.md +++ b/documents/podcasts/115-aia-polymer-and-web-components-with-angular-2.html.md @@ -6,7 +6,6 @@ date: 2016-10-20 original_date: 2016-10-20 link: "https://devchat.tv/adv-in-angular/115-aia-polymer-and-web-components-with-angular-2-with-rob-dodson" category: podcasts -layout: single --- Rob Dodson talks with the Adventures in Angular Panel on Angular 2 integration with Web Components \ No newline at end of file diff --git a/documents/podcasts/121-the-webcomponentsorg-relaunch.html.md b/documents/podcasts/121-the-webcomponentsorg-relaunch.html.md index 096b372..b67eccd 100644 --- a/documents/podcasts/121-the-webcomponentsorg-relaunch.html.md +++ b/documents/podcasts/121-the-webcomponentsorg-relaunch.html.md @@ -6,7 +6,6 @@ date: 2017-01-13 original_date: 2017-01-13 link: "http://thewebplatformpodcast.com/121-the-webcomponentsorg-relaunch" category: podcasts -layout: single --- WebComponents.org has long been a great resource for learning and understanding web components. Recently, Google & the Web Components community have worked hard to make the site a place not only to consume information on Web Components, but also to share your own components and consume others. \ No newline at end of file diff --git a/documents/podcasts/123-universal-web-components.html.md b/documents/podcasts/123-universal-web-components.html.md new file mode 100644 index 0000000..9d77b7d --- /dev/null +++ b/documents/podcasts/123-universal-web-components.html.md @@ -0,0 +1,11 @@ +--- +title: "123: Universal Web Components" +authors: [jordan_last, justin_ribeiro, leon_revill, danny_blue] +podcast: "The Web Platform Podcast" +date: 2017-02-01 +original_date: 2017-02-01 +link: "http://thewebplatformpodcast.com/123-universal-web-components" +category: podcasts +--- + +Web Components Remote Conference is a two day conference all about Web Components. Jordan Last (@lastmjs) will be delivering a very interesting talk “Universal Web Components” which takes the idea of Web Components for GUIs, throws it out the window and then uses Web Components to control a drone instead! With the Custom Elements and Shadow DOM specifications settled on V1 and greater browser support than ever now is the perfect time to be investing in Web Components. This episode covers why Web Components are important, what challenges people face and some very interesting use cases for Web Components you probably never thought of. \ No newline at end of file diff --git a/documents/podcasts/124-web-components-typescript-and-bears-oh-my.html.md b/documents/podcasts/124-web-components-typescript-and-bears-oh-my.html.md new file mode 100644 index 0000000..97953bf --- /dev/null +++ b/documents/podcasts/124-web-components-typescript-and-bears-oh-my.html.md @@ -0,0 +1,11 @@ +--- +title: "124: Web Components, TypeScript, and Bears Oh My" +authors: [kito_mann, justin_ribeiro, amal_hussein, danny_blue] +podcast: "The Web Platform Podcast" +date: 2017-03-01 +original_date: 2017-03-01 +link: "http://thewebplatformpodcast.com/124-web-components-typescript-and-bears-oh-my" +category: podcasts +--- + +Web Components Remote Conference is a two day conference all about Web Components. Kito Mann (@kito99) will be delivering a very interesting talk “Beautiful Web Apps with Polymer and TypeScript”. This episode covers why Web Components are important, what challenges people face and some very interesting use cases for Web Components you probably never thought of. \ No newline at end of file diff --git a/documents/podcasts/126-gold-standard-checklist-for-web-components.html.md b/documents/podcasts/126-gold-standard-checklist-for-web-components.html.md new file mode 100644 index 0000000..2720198 --- /dev/null +++ b/documents/podcasts/126-gold-standard-checklist-for-web-components.html.md @@ -0,0 +1,11 @@ +--- +title: "126: Gold Standard Checklist for Web Components" +authors: [rob_bearman, jan_miksovsky, justin_ribeiro, leon_revill, danny_blue] +podcast: "The Web Platform Podcast" +date: 2017-03-29 +original_date: 2017-03-29 +link: "http://thewebplatformpodcast.com/126-gold-standard-checklist-for-web-components" +category: podcasts +--- + +This week we are joined with special guests Jan Miksovsky and Rob Bearman from Component Kitchen to talk about their work on the Web Component Gold Standard. The Gold Standard is an open source project which outlines best practices for creating Web Components. The Gold Standard presents developers with a checklist they can use to ensure their Web Components are of exceptional high quality matching that of native elements. The episode goes into where the requirement for the Gold Standard came from and why it is such an invaluable resource for Web Component developers. This includes discussion on why code reuse on the web is so difficult and how Web Components and the Gold Standard can help. We also talk about the future of the Gold Standard and how the community can help make it even better. \ No newline at end of file diff --git a/documents/podcasts/129-elix-project.html.md b/documents/podcasts/129-elix-project.html.md new file mode 100644 index 0000000..f24b02d --- /dev/null +++ b/documents/podcasts/129-elix-project.html.md @@ -0,0 +1,11 @@ +--- +title: "129: Elix Project" +authors: [rob_bearman, jan_miksovsky, justin_ribeiro, leon_revill] +podcast: "The Web Platform Podcast" +date: 2017-04-24 +original_date: 2017-04-24 +link: "http://thewebplatformpodcast.com/129-elix-project" +category: podcasts +--- + +In this episode, Leon and Justin sit down with Jan Miksovsky and Rob Bearman of of the recently released Elix Project. Elix is a community-driven collection of high-quality web components for common user interface patterns such as lists, menus, dialogs, carousels, and so on. The modular nature of web components let you easily incorporate them into your web apps, and their standard definition ensures good results across all mainstream browsers. \ No newline at end of file diff --git a/documents/podcasts/133-ionic-and-web-components.html.md b/documents/podcasts/133-ionic-and-web-components.html.md new file mode 100644 index 0000000..fb22eb2 --- /dev/null +++ b/documents/podcasts/133-ionic-and-web-components.html.md @@ -0,0 +1,11 @@ +--- +title: "133: Ionic & Web Components" +authors: [justin_willis, leon_revill, justin_ribeiro, danny_blue] +podcast: "The Web Platform Podcast" +date: 2017-08-03 +original_date: 2017-08-03 +link: "http://thewebplatformpodcast.com/133-ionic-web-components" +category: podcasts +--- + +Justin Willis from Ionic joins us this week to talk about hybrid app development with Ionic and some amazing work they have been doing with Web Components. Justin gives us an overview of the Ionic project, its background and how it makes building hybrid apps super easy. We then move on to talk about why Ionic have chosen to rebuild their components as Web Components and the benefits they are seeing from making this move. \ No newline at end of file diff --git a/documents/podcasts/136-polymer-summit-recap.html.md b/documents/podcasts/136-polymer-summit-recap.html.md new file mode 100644 index 0000000..79bc9d1 --- /dev/null +++ b/documents/podcasts/136-polymer-summit-recap.html.md @@ -0,0 +1,11 @@ +--- +title: "136: Polymer Summit Recap" +authors: [kenneth_christiansen, lars_knudsen, danny_blue, leon_revill, amal_hussein] +podcast: "The Web Platform Podcast" +date: 2017-08-31 +original_date: 2017-08-31 +link: "http://thewebplatformpodcast.com/136-polymer-summit-recap" +category: podcasts +--- + +This week the crew is joined by Lars Knudsen (@denladeside) and Kenneth Christiansen (@kennethrohde) to talk about the recent Polymer Summit and all of the awesome stuff revealed there. Are web components really ready? Who is using web components? Answers to these questions and more on this week’s episode of the Web Platform Podcast. \ No newline at end of file diff --git a/documents/podcasts/2-polymer-io.html.md b/documents/podcasts/2-polymer-io.html.md index 09adaa5..e67d1fd 100644 --- a/documents/podcasts/2-polymer-io.html.md +++ b/documents/podcasts/2-polymer-io.html.md @@ -6,7 +6,6 @@ date: 2015-05-29 original_date: 2015-05-29 link: "http://www.stitcher.com/podcast/polymer-podcast/e/38325099" category: podcasts -layout: single --- In this episode, the Polymer Podcast panel talks with Taylor Savage, product manager for the Polymer Project, about the announcements at Google I/O and Polymer 1.0. We learn about the Polymer starter kit, the new web component catalogs, and how the polymer team gets things done! diff --git a/documents/podcasts/21-building-component-based-systems-with-josh-crowther.html.md b/documents/podcasts/21-building-component-based-systems-with-josh-crowther.html.md index 90fa4ab..50b7444 100644 --- a/documents/podcasts/21-building-component-based-systems-with-josh-crowther.html.md +++ b/documents/podcasts/21-building-component-based-systems-with-josh-crowther.html.md @@ -6,7 +6,6 @@ date: 2016-10-20 original_date: 2016-10-20 link: "https://soundcloud.com/techpeople/tp-021-building-component-based-systems-with-josh-crowther-from-family-search" category: podcasts -layout: single --- In this episode Carlos Taborda chats about the evolution of how web applications are built, and how Family Search is leveraging a component-based architecture with Web Components. \ No newline at end of file diff --git a/documents/podcasts/3-testing-polymer.html.md b/documents/podcasts/3-testing-polymer.html.md index 6ae8115..d57f6e5 100644 --- a/documents/podcasts/3-testing-polymer.html.md +++ b/documents/podcasts/3-testing-polymer.html.md @@ -6,7 +6,6 @@ date: 2015-06-23 original_date: 2015-06-23 link: "http://www.stitcher.com/podcast/polymer-podcast/e/39470555" category: podcasts -layout: single --- The Polymer Podcast panel talks with to Ian MacLeod, core architect behind web-component-tester about testing with Polymer. They also delve into WCT's rich history and tackle some of the harder aspects of testing. diff --git a/documents/podcasts/4-polymer-1-review.html.md b/documents/podcasts/4-polymer-1-review.html.md index f599313..f5a7f1e 100644 --- a/documents/podcasts/4-polymer-1-review.html.md +++ b/documents/podcasts/4-polymer-1-review.html.md @@ -6,7 +6,6 @@ date: 2015-07-28 original_date: 2015-07-28 link: "http://www.stitcher.com/podcast/polymer-podcast/e/39972949" category: podcasts -layout: single --- After one month of some intense rewrites and migration, The Polymer Podcast team sits down and discusses the road to Polymer 1.0 diff --git a/documents/podcasts/42-web-components-with-rob-dodson-tushar-mathur-and-monica-dinculescu.html.md b/documents/podcasts/42-web-components-with-rob-dodson-tushar-mathur-and-monica-dinculescu.html.md index 703fd1a..1c291e8 100644 --- a/documents/podcasts/42-web-components-with-rob-dodson-tushar-mathur-and-monica-dinculescu.html.md +++ b/documents/podcasts/42-web-components-with-rob-dodson-tushar-mathur-and-monica-dinculescu.html.md @@ -6,7 +6,6 @@ date: 2016-09-29 original_date: 2016-09-29 link: "http://audio.javascriptair.com/e/042-jsair-web-components-with-rob-dodson-tushar-mathur-and-monica-dinculescu/" category: podcasts -layout: single --- There's been quite a bit of talk about the Web Components spec lately. As with anything new, there's been a lot of fear, uncertainty, and doubt (FUD) about Web Components. We're going to chat about some of their use cases, strengths, and weaknesses to give us all a better idea of this tech. diff --git a/documents/podcasts/44-web-components-with-john-rogerson.html.md b/documents/podcasts/44-web-components-with-john-rogerson.html.md index d4f9044..e70c105 100644 --- a/documents/podcasts/44-web-components-with-john-rogerson.html.md +++ b/documents/podcasts/44-web-components-with-john-rogerson.html.md @@ -6,7 +6,6 @@ date: 2015-05-21 original_date: 2015-05-21 link: "http://ctrlclickcast.com/episodes/web-components" category: podcasts -layout: single --- Front-end expert John Rogerson offers some practical use cases and draws analogies to web dev approaches we are all already familiar with. John further discusses the pros of web components (modularity, extensibility), the cons (new technology, undefined standards, accessibility) and how they may reflect the future of web development. diff --git a/documents/podcasts/5-polymer-summit.html.md b/documents/podcasts/5-polymer-summit.html.md index 11c0ecf..02ef29e 100644 --- a/documents/podcasts/5-polymer-summit.html.md +++ b/documents/podcasts/5-polymer-summit.html.md @@ -6,7 +6,6 @@ date: 2015-10-05 original_date: 2015-10-05 link: "http://www.stitcher.com/podcast/polymer-podcast/e/40733300" category: podcasts -layout: single --- Now that the Polymer Summit is over but not forgotten, we review our favorite moments from the conference. diff --git a/documents/podcasts/6-component-show.html.md b/documents/podcasts/6-component-show.html.md index 9947aa7..40593cf 100644 --- a/documents/podcasts/6-component-show.html.md +++ b/documents/podcasts/6-component-show.html.md @@ -6,7 +6,6 @@ date: 2015-11-12 original_date: 2015-11-12 link: "http://www.stitcher.com/podcast/polymer-podcast/e/41246109" category: podcasts -layout: single --- Components, components, components! We join Charles Grugan and discuss our favorite components and their uses. diff --git a/documents/podcasts/65-strand-web-components.html.md b/documents/podcasts/65-strand-web-components.html.md index 2aae613..36e1471 100644 --- a/documents/podcasts/65-strand-web-components.html.md +++ b/documents/podcasts/65-strand-web-components.html.md @@ -6,7 +6,6 @@ date: 2015-10-13 original_date: 2015-10-13 link: "http://thewebplatformpodcast.com/65-strand-web-components" category: podcasts -layout: single --- MediaMath has created an open source project built on top of Web Components & Polymer called Strand. It was created for their internal web product Terminal One but is available and easy to get on Github. Daniel Lasky, Justin Moore, & Anthony Koerber chat with us about the pains of migrating from Polymer 0.5 to 1.0 as well as what it has been like to drive an open source Web Components library with Polymer Elements ranging from basic buttons to complex grids. Check out Strand’s documentation for further detail diff --git a/documents/podcasts/66-custom-elements-and-skatejs.html.md b/documents/podcasts/66-custom-elements-and-skatejs.html.md index eedbb71..41b247f 100644 --- a/documents/podcasts/66-custom-elements-and-skatejs.html.md +++ b/documents/podcasts/66-custom-elements-and-skatejs.html.md @@ -6,7 +6,6 @@ date: 2015-10-20 original_date: 2015-10-19 link: "http://thewebplatformpodcast.com/66-custom-elements-skatejs" category: podcasts -layout: single --- Atlassian leaders Trey Shugart and Jonathon Creenaune chat with us about how and why they created Skate.js. Skate is a lightweight Web Components wrapper created to help the needs of a large and diverse technology stack while providing simplicity and almost no-barrier-to-entry. Only focusing on Custom Elements, Skate has made its code base easy for companies to buy into. diff --git a/documents/podcasts/7-chrome-dev-summit.html.md b/documents/podcasts/7-chrome-dev-summit.html.md index 7b9f8cc..37163bd 100644 --- a/documents/podcasts/7-chrome-dev-summit.html.md +++ b/documents/podcasts/7-chrome-dev-summit.html.md @@ -6,7 +6,6 @@ date: 2015-11-18 original_date: 2015-11-18 link: "http://www.stitcher.com/podcast/polymer-podcast/e/41349286" category: podcasts -layout: single --- Live from the Chrome Dev Summit, our special guests Taylor Savage and Jeff Posnick talk to us about service workers and the Polymer State of the Union. diff --git a/documents/podcasts/70-web-components-at-microsoft.html.md b/documents/podcasts/70-web-components-at-microsoft.html.md index 09f6aa2..559768f 100644 --- a/documents/podcasts/70-web-components-at-microsoft.html.md +++ b/documents/podcasts/70-web-components-at-microsoft.html.md @@ -6,7 +6,6 @@ date: 2015-11-24 original_date: 2015-11-24 link: "http://thewebplatformpodcast.com/70-web-components-at-microsoft" category: podcasts -layout: single --- Daniel Buchner, former Mozillian & Program Manager at Microsoft takes us through the plans for Web Components at Microsoft. Daniel is the creator of the Web Components free open source library, X-Tag which Microsoft is now officially supporting and using as of release 1.5. How are the teams at Microsoft using Web Components now and what is the plan for the future? diff --git a/documents/podcasts/71-vaadin-elements.html.md b/documents/podcasts/71-vaadin-elements.html.md index 263093c..1925e8b 100644 --- a/documents/podcasts/71-vaadin-elements.html.md +++ b/documents/podcasts/71-vaadin-elements.html.md @@ -6,7 +6,6 @@ date: 2015-12-07 original_date: 2015-12-07 link: "http://thewebplatformpodcast.com/71-vaadin-elements" category: podcasts -layout: single --- Danny Blue and Justin Ribeiro chat with Manolo Carrasco and Moñino Jouni Koivuviita from Vaadin about their work with Web Components in the enterprise world. Vaadin has begun to create enterprise ready web components ‘ready for production’ usage. Built on top of Polymer, Vaadin Elements are helping to push new web technologies to larger companies. diff --git a/documents/podcasts/79-basic-web-components-and-best-practices.html.md b/documents/podcasts/79-basic-web-components-and-best-practices.html.md index 004f498..2f2e24b 100644 --- a/documents/podcasts/79-basic-web-components-and-best-practices.html.md +++ b/documents/podcasts/79-basic-web-components-and-best-practices.html.md @@ -6,7 +6,6 @@ date: 2016-03-09 original_date: 2016-03-09 link: "http://thewebplatformpodcast.com/79-basic-web-components-and-best-practices" category: podcasts -layout: single --- There is more than one set of custom elements out there. In this episode, we speak with Jan Miksovsky about basic web components, a comprehensive set of high-quality web components for common user interface patterns. diff --git a/documents/podcasts/82-are-web-components-ready-now.html.md b/documents/podcasts/82-are-web-components-ready-now.html.md index ef326b9..4471815 100644 --- a/documents/podcasts/82-are-web-components-ready-now.html.md +++ b/documents/podcasts/82-are-web-components-ready-now.html.md @@ -6,7 +6,6 @@ date: 2016-05-02 original_date: 2016-03-29 link: "http://thewebplatformpodcast.com/82-are-web-components-ready-now" category: podcasts -layout: single --- This episode is a follow up on episode 59 'Are Web Components Ready Yet?'. Leon, Justin & Erik chat about where we are in Web Component development today and what's happened over the past 6 months. diff --git a/documents/podcasts/97-predix-ui-and-polymer.html.md b/documents/podcasts/97-predix-ui-and-polymer.html.md index b607aa0..e56d80b 100644 --- a/documents/podcasts/97-predix-ui-and-polymer.html.md +++ b/documents/podcasts/97-predix-ui-and-polymer.html.md @@ -6,7 +6,6 @@ date: 2016-07-12 original_date: 2016-07-12 link: "http://thewebplatformpodcast.com/97-predix-ui-polymer" category: podcasts -layout: single --- Eric Knudtson from GE Digital walks us through their Predix UI Web Components library built on top of Google’s Polymer Project. diff --git a/documents/podcasts/98-server-side-web-components.html.md b/documents/podcasts/98-server-side-web-components.html.md index 450bf86..c9ca0cb 100644 --- a/documents/podcasts/98-server-side-web-components.html.md +++ b/documents/podcasts/98-server-side-web-components.html.md @@ -6,7 +6,6 @@ date: 2016-07-19 original_date: 2016-07-19 link: "http://thewebplatformpodcast.com/98-server-side-web-components-0" category: podcasts -layout: single --- Software developer at Softwire, Tim Perry, has created a set of “Server Components”. These are simple, lightweight tools for “composable HTML rendering in Node.js, broadly following the Web Components browser specification, but on the server side”. diff --git a/documents/podcasts/99-polymer-native.html.md b/documents/podcasts/99-polymer-native.html.md index 36c8604..a4a3d22 100644 --- a/documents/podcasts/99-polymer-native.html.md +++ b/documents/podcasts/99-polymer-native.html.md @@ -6,7 +6,6 @@ date: 2016-07-28 original_date: 2016-07-28 link: "http://thewebplatformpodcast.com/99-polymer-native" category: podcasts -layout: single --- Denis Radin, Web Component advocate, has started work on a project called Polymer Native to enable developers to create part-hybrid, part-native applications using Web Components. diff --git a/documents/podcasts/S04E02-polymer-and-webcomponents-vs-frameworks.md b/documents/podcasts/S04E02-polymer-and-webcomponents-vs-frameworks.md new file mode 100644 index 0000000..3002cea --- /dev/null +++ b/documents/podcasts/S04E02-polymer-and-webcomponents-vs-frameworks.md @@ -0,0 +1,11 @@ +--- +title: "121 The WebComponents.org Relaunch" +authors: [ben_lesh, fred_schott, monica_dinculescu] +podcast: "The Modern Web Podcast" +date: 2016-12-22 +original_date: 2016-12-22 +link: "S04E02 - Polymer and Web Components vs Frameworks (Jerry Springer Edition)" +category: podcasts +--- + +In this episode of the Modern Web podcast - Ben Lesh stars as the Jerry Springer of JavaScript stirs things up with the Polymer team Monica Dinculescu and Fred Schott with hard questions about louder voices representing Polymer on twitter and the reasoning behind perceived abrasiveness. \ No newline at end of file diff --git a/documents/podcasts/are-web-components-ready-yet.html.md b/documents/podcasts/are-web-components-ready-yet.html.md index 35befd0..07e647c 100644 --- a/documents/podcasts/are-web-components-ready-yet.html.md +++ b/documents/podcasts/are-web-components-ready-yet.html.md @@ -6,7 +6,6 @@ date: 2015-07-28 original_date: 2015-07-28 link: http://thewebplatform.libsyn.com/54-are-web-components-ready-yet category: podcasts -layout: single --- An honest & candid talk about what we learned since the beginning of Web Components; a hard look at the good, the bad, and the ugly. Christian Heilmann (@codepo8), Wilson Page (@wilsonpage), & Rob Eisenberg (@eisenbergeffect) talks with the panel on development with Web Components in today's production environments. diff --git a/documents/podcasts/customizing-the-web-with-rob-dodson-on-the-web-ahead.html.md b/documents/podcasts/customizing-the-web-with-rob-dodson-on-the-web-ahead.html.md index 14a96ba..36f8f80 100644 --- a/documents/podcasts/customizing-the-web-with-rob-dodson-on-the-web-ahead.html.md +++ b/documents/podcasts/customizing-the-web-with-rob-dodson-on-the-web-ahead.html.md @@ -6,7 +6,6 @@ date: 2014-10-08 original_date: 2014-10-08 link: "http://5by5.tv/webahead/86" category: podcasts -layout: single --- Web Components are all the rage these days — a way to create the web using chunks of code that are reusable across projects. Polymer, a library on top of web components, is using Web Components today. Rob Dodson joins Jen Simmons in explaining the current landscape. diff --git a/documents/podcasts/google-polymer-with-rob-dodson-and-eric-bidelman-on-javascript-jabber.html.md b/documents/podcasts/google-polymer-with-rob-dodson-and-eric-bidelman-on-javascript-jabber.html.md index e0c1789..f5fe1e8 100644 --- a/documents/podcasts/google-polymer-with-rob-dodson-and-eric-bidelman-on-javascript-jabber.html.md +++ b/documents/podcasts/google-polymer-with-rob-dodson-and-eric-bidelman-on-javascript-jabber.html.md @@ -6,7 +6,6 @@ date: 2014-08-06 original_date: 2014-08-06 link: "http://devchat.tv/js-jabber/120-jsj-google-polymer-with-rob-dodson-and-eric-bidelman" category: podcasts -layout: single --- The JavaScript Jabber Panel discusses the Polymer Project with guests Rob Dodson & Eric Bidelman who work on the project at Google. They discuss the components, frameworks, & libraries available to developers as well the strengths and weaknesses of web components. diff --git a/documents/podcasts/marcy-sutton-on-shop-talk-show.html.md b/documents/podcasts/marcy-sutton-on-shop-talk-show.html.md index 78b3623..a828038 100644 --- a/documents/podcasts/marcy-sutton-on-shop-talk-show.html.md +++ b/documents/podcasts/marcy-sutton-on-shop-talk-show.html.md @@ -6,7 +6,6 @@ date: 2014-11-10 original_date: 2014-11-10 link: "http://shoptalkshow.com/episodes/141-marcy-sutton/" category: podcasts -layout: single --- Shop Talk Show is joined by Marcy Sutton. Marcy is an web accessibility expert & interactive developer at Substantial in Seattle. Chris & Dave take a deep dive into web components, accessibility, Angular JS, AJAX, ARIA, and more! diff --git a/documents/podcasts/mozilla-brick-uikit-for-the-web-on-the-web-platform-podcast.html.md b/documents/podcasts/mozilla-brick-uikit-for-the-web-on-the-web-platform-podcast.html.md index 72e183a..169ef3f 100644 --- a/documents/podcasts/mozilla-brick-uikit-for-the-web-on-the-web-platform-podcast.html.md +++ b/documents/podcasts/mozilla-brick-uikit-for-the-web-on-the-web-platform-podcast.html.md @@ -6,7 +6,6 @@ date: 2014-11-30 original_date: 2014-11-30 link: "http://thewebplatform.libsyn.com/mozilla-brick-a-uikit-for-mobile-first" category: podcasts -layout: single --- Mozilla Brick contributors Matt Claypotch and Soledad Penades join The Web Platform Podcast to talk about building UI focused Web Components for 'Mobile First' Web Development. diff --git a/documents/podcasts/one-part-beer-three-parts-web-components.html.md b/documents/podcasts/one-part-beer-three-parts-web-components.html.md new file mode 100644 index 0000000..83d2ff6 --- /dev/null +++ b/documents/podcasts/one-part-beer-three-parts-web-components.html.md @@ -0,0 +1,11 @@ +--- +title: "One part beer, three parts web components. Add lemon to taste" +authors: [trey_shugart, jem_young, ryan_anklam, brian_holt, stacy_london] +podcast: "Front End Happy Hour" +date: 2017-05-07 +original_date: 2017-05-07 +link: "http://frontendhappyhour.com/episodes/one-part-beer-three-parts-web-components-add-lemon-to-taste/" +category: podcasts +--- + +In this episode, we are joined by Trey Shugart who is a front-end developer (Principal Developer) at Atlassian, proponent of web components, and author of SkateJS to talk about Web Components. diff --git a/documents/podcasts/polymer-10.html.md b/documents/podcasts/polymer-10.html.md index 406039a..2c62fd6 100644 --- a/documents/podcasts/polymer-10.html.md +++ b/documents/podcasts/polymer-10.html.md @@ -6,7 +6,6 @@ date: 2015-06-02 original_date: 2015-06-02 link: "http://thewebplatform.libsyn.com/46-polymer-10" category: podcasts -layout: single --- Polymer 1.0 is here! Lean mean and production ready. On episode 46 The Web Platform Podcast talks to a Proverbial Packed Panel of Professional Polymer People. Polymer has grown a ton since its developer preview and has been streamlined for performance. It's a a big show with a panel of both GDE’s and members of the Polymer team to get a better idea of just how this project has grown and why Polymer and web components as a whole are important for the modern and future web platform. diff --git a/documents/podcasts/react-and-reactive-elements.html.md b/documents/podcasts/react-and-reactive-elements.html.md index 2a12343..82aee70 100644 --- a/documents/podcasts/react-and-reactive-elements.html.md +++ b/documents/podcasts/react-and-reactive-elements.html.md @@ -6,7 +6,6 @@ date: 2015-03-16 original_date: 2015-03-16 link: "http://thewebplatform.libsyn.com/35-react-reactive-elements" category: podcasts -layout: single --- Andrew Rota & Denis Radin talk about the ways you can leverage both Web Components & React.js together in a symbiotic fashion. Denis, creator of Reactive Elements, starts us off explaining how his library came to be and why he chose to marry these two technologies in his work. Andrew, who spoke at ReactConf 2015 talks about his experiences with Web Components & React as well. diff --git a/documents/podcasts/rob-dodson-on-shop-talk-show.html.md b/documents/podcasts/rob-dodson-on-shop-talk-show.html.md index 25e2a8f..85756c1 100644 --- a/documents/podcasts/rob-dodson-on-shop-talk-show.html.md +++ b/documents/podcasts/rob-dodson-on-shop-talk-show.html.md @@ -6,7 +6,6 @@ date: 2014-08-12 original_date: 2014-08-12 link: "http://shoptalkshow.com/episodes/124-rob-dodson/" category: podcasts -layout: single --- Shop Talk Show is joined by Rob Dodson. Rob works on Polymer at Google. Chris & Dave take a deep dive with him into Polymer and Web Components. diff --git a/documents/podcasts/the-bosonic-project-on-the-web-platform-podcast.html.md b/documents/podcasts/the-bosonic-project-on-the-web-platform-podcast.html.md index a46509b..2f67947 100644 --- a/documents/podcasts/the-bosonic-project-on-the-web-platform-podcast.html.md +++ b/documents/podcasts/the-bosonic-project-on-the-web-platform-podcast.html.md @@ -6,7 +6,6 @@ date: 2014-09-15 original_date: 2014-09-15 link: http://thewebplatform.libsyn.com/the-bosonic-project category: podcasts -layout: single --- Raphael Rougeron joins The Web Platform Podscast from Toulouse, France to talk about The Bosonic Project. Raphael and his team of developers mostly focus their development efforts working in the Financial Industry, building out secure and robust applications as well as intricate cross browser UI Components. diff --git a/documents/podcasts/the-return-of-bosonic.html.md b/documents/podcasts/the-return-of-bosonic.html.md index 0d45165..86ab804 100644 --- a/documents/podcasts/the-return-of-bosonic.html.md +++ b/documents/podcasts/the-return-of-bosonic.html.md @@ -6,7 +6,6 @@ date: 2015-09-18 original_date: 2015-09-18 link: http://thewebplatform.libsyn.com/61-the-return-of-bosonic category: podcasts -layout: single --- Raphaël Rougeron, one of the Web Components pioneers, along with his team created the Bosonic Project some while back. It was a very different approach to working with Web Components than x-tag and Polymer and it involved a required build step to create Web Components as close to specs as possible with minimal abstractions at runtime. diff --git a/documents/podcasts/the-web-components-community-on-the-web-platform-podcast.html.md b/documents/podcasts/the-web-components-community-on-the-web-platform-podcast.html.md index 32f522b..e848736 100644 --- a/documents/podcasts/the-web-components-community-on-the-web-platform-podcast.html.md +++ b/documents/podcasts/the-web-components-community-on-the-web-platform-podcast.html.md @@ -6,7 +6,6 @@ date: 2014-08-04 original_date: 2014-08-04 link: "http://thewebplatform.libsyn.com/the-web-components-community-helpful-resources" category: podcasts -layout: single --- Web Components are a set of emerging and rapidly changing technologies that are altering the way many developers are starting to build web applications. Zeno Rocha, a dominant force in the front end development community, talks with The Web Platform Podcast on how developers can get started building with these technologies today & how to build their very own components. diff --git a/documents/podcasts/the-x-tag-project-on-the-web-platform-podcast.html.md b/documents/podcasts/the-x-tag-project-on-the-web-platform-podcast.html.md index 3419cd5..942dfe8 100644 --- a/documents/podcasts/the-x-tag-project-on-the-web-platform-podcast.html.md +++ b/documents/podcasts/the-x-tag-project-on-the-web-platform-podcast.html.md @@ -6,7 +6,6 @@ date: 2014-12-12 original_date: 2014-12-12 link: "http://thewebplatform.libsyn.com/21-the-x-tag-project" category: podcasts -layout: single --- Daniel Buchner talks with The Web Platform Podcast on x-tag, the Custom Elements library competitor to Polymer, that he created alongside former Mozillian & Kraken Developer, Arron Schaar. diff --git a/documents/podcasts/understanding-web-components-and-polymer.html.md b/documents/podcasts/understanding-web-components-and-polymer.html.md index 155c1d2..05bbacd 100644 --- a/documents/podcasts/understanding-web-components-and-polymer.html.md +++ b/documents/podcasts/understanding-web-components-and-polymer.html.md @@ -6,7 +6,6 @@ date: 2015-10-30 original_date: 2015-10-30 link: "http://hanselminutes.com/499/understanding-web-components-and-polymer-with-monica-dinculescu" category: podcasts -layout: single --- Monica Dinculescu works on Polymer and Chrome for Google. In this episode she teaches Scott all about Web Components and the Polymer Project. Are Web Components the future of the web, and why? Where does Polymer fit in, and what should YOU use if you are starting a project today? diff --git a/documents/podcasts/web-accessibility-for-javascript-components-and-custom-elements-on-the-web-platform-podcast.html.md b/documents/podcasts/web-accessibility-for-javascript-components-and-custom-elements-on-the-web-platform-podcast.html.md index 831d01a..a54f67a 100644 --- a/documents/podcasts/web-accessibility-for-javascript-components-and-custom-elements-on-the-web-platform-podcast.html.md +++ b/documents/podcasts/web-accessibility-for-javascript-components-and-custom-elements-on-the-web-platform-podcast.html.md @@ -6,7 +6,6 @@ date: 2014-09-03 original_date: 2014-09-03 link: "http://thewebplatform.libsyn.com/web-accessibility-for-javascript-components-and-custom-elements" category: podcasts -layout: single --- Steve Faulkner and Marcy Sutton discuss the lack of focus in development today with regards to building accessible applications & services. Many times web accessibility becomes an afterthought in creating a software product, having low prioritization from the business side until it is a real painful problem. diff --git a/documents/podcasts/web-accessibility-in-polymer.html.md b/documents/podcasts/web-accessibility-in-polymer.html.md index 34cb9ec..5a0dba9 100644 --- a/documents/podcasts/web-accessibility-in-polymer.html.md +++ b/documents/podcasts/web-accessibility-in-polymer.html.md @@ -6,7 +6,6 @@ date: 2015-06-18 original_date: 2015-06-18 link: "http://thewebplatform.libsyn.com/48-web-accessibility-in-polymer" category: podcasts -layout: single --- The Web Platform Podcast talks with Chrome team member & Accessibility champion Alice Boxhall and Polymer members, Chris Joel & Daniel Freedman about the Polymer 1.0 and what is new as far as web accessibility of this release as well as what we should expect looking forward. diff --git a/documents/podcasts/web-components-and-wtf-is-shadow-dom.html.md b/documents/podcasts/web-components-and-wtf-is-shadow-dom.html.md new file mode 100644 index 0000000..054fd28 --- /dev/null +++ b/documents/podcasts/web-components-and-wtf-is-shadow-dom.html.md @@ -0,0 +1,11 @@ +--- +title: "Web Components and WTF is Shadow DOM?" +authors: [mikeal_rogers, alex_sexton, rachel_white] +podcast: "JS Party" +date: 2017-04-11 +original_date: 2017-04-11 +link: "https://changelog.com/jsparty/6" +category: podcasts +--- + +Mikeal Rogers, Alex Sexton, and Rachel White discuss Web Components and questions like — "WTF is Shadow DOM?" and "Are custom elements ready?" We also discuss the JavaScript conference scene as well as attending, speaking and organizing conferences. Plus, the project of the week — p5.js. \ No newline at end of file diff --git a/documents/podcasts/web-components-interop-and-polymer-on-the-web-platform-podcast.html.md b/documents/podcasts/web-components-interop-and-polymer-on-the-web-platform-podcast.html.md index d81042a..c30829f 100644 --- a/documents/podcasts/web-components-interop-and-polymer-on-the-web-platform-podcast.html.md +++ b/documents/podcasts/web-components-interop-and-polymer-on-the-web-platform-podcast.html.md @@ -6,7 +6,6 @@ date: 2014-10-17 original_date: 2014-10-17 link: "http://thewebplatform.libsyn.com/web-components-interop-and-polymer" category: podcasts -layout: single --- Rob Dodson, Google Engineer, goes through many of the recent changes made to Polymer, including accessibility and performance enhancements that help in making applications more integrated. diff --git a/documents/podcasts/web-components-with-cory-house-on-dotnet-rocks.html.md b/documents/podcasts/web-components-with-cory-house-on-dotnet-rocks.html.md index a199fd8..090b3a8 100644 --- a/documents/podcasts/web-components-with-cory-house-on-dotnet-rocks.html.md +++ b/documents/podcasts/web-components-with-cory-house-on-dotnet-rocks.html.md @@ -6,7 +6,6 @@ date: 2015-02-04 original_date: 2015-02-04 link: "http://www.dotnetrocks.com/default.aspx?showNum=1096" category: podcasts -layout: single --- Carl and Richard talk to Cory House about the web component specification and what that will look like in your modern web development. As Cory explains, the key idea behind web components is to provide a framework for Javascript library extensibility that doesn't force you to own the library yourself. diff --git a/documents/podcasts/web-components-with-peter-gasston-on-the-web-ahead.html.md b/documents/podcasts/web-components-with-peter-gasston-on-the-web-ahead.html.md index 461833b..c042a16 100644 --- a/documents/podcasts/web-components-with-peter-gasston-on-the-web-ahead.html.md +++ b/documents/podcasts/web-components-with-peter-gasston-on-the-web-ahead.html.md @@ -6,7 +6,6 @@ date: 2014-04-09 original_date: 2014-04-09 link: "http://5by5.tv/webahead/66" category: podcasts -layout: single --- Web Components seem to be taking the JavaScript community by storm. The parts of this technology give developers a chance to define their own HTML elements, adjust the defaults, and share with others. Learn about it all from Peter Gasston as he joins Jen Simmons to explain. diff --git a/documents/podcasts/x-tag-the-x-generation-on-the-web-platform-podcast.html.md b/documents/podcasts/x-tag-the-x-generation-on-the-web-platform-podcast.html.md index b12d95e..66a0710 100644 --- a/documents/podcasts/x-tag-the-x-generation-on-the-web-platform-podcast.html.md +++ b/documents/podcasts/x-tag-the-x-generation-on-the-web-platform-podcast.html.md @@ -6,7 +6,6 @@ date: 2015-06-09 original_date: 2015-06-09 link: "http://thewebplatform.libsyn.com/47-x-tag-the-x-generation" category: podcasts -layout: single --- Daniel Buchner talks about the X-Tag project and some if its interesting features. The Web Platform Podcast discusses the Web Component specs and much more. Big companies like Google have thrown their full support behind the Web Components technology umbrella. Will others such as Microsoft follow suit? And what will it take for browser vendors to implement web components natively? From f284865479e4503a16bf841601e5375d28eb572f Mon Sep 17 00:00:00 2001 From: Sam li Date: Tue, 3 Oct 2017 09:38:05 -0700 Subject: [PATCH 20/41] Don't run on pull requests --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 57d5a82..61c4185 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,8 +5,8 @@ cache: directories: - node_modules before_install: -- openssl aes-256-cbc -K $encrypted_5ae6bda58156_key -iv $encrypted_5ae6bda58156_iv - -in client-secret.json.enc -out client-secret.json -d +- 'if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then bash openssl aes-256-cbc -K $encrypted_5ae6bda58156_key -iv $encrypted_5ae6bda58156_iv + -in client-secret.json.enc -out client-secret.json -d; fi' script: - node gen.js deploy: From 07120c85b6329aaf04835e8a4408325bb2ec5e45 Mon Sep 17 00:00:00 2001 From: Sam li Date: Tue, 3 Oct 2017 09:40:39 -0700 Subject: [PATCH 21/41] Again --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 61c4185..0414da9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ cache: directories: - node_modules before_install: -- 'if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then bash openssl aes-256-cbc -K $encrypted_5ae6bda58156_key -iv $encrypted_5ae6bda58156_iv +- 'if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then openssl aes-256-cbc -K $encrypted_5ae6bda58156_key -iv $encrypted_5ae6bda58156_iv -in client-secret.json.enc -out client-secret.json -d; fi' script: - node gen.js From 1f628ce43aaa7eea06d0ddc8c4917415ad10b876 Mon Sep 17 00:00:00 2001 From: Yoshihide Jimbo Date: Wed, 15 Nov 2017 03:29:20 +0900 Subject: [PATCH 22/41] Fix a link to the emoji-rain page (#51) --- static/introduction.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/introduction.md b/static/introduction.md index 428a475..ad47236 100644 --- a/static/introduction.md +++ b/static/introduction.md @@ -21,7 +21,7 @@ The [HTML template element specification](https://html.spec.whatwg.org/multipage # How do I use a web component? The components on this site provide new HTML elements that you can use in your web pages and web applications. -Using a custom element is as simple as importing it, and using the new tags in an HTML document. For example, to use the [Emoji Rain element](https://beta.webcomponents.org/element/notwaldorf/emoji-rain): +Using a custom element is as simple as importing it, and using the new tags in an HTML document. For example, to use the [Emoji Rain element](https://webcomponents.org/element/notwaldorf/emoji-rain): ```html @@ -31,7 +31,7 @@ Using a custom element is as simple as importing it, and using the new tags in a There are a number of ways to install custom elements. When you find an element you want to use, look at its README for the commands to install it. Most elements today can be installed with Bower. Bower also handles installing the components' dependencies. For more information on Bower, see [Bower.io](https://bower.io/). -For example, the [Emoji Rain README](https://beta.webcomponents.org/element/notwaldorf/emoji-rain) describes the install process with Bower: +For example, the [Emoji Rain README](https://webcomponents.org/element/notwaldorf/emoji-rain) describes the install process with Bower: ``` mkdir emoji-rain-demo && cd emoji-rain-demo bower install emoji-rain From 9a10db4046a02d7ceb0de0b3b9fcd97d0b8c36e3 Mon Sep 17 00:00:00 2001 From: Denis Washington Date: Fri, 1 Dec 2017 20:48:46 +0100 Subject: [PATCH 23/41] Fix quotes in introduction example (#52) The example included "pretty" quotes instead of simple single quotes for strings, thus causing an `illegal character` syntax error if copy-pasted. --- static/introduction.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/introduction.md b/static/introduction.md index ad47236..9c4c27b 100644 --- a/static/introduction.md +++ b/static/introduction.md @@ -63,11 +63,11 @@ Using a custom element is no different to using a `

` or any other element. ```html ``` From a8bd9493cc517e33a2f6932a2a1b1cb6ef35de0e Mon Sep 17 00:00:00 2001 From: Bryan Ollendyke Date: Thu, 20 Sep 2018 09:39:25 -0400 Subject: [PATCH 24/41] updated list Fixed a typo, made list alphabetical, added litElement and added statement about where this list comes from and how to contribute to it. Also removed x-tag as it is not ES modules compatible (at this time) and added statements about the importance of selecting a library which adopts all 4 of these specs. --- static/libraries.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/static/libraries.md b/static/libraries.md index 808e611..4cf0857 100644 --- a/static/libraries.md +++ b/static/libraries.md @@ -9,15 +9,16 @@ However, if you’re writing lots and lots of custom elements, using a library c # What should you look for in a web component library? -When choosing a web component library, make sure it has a large enough featureset to cover all of your use cases. Interoperability is also important - does the library leak implementation details? A good web component library should produce a web component that “just works” like any other HTML element. You should also be aware of browser compatibility, and any polyfills that will be needed to support features you use or the library uses. Good libraries also have a high value-to-payload ratio - that is, they provide a lot of value for their download size. +When choosing a web component library, make sure it has a large enough featureset to cover all of your use cases. Interoperability is also important - does the library leak implementation details? A good web component library should produce a web component that “just works” like any other HTML element. Good libraries also have a high value-to-payload ratio - that is, they provide a lot of value for their download size. Libraries which support ES modules, Custom Element, Shadow DOM and Template are listed below. +# Some web component libraries -# Existing web component libraries +This list has been compiled by the community and can be modified [via pull request under the community repository](https://github.com/webcomponents/community/edit/master/static/libraries.md) for this website. Projects are listed alphabetically and are known to support all four aspects of the web components specification. * [Polymer](https://www.polymer-project.org/) is a web component library built by Google, with a simple element creation API. Polymer offers one- and two-way data binding into element templates, and provides shims for better cross-browser performance. - * [Skate.js](https://skatejs.gitbooks.io/skatejs/content/) is a library built on top of the W3C web component specs that enables you to write functional and performant web components with a very small footprint. Skate is Inherently cross-framework compatible. For example, it works seamlessly with - and complements - React and other frameworks. - - * [X-Tag](http://x-tag.github.io/) is a Microsoft supported, open source, JavaScript library that wraps the W3C standard Web Components family of APIs to provide a compact, feature-rich interface for rapid component development. While X-Tag offers feature hooks for all Web Component APIs (Custom Elements, Shadow DOM, Templates, and HTML Imports), it only requires Custom Element support to operate. In the absence of native Custom Element support, X-Tag uses a set of polyfills shared with Google's Polymer framework. + * [LitElement](https://github.com/Polymer/lit-element) uses [lit-html](https://github.com/Polymer/lit-html) to render into the element's Shadow DOM and adds API to help manage element properties and attributes. LitElement reacts to changes in properties and renders declaratively using lit-html. + + * [Skate.js](https://skatejs.gitbooks.io/skatejs/content/) is a library built on top of the W3C web component specs that enables you to write functional and performant web components with a very small footprint. Skate is inherently cross-framework compatible. For example, it works seamlessly with - and complements - React and other frameworks. * [Slim.js](http://slimjs.com) Slim.js is a lightweight web component library that provides extended capabilities for components, such as data binding, using es6 native class inheritance. This library is focused for providing the developer the ability to write robust and native web components without the hassle of dependencies and an overhead of a framework. From d1233af038dd2227feff8a0275bddc7e5ac985df Mon Sep 17 00:00:00 2001 From: Bryan Ollendyke Date: Thu, 20 Sep 2018 09:47:11 -0400 Subject: [PATCH 25/41] remove references to HTML Import and update docs --- static/polyfills.md | 62 ++++++--------------------------------------- 1 file changed, 8 insertions(+), 54 deletions(-) diff --git a/static/polyfills.md b/static/polyfills.md index 2babdd4..b15f07d 100644 --- a/static/polyfills.md +++ b/static/polyfills.md @@ -6,32 +6,18 @@ The polyfills are available on GitHub: https://github.com/WebComponents/webcompo To install the polyfills, run this command: ``` -bower install --save webcomponents/webcomponentsjs +npm install @webcomponents/webcomponentsjs ``` - -To feature detect: -```js -(function() { - if ('registerElement' in document - && 'import' in document.createElement('link') - && 'content' in document.createElement('template')) { - // platform is good! - } else { - // polyfill the platform! - var e = document.createElement('script'); - e.src = '/bower_components/webcomponentsjs/webcomponents-lite.min.js'; - document.body.appendChild(e); - } -})(); +There are severeal different ways of applying the polyfill [which you can read about here](https://github.com/WebComponents/webcomponentsjs#how-to-use). The easiest way to utilize webcomponents across platform is the following: ``` + + -# Shadow DOM polyfill -The shadow DOM polyfill provides shadow DOM v0 functionality in browsers that don't support it natively. See the Compatibility table for more information. - -The shadow DOM polyfill, though very powerful, is also fairly intrusive and can add significant performance overhead. For this reason, many Web Components-based libraries like Polymer work around having to use this polyfill, and provide a lighter-weight alternative. These libraries don’t require loading the full Web Components polyfill, but instead use a “lite” version of the polyfill with shadow DOM removed: + + -``` -webcomponents/webcomponents-lite.min.js + + ``` ## Wrappers @@ -126,35 +112,3 @@ The Custom Elements specification is still under discussion. The polyfill implem * `attributeChangedCallback(attributeName)` is called when a custom element's attribute value has changed `createdCallback` is invoked synchronously with element instantiation, the other callbacks are called asynchronously. The asynchronous callbacks generally use the `MutationObserver` timing model, which means they are called before layouts, paints, or other triggered events, so the developer need not worry about flashing content or other bad things happening before the callback has a chance to react to changes. - -# HTML Imports Polyfill - -In imported documents, `href` and `src` attributes in HTML, and `urlproperties` in CSS files, are relative to the location of the imported document, not the main document. - -The HTML Imports polyfill begins processing link tags when the `DOMContentLoaded` event fires. To know when loading is complete, listen for the `HTMLImportsLoaded` event on document or window. For example: - -```html - -``` - -The polyfill loads linked stylesheets, external scripts, and nested HTML imports, but does not parse any data in the loaded resources. For parsing imports, combine HTML Imports with Custom Elements. As long as the HTML Imports is loaded first, the Custom Elements polyfill will detect it, and process all imports when `HTMLImportsLoaded` event fires. - -## The WebComponentsReady event - -Under native imports, ` -``` - -In native HTML Imports, `document.currentScript.ownerDocument` references the import document itself. In the polyfill, use `document._currentScript.ownerDocument` (note the underscore). From 34bd7a79fda223168f4e9de3977fdae9cc8dab54 Mon Sep 17 00:00:00 2001 From: Bryan Ollendyke Date: Thu, 20 Sep 2018 10:06:58 -0400 Subject: [PATCH 26/41] added Stencil --- static/libraries.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/static/libraries.md b/static/libraries.md index 4cf0857..4e7a939 100644 --- a/static/libraries.md +++ b/static/libraries.md @@ -22,3 +22,5 @@ This list has been compiled by the community and can be modified [via pull reque * [Skate.js](https://skatejs.gitbooks.io/skatejs/content/) is a library built on top of the W3C web component specs that enables you to write functional and performant web components with a very small footprint. Skate is inherently cross-framework compatible. For example, it works seamlessly with - and complements - React and other frameworks. * [Slim.js](http://slimjs.com) Slim.js is a lightweight web component library that provides extended capabilities for components, such as data binding, using es6 native class inheritance. This library is focused for providing the developer the ability to write robust and native web components without the hassle of dependencies and an overhead of a framework. + + * [Stencil](https://stenciljs.com/) is an opensource compiler that generates standards-compliant web components. From 26f63ec2bc253bd0d34f2b57229d372f36ccd5c1 Mon Sep 17 00:00:00 2001 From: Bryan Ollendyke Date: Thu, 20 Sep 2018 10:55:53 -0400 Subject: [PATCH 27/41] updated docs for es modules --- static/specs.md | 70 +++++++++++-------------------------------------- 1 file changed, 16 insertions(+), 54 deletions(-) diff --git a/static/specs.md b/static/specs.md index 05beb96..836341b 100644 --- a/static/specs.md +++ b/static/specs.md @@ -1,11 +1,11 @@ Web components are based on four main specifications: * The Custom Elements specification * The shadow DOM specification - * The HTML imports specification + * The ES Module specification * The HTML Template specification # The Custom Elements specification -The previous version of the Custom Elements specification, v0, was only shipped in Chromium-based browsers. It is being phased out in favour of v1. This section mostly applies to the new, cross-browser version of the Custom Elements specification (v1). See Eric Bidelman’s articles on [Custom Elements v1](https://developers.google.com/web/fundamentals/getting-started/primers/customelements#historysupport) or [Custom Elements v0](https://www.html5rocks.com/en/tutorials/webcomponents/customelements/) for full details. +This section applies to the cross-browser version of the Custom Elements specification (v1). See Eric Bidelman’s articles on [Custom Elements v1](https://developers.google.com/web/fundamentals/getting-started/primers/customelements#historysupport). The [Custom Elements specification](https://w3c.github.io/webcomponents/spec/custom/) lays the foundation for designing and using new types of DOM elements that are fully-featured and conforming. Following the Custom Elements spec, authors can define behaviors and styles for new HTML elements. @@ -13,7 +13,7 @@ The [Custom Elements specification](https://w3c.github.io/webcomponents/spec/cus * Customized built-ins extend existing HTML elements with custom functionality. They inherit semantics from the elements they extend. The specification for customized built-ins is still a work in progress, and at present is only supported by Chrome. ## Create a custom button as an autonomous custom element -To create an autonomous custom element, extend HTMLElement. The Custom Elements v1 syntax is: +To create an autonomous custom element, extend HTMLElement. The Custom Elements syntax is: ```html class AutonomousButton extends HTMLElement { ... @@ -21,12 +21,6 @@ class AutonomousButton extends HTMLElement { customElements.define("autonomous-button", AutonomousButton); ``` -The (deprecated) Custom Elements v0 syntax is: -```js -var AutonomousButton = document.registerElement('autonomous-button', {prototype: Object.create(HTMLElement.prototype) }); -document.body.appendChild(new AutonomousButton()); -``` - To use the element: ```html Click Me :) @@ -37,7 +31,7 @@ When the browser sees the `` tag, it constructs and renders a ## Create a custom button as a customized built-in You can extend an existing native HTML element to create a customized built-in*. -The Custom Elements v1 syntax is: +The Custom Elements syntax is: ```html class CustomizedButton extends HTMLButtonElement { ... @@ -45,14 +39,6 @@ class CustomizedButton extends HTMLButtonElement { customElements.define("customized-button", CustomizedButton, { extends: "button" }); ``` -The Custom Elements v0 syntax is: -```js -var CustomizedButton = document.registerElement('customized-button', { - prototype: Object.create(HTMLButtonElement.prototype), - extends: 'button' -}); -``` - To use the element: ```html @@ -64,7 +50,7 @@ By extending HTMLButtonElement instead of HTMLElement, CustomizedButton inherits # The shadow DOM specification -This section is a summary of the new, cross-browser version (v1) of the shadow DOM specification. See [Eric Bidelman’s article on shadow DOM v1](https://developers.google.com/web/fundamentals/getting-started/primers/shadowdom), [Dominic Cooney’s article on shadow DOM v0](https://www.html5rocks.com/en/tutorials/webcomponents/shadowdom/), and [Hayato Ito’s summary of the differences](https://hayato.io/2016/shadowdomv1/) for full details. +This section is a summary of the shadow DOM specification. See [Eric Bidelman’s article on shadow DOM](https://developers.google.com/web/fundamentals/getting-started/primers/shadowdom). The DOM (Document Object Model) is a representation of the structure of an html document. The DOM models a document as a tree, with elements in parent-child relationships. @@ -73,21 +59,15 @@ On its own, the DOM API contains no support for encapsulation. This makes it har The shadow DOM API overcomes this limitation by letting you attach DOM subtrees to elements in a web document. These subtrees are encapsulated; style information inside them cannot apply to outside elements, and vice versa. ## Creating shadow DOM for a custom element -In Shadow DOM v1, use the attachShadow() method to create shadow DOM: +In Shadow DOM, use the attachShadow() method to create shadow DOM: ```js const header = document.createElement('header'); const shadowRoot = header.attachShadow({mode: 'open'}); shadowRoot.innerHTML = '

Hello Shadow DOM

'; ``` -In Shadow DOM v0, use the createShadowRoot() method to create shadow DOM: -```js -let e = document.createElement('div'); -let shadowRoot = e.createShadowRoot(); -``` - ## Composition and slots -By default, if an element has shadow DOM, the shadow tree is rendered instead of the element's children. To allow children to render, you need to add placeholders for them in your shadow tree. To do this in shadow DOM v1: +By default, if an element has shadow DOM, the shadow tree is rendered instead of the element's children. To allow children to render, you need to add placeholders for them in your shadow tree. To do this in shadow DOM: Consider the following shadow tree for ``: @@ -113,23 +93,6 @@ The header renders as if the `` element was replaced by the children: ``` -To do this in shadow DOM v0, use `` as a placeholder. See [Hayato Ito's cheat sheet](https://hayato.io/2016/shadowdomv1/#insertion-points-v0-vs-slots-v1) for the source of this code, and for more explanation. -```html - - - - - - - - -
- - - -
-``` - ## Styling Styles inside a shadow tree are scoped to the shadow tree, and don't affect elements outside the shadow tree. @@ -154,24 +117,23 @@ To style elements with a shadow root, you can use custom properties if the eleme In this example, the `
` has a blue background, even though the div selector is less specific than the .test selector in the main document. That's because the main document selector doesn't match the `
` in the shadow DOM at all. On the other hand, the white text color set on the document body inherits down to `` and into its shadow root. -# The HTML imports specification -The [HTML imports specification](https://w3c.github.io/webcomponents/spec/imports/) defines the inclusion and reuse of HTML documents in other HTML documents. There are no corresponding changes to HTML imports for cross-browser specifications. +# The ES Module specification +The [ES Module specification](https://html.spec.whatwg.org/multipage/webappapis.html#integration-with-the-javascript-module-system) defines the inclusion and reuse of JS documents in other JS documents. -HTML imports enable web components to be developed in a modular way. You can define the interface of your custom element in an HTML file which is then included with an import. Imported HTML files are merged into one file at build time. +ES Modules enable web components to be developed in a modular way that is in alignment with other industry accepted implementations for JavaScript application development. You can define the interface of your custom element in a JS file which is then included with an `type="module"` attribute. ES Module files are merged into one file client side or can be rolled up into single packages ahead of time. -Supposing an element is defined in cool-thing.html, you would import it using the following link: +Supposing an element is defined in awesome-explosion.js, you would import it using the following script: ```html - + ``` -Now you can use the cool-thing element in your own pages: +Now you can use the awesome-explosion element in your own pages: ```html - + ... - + ``` - # The HTML Template specification The [HTML template element specification](https://html.spec.whatwg.org/multipage/scripting.html#the-template-element/) defines how to declare fragments of markup that go unused at page load, but can be instantiated later on at runtime. There are no corresponding changes to HTML templates for cross-browser specifications. @@ -203,4 +165,4 @@ t.content.querySelector('img').src = 'logo.png'; var clone = document.importNode(t.content, true); document.body.appendChild(clone); -``` \ No newline at end of file +``` From b3ad176c7bd17108da32b8a0688ecfd9d76e6eaf Mon Sep 17 00:00:00 2001 From: Bryan Ollendyke Date: Thu, 20 Sep 2018 13:39:58 -0400 Subject: [PATCH 28/41] updated with better on boarding language (#58) --- static/about.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/static/about.md b/static/about.md index 0a634d9..77000d3 100644 --- a/static/about.md +++ b/static/about.md @@ -1,3 +1,11 @@ -WebComponents.org aims to make it easy to share and discover reusable web UI components. As well as a place to publish, browse and search for components, WebComponents.org provides articles, presentations, podcasts, tools and more to help web professionals build first-class DOM objects in the browsers. All the content on this site is totally free, and contributions are welcome. +WebComponents.org aims to make it easy to share, discover, and reuse web components. Web components is a standard created to empower developers to create new HTML tags such that `` would be valid and able to be utilized across all browsers. It creates a framework agnostic way of composing and repurposing code. -This site will be a long-term project committed to making the web better by sharing peer-reviewed custom elements that are usable across all browsers, and interoperable with existing libraries. The Web Component APIs are the result of broad collaboration between browser vendors. This site is intended to be a place for broad developer collaboration across libraries and frameworks to make the most of these powerful new APIs. \ No newline at end of file +As well as a place to publish, browse and search for components, WebComponents.org provides articles, presentations, podcasts, tools and more to help web professionals build first-class DOM objects in the browsers. All the content on this site is totally free, and contributions are welcome. + +This site will be a long-term project committed to making the web better by sharing peer-reviewed custom elements that are usable across all browsers, and interoperable with existing libraries. The Web Component APIs are the result of broad collaboration between browser vendors. This site is intended to be a place for broad developer collaboration across libraries and frameworks to make the most of these powerful new APIs. + +## Community engagement +As web components are not a product but a standard, the community is vast but fragmented. While not the only places, the web components community is active on the following platforms: +- The [webcomponents.org gitter](https://gitter.im/webcomponents/community) +- Twitter via the [#webcomponents](https://twitter.com/search?src=typd&q=%23webcomponents) and [#usetheplatform](https://twitter.com/search?src=typd&q=%23usetheplatform) hash tags +- [Polymer's Slack channel](http://polymer.slack.com) From cc365a00280f45afdcb6807be65d9da58dcd064e Mon Sep 17 00:00:00 2001 From: Bryan Ollendyke Date: Thu, 20 Sep 2018 13:44:50 -0400 Subject: [PATCH 29/41] updated npm and cleaned up resource references (#56) --- static/resources.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/static/resources.md b/static/resources.md index cb3846c..58e7aea 100644 --- a/static/resources.md +++ b/static/resources.md @@ -5,30 +5,31 @@ The WebComponents.org Resources section is a place to showcase useful tools and Web Components is a set of specs that introduce powerful new capabilities to the web platform. Before getting started with your first custom element, it will be helpful to understand the scope of these new features. The [Introduction](/introduction) section contains an overview of these APIs. The [Community](/community) section is also a great way to catch up on the latest goings-on in the Web Components world. We’d also recommend starting out by reading the Getting Started sections of: * [Polymer's documentation;](https://www.polymer-project.org/) * [Slim.js's documentation.](http://slim.js.org/) - * [Skate.js's documentation.](https://skatejs.gitbooks.io/skatejs/content/) - * [X-Tag's documentation.](http://x-tag.github.io/docs) + * [Skate.js's documentation.](https://skatejs.netlify.com/) -These will give you an idea on how these libraries for building web components work and what might be best for you. +These will give you an idea on how these libraries for building web components work and what might be best for you. Another incredible resource is the [web-components-todo repo](https://github.com/shprink/web-components-todo) which has the same to-do list app created in an ever growing list of web component and component compatible library methodologies. It's a great way to learn from the differences in techniques across libraries and see which one is right for your needs. # 2. Create Once you’ve learned about Web Components, it's time to create your own element! There are a number of different jumping-off points for getting started using a Web Component library, or just using the vanilla Web Component APIs directly: * [Polymer Boilerplate](https://github.com/webcomponents/polymer-boilerplate) - * [X-Tag Boilerplate](https://github.com/webcomponents/xtag-boilerplate); * [VanillaJS Boilerplate.](https://github.com/webcomponents/element-boilerplate) -In these boilerplates, we solve the same problem using different libraries (Polymer/X-Tag) or no library at all (VanillaJS), with the same tools and directory structure. +In these boilerplates, we solve the same problem using different libraries (Polymer / SkateJS / LitElement / SlimJS) or no library at all (VanillaJS), with the same tools and directory structure. -We encourage a series of best practices like setting up a live demo, documenting your API, maintaining a changelog for release purposes, and sharing your component on Bower. The boilerplates form small, opinionated starter-kits with all you need included, from polyfills to automated tasks. +We encourage a series of best practices like setting up a live demo, documenting your API, maintaining a changelog for release purposes, and sharing your component on NPM. The boilerplates form small, opinionated starter-kits with all you need included, from polyfills to automated tasks. You’ll still need to make some manual changes after forking each boilerplate, like changing an element's name in different files. In order to automate this process, we created a [Yeoman](http://yeoman.io/) Generator and a [Slush](http://slushjs.github.io/#/) Generator that can scaffold a web component using the command-line: - * [Element Generator for Yeoman.](https://github.com/webcomponents/generator-element) - * [Element Generator for Slush.](https://github.com/webcomponents/slush-element) + * [Element Generator for Yeoman](https://github.com/webcomponents/generator-element) + * [Element Generator for Slush](https://github.com/webcomponents/slush-element) + * [RHElement Generator](https://github.com/rhelements/generator-rhelement) -The generators help ensure an even more seamless start, helping with tasks like validating your element's name according to W3C's spec rules and checking if there's a similarly-named project on Bower. +The generators help ensure an even more seamless start, helping with tasks like validating your element's name according to W3C's spec rules and checking if there's a similarly-named project on NPM. -The Polymer Project also has a command-line tool to help automate the scaffolding of Polymer-based web components and applications: - * [Polymer CLI](https://www.polymer-project.org/1.0/docs/tools/polymer-cli) +Some projects also have command-line tools to help automate the scaffolding of web components and applications: + * [Polymer CLI](https://www.polymer-project.org/3.0/docs/tools/polymer-cli) - CLI + build Polymer 3 & scaffold full applications + & [StencilJS](https://www.stenciljs.com/) - CLI & Compiler to generate VanillaJS elements + * [Web Component Factory](https://github.com/elmsln/wcfactory) - CLI to produce boilerplate VanillaJS, SlimJS, StencilJS, Polmer 3, LitElement # 3. Share @@ -36,5 +37,4 @@ Now that you’ve finished your element it's time to share it with the world! Th The best way to share a component is by making it available for use with one of the current JavaScript package managers. Currently most web component libraries have great support for [Bower](https://bower.io/), and are working on improving support for [npm](https://www.npmjs.com/). -And make sure to publish your element to webcomponents.org! Check out the [Publish page](https://beta.webcomponents.org/publish) to learn how to publish your element. - +And make sure to publish your element to webcomponents.org! Check out the [Publish page](https://webcomponents.org/publish) to learn how to publish your element. From 286a10bd21d8591fd981b3e80d723d563e75c1a2 Mon Sep 17 00:00:00 2001 From: Bryan Ollendyke Date: Thu, 20 Sep 2018 13:45:42 -0400 Subject: [PATCH 30/41] updated for npm and es module routines (#55) --- static/introduction.md | 39 ++++++++++++--------------------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/static/introduction.md b/static/introduction.md index 9c4c27b..180a99d 100644 --- a/static/introduction.md +++ b/static/introduction.md @@ -12,8 +12,8 @@ The [Custom Elements specification](https://w3c.github.io/webcomponents/spec/cus ## Shadow DOM The [shadow DOM specification](https://w3c.github.io/webcomponents/spec/shadow/) defines how to use encapsulated style and markup in web components. -## HTML imports -The [HTML imports specification](https://w3c.github.io/webcomponents/spec/imports/) defines the inclusion and reuse of HTML documents in other HTML documents. +## ES Modules +The [ES Modules specification](https://html.spec.whatwg.org/multipage/webappapis.html#integration-with-the-javascript-module-system) defines the inclusion and reuse of JS documents in a standards based, modular, performant way. ## HTML Template The [HTML template element specification](https://html.spec.whatwg.org/multipage/scripting.html#the-template-element/) defines how to declare fragments of markup that go unused at page load, but can be instantiated later on at runtime. @@ -21,24 +21,24 @@ The [HTML template element specification](https://html.spec.whatwg.org/multipage # How do I use a web component? The components on this site provide new HTML elements that you can use in your web pages and web applications. -Using a custom element is as simple as importing it, and using the new tags in an HTML document. For example, to use the [Emoji Rain element](https://webcomponents.org/element/notwaldorf/emoji-rain): +Using a custom element is as simple as importing it, and using the new tags in an HTML document. For example, to use the [paper-button element](https://www.webcomponents.org/element/@polymer/paper-button): ```html - + ... - +raised ``` -There are a number of ways to install custom elements. When you find an element you want to use, look at its README for the commands to install it. Most elements today can be installed with Bower. Bower also handles installing the components' dependencies. For more information on Bower, see [Bower.io](https://bower.io/). +There are a number of ways to install custom elements. When you find an element you want to use, look at its README for the commands to install it. Most elements today can be installed with NPM. NPM also handles installing the components' dependencies. For more information on NPM, see [npmjs.com](https://www.npmjs.com/). -For example, the [Emoji Rain README](https://webcomponents.org/element/notwaldorf/emoji-rain) describes the install process with Bower: +For example, the [paper-button overview](https://www.webcomponents.org/element/@polymer/paper-button) describes the install process with npm: ``` -mkdir emoji-rain-demo && cd emoji-rain-demo -bower install emoji-rain +mkdir my-new-app && cd my-new-app +npm install --save @polymer/paper-button ``` # How do I define a new HTML element? -This section describes the syntax for the new cross-browser version (v1) of the Web Components specification. +This section describes the syntax for the cross-browser version of the Web Components specification. Use JavaScript to define a new HTML element and its tag with the customElements global. Call customElements.define() with the tag name you want to create and a JavaScript class that extends the base HTMLElement. @@ -47,12 +47,6 @@ For example, to define a mobile drawer panel, ``: class AppDrawer extends HTMLElement {...} window.customElements.define('app-drawer', AppDrawer); ``` -v0 of the Custom Elements specification used document.registerElement() for this purpose: -```js -var XFoo = document.registerElement('x-foo'); -document.body.appendChild(new XFoo()); -``` -See this article on the [v0 Custom Elements specification](https://www.html5rocks.com/en/tutorials/webcomponents/customelements/) for more information. To use the new tag: ```html @@ -83,18 +77,9 @@ shadowRoot.innerHTML = '

Hello Shadow DOM

'; // Could also use appendChil // header.shadowRoot === shadowRoot // shadowRoot.host === header ``` - -Version 0 of the shadow DOM specification provided a slightly different method for creating shadow DOM: -```js -var root = host.createShadowRoot(); -``` -See this article on [shadow DOM v0](https://www.html5rocks.com/en/tutorials/webcomponents/shadowdom/) for more information. See also [Hayato Ito's comparison of v0 and v1 of the shadow DOM specification](http://hayato.io/2016/shadowdomv1/). - # Libraries for building web components -Many libraries already exist that make it easier to build web components. To dive in and create your own components, here are some you can try out: - * [Bosonic](https://bosonic.github.io/) is a collection of components designed to meet the everyday needs of web developers. +Many libraries already exist that make it easier to build web components. [The libraries section](https://www.webcomponents.org/libraries) of the site has additional details but here are some you can try out: * [Polymer](https://www.polymer-project.org) provides a set of features for creating custom elements. - * [SkateJS](https://github.com/skatejs/skatejs) is a JavaScript library for writing web components with a small footprint. + * [LitElement](https://github.com/Polymer/lit-element) uses [lit-html](https://github.com/Polymer/lit-html) to render into the element's Shadow DOM and adds API to help manage element properties and attributes. * [Slim.js](http://slimjs.com) is an opensource lightweight web component library that provides data-binding and extended capabilities for components, using es6 native class inheritance. * [Stencil](https://stenciljs.com/) is an opensource compiler that generates standards-compliant web components. - * [X-Tag](https://x-tag.github.io/) is an open source JavaScript library that provides an interface for component development. From 4c1e22e54019e5861294cc8f1426720d36fa1987 Mon Sep 17 00:00:00 2001 From: Bryan Ollendyke Date: Thu, 20 Sep 2018 14:03:42 -0400 Subject: [PATCH 31/41] html styling on code block per review --- static/polyfills.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/polyfills.md b/static/polyfills.md index b15f07d..8a00760 100644 --- a/static/polyfills.md +++ b/static/polyfills.md @@ -9,7 +9,7 @@ To install the polyfills, run this command: npm install @webcomponents/webcomponentsjs ``` There are severeal different ways of applying the polyfill [which you can read about here](https://github.com/WebComponents/webcomponentsjs#how-to-use). The easiest way to utilize webcomponents across platform is the following: -``` +```html @@ -65,7 +65,7 @@ If you plan to work with elements that need to be wrapped over and over, try pas ## Event Retargeting An important aspect of the shadow DOM is that events are retargeted to never expose the shadow DOM to the light DOM. For example: -``` +```js var div = document.createElement('div'); div.innerHTML = 'Click me'; var shadow = div.createShadowRoot(); From 3a6e47e428bb8c43e363156298339631bff93459 Mon Sep 17 00:00:00 2001 From: Bryan Ollendyke Date: Thu, 20 Sep 2018 14:29:19 -0400 Subject: [PATCH 32/41] clarified spec meaning and added 2 more examples --- static/specs.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/static/specs.md b/static/specs.md index 836341b..e381123 100644 --- a/static/specs.md +++ b/static/specs.md @@ -1,8 +1,10 @@ -Web components are based on four main specifications: +Web components is a meta-specification made possible by four other specifications: * The Custom Elements specification * The shadow DOM specification - * The ES Module specification * The HTML Template specification + * The ES Module specification + +These four specifications can be used on their own but combined allow developers to define their own tags (custom element), whose styles are encapsulated and isolated (shadow dom), that can be restamped many times (template), and have a consistent way of being integrated into applications (es module). # The Custom Elements specification This section applies to the cross-browser version of the Custom Elements specification (v1). See Eric Bidelman’s articles on [Custom Elements v1](https://developers.google.com/web/fundamentals/getting-started/primers/customelements#historysupport). @@ -122,9 +124,15 @@ The [ES Module specification](https://html.spec.whatwg.org/multipage/webappapis. ES Modules enable web components to be developed in a modular way that is in alignment with other industry accepted implementations for JavaScript application development. You can define the interface of your custom element in a JS file which is then included with an `type="module"` attribute. ES Module files are merged into one file client side or can be rolled up into single packages ahead of time. -Supposing an element is defined in awesome-explosion.js, you would import it using the following script: +Supposing an element is defined in awesome-explosion.js, you would import it using one of the following script: ```html +... + ``` Now you can use the awesome-explosion element in your own pages: From c70e6c79e01edc8efe8b717f949740ec71411990 Mon Sep 17 00:00:00 2001 From: Sam Li Date: Thu, 20 Sep 2018 15:21:43 -0400 Subject: [PATCH 33/41] Update to node standard and fix generation (#59) --- app.yaml | 3 +-- gen.js | 17 +++++++++++------ package.json | 2 +- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/app.yaml b/app.yaml index b22edb5..f0ccc6d 100644 --- a/app.yaml +++ b/app.yaml @@ -1,2 +1 @@ -runtime: nodejs -vm: true +runtime: nodejs8 diff --git a/gen.js b/gen.js index 3eed702..bccda0f 100644 --- a/gen.js +++ b/gen.js @@ -1,15 +1,20 @@ +/** + * This script runs before deployment to generate necessary metadata for the + * running server. It parses docpad documents in the `documents/` directory and + * outputs a `content-gen.js` file. The generated file contains extracted + * metadata from all these documents. At runtime, the server loads the + * generated metadata to fulfill API requests. + */ + 'use strict'; let fs = require('fs'); -let docpad = require('docpad'); +const DocPad = require('docpad'); +const docpadInstance = new DocPad(); let authors = require('./authors.js'); let metadata = []; -docpad.createInstance({}, function(err, docpadInstance) { - if (err) - return console.error(err.stack); - docpadInstance.parseDocumentDirectory({path: 'documents'}, processFiles); -}); +docpadInstance.parseDocumentDirectory({path: 'documents'}, processFiles); /** * Process all the files that have been read. diff --git a/package.json b/package.json index 3d3437d..244a131 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "0.0.1", "private": true, "engines": { - "node": "~4.2" + "node": "8.x" }, "scripts": { "start": "node app.js", From d329f94eba8d4e79b3aa3be6c7a0e23fd805a698 Mon Sep 17 00:00:00 2001 From: Bryan Ollendyke Date: Thu, 20 Sep 2018 17:00:22 -0400 Subject: [PATCH 34/41] bullet fixed (#60) --- static/resources.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/resources.md b/static/resources.md index 58e7aea..5cdd8ea 100644 --- a/static/resources.md +++ b/static/resources.md @@ -28,7 +28,7 @@ The generators help ensure an even more seamless start, helping with tasks like Some projects also have command-line tools to help automate the scaffolding of web components and applications: * [Polymer CLI](https://www.polymer-project.org/3.0/docs/tools/polymer-cli) - CLI + build Polymer 3 & scaffold full applications - & [StencilJS](https://www.stenciljs.com/) - CLI & Compiler to generate VanillaJS elements + * [StencilJS](https://www.stenciljs.com/) - CLI & Compiler to generate VanillaJS elements * [Web Component Factory](https://github.com/elmsln/wcfactory) - CLI to produce boilerplate VanillaJS, SlimJS, StencilJS, Polmer 3, LitElement # 3. Share From 9b853e18fa3f07948e84f14e2d150652b27629df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Luba=C5=84ski?= Date: Wed, 10 Oct 2018 21:35:15 +0200 Subject: [PATCH 35/41] Added Hybrids library (#61) --- static/introduction.md | 3 ++- static/libraries.md | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/static/introduction.md b/static/introduction.md index 180a99d..4323c20 100644 --- a/static/introduction.md +++ b/static/introduction.md @@ -79,7 +79,8 @@ shadowRoot.innerHTML = '

Hello Shadow DOM

'; // Could also use appendChil ``` # Libraries for building web components Many libraries already exist that make it easier to build web components. [The libraries section](https://www.webcomponents.org/libraries) of the site has additional details but here are some you can try out: - * [Polymer](https://www.polymer-project.org) provides a set of features for creating custom elements. + * [Hybrids](https://github.com/hybridsjs/hybrids) is a UI library for creating Web Components with simple and functional API. * [LitElement](https://github.com/Polymer/lit-element) uses [lit-html](https://github.com/Polymer/lit-html) to render into the element's Shadow DOM and adds API to help manage element properties and attributes. + * [Polymer](https://www.polymer-project.org) provides a set of features for creating custom elements. * [Slim.js](http://slimjs.com) is an opensource lightweight web component library that provides data-binding and extended capabilities for components, using es6 native class inheritance. * [Stencil](https://stenciljs.com/) is an opensource compiler that generates standards-compliant web components. diff --git a/static/libraries.md b/static/libraries.md index 4e7a939..8406466 100644 --- a/static/libraries.md +++ b/static/libraries.md @@ -15,10 +15,12 @@ When choosing a web component library, make sure it has a large enough featurese This list has been compiled by the community and can be modified [via pull request under the community repository](https://github.com/webcomponents/community/edit/master/static/libraries.md) for this website. Projects are listed alphabetically and are known to support all four aspects of the web components specification. - * [Polymer](https://www.polymer-project.org/) is a web component library built by Google, with a simple element creation API. Polymer offers one- and two-way data binding into element templates, and provides shims for better cross-browser performance. + * [Hybrids](https://github.com/hybridsjs/hybrids) is a UI library for creating web components with simple and functional API. The library uses plain objects and pure functions for defining custom elements, which allow very flexible composition. It provides built-in cache mechanism, template engine based on tagged template literals, and integration with developer tools. * [LitElement](https://github.com/Polymer/lit-element) uses [lit-html](https://github.com/Polymer/lit-html) to render into the element's Shadow DOM and adds API to help manage element properties and attributes. LitElement reacts to changes in properties and renders declaratively using lit-html. + * [Polymer](https://www.polymer-project.org/) is a web component library built by Google, with a simple element creation API. Polymer offers one- and two-way data binding into element templates, and provides shims for better cross-browser performance. + * [Skate.js](https://skatejs.gitbooks.io/skatejs/content/) is a library built on top of the W3C web component specs that enables you to write functional and performant web components with a very small footprint. Skate is inherently cross-framework compatible. For example, it works seamlessly with - and complements - React and other frameworks. * [Slim.js](http://slimjs.com) Slim.js is a lightweight web component library that provides extended capabilities for components, such as data binding, using es6 native class inheritance. This library is focused for providing the developer the ability to write robust and native web components without the hassle of dependencies and an overhead of a framework. From 8d0be8b2f118c4cfb8298ffb6a0b07e2d3610101 Mon Sep 17 00:00:00 2001 From: Antonio Davi Macedo Coelho de Castro Date: Tue, 30 Oct 2018 10:34:20 -0700 Subject: [PATCH 36/41] Fix error when teaching how to use custom element (#63) --- static/introduction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/introduction.md b/static/introduction.md index 4323c20..2adb6fa 100644 --- a/static/introduction.md +++ b/static/introduction.md @@ -24,7 +24,7 @@ The components on this site provide new HTML elements that you can use in your w Using a custom element is as simple as importing it, and using the new tags in an HTML document. For example, to use the [paper-button element](https://www.webcomponents.org/element/@polymer/paper-button): ```html - + ... raised ``` From ce3bd0e1f521302d4d9cf6a46c408512c1132825 Mon Sep 17 00:00:00 2001 From: btopro Date: Tue, 6 Nov 2018 09:34:54 -0500 Subject: [PATCH 37/41] floss weekly interview added --- documents/podcasts/hax-floss-weekly.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 documents/podcasts/hax-floss-weekly.md diff --git a/documents/podcasts/hax-floss-weekly.md b/documents/podcasts/hax-floss-weekly.md new file mode 100644 index 0000000..f5fd56b --- /dev/null +++ b/documents/podcasts/hax-floss-weekly.md @@ -0,0 +1,11 @@ +--- +title: "HAX - FLOSS Weekly 495" +authors: [btopro] +podcast: "FLOSS Weekly" +date: 2018-11-06 +original_date: 2018-08-29 +link: "https://www.stitcher.com/podcast/twit/floss-weekly/e/56008377" +category: podcasts +--- + +Bryan Ollendyke is the lead of the HAX the web, web component authoring system as well as lead of the ELMS: Learning Network project. He's been a 100% effort FOSS developer for over 10 years at Penn State, meaning every line he's written the last 10 years has been an open contribution! \ No newline at end of file From 5b64784dc85c274f6ab8c2ad53c4dae83f40ea5d Mon Sep 17 00:00:00 2001 From: btopro Date: Tue, 6 Nov 2018 14:13:29 -0500 Subject: [PATCH 38/41] authors updated --- authors.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/authors.js b/authors.js index 13d4d53..df413f0 100755 --- a/authors.js +++ b/authors.js @@ -113,6 +113,13 @@ module.exports = { gravatar: "f3d812c50181277a75a997270518ee15", twitter: "findajit" }, + btopro: { + name: "Bryan Ollendyke", + bio: "Bryan is lead of HAX and ELMS: Learning Network at Penn State. ELMS:LN and HAX seek to democratise content production and transform education through advanced authoring tools.", + gravatar: "8f21ddd50ee3f5856d9be912e6a5b37d", + github: "329735", + twitter: "btopro" + }, bill_heaton: { name: "Bill Heaton", bio: "Bill is a Senior UI Engineer at CrowdStrike who loves to build great applications with Ember.js.", From d8bfcf7f4c65df960390a9a99c14e1de8d26ed23 Mon Sep 17 00:00:00 2001 From: Bryan Ollendyke Date: Tue, 13 Nov 2018 12:08:16 -0500 Subject: [PATCH 39/41] link was dead, updated to more stable one (#65) --- documents/podcasts/hax-floss-weekly.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documents/podcasts/hax-floss-weekly.md b/documents/podcasts/hax-floss-weekly.md index f5fd56b..8aa30fd 100644 --- a/documents/podcasts/hax-floss-weekly.md +++ b/documents/podcasts/hax-floss-weekly.md @@ -4,8 +4,8 @@ authors: [btopro] podcast: "FLOSS Weekly" date: 2018-11-06 original_date: 2018-08-29 -link: "https://www.stitcher.com/podcast/twit/floss-weekly/e/56008377" +link: "https://twit.tv/shows/floss-weekly/episodes/495" category: podcasts --- -Bryan Ollendyke is the lead of the HAX the web, web component authoring system as well as lead of the ELMS: Learning Network project. He's been a 100% effort FOSS developer for over 10 years at Penn State, meaning every line he's written the last 10 years has been an open contribution! \ No newline at end of file +Bryan Ollendyke is the lead of the HAX the web, web component authoring system as well as lead of the ELMS: Learning Network project. He's been a 100% effort FOSS developer for over 10 years at Penn State, meaning every line he's written the last 10 years has been an open contribution! From 23a0f9b5e44332630ca974808efcaf8504c11714 Mon Sep 17 00:00:00 2001 From: Chris Holt Date: Fri, 7 Aug 2020 16:31:20 -0700 Subject: [PATCH 40/41] feat: add FAST as a new web component technology (#75) --- static/libraries.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/static/libraries.md b/static/libraries.md index 8406466..6f7fe21 100644 --- a/static/libraries.md +++ b/static/libraries.md @@ -15,6 +15,8 @@ When choosing a web component library, make sure it has a large enough featurese This list has been compiled by the community and can be modified [via pull request under the community repository](https://github.com/webcomponents/community/edit/master/static/libraries.md) for this website. Projects are listed alphabetically and are known to support all four aspects of the web components specification. +* [FAST](https://fast.design) is a web component library built by Microsoft, which offers several packages to leverage depending on your project needs. [Fast Element](https://github.com/microsoft/fast/tree/master/packages/web-components/fast-element) is a lightweight means to easily build performant, memory-efficient, standards-compliant Web Components. [Fast Foundation](https://github.com/microsoft/fast/tree/master/packages/web-components/fast-foundation) is a library of Web Component classes, templates, and other utilities built on fast-element intended to be composed into registered Web Components. + * [Hybrids](https://github.com/hybridsjs/hybrids) is a UI library for creating web components with simple and functional API. The library uses plain objects and pure functions for defining custom elements, which allow very flexible composition. It provides built-in cache mechanism, template engine based on tagged template literals, and integration with developer tools. * [LitElement](https://github.com/Polymer/lit-element) uses [lit-html](https://github.com/Polymer/lit-html) to render into the element's Shadow DOM and adds API to help manage element properties and attributes. LitElement reacts to changes in properties and renders declaratively using lit-html. From e70b46d5b55e7785720cf25def87c9ee8c81c8b4 Mon Sep 17 00:00:00 2001 From: TAKAHASHI Shuuji Date: Sun, 14 Nov 2021 07:49:51 +0000 Subject: [PATCH 41/41] Fix broken links on the introduction page --- static/introduction.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/static/introduction.md b/static/introduction.md index 2adb6fa..7f6ff21 100644 --- a/static/introduction.md +++ b/static/introduction.md @@ -7,10 +7,10 @@ Web components are based on existing web standards. Features to support web comp Web components are based on four main specifications: ## Custom Elements -The [Custom Elements specification](https://w3c.github.io/webcomponents/spec/custom/) lays the foundation for designing and using new types of DOM elements. +The [Custom Elements specification](https://wicg.github.io/webcomponents/spec/custom/) lays the foundation for designing and using new types of DOM elements. ## Shadow DOM -The [shadow DOM specification](https://w3c.github.io/webcomponents/spec/shadow/) defines how to use encapsulated style and markup in web components. +The [shadow DOM specification](https://wicg.github.io/webcomponents/spec/shadow/) defines how to use encapsulated style and markup in web components. ## ES Modules The [ES Modules specification](https://html.spec.whatwg.org/multipage/webappapis.html#integration-with-the-javascript-module-system) defines the inclusion and reuse of JS documents in a standards based, modular, performant way. @@ -80,7 +80,7 @@ shadowRoot.innerHTML = '

Hello Shadow DOM

'; // Could also use appendChil # Libraries for building web components Many libraries already exist that make it easier to build web components. [The libraries section](https://www.webcomponents.org/libraries) of the site has additional details but here are some you can try out: * [Hybrids](https://github.com/hybridsjs/hybrids) is a UI library for creating Web Components with simple and functional API. - * [LitElement](https://github.com/Polymer/lit-element) uses [lit-html](https://github.com/Polymer/lit-html) to render into the element's Shadow DOM and adds API to help manage element properties and attributes. + * [lit-element](https://github.com/lit/lit/tree/main/packages/lit-element) uses [lit-html](https://github.com/lit/lit/tree/main/packages/lit-html) to render into the element's Shadow DOM and adds API to help manage element properties and attributes. * [Polymer](https://www.polymer-project.org) provides a set of features for creating custom elements. * [Slim.js](http://slimjs.com) is an opensource lightweight web component library that provides data-binding and extended capabilities for components, using es6 native class inheritance. * [Stencil](https://stenciljs.com/) is an opensource compiler that generates standards-compliant web components.