2017-01-27 03:20:51 -05:00
|
|
|
<!doctype html>
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
2017-03-30 18:17:05 -04:00
|
|
|
<title>Angular Docs</title>
|
2017-01-27 03:20:51 -05:00
|
|
|
<base href="/">
|
|
|
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
|
|
|
|
|
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
|
|
|
<link rel="icon" type="image/x-icon" href="assets/images/favicons/favicon.ico">
|
|
|
|
<link rel="icon" type="image/png" href="assets/images/favicons/favicon-32x32.png"
|
|
|
|
sizes="32x32">
|
|
|
|
<link rel="icon" type="image/png" href="assets/images/favicons/favicon-194x194.png"
|
|
|
|
sizes="194x194">
|
|
|
|
<link rel="icon" type="image/png" href="assets/images/favicons/favicon-96x96.png"
|
|
|
|
sizes="96x96">
|
|
|
|
<link rel="icon" type="image/png" href="assets/images/favicons/favicon-16x16.png"
|
|
|
|
sizes="16x16">
|
2018-05-11 05:20:13 -04:00
|
|
|
<link rel="apple-touch-icon" sizes="144x144" href="assets/images/favicons/favicon-144x144.png">
|
|
|
|
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/images/favicons/favicon-144x144.png">
|
2017-02-15 14:22:37 -05:00
|
|
|
|
2017-04-25 10:55:28 -04:00
|
|
|
<!-- NOTE: These need to be kept in sync with `ngsw-manifest.json`. -->
|
2017-02-15 14:22:37 -05:00
|
|
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
2017-03-14 19:34:34 -04:00
|
|
|
<link href="https://fonts.googleapis.com/css?family=Droid+Sans+Mono" rel="stylesheet">
|
2017-05-15 16:22:06 -04:00
|
|
|
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
2017-04-25 10:55:28 -04:00
|
|
|
<!-- -->
|
2017-04-19 14:10:13 -04:00
|
|
|
|
2017-03-30 15:35:15 -04:00
|
|
|
<link rel="manifest" href="pwa-manifest.json">
|
|
|
|
<meta name="theme-color" content="#1976d2">
|
2017-06-15 01:44:15 -04:00
|
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="translucent">
|
2017-06-16 10:33:21 -04:00
|
|
|
|
2018-02-02 11:40:14 -05:00
|
|
|
<script>
|
|
|
|
// Dynamically, pre-emptively, add `noindex`, which will be removed when the doc is ready and valid
|
|
|
|
tag = document.createElement('meta'); tag.name = 'robots'; tag.content = 'noindex';
|
|
|
|
document.head.appendChild(tag);
|
|
|
|
</script>
|
|
|
|
|
2017-03-13 21:08:23 -04:00
|
|
|
<!-- Google Analytics -->
|
|
|
|
<script>
|
2017-11-28 08:35:22 -05:00
|
|
|
// Note this is a customised version of the GA tracking snippet
|
|
|
|
// See the comments below for more info
|
2017-10-19 08:58:27 -04:00
|
|
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
|
|
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
2017-11-28 08:35:22 -05:00
|
|
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;
|
|
|
|
~i.name.indexOf('NG_DEFER_BOOTSTRAP')|| // only load library if not running e2e tests
|
|
|
|
m.parentNode.insertBefore(a,m)
|
2017-10-19 08:58:27 -04:00
|
|
|
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
2017-03-13 21:08:23 -04:00
|
|
|
</script>
|
|
|
|
<!-- End Google Analytics -->
|
2017-05-15 16:22:06 -04:00
|
|
|
|
2018-02-06 12:59:34 -05:00
|
|
|
<script>
|
|
|
|
// Report fatal errors to Google Analytics
|
|
|
|
window.onerror = function() {
|
|
|
|
ga('send', 'exception', {exDescription: formatError.apply(null, arguments), exFatal: true});
|
|
|
|
|
|
|
|
function formatError(msg, url, line, col, e) {
|
|
|
|
var stack;
|
|
|
|
msg = msg.replace(/^Error: /, '');
|
|
|
|
if (e) {
|
|
|
|
stack = e.stack
|
|
|
|
// strip the leading "Error: " from the stack trace
|
|
|
|
.replace(/^Error: /, '')
|
|
|
|
// strip the message from the stack trace, if present
|
|
|
|
.replace(msg + '\n', '')
|
|
|
|
// strip leading spaces
|
|
|
|
.replace(/^ +/gm, '')
|
|
|
|
// strip all leading "at " for each frame
|
|
|
|
.replace(/^at /gm, '')
|
|
|
|
// replace long urls with just the last segment: `filename:line:column`
|
|
|
|
.replace(/(?: \(|@)http.+\/([^/)]+)\)?(?:\n|$)/gm, '@$1\n')
|
|
|
|
// replace "eval code" in Edge
|
|
|
|
.replace(/ *\(eval code(:\d+:\d+)\)(?:\n|$)/gm, '@???$1\n')
|
|
|
|
} else {
|
|
|
|
line = line || '?';
|
|
|
|
col = col || '?';
|
|
|
|
stack = url + ':' + line + ':' + col;
|
|
|
|
}
|
|
|
|
return (msg + '\n' + stack).substr(0, 150);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
</script>
|
|
|
|
|
2017-05-15 16:22:06 -04:00
|
|
|
<script>
|
2017-05-27 14:44:53 -04:00
|
|
|
if (window.document.documentMode) {
|
2017-05-27 16:04:22 -04:00
|
|
|
// polyfill IE11 in a blocking way
|
|
|
|
var s = document.createElement('script');
|
|
|
|
s.src = 'generated/ie-polyfills.min.js';
|
|
|
|
document.head.appendChild(s);
|
2017-05-27 14:44:53 -04:00
|
|
|
} else if (!Object.assign) {
|
2017-05-27 16:04:22 -04:00
|
|
|
// polyfill other non-evergreen browsers in a blocking way
|
|
|
|
var polyfillUrl = "https://cdn.polyfill.io/v2/polyfill.min.js?features=default,Array.prototype.find&flags=gated&unknown=polyfill";
|
|
|
|
|
|
|
|
// send a blocking XHR to fetch the polyfill
|
|
|
|
// then append it to the document so that its eval-ed synchronously
|
|
|
|
// this is required because the method used for IE is not reliable with other non-evergreen browsers
|
|
|
|
var xhr = new XMLHttpRequest();
|
|
|
|
xhr.addEventListener("load", function() {
|
|
|
|
var s = document.createElement('script');
|
|
|
|
s.type = 'text/javascript';
|
|
|
|
var code = this.responseText;
|
|
|
|
s.appendChild(document.createTextNode(code));
|
|
|
|
document.head.appendChild(s);
|
|
|
|
});
|
|
|
|
xhr.open("GET", polyfillUrl, false);
|
|
|
|
xhr.send();
|
2017-05-27 14:44:53 -04:00
|
|
|
}
|
2017-05-15 16:22:06 -04:00
|
|
|
</script>
|
2018-02-28 15:05:59 -05:00
|
|
|
|
2018-03-06 17:02:25 -05:00
|
|
|
<script>
|
2018-03-15 14:06:06 -04:00
|
|
|
//load CE polyfill
|
|
|
|
//HACK: webpack's html plugin mangles the document.write calls if we don't trick it.
|
|
|
|
|
|
|
|
//load the ES5 shim for browsers with native CE support
|
|
|
|
function loadCustomElementsShim(){
|
|
|
|
document.write('<scri' + 'pt src="assets/js/native-shim.js"><' + '/script>');
|
|
|
|
}
|
|
|
|
|
|
|
|
//load the full custom elements polyfill for browsers without support
|
|
|
|
function loadCustomElementsPolyfill(){
|
|
|
|
document.write('<scri' + 'pt src="assets/js/custom-elements.min.js"><' + '/script>');
|
|
|
|
}
|
|
|
|
//detect if we have native CE support
|
|
|
|
if(!window.customElements){
|
|
|
|
loadCustomElementsPolyfill();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
loadCustomElementsShim();
|
2018-03-06 17:02:25 -05:00
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
2017-01-27 03:20:51 -05:00
|
|
|
</head>
|
|
|
|
<body>
|
2017-05-15 16:22:06 -04:00
|
|
|
|
2017-03-31 19:17:19 -04:00
|
|
|
<aio-shell></aio-shell>
|
|
|
|
|
|
|
|
<noscript>
|
2017-06-16 11:07:53 -04:00
|
|
|
<div class="background-sky hero"></div>
|
|
|
|
<section id="intro">
|
|
|
|
<div class="hero-logo">
|
|
|
|
<img src="assets/images/logos/angular/angular.svg" width="250" height="250">
|
2017-03-31 19:17:19 -04:00
|
|
|
</div>
|
2017-06-16 11:07:53 -04:00
|
|
|
<div class="homepage-container">
|
|
|
|
<div class="hero-headline">One framework.<br>Mobile & desktop.</div>
|
|
|
|
</div>
|
|
|
|
</section>
|
2017-07-07 14:16:51 -04:00
|
|
|
<h2 style="color: red; text-align: center; margin-top: -50px;">
|
|
|
|
<b><i>This website requires JavaScript.</i></b>
|
|
|
|
</h2>
|
2017-03-31 19:17:19 -04:00
|
|
|
</noscript>
|
2017-01-27 03:20:51 -05:00
|
|
|
</body>
|
|
|
|
</html>
|