Alex Russell
Fronteers
Oct 7, 2011
<a href="http://infrequently.org"> bloviating </a>
| Value | Risk | Constituency |
|---|---|---|
| Ubiquity | Adoption | Developers |
| Performance | Run-time | Users, Publishers |
| High-level Semantics | Ecosystem lock-in | Users, Developers, Publishers |
| Declarative Configuration | Technical lock-in | Designers, Publishers |
| Extensibility | "Hard Wall" scenario | Developers, Publishers |
| Coping Strategy | Constituency | Challenges |
|---|---|---|
| Widget Frameworks | Developers, Users | Dupliation, Semantics, Searchability, Interop, Performance |
| JS Layout Managers | Developers, Users | Duplication, Semantics, Performance, Interop |
| Ajax Data Management | Developers, Users | Duplication, Semantics, Searchability, Interop |
| Microformats, etc. | Publishers, Search Engines, Developers | Browser Support, UI, Lingua-franca Status |
| Chrome Frame | Publishers, Developers | Deployment, UX burden, Possibly "Managed Out" |
There is no Immaculate Connception for web standards.
Heuristics are rubbish because they are ambiguious.
<a href="http://infrequently.org"> some useless blog </a>
<input type="text" ...>
<input type="text" ...> <input type="date" ...> <input type="range" ...> <input type="email" ...> <input type="url" ...> <select> <textarea>
Are the semantics we have
the semantics we need?
<div class="commentTemplate">
<style scoped>
img { border: 1px solid black; margin-bottom: 1em; float: left; }
.text { margin-left: 71px; }
.holder { clear: left; margin-bottom: 1em; }
</style>
<img class="avatar" alt="has a border">
<div class="text"></div>
</div>
<img alt="not affected by scoped rules!">
function Comment(text) {
HTMLElement.call(this); // Makes this an Element
this.textContent = text || '...';
this.buildUI();
}
Comment.prototype = Object.create(HTMLElement.prototype);
Comment.prototype.constructor = Comment;
Comment.prototype.buildUI = function() { ... };
HTMLElement.register('x-comment', Comment);
var c = new Comment("Howdy, pardner!");
document.body.appendChild(c);
<x-comment>...</x-comment>
function Comment(text) {
HTMLElement.call(this); // Makes this an Element
this.textContent = text || '...';
this.shadow = new ShadowRoot(this);
this.buildUI();
}
Comment.prototype = Object.create(HTMLElement.prototype);
Comment.prototype.constructor = Comment;
Comment.prototype.buildUI = function() { ... };
HTMLElement.register('x-comment', Comment);
<template id="commentTemplate">
<div class="holder">
<style scoped>
img { ... }
.text { ... }
.holder { ... }
</style>
<img class="avatar" alt="avatar">
<div class="text">
<content></content>
</div>
</div>
</template>
<script>
document.body.model = Model.get({
'items': [
{ 'name': 'Africa',
'children': [
{ 'name': 'Egypt' },
{ 'name': 'Kenya',
'children': [ { 'name': 'Nairobi' }, { 'name': 'Mombasa' } ]
} ] } ]
});
</script>
<template iterate="items" id="t">
<li>{{name}}
<ul><template ref="t" iterate="children"></template></ul>
</li>
</template>
<html>
<head>
<datasource type="json" src="foo.json" id="dm"></datasource>
...
</head>
<body model="dm">
<template iterate="items" id="t">
<li>{{name}}
<ul><template ref="t" iterate="children"></template></ul>
</li>
</template>
</body>
<html>
<html>
<head>
<datasource type="html" src="#listData" id="dm"></datasource>
</head>
<body model="dm">
<li id="listData">
<ul>...</ul>
<ul>...</ul>
</li>
<template iterate="children">
<x-customview>{{nodeValue}}</x-customview>
</template>
</body>
<html>
function Comment(text) {
HTMLElement.call(this); // Makes this an Element
...
}
Comment.prototype = Object.create(HTMLElement.prototype);
Comment.prototype.constructor = Comment;
Comment.prototype.buildUI = function() { ... };
HTMLElement.register('x-comment', Comment);
class Comment extends HTMLElement {
constructor(attrs = {}) {
super(attrs);
this.textContent = attrs.text || lorem;
this.shadow = new ShadowRoot(this);
this.buildUI();
}
buildUI() { ... }
}
HTMLElement.register('x-comment', Comment);
http://code.google.com/p/traceur-compiler
http://code.google.com/p/experimental-css
http://code.google.com/p/mdv