Designing Declarative APIs
By Ilya Birman, ilyabirman.net
Designing By Ilya Birman, ilyabirman.net Declarative APIs - - PowerPoint PPT Presentation
Designing By Ilya Birman, ilyabirman.net Declarative APIs bureau.ru/en Aegea blogging engine blogengine.me ilyabirman.net Designing By Ilya Birman, ilyabirman.net Declarative APIs 1. Theory SuperComplete Implements
By Ilya Birman, ilyabirman.net
bureau.ru/en
blogengine.me
ilyabirman.net
By Ilya Birman, ilyabirman.net
Implements text completion in input fields
<script src="supercomplete.js" /? <link rel="stylesheet" src="supercomplete.css" /?
<script src="supercomplete.js" /? <link rel="stylesheet" src="supercomplete.css" /? <script> var superCompleteInstance = new SuperComplete ('id') <0script>
<script src="supercomplete.js" /? <link rel="stylesheet" src="supercomplete.css" /? <script> $ ('#id').superComplete () <0script>
<script src="supercomplete.js" /? <link rel="stylesheet" src="supercomplete.css" /? <input type="text" class="supercomplete" /?
fotorama.io by Artem Polikarpov
helsinki.jpg berlin.jpg rome.jpg zurich.jpg
<img src="helsinki.jpg" /? <img src="berlin.jpg" /? <img src="rome.jpg" /? <img src="zurich.jpg" /?
<div class="fotorama"> <img src="helsinki.jpg" /? <img src="berlin.jpg" /? <img src="rome.jpg" /? <img src="zurich.jpg" /? <0div>
fotorama.io by Artem Polikarpov
<div class="special"> Text <0div>
<link rel="stylesheet" src="main.css"/? <div class="special"> Text <0div>
<link rel="stylesheet" src="main.css"/? <script> document.getElementsByClassName ('special') .applyStyles ('main') <0script> <div class="special"> Text <0div>
It’s as appropriate for JavaScript as it is for CSS
<div class="supercomplete"> ../ <0div>
<script src="supercomplete.js" /? <link rel="stylesheet" src="supercomplete.css" /? <script> var superCompleteInstance = new SuperComplete ('id') <0script>
CSS classes or JavaScript constructors may also cause conflicts. Solve by thoughtful naming and selective linking
Angular React
Angular One in about 2000 ... 10 000 websites React Five times less
According to some websites
Compatibility with 99,97% of the Web is a pretuy good start
Compatibility with 99,97% of the Web is a pretuy good start. SPAs support is a feature
<input type="button" value="Send"
/?
<input type="submit" value="Send" /?
<a href="../"
>Click here<0a>
<a href="../">Click here<0a> a:hover { color: red }
Your thing is important :-)
Writing boilerplate code that just needs to be there for the things to work is not programming
Win32 API
Logo :-)
Cocoa
AppleScript
JavaScript
asm
C++
What can become declarative becomes declarative (or state-based)
lea.verou.me:
Less code means less errors, less time to figure out and more users
This is just betuer
This is just betuer. As a side efgect, beginners will get it faster, too
<script> $ ('#id').superComplete () <0script> ../ <input type="text" id="id" /?
<input type="text" id="id" /? ../ <script> $ ('#id').superComplete () <0script>
<input type="text" /? <input type="text" class="supercomplete" /? <input type="radio" /? <input type="radio" /?
maintained by Ivan Akulov Likely Social sharing butuons
<div class="likely"> <div class="twitter">Tweet<0div> <div class="facebook">Share<0div> <div class="linkedin">Link<0div> <div class="gplus">Plus<0div> <div class="vkontakte">Share<0div> <div class="telegram">Send<0div> <div class="pinterest" data-media="pinnable.png" >Pin<0div> <0div>
<div class="likely"> <div class="twitter">Tweet<0div> <div class="facebook">Share<0div> <div class="linkedin">Link<0div> <div class="gplus">Plus<0div> <0div>
<div class="likely"> <div class="facebook">Share<0div> <div class="twitter">Tweet<0div> <div class="gplus">Plus<0div> <div class="linkedin">Link<0div> <0div>
<div class="likely"> <div class="facebook">Share<0div> <div class="twitter">Tweet<0div> <div class="gplus"><0div> <div class="linkedin"><0div> <0div>
Emerge Page load coordinator
<img src="picture.jpg" /?
<img src="picture.jpg" class="emerge" /?
<img src="picture.jpg" class="emerge" /? <div class="caption">Beautiful<0div>
<div class="emerge"> <img src="picture.jpg"/? <div class="caption">Beautiful<0div> <0div>
<div class="emerge"> <img src="picture.jpg"/? <div class="caption">Beautiful<0div> <!-. more images and video --? <0div>
<div class="emerge" data-spin="true"> <img src="picture.jpg"/? <div class="caption">Beautiful<0div> <!-. more images and video --? <0div>
<div class="emerge" data-spin="true" data-effect="slide" data-up="20px" > <img src="picture.jpg"/? <div class="caption">Beautiful<0div> <!-. more images and video --? <0div>
<div class="emerge" data-effect="slide" data-down="20px"> <!-. ../ --? <0div> <div class="emerge" data-effect="slide" data-up="20px" data-continue="true"> <!-. ../ --? <0div>
<div class="emerge" data-spin="true"> <!-. ../ --? <0div> <div class="emerge" data-spin="true"> <!-. ../ --? <0div>
data-spin data-effect data-continue
data-spin data-spin-element data-continue data-await data-hold data-effect data-up data-down data-left data-right data-duration data-scale data-angle data-origin data-expose data-opaque data-style-1 data-style-2 data-emerge-event
<div class="fotorama emerge" data-../ data-../ data-effect../ ??? data-../ data-../ > ../ <0div>
data-emerge-spin data-emerge-effect data-emerge-continue
<div class="emerge" data-effect=../> <div class="fotorama" data-effect=../> ../ <0div> <0div>
maintained by Evgeniy Lazarev Jouele Audio player for the Web
<a href="yesterday.mp3">The Beatles: Yesterday<0a>
The Beatles: Yesterday
<a href="yesterday.mp3" class="jouele">The Beatles: Yesterday<0a>
The Beatles: Yesterday
<h1>The Beatles<0h1> <a href="yesterday.mp3" class="jouele">Yesterday<0a> <a href="letitbe.mp3" class="jouele">Let it be<0a> <a href="heyjude.mp3" class="jouele">Hey Jude<0a>
<h1>The Beatles<0h1> <div class="jouele-playlist"> <a href="yesterday.mp3" class="jouele">Yesterday<0a> <a href="letitbe.mp3" class="jouele">Let it be<0a> <a href="heyjude.mp3" class="jouele">Hey Jude<0a> <0div>
Unreleased
<img ../ class="jouele-control" data-type="play-pause" /?
<tr class="jouele-control" data-type="seek" data-to="12:34" >../<0tr>
Callback? Event?
Defined, but not implemented
.jouele-is-playing .jouele-is-buffering .jouele-is-unavailable ../
img.jouele-control.jouele-is-playing {
}
<tr class="jouele-control" data-type="seek" data-to="12:34" >../<0tr>
<tr class="jouele-control" data-type="seek" data-range="12:34../15:26" >../<0tr>
.mix-playlist td.jouele-is-within { background: rgba(255,255,255,.2); color: #fd0093; }
less errors, more users.
in RSS or email).
when it makes sense.
control.
<likely>
<img> <table> ... </table>
.element:loading .element-contents {
} .element .element-contents {
transition: opacity 1s ease-out; } .element:loading .element-stub { ../ }
.element .element-contents {
} .element .element-stub {
}
Choose what makes sense for your product
Ilya Birman, ilyabirman.net