diff --git a/gulpfile.js b/gulpfile.js index 899c401d54..5db601a5d4 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -50,6 +50,8 @@ var regularPlunker = require(path.resolve(TOOLS_PATH, 'plunker-builder/regularPl var embeddedPlunker = require(path.resolve(TOOLS_PATH, 'plunker-builder/embeddedPlunker')); var fsUtils = require(path.resolve(TOOLS_PATH, 'fs-utils/fsUtils')); +const WWW = argv.page ? 'www-pages' : 'www' + const isSilent = !!argv.silent; if (isSilent) gutil.log = gutil.noop; const _dgeniLogLevel = argv.dgeniLog || (isSilent ? 'error' : 'info'); @@ -747,7 +749,7 @@ gulp.task('harp-serve', () => { gulp.task('serve-www', () => { // Serve generated site. - return execPromise('npm run live-server ./www'); + return execPromise(`npm run live-server ${WWW}`); }); gulp.task('build-compile', ['build-docs'], function() { @@ -758,7 +760,7 @@ gulp.task('check-deploy', ['build-docs'], function() { return harpCompile().then(function() { gutil.log('compile ok'); gutil.log('running live server ...'); - execPromise('npm run live-server ./www'); + execPromise(`npm run live-server ${WWW}`); return askDeploy(); }).then(function(shouldDeploy) { if (shouldDeploy) { @@ -902,11 +904,13 @@ function harpCompile() { env({ vars: { NODE_ENV: "production" } }); gutil.log("NODE_ENV: " + process.env.NODE_ENV); - if(skipLangs && fs.existsSync('www') && backupApiHtmlFilesExist('www')) { + if(argv.page) harpJsonSetJade2NgTo(true); + + if(skipLangs && fs.existsSync(WWW) && backupApiHtmlFilesExist(WWW)) { gutil.log(`Harp site recompile: skipping recompilation of API docs for [${skipLangs}]`); - gutil.log(`API docs will be copied from existing www folder.`) - del.sync('www-backup'); // remove existing backup if it exists - renameIfExistsSync('www', 'www-backup'); + gutil.log(`API docs will be copied from existing ${WWW} folder.`) + del.sync(`${WWW}-backup`); // remove existing backup if it exists + renameIfExistsSync(WWW, `${WWW}-backup`); } else { gutil.log(`Harp full site compile, including API docs for all languages.`); if (skipLangs) @@ -918,11 +922,12 @@ function harpCompile() { gutil.log('running harp compile...'); showHideExampleNodeModules('hide'); showHideApiDir('hide'); - var spawnInfo = spawnExt('npm',['run','harp', '--', 'compile', '.', './www' ]); + var spawnInfo = spawnExt('npm',['run','harp', '--', 'compile', '.', WWW ]); spawnInfo.promise.then(function(x) { gutil.log("NODE_ENV: " + process.env.NODE_ENV); showHideExampleNodeModules('show'); showHideApiDir('show'); + harpJsonSetJade2NgTo(false); if (x !== 0) { deferred.reject(x) } else { @@ -933,6 +938,7 @@ function harpCompile() { gutil.log("NODE_ENV: " + process.env.NODE_ENV); showHideExampleNodeModules('show'); showHideApiDir('show'); + harpJsonSetJade2NgTo(false); deferred.reject(e); }); return deferred.promise; @@ -1050,21 +1056,21 @@ function _showHideApiDir(lang, showOrHide) { renameIfExistsSync(...args); } -// For each lang in skipLangs, copy the API dir from www-backup to www. +// For each lang in skipLangs, copy the API dir from ${WWW}-backup to WWW. function restoreApiHtml() { const vers = 'latest'; skipLangs.forEach(lang => { const relApiDir = path.join('docs', lang, vers, 'api'); - const wwwApiSubdir = path.join('www', relApiDir); - const backupApiSubdir = path.join('www-backup', relApiDir); + const apiSubdir = path.join(WWW, relApiDir); + const backupApiSubdir = path.join(`${WWW}-backup`, relApiDir); if (fs.existsSync(backupApiSubdir) || argv.forceSkipApi !== true) { - gutil.log(`cp ${backupApiSubdir} ${wwwApiSubdir}`) - fs.copySync(backupApiSubdir, wwwApiSubdir); + gutil.log(`cp ${backupApiSubdir} ${apiSubdir}`) + fs.copySync(backupApiSubdir, apiSubdir); } }); } -// For each lang in skipLangs, ensure API dir exists in www-backup +// For each lang in skipLangs, ensure API dir exists in folderName function backupApiHtmlFilesExist(folderName) { const vers = 'latest'; var result = 1; @@ -1079,6 +1085,14 @@ function backupApiHtmlFilesExist(folderName) { return result; } +function harpJsonSetJade2NgTo(v) { + const execSync = require('child_process').execSync; + const harpJsonPath = path.join(ANGULAR_IO_PROJECT_PATH, 'harp.json'); + execSync(`perl -pi -e 's/("jade2ng": *)\\w+/$1${v}/' ${harpJsonPath}`); + const harpJson = require(harpJsonPath); + gutil.log(`jade2ng: ${harpJson.globals.jade2ng}`); +} + // Copies fileNames into destPaths, setting the mode of the // files at the destination as optional_destFileMode if given. // returns a promise diff --git a/harp.json b/harp.json index 4a8328d35e..3036d32b97 100644 --- a/harp.json +++ b/harp.json @@ -6,6 +6,7 @@ "siteURL": "http://angular.io", "jsLatest": "2.0.0-beta.02", "dartLatest": "2.0.0-beta.02", + "jade2ng": false, "bios": { "misko": { diff --git a/public/_includes/_hero.jade b/public/_includes/_hero.jade index efeb8b0480..0323e2737c 100644 --- a/public/_includes/_hero.jade +++ b/public/_includes/_hero.jade @@ -1,4 +1,4 @@ -// template: public/_includes/_hero +//- template: public/_includes/_hero //- Refer to jade.template.html and addJadeDataDocsProcessor to figure out where the context of this jade file originates - var textFormat = ''; - var headerTitle = title + (typeof varType !== 'undefined' ? (': ' + varType) : ''); @@ -24,16 +24,14 @@ header.hero.background-sky span(class="badge is-deprecated"). Security Risk - //CLEAR FLOAT ELEMENTS + //- CLEAR FLOAT ELEMENTS .clear if subtitle h2.hero-subtitle #{subtitle} - else if docType h2.hero-subtitle #{renamer(capitalize(docType))} - -if current.path[3] == 'api' && current.path[1] == 'dart' - block breadcrumbs + if current.path[3] == 'api' && current.path[1] == 'dart' + block breadcrumbs diff --git a/public/_includes/_util-fns.jade b/public/_includes/_util-fns.jade index 0d10a5b301..5b583d4720 100644 --- a/public/_includes/_util-fns.jade +++ b/public/_includes/_util-fns.jade @@ -300,7 +300,7 @@ if !jade2ng - } else { - // ``` gets translated to
.....
and we need
- // to remove this from the fragment prefix is 11 long and suffix is 13 long
-- frag = jade2ng ? frag : frag.substring(11, frag.length-13);
+- frag = frag.substring(11, frag.length-13);
- // Uncomment next line for debugging.
- // frag = "FileName: " + fullFileName + " Current path: " + current.path + " PathToDocs: " + getPathToDocs() + "\n" + frag;
- return frag;
diff --git a/public/docs/_layout-dart-api.jade b/public/docs/_layout-dart-api.jade
index d8e77353b6..a27d63b577 100644
--- a/public/docs/_layout-dart-api.jade
+++ b/public/docs/_layout-dart-api.jade
@@ -1,40 +1,51 @@
//- WARNING: _layout.jade and _layout-dart-api.jade should match in terms of content
//- except that one uses Harp partial/yield and the other uses Jade extends/include.
-doctype
-html(lang="en" ng-app="angularIOApp" itemscope itemtype="http://schema.org/Framework")
- // template: public/docs/_layout-dart-api
- head
- include ../_includes/_head-include
- block head-extra
-
- block var-def
- body(class="l-offset-nav l-offset-side-nav" ng-controller="AppCtrl as appCtrl")
- include ../_includes/_main-nav
- if current.path[2]
- include _includes/_side-nav
+if jade2ng
+ .side-nav--offset
+ link(rel="stylesheet" href="/assets/css/vendor/dartdoc/bootstrap.min.css")
+ link(rel="stylesheet" href="/assets/css/vendor/dartdoc/styles.css")
include ../_includes/_hero
include ../_includes/_banner
+ .l-content-small.grid-fluid.docs-content
+ block main-content
+else
+ doctype
+ html(lang="en" ng-app="angularIOApp" itemscope itemtype="http://schema.org/Framework")
+ // template: public/docs/_layout-dart-api
+ head
+ include ../_includes/_head-include
+ link(rel="stylesheet" href="/resources/css/vendor/dartdoc/bootstrap.min.css")
+ link(rel="stylesheet" href="/resources/css/vendor/dartdoc/styles.css")
+ block head-extra
- if current.path[3] == 'api'
- if current.path[4] == 'index'
+ block var-def
+ body(class="l-offset-nav l-offset-side-nav" ng-controller="AppCtrl as appCtrl")
+ include ../_includes/_main-nav
+ if current.path[2]
+ include _includes/_side-nav
+ include ../_includes/_hero
+ include ../_includes/_banner
+
+ if current.path[3] == 'api'
+ if current.path[4] == 'index'
+ block main-content
+ else
+ article(class="l-content-small grid-fluid docs-content")
+ block main-content
+ else if current.path.indexOf('cheatsheet') > 0
block main-content
else
- article(class="l-content-small grid-fluid docs-content")
- block main-content
- else if current.path.indexOf('cheatsheet') > 0
- block main-content
- else
- if current.path[3] == 'index' || current.path[3] == 'styleguide'
- article(class="l-content-small grid-fluid docs-content")
- block main-content
- else
- article(class="l-content-small grid-fluid docs-content")
- div(class="c10")
- .showcase
- .showcase-content
- block main-content
- if (current.path[3] == 'guide' || current.path[3] == 'tutorial') && current.path[4]
- include ../_includes/_next-item
+ if current.path[3] == 'index' || current.path[3] == 'styleguide'
+ article(class="l-content-small grid-fluid docs-content")
+ block main-content
+ else
+ article(class="l-content-small grid-fluid docs-content")
+ div(class="c10")
+ .showcase
+ .showcase-content
+ block main-content
+ if (current.path[3] == 'guide' || current.path[3] == 'tutorial') && current.path[4]
+ include ../_includes/_next-item
- include ../_includes/_footer
- include ../_includes/_scripts-include
+ include ../_includes/_footer
+ include ../_includes/_scripts-include
diff --git a/public/docs/_layout.jade b/public/docs/_layout.jade
index 1baf14d66c..0e5c83f7bb 100644
--- a/public/docs/_layout.jade
+++ b/public/docs/_layout.jade
@@ -1,37 +1,44 @@
//- WARNING: _layout.jade and _layout-dart-api.jade should match in terms of content
//- except that one uses Harp partial/yield and the other uses Jade extends/include.
-doctype
-html(lang="en" ng-app="angularIOApp" itemscope itemtype="http://schema.org/Framework")
- // template: public/docs/_layout
- head
- != partial("../_includes/_head-include")
- block head-extra
-
- //-
- body(class="l-offset-nav l-offset-side-nav" ng-controller="AppCtrl as appCtrl")
- != partial("../_includes/_main-nav")
- if current.path[2]
- != partial("_includes/_side-nav")
+if jade2ng
+ .side-nav--offset
!= partial("../_includes/_hero")
!= partial("../_includes/_banner")
+ .l-content-small.grid-fluid.docs-content
+ != yield
+else
+ doctype
+ html(lang="en" ng-app="angularIOApp" itemscope itemtype="http://schema.org/Framework")
+ // template: public/docs/_layout
+ head
+ != partial("../_includes/_head-include")
+ block head-extra
- if current.path[3] == 'api'
- if current.path[4] == 'index'
+ //-
+ body(class="l-offset-nav l-offset-side-nav" ng-controller="AppCtrl as appCtrl")
+ != partial("../_includes/_main-nav")
+ if current.path[2]
+ != partial("_includes/_side-nav")
+ != partial("../_includes/_hero")
+ != partial("../_includes/_banner")
+
+ if current.path[3] == 'api'
+ if current.path[4] == 'index'
+ != yield
+ else
+ article(class="l-content-small grid-fluid docs-content")
+ != yield
+ else if current.path.indexOf('cheatsheet') > 0
!= yield
else
- article(class="l-content-small grid-fluid docs-content")
- != yield
- else if current.path.indexOf('cheatsheet') > 0
- != yield
- else
- if current.path[3] == 'index' || current.path[3] == 'styleguide'
- article(class="l-content-small grid-fluid docs-content")
- != yield
- else
- article(class="l-content-small grid-fluid docs-content")
- != yield
- if (current.path[3] == 'guide' || current.path[3] == 'tutorial') && current.path[4]
- != partial("../_includes/_next-item")
+ if current.path[3] == 'index' || current.path[3] == 'styleguide'
+ article(class="l-content-small grid-fluid docs-content")
+ != yield
+ else
+ article(class="l-content-small grid-fluid docs-content")
+ != yield
+ if (current.path[3] == 'guide' || current.path[3] == 'tutorial') && current.path[4]
+ != partial("../_includes/_next-item")
- != partial("../_includes/_footer")
- != partial("../_includes/_scripts-include")
\ No newline at end of file
+ != partial("../_includes/_footer")
+ != partial("../_includes/_scripts-include")
\ No newline at end of file
diff --git a/public/resources/css/vendor/dartdoc/bootstrap.css b/public/resources/css/vendor/dartdoc/bootstrap.css
new file mode 100755
index 0000000000..c5c93029f1
--- /dev/null
+++ b/public/resources/css/vendor/dartdoc/bootstrap.css
@@ -0,0 +1,1017 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*!
+ * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=2562a07bd43503c5d2ca2125d913d5b4)
+ * Config saved to config.json and https://gist.github.com/2562a07bd43503c5d2ca2125d913d5b4
+ */
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+html {
+ font-family: sans-serif;
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%;
+}
+body {
+ margin: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: baseline;
+}
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+[hidden],
+template {
+ display: none;
+}
+a {
+ background-color: transparent;
+}
+a:active,
+a:hover {
+ outline: 0;
+}
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+b,
+strong {
+ font-weight: bold;
+}
+dfn {
+ font-style: italic;
+}
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+mark {
+ background: #ff0;
+ color: #000;
+}
+small {
+ font-size: 80%;
+}
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+sup {
+ top: -0.5em;
+}
+sub {
+ bottom: -0.25em;
+}
+img {
+ border: 0;
+}
+svg:not(:root) {
+ overflow: hidden;
+}
+figure {
+ margin: 1em 40px;
+}
+hr {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+pre {
+ overflow: auto;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit;
+ font: inherit;
+ margin: 0;
+}
+button {
+ overflow: visible;
+}
+button,
+select {
+ text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+input {
+ line-height: normal;
+}
+input[type="checkbox"],
+input[type="radio"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-appearance: textfield;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+legend {
+ border: 0;
+ padding: 0;
+}
+textarea {
+ overflow: auto;
+}
+optgroup {
+ font-weight: bold;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+td,
+th {
+ padding: 0;
+}
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+*:before,
+*:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+html {
+ font-size: 10px;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333333;
+ background-color: #ffffff;
+}
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+a {
+ color: #337ab7;
+ text-decoration: none;
+}
+a:hover,
+a:focus {
+ color: #23527c;
+ text-decoration: underline;
+}
+a:focus {
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+figure {
+ margin: 0;
+}
+img {
+ vertical-align: middle;
+}
+.img-responsive {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+.img-rounded {
+ border-radius: 6px;
+}
+.img-thumbnail {
+ padding: 4px;
+ line-height: 1.42857143;
+ background-color: #ffffff;
+ border: 1px solid #dddddd;
+ border-radius: 4px;
+ -webkit-transition: all 0.2s ease-in-out;
+ -o-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+ display: inline-block;
+ max-width: 100%;
+ height: auto;
+}
+.img-circle {
+ border-radius: 50%;
+}
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eeeeee;
+}
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ margin: -1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
+[role="button"] {
+ cursor: pointer;
+}
+.container {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 15px;
+ padding-right: 15px;
+}
+@media (min-width: 768px) {
+ .container {
+ width: 750px;
+ }
+}
+@media (min-width: 992px) {
+ .container {
+ width: 970px;
+ }
+}
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px;
+ }
+}
+.container-fluid {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 15px;
+ padding-right: 15px;
+}
+.row {
+ margin-left: -15px;
+ margin-right: -15px;
+}
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-left: 15px;
+ padding-right: 15px;
+}
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+ float: left;
+}
+.col-xs-12 {
+ width: 100%;
+}
+.col-xs-11 {
+ width: 91.66666667%;
+}
+.col-xs-10 {
+ width: 83.33333333%;
+}
+.col-xs-9 {
+ width: 75%;
+}
+.col-xs-8 {
+ width: 66.66666667%;
+}
+.col-xs-7 {
+ width: 58.33333333%;
+}
+.col-xs-6 {
+ width: 50%;
+}
+.col-xs-5 {
+ width: 41.66666667%;
+}
+.col-xs-4 {
+ width: 33.33333333%;
+}
+.col-xs-3 {
+ width: 25%;
+}
+.col-xs-2 {
+ width: 16.66666667%;
+}
+.col-xs-1 {
+ width: 8.33333333%;
+}
+.col-xs-pull-12 {
+ right: 100%;
+}
+.col-xs-pull-11 {
+ right: 91.66666667%;
+}
+.col-xs-pull-10 {
+ right: 83.33333333%;
+}
+.col-xs-pull-9 {
+ right: 75%;
+}
+.col-xs-pull-8 {
+ right: 66.66666667%;
+}
+.col-xs-pull-7 {
+ right: 58.33333333%;
+}
+.col-xs-pull-6 {
+ right: 50%;
+}
+.col-xs-pull-5 {
+ right: 41.66666667%;
+}
+.col-xs-pull-4 {
+ right: 33.33333333%;
+}
+.col-xs-pull-3 {
+ right: 25%;
+}
+.col-xs-pull-2 {
+ right: 16.66666667%;
+}
+.col-xs-pull-1 {
+ right: 8.33333333%;
+}
+.col-xs-pull-0 {
+ right: auto;
+}
+.col-xs-push-12 {
+ left: 100%;
+}
+.col-xs-push-11 {
+ left: 91.66666667%;
+}
+.col-xs-push-10 {
+ left: 83.33333333%;
+}
+.col-xs-push-9 {
+ left: 75%;
+}
+.col-xs-push-8 {
+ left: 66.66666667%;
+}
+.col-xs-push-7 {
+ left: 58.33333333%;
+}
+.col-xs-push-6 {
+ left: 50%;
+}
+.col-xs-push-5 {
+ left: 41.66666667%;
+}
+.col-xs-push-4 {
+ left: 33.33333333%;
+}
+.col-xs-push-3 {
+ left: 25%;
+}
+.col-xs-push-2 {
+ left: 16.66666667%;
+}
+.col-xs-push-1 {
+ left: 8.33333333%;
+}
+.col-xs-push-0 {
+ left: auto;
+}
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+.col-xs-offset-11 {
+ margin-left: 91.66666667%;
+}
+.col-xs-offset-10 {
+ margin-left: 83.33333333%;
+}
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+.col-xs-offset-8 {
+ margin-left: 66.66666667%;
+}
+.col-xs-offset-7 {
+ margin-left: 58.33333333%;
+}
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+.col-xs-offset-5 {
+ margin-left: 41.66666667%;
+}
+.col-xs-offset-4 {
+ margin-left: 33.33333333%;
+}
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+.col-xs-offset-2 {
+ margin-left: 16.66666667%;
+}
+.col-xs-offset-1 {
+ margin-left: 8.33333333%;
+}
+.col-xs-offset-0 {
+ margin-left: 0%;
+}
+@media (min-width: 768px) {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+ float: left;
+ }
+ .col-sm-12 {
+ width: 100%;
+ }
+ .col-sm-11 {
+ width: 91.66666667%;
+ }
+ .col-sm-10 {
+ width: 83.33333333%;
+ }
+ .col-sm-9 {
+ width: 75%;
+ }
+ .col-sm-8 {
+ width: 66.66666667%;
+ }
+ .col-sm-7 {
+ width: 58.33333333%;
+ }
+ .col-sm-6 {
+ width: 50%;
+ }
+ .col-sm-5 {
+ width: 41.66666667%;
+ }
+ .col-sm-4 {
+ width: 33.33333333%;
+ }
+ .col-sm-3 {
+ width: 25%;
+ }
+ .col-sm-2 {
+ width: 16.66666667%;
+ }
+ .col-sm-1 {
+ width: 8.33333333%;
+ }
+ .col-sm-pull-12 {
+ right: 100%;
+ }
+ .col-sm-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-sm-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+ .col-sm-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-sm-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+ .col-sm-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-sm-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+ .col-sm-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-sm-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-sm-pull-0 {
+ right: auto;
+ }
+ .col-sm-push-12 {
+ left: 100%;
+ }
+ .col-sm-push-11 {
+ left: 91.66666667%;
+ }
+ .col-sm-push-10 {
+ left: 83.33333333%;
+ }
+ .col-sm-push-9 {
+ left: 75%;
+ }
+ .col-sm-push-8 {
+ left: 66.66666667%;
+ }
+ .col-sm-push-7 {
+ left: 58.33333333%;
+ }
+ .col-sm-push-6 {
+ left: 50%;
+ }
+ .col-sm-push-5 {
+ left: 41.66666667%;
+ }
+ .col-sm-push-4 {
+ left: 33.33333333%;
+ }
+ .col-sm-push-3 {
+ left: 25%;
+ }
+ .col-sm-push-2 {
+ left: 16.66666667%;
+ }
+ .col-sm-push-1 {
+ left: 8.33333333%;
+ }
+ .col-sm-push-0 {
+ left: auto;
+ }
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-sm-offset-0 {
+ margin-left: 0%;
+ }
+}
+@media (min-width: 992px) {
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+ float: left;
+ }
+ .col-md-12 {
+ width: 100%;
+ }
+ .col-md-11 {
+ width: 91.66666667%;
+ }
+ .col-md-10 {
+ width: 83.33333333%;
+ }
+ .col-md-9 {
+ width: 75%;
+ }
+ .col-md-8 {
+ width: 66.66666667%;
+ }
+ .col-md-7 {
+ width: 58.33333333%;
+ }
+ .col-md-6 {
+ width: 50%;
+ }
+ .col-md-5 {
+ width: 41.66666667%;
+ }
+ .col-md-4 {
+ width: 33.33333333%;
+ }
+ .col-md-3 {
+ width: 25%;
+ }
+ .col-md-2 {
+ width: 16.66666667%;
+ }
+ .col-md-1 {
+ width: 8.33333333%;
+ }
+ .col-md-pull-12 {
+ right: 100%;
+ }
+ .col-md-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-md-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-md-pull-9 {
+ right: 75%;
+ }
+ .col-md-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-md-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-md-pull-6 {
+ right: 50%;
+ }
+ .col-md-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-md-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-md-pull-3 {
+ right: 25%;
+ }
+ .col-md-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-md-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-md-pull-0 {
+ right: auto;
+ }
+ .col-md-push-12 {
+ left: 100%;
+ }
+ .col-md-push-11 {
+ left: 91.66666667%;
+ }
+ .col-md-push-10 {
+ left: 83.33333333%;
+ }
+ .col-md-push-9 {
+ left: 75%;
+ }
+ .col-md-push-8 {
+ left: 66.66666667%;
+ }
+ .col-md-push-7 {
+ left: 58.33333333%;
+ }
+ .col-md-push-6 {
+ left: 50%;
+ }
+ .col-md-push-5 {
+ left: 41.66666667%;
+ }
+ .col-md-push-4 {
+ left: 33.33333333%;
+ }
+ .col-md-push-3 {
+ left: 25%;
+ }
+ .col-md-push-2 {
+ left: 16.66666667%;
+ }
+ .col-md-push-1 {
+ left: 8.33333333%;
+ }
+ .col-md-push-0 {
+ left: auto;
+ }
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+ .col-md-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-md-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+ .col-md-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-md-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+ .col-md-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-md-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+ .col-md-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-md-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-md-offset-0 {
+ margin-left: 0%;
+ }
+}
+@media (min-width: 1200px) {
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ float: left;
+ }
+ .col-lg-12 {
+ width: 100%;
+ }
+ .col-lg-11 {
+ width: 91.66666667%;
+ }
+ .col-lg-10 {
+ width: 83.33333333%;
+ }
+ .col-lg-9 {
+ width: 75%;
+ }
+ .col-lg-8 {
+ width: 66.66666667%;
+ }
+ .col-lg-7 {
+ width: 58.33333333%;
+ }
+ .col-lg-6 {
+ width: 50%;
+ }
+ .col-lg-5 {
+ width: 41.66666667%;
+ }
+ .col-lg-4 {
+ width: 33.33333333%;
+ }
+ .col-lg-3 {
+ width: 25%;
+ }
+ .col-lg-2 {
+ width: 16.66666667%;
+ }
+ .col-lg-1 {
+ width: 8.33333333%;
+ }
+ .col-lg-pull-12 {
+ right: 100%;
+ }
+ .col-lg-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-lg-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+ .col-lg-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-lg-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+ .col-lg-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-lg-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+ .col-lg-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-lg-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-lg-pull-0 {
+ right: auto;
+ }
+ .col-lg-push-12 {
+ left: 100%;
+ }
+ .col-lg-push-11 {
+ left: 91.66666667%;
+ }
+ .col-lg-push-10 {
+ left: 83.33333333%;
+ }
+ .col-lg-push-9 {
+ left: 75%;
+ }
+ .col-lg-push-8 {
+ left: 66.66666667%;
+ }
+ .col-lg-push-7 {
+ left: 58.33333333%;
+ }
+ .col-lg-push-6 {
+ left: 50%;
+ }
+ .col-lg-push-5 {
+ left: 41.66666667%;
+ }
+ .col-lg-push-4 {
+ left: 33.33333333%;
+ }
+ .col-lg-push-3 {
+ left: 25%;
+ }
+ .col-lg-push-2 {
+ left: 16.66666667%;
+ }
+ .col-lg-push-1 {
+ left: 8.33333333%;
+ }
+ .col-lg-push-0 {
+ left: auto;
+ }
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-lg-offset-0 {
+ margin-left: 0%;
+ }
+}
+.clearfix:before,
+.clearfix:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after {
+ content: " ";
+ display: table;
+}
+.clearfix:after,
+.container:after,
+.container-fluid:after,
+.row:after {
+ clear: both;
+}
+.center-block {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+.pull-right {
+ float: right !important;
+}
+.pull-left {
+ float: left !important;
+}
+.hide {
+ display: none !important;
+}
+.show {
+ display: block !important;
+}
+.invisible {
+ visibility: hidden;
+}
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+.hidden {
+ display: none !important;
+}
+.affix {
+ position: fixed;
+}
diff --git a/public/resources/css/vendor/dartdoc/bootstrap.min.css b/public/resources/css/vendor/dartdoc/bootstrap.min.css
new file mode 100755
index 0000000000..cb0b23127d
--- /dev/null
+++ b/public/resources/css/vendor/dartdoc/bootstrap.min.css
@@ -0,0 +1,14 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*!
+ * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=2562a07bd43503c5d2ca2125d913d5b4)
+ * Config saved to config.json and https://gist.github.com/2562a07bd43503c5d2ca2125d913d5b4
+ *//*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after{content:" ";display:table}.clearfix:after,.container:after,.container-fluid:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}
\ No newline at end of file
diff --git a/public/resources/css/vendor/dartdoc/styles.css b/public/resources/css/vendor/dartdoc/styles.css
new file mode 100644
index 0000000000..903e50da49
--- /dev/null
+++ b/public/resources/css/vendor/dartdoc/styles.css
@@ -0,0 +1,757 @@
+/* This is a copy of the dartdoc static-assets/styles.css as of 2016/10/03 but with footer styles disabled. */
+
+/* Palette generated by Material Palette - materialpalette.com/blue/cyan */
+
+.dark-primary-color { background: #1976D2; }
+.default-primary-color { background: #2196F3; }
+.light-primary-color { background: #BBDEFB; }
+.text-primary-color { color: #FFFFFF; }
+.accent-color { background: #00BCD4; }
+.primary-text-color { color: #212121; }
+.secondary-text-color { color: #727272; }
+.divider-color { border-color: #B6B6B6; }
+
+html {
+ position: relative;
+ min-height: 100%;
+}
+
+body {
+ font-family: 'Roboto', sans-serif;
+ font-size: 15px;
+ margin-bottom: 60px;
+ -webkit-font-smoothing: antialiased;
+ -webkit-text-size-adjust: 100%;
+ overflow-x: hidden;
+ color: #212121;
+}
+
+nav {
+ font-size: 17px;
+}
+
+/* some of this is to reset bootstrap */
+nav.navbar {
+ background-color: inherit;
+ min-height: 48px;
+ border: 0;
+}
+
+nav.navbar .row {
+ padding-top: 8px;
+}
+
+nav .container {
+ white-space: nowrap;
+}
+
+@media screen and (min-width: 500px) and (max-width: 768px) {
+ .navbar-right {
+ float: right!important;
+ }
+}
+
+header {
+ background-color: rgb(0, 102, 152);
+ color: white;
+ box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.37);
+}
+
+header.header-fixed nav.navbar-fixed-top {
+ box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.37);
+}
+
+header.container-fluid {
+ padding: 0;
+}
+
+header .masthead {
+ padding-top: 64px;
+}
+
+header .contents {
+ padding: 0;
+}
+
+@media screen and (max-width:768px) {
+ header .contents {
+ padding-left: 15px;
+ padding-right: 15px;
+ }
+}
+
+.body {
+ margin-top: 24px;
+}
+
+section {
+ margin-bottom: 36px;
+}
+
+dl {
+ margin: 0;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-weight: normal;
+ margin: 0;
+}
+
+h1.title {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+h2 {
+ font-size: 24px;
+}
+
+h5 {
+ font-size: 16px;
+}
+
+strong {
+ font-weight: 500;
+}
+
+.subtitle {
+ font-size: 17px;
+ min-height: 1.4em;
+}
+
+.title-description .subtitle {
+ white-space: nowrap;
+ overflow-x: hidden;
+ text-overflow: ellipsis;
+}
+
+p {
+ margin-bottom: 1em;
+}
+
+a, a:hover {
+ color: rgb(0, 102, 152);
+}
+
+pre.prettyprint {
+ font-family: 'Source Code Pro', monospace;
+ color: black;
+ border-radius: 4px;
+ font-size: 14px;
+ word-wrap: normal;
+ line-height: 1.4;
+ background: #f7f7f7;
+ border: 1px solid #ddd;
+ margin: 16px 0 16px 0;
+ padding: 8px;
+}
+
+pre code {
+ white-space: pre;
+ word-wrap: initial;
+}
+
+.fixed {
+ white-space: pre;
+}
+
+pre {
+ border: 1px solid #ddd;
+ background-color: #f7f7f7;
+ font-size: 14px;
+}
+
+code {
+ font-family: 'Source Code Pro', monospace;
+ /* overriding bootstrap */
+ color: inherit;
+ background-color: #f7f7f7;
+}
+
+h2 .crossdart {
+ float: right;
+ font-size: 0.5em;
+ margin-top: 1em;
+}
+
+.crossdart-link {
+ border-bottom: 1px solid #dfdfdf;
+ text-decoration: none;
+}
+
+.crossdart-link:hover {
+ border-bottom: 1px solid #aaa;
+ text-decoration: none;
+}
+
+@media(max-width: 768px) {
+ nav .container {
+ width: 100%
+ }
+
+ h1 {
+ font-size: 24px;
+ }
+
+ pre {
+ margin: 16px 0;
+ }
+}
+
+@media (min-width: 768px) {
+ .dl-horizontal dd {
+ margin-left: 128px;
+ }
+
+ .dl-horizontal dt {
+ width: 128px;
+ }
+
+ ul.subnav li {
+ font-size: 17px;
+ }
+}
+
+header h1 {
+ font-weight: 400;
+ margin-bottom: 16px;
+}
+
+header a,
+header a:hover,
+header p,
+header li {
+ color: white;
+}
+
+header h1 .kind {
+ color: #ddd;
+ text-transform: uppercase;
+ font-size: 15px;
+ display: block;
+}
+
+@media screen and (max-width: 768px) {
+ header h1 .kind {
+ font-size: 14px;
+ }
+}
+
+dt {
+ font-weight: normal;
+}
+
+dd {
+ color: #212121;
+ margin-bottom: 1em;
+}
+
+dd.callable, dd.constant, dd.property {
+ margin-bottom: 24px;
+}
+
+dd p {
+ overflow-x: hidden;
+ text-overflow: ellipsis;
+ margin-bottom: 0;
+}
+
+section.summary h2 {
+ color: #727272;
+ margin-bottom: 16px;
+ padding-bottom: 4px;
+ border-bottom: 1px solid #ddd;
+}
+
+/* indents wrapped lines */
+section.summary dt {
+ margin-left: 24px;
+ text-indent: -24px;
+}
+
+dl.dl-horizontal dt {
+ font-style: normal;
+ text-align: left;
+ color: #727272;
+}
+
+dl.dl-horizontal dt::after {
+ content: ':';
+}
+
+dt .name {
+ font-weight: 500;
+}
+
+dl dt.callable .name {
+ float: none;
+ width: auto;
+}
+
+.parameter {
+ white-space: nowrap;
+}
+
+.signature {
+ color: #727272;
+}
+
+.signature a {
+ /* 50% mix of default-primary-color and primary-text-color. */
+ color: #4674a2;
+}
+
+.optional {
+ font-style: italic;
+}
+
+.undocumented {
+ font-style: italic;
+}
+
+.is-const {
+ font-style: italic;
+}
+
+.deprecated {
+ text-decoration: line-through;
+}
+
+p.firstline {
+ font-weight: bold;
+}
+
+footer-disabled-for-ng2io {
+ padding: 20px;
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ height: 60px;
+}
+
+footer-disabled-for-ng2io p {
+ margin: 0;
+ color: #555;
+}
+
+footer-disabled-for-ng2io .no-break {
+ white-space: nowrap;
+}
+
+footer-disabled-for-ng2io .container,
+footer-disabled-for-ng2io .container-fluid {
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.copyright a {
+ color: #555;
+}
+
+.markdown h1 {
+ font-size: 24px;
+ margin-bottom: 8px;
+}
+
+.markdown h2 {
+ font-size: 20px;
+ margin-top: 24px;
+ margin-bottom: 8px;
+}
+
+.markdown h3 {
+ font-size: 18px;
+ margin-bottom: 8px;
+}
+
+.markdown h4 {
+ font-size: 16px;
+ margin-bottom: 0;
+}
+
+.markdown li p {
+ margin: 0;
+}
+
+.gt-separated {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+.gt-separated li {
+ display: inline-block;
+}
+
+.gt-separated li:before {
+ background-image: url("data:image/svg+xml;utf8,");
+ background-position: center;
+ content: "\00a0";
+ margin: 0 6px 0 4px;
+}
+
+.gt-separated.dark li:before {
+ background-image: url("data:image/svg+xml;utf8,");
+}
+
+.gt-separated li:first-child:before {
+ background-image: none;
+ content: "";
+ margin: 0;
+}
+
+/* The slug line under a declaration for things like "const", "read-only", etc. */
+.features {
+ font-style: italic;
+ color: #727272;
+}
+
+.multi-line-signature {
+ font-size: 17px;
+ color: #727272;
+}
+
+.multi-line-signature .parameter {
+ margin-left: 24px;
+ display: block;
+}
+
+.breadcrumbs {
+ padding: 0;
+ margin: 8px 0 8px 0;
+ font-size: 17px;
+ white-space: nowrap;
+ line-height: 1;
+}
+
+@media screen and (min-width: 768px) {
+ nav ol.breadcrumbs {
+ float: left;
+ }
+}
+
+@media screen and (max-width: 768px) {
+ .breadcrumbs {
+ margin: 0 0 24px 0;
+ overflow-x: hidden;
+ }
+}
+
+.self-crumb {
+ color: #ddd;
+}
+
+nav .self-name {
+ color: #ddd;
+ display: none;
+}
+
+.annotation-list {
+ list-style: none;
+ padding: 0;
+ display: inline;
+}
+
+.annotation-list li:before {
+ content: "@";
+}
+
+.comma-separated {
+ list-style: none;
+ padding: 0;
+ display: inline;
+}
+
+.comma-separated li {
+ display: inline;
+}
+
+.comma-separated li:after {
+ content: ", ";
+}
+
+.comma-separated li:last-child:after {
+ content: "";
+}
+
+.end-with-period li:last-child:after {
+ content: ".";
+}
+
+.container > section:first-child {
+ border: 0;
+}
+
+.constructor-modifier {
+ font-style: italic;
+}
+
+section.multi-line-signature div.parameters {
+ margin-left: 24px;
+}
+
+/* subnav styles */
+
+ul.subnav {
+ overflow: auto;
+ white-space: nowrap;
+ padding-left: 0;
+ min-height: 25px;
+}
+
+ul.subnav::-webkit-scrollbar {
+ display: none;
+}
+
+ul.subnav li {
+ display: inline-block;
+ text-transform: uppercase;
+}
+
+ul.subnav li a {
+ color: #FFFFFF;
+}
+
+ul.subnav li {
+ margin-right: 24px;
+}
+
+ul.subnav li:last-of-type {
+ margin-right: 0;
+}
+
+@media(max-width: 768px) {
+ ul.subnav li {
+ margin-right: 16px;
+ }
+}
+
+/* sidebar styles */
+
+.sidebar-offcanvas-left {
+ background-color: #f7f7f7;
+ padding: 0;
+}
+
+.sidebar ol {
+ list-style: none;
+ font-size: 14px;
+ line-height: 24px;
+ margin-bottom: 0;
+ padding: 0;
+}
+
+.sidebar-offcanvas-left ol {
+ padding: 16px;
+}
+
+.sidebar h5,
+.sidebar ol li {
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+
+.sidebar ol li.section-title a {
+ color: inherit;
+}
+
+.sidebar ol li.section-title {
+ font-size: 13px;
+ color: #B6B6B6;
+ text-transform: uppercase;
+ line-height: 20px;
+ margin-top: 24px;
+}
+
+.sidebar ol li:first-child {
+ padding-top: 0;
+ margin-top: 0;
+}
+
+button {
+ padding: 0;
+}
+
+#sidenav-left-toggle {
+ display: none;
+ vertical-align: text-bottom;
+ padding: 0;
+}
+
+/* left-nav disappears, and can transition in from the left */
+@media screen and (max-width:768px) {
+ #sidenav-left-toggle {
+ display: inline;
+ background: no-repeat url("data:image/svg+xml;utf8,");
+ background-position: center;
+ width: 24px;
+ height: 24px;
+ border: none;
+ margin-right: 24px;
+ }
+
+ #overlay-under-drawer.active {
+ opacity: 0.4;
+ height: 100%;
+ z-index: 1999;
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ right: 0px;
+ bottom: 0px;
+ background-color: black;
+ display: block;
+ }
+
+ .sidebar-offcanvas-left {
+ left:-100%;
+ position:fixed;
+ -webkit-transition:all .25s ease-out;
+ -o-transition:all .25s ease-out;
+ transition:all .25s ease-out;
+ z-index: 2000;
+ top:0;
+ width: 280px; /* works all the way down to an iphone 4 */
+ height: 100%;
+ background-color: white;
+ overflow-y: auto; /* TODO: how to hide scroll bars? */
+ }
+
+ .sidebar-offcanvas-left.active {
+ left:0; /* this animates our drawer into the page */
+ }
+}
+
+.sidebar h5 {
+ color: #727272;
+ padding-bottom: 16px;
+}
+
+.sidebar-offcanvas-left h5 {
+ border-bottom: 1px solid #ddd;
+ padding: 16px;
+}
+
+.sidebar-offcanvas-left h5:last-of-type {
+ border: 0;
+ padding: 16px 16px 0 16px;
+}
+
+/* the right nav disappears out of view when the window shrinks */
+@media screen and (max-width: 992px) {
+ .sidebar-offcanvas-right{
+ display: none;
+ }
+}
+
+#overlay-under-drawer {
+ display: none;
+}
+
+/* find-as-you-type search box */
+
+/* override bootstrap defaults */
+.form-control {
+ border-radius: 0;
+ border: 0;
+}
+
+form.search {
+ display: inline;
+}
+
+@media screen and (max-width: 500px) {
+ form.search {
+ display: none;
+ }
+}
+
+.typeahead,
+.tt-query,
+.tt-hint {
+ width: 200px;
+ height: 30px;
+ padding: 8px 12px;
+ line-height: 30px;
+ outline: none;
+}
+
+.typeahead {
+ background-color: #fff;
+ border-radius: 2px;
+}
+
+.tt-query {
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.tt-hint {
+ color: #999
+}
+
+.tt-menu {
+ right:0;
+ left: inherit !important;
+ width: 422px;
+ max-height: 250px;
+ overflow-y: auto;
+ font-size: 14px;
+ margin: 0;
+ padding: 8px 0;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
+ -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
+ box-shadow: 0 5px 10px rgba(0,0,0,.2);
+}
+
+.tt-suggestion {
+ padding: 3px 20px;
+ color: #212121;
+}
+
+.tt-suggestion:hover {
+ cursor: pointer;
+ color: #fff;
+ background-color: #0097cf;
+}
+
+.tt-suggestion:hover .search-from-lib {
+ color: #ddd;
+}
+
+.tt-suggestion.tt-cursor {
+ color: #fff;
+ background-color: #0097cf;
+}
+
+.tt-suggestion.tt-cursor .search-from-lib {
+ color: #ddd;
+}
+
+.tt-suggestion p {
+ margin: 0;
+}
+
+.search-from-lib {
+ font-style: italic;
+ color: gray;
+}
+
+section#setter {
+ border-top: 1px solid #ddd;
+ padding-top: 36px;
+}
+
+li.inherited a {
+ opacity: 0.65;
+ font-style: italic;
+}
diff --git a/tools/dart-api-builder/dab.js b/tools/dart-api-builder/dab.js
index ff11500cb6..31383cc315 100644
--- a/tools/dart-api-builder/dab.js
+++ b/tools/dart-api-builder/dab.js
@@ -219,12 +219,10 @@ block head-extra
// generated Dart API page template: head-extra
//-