├── .gitignore ├── Gruntfile.js ├── LICENSE ├── README.md ├── app.yaml ├── dist ├── LICENSE ├── favicon.ico ├── index.html ├── manifest.json ├── robots.txt └── static │ ├── images │ ├── chrome-dev-summit-masthead.jpg │ ├── chrome-icon.jpg │ ├── chrome-icon@2x.jpg │ ├── chrome-touch-icon-192x192.png │ ├── chrome-touch-icon-196x196.png │ ├── icon-back-arrow.svg │ ├── icon-camera.svg │ ├── icon-get-involved.svg │ ├── icon-play.svg │ ├── icon-quad.png │ ├── icon-schedule-gray.svg │ ├── icon-schedule.svg │ ├── icon-sessions.svg │ ├── icon-star.svg │ ├── illustration-livestream.svg │ ├── illustration-questions.svg │ ├── linus-masthead.jpg │ ├── linus-masthead@2x.jpg │ ├── masthead-1.jpg │ ├── masthead-1@2x.jpg │ ├── masthead-2.jpg │ ├── masthead-2@2x.jpg │ ├── masthead-3.jpg │ ├── masthead-3@2x.jpg │ ├── masthead-4.jpg │ ├── masthead-4@2x.jpg │ ├── ms-touch-icon-144x144-precomposed.png │ ├── pic-1.jpg │ ├── pic-1@2x.jpg │ ├── pic-2.jpg │ ├── pic-2@2x.jpg │ ├── pic-3.jpg │ ├── pic-3@2x.jpg │ └── sessions │ │ ├── asking-for-super-powers-chromes-permission-model.jpg │ │ ├── asking-for-super-powers-chromes-permission-model@2x.jpg │ │ ├── chrome-touch-icon-192x192.png │ │ ├── closing-keynote.jpg │ │ ├── closing-keynote@2x.jpg │ │ ├── easy-composition-and-reuse.jpg │ │ ├── easy-composition-and-reuse@2x.jpg │ │ ├── fundamentals-of-mobile-web-development.jpg │ │ ├── fundamentals-of-mobile-web-development@2x.jpg │ │ ├── keynote.jpg │ │ ├── keynote@2x.jpg │ │ ├── lets-build-some-apps-with-polymer.jpg │ │ ├── lets-build-some-apps-with-polymer@2x.jpg │ │ ├── making-web-apps-appy.jpg │ │ ├── making-web-apps-appy@2x.jpg │ │ ├── material-design-deconstructed.jpg │ │ ├── material-design-deconstructed@2x.jpg │ │ ├── panel.png │ │ ├── panel@2x.png │ │ ├── polymer-state-of-the-union.jpg │ │ ├── polymer-state-of-the-union@2x.jpg │ │ ├── sample-pic.jpg │ │ ├── sample-pic@2x.jpg │ │ ├── the-applied-science-of-runtime-performance.jpg │ │ ├── the-applied-science-of-runtime-performance@2x.jpg │ │ ├── tls-all-the-things-security-with-performance.jpg │ │ ├── tls-all-the-things-security-with-performance@2x.jpg │ │ ├── web-components-and-polymer-panel.jpg │ │ ├── web-components-and-polymer-panel@2x.jpg │ │ ├── wicked-fast.jpg │ │ └── wicked-fast@2x.jpg │ ├── scripts │ ├── cds.min.js │ ├── sw.js │ └── third_party │ │ └── serviceworker-cache-polyfill.js │ └── styles │ └── cds.min.css ├── licenses ├── apache-2.txt ├── requestanimationframe.txt ├── serviceworker.txt └── signals.txt ├── package.json ├── redirector.py ├── src ├── favicon.ico ├── index.html ├── manifest.json ├── robots.txt └── static │ ├── images │ ├── chrome-dev-summit-masthead.jpg │ ├── chrome-icon.jpg │ ├── chrome-icon@2x.jpg │ ├── chrome-touch-icon-192x192.png │ ├── chrome-touch-icon-196x196.png │ ├── icon-back-arrow.svg │ ├── icon-camera.svg │ ├── icon-get-involved.svg │ ├── icon-play.svg │ ├── icon-quad.png │ ├── icon-schedule-gray.svg │ ├── icon-schedule.svg │ ├── icon-sessions.svg │ ├── icon-star.svg │ ├── illustration-livestream.svg │ ├── illustration-questions.svg │ ├── linus-masthead.jpg │ ├── linus-masthead@2x.jpg │ ├── masthead-1.jpg │ ├── masthead-1@2x.jpg │ ├── masthead-2.jpg │ ├── masthead-2@2x.jpg │ ├── masthead-3.jpg │ ├── masthead-3@2x.jpg │ ├── masthead-4.jpg │ ├── masthead-4@2x.jpg │ ├── ms-touch-icon-144x144-precomposed.png │ ├── pic-1.jpg │ ├── pic-1@2x.jpg │ ├── pic-2.jpg │ ├── pic-2@2x.jpg │ ├── pic-3.jpg │ ├── pic-3@2x.jpg │ └── sessions │ │ ├── asking-for-super-powers-chromes-permission-model.jpg │ │ ├── asking-for-super-powers-chromes-permission-model@2x.jpg │ │ ├── chrome-touch-icon-192x192.png │ │ ├── closing-keynote.jpg │ │ ├── closing-keynote@2x.jpg │ │ ├── easy-composition-and-reuse.jpg │ │ ├── easy-composition-and-reuse@2x.jpg │ │ ├── fundamentals-of-mobile-web-development.jpg │ │ ├── fundamentals-of-mobile-web-development@2x.jpg │ │ ├── keynote.jpg │ │ ├── keynote@2x.jpg │ │ ├── lets-build-some-apps-with-polymer.jpg │ │ ├── lets-build-some-apps-with-polymer@2x.jpg │ │ ├── making-web-apps-appy.jpg │ │ ├── making-web-apps-appy@2x.jpg │ │ ├── material-design-deconstructed.jpg │ │ ├── material-design-deconstructed@2x.jpg │ │ ├── panel.png │ │ ├── panel@2x.png │ │ ├── polymer-state-of-the-union.jpg │ │ ├── polymer-state-of-the-union@2x.jpg │ │ ├── sample-pic.jpg │ │ ├── sample-pic@2x.jpg │ │ ├── the-applied-science-of-runtime-performance.jpg │ │ ├── the-applied-science-of-runtime-performance@2x.jpg │ │ ├── tls-all-the-things-security-with-performance.jpg │ │ ├── tls-all-the-things-security-with-performance@2x.jpg │ │ ├── web-components-and-polymer-panel.jpg │ │ ├── web-components-and-polymer-panel@2x.jpg │ │ ├── wicked-fast.jpg │ │ └── wicked-fast@2x.jpg │ ├── scripts │ ├── bootstrap.js │ ├── cds.js │ ├── components │ │ ├── button.js │ │ ├── card.js │ │ ├── cards.js │ │ ├── masthead.js │ │ ├── schedule.js │ │ └── toast.js │ ├── helper │ │ ├── analytics.js │ │ ├── event-publisher.js │ │ ├── history.js │ │ ├── theme.js │ │ ├── util.js │ │ └── video-embedder.js │ ├── sw.js │ └── third_party │ │ ├── requestAnimationFrame.js │ │ ├── serviceworker-cache-polyfill.js │ │ └── signals.min.js │ └── styles │ ├── base │ ├── _buttons.scss │ ├── _color.scss │ ├── _deeplinks.scss │ ├── _dialogs.scss │ ├── _layout.scss │ ├── _reset.scss │ ├── _shadow.scss │ ├── _typography.scss │ └── _zindex.scss │ ├── cds.scss │ └── components │ ├── _app.scss │ ├── _card.scss │ ├── _footer.scss │ ├── _livestream.scss │ ├── _masthead.scss │ ├── _pics.scss │ ├── _summit-get-involved.scss │ ├── _summit-home-content.scss │ ├── _toast.scss │ └── cards │ ├── _about-chrome-dev-summit.scss │ ├── _attendee-information.scss │ ├── _get-involved.scss │ ├── _schedule.scss │ ├── _session-details.scss │ └── _sessions.scss └── template.py /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | .sass-cache 4 | *.pyc 5 | ./2013 6 | ./sketches 7 | ./redirector-2013.py 8 | ./template-2013.py 9 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | module.exports = function(grunt) { 18 | 19 | grunt.initConfig({ 20 | 21 | pkg: grunt.file.readJSON('package.json'), 22 | 23 | /** Setup tasks **/ 24 | 25 | clean: { 26 | dist: ["dist/"], 27 | concatenatedjsfile: ["src/static/scripts/cds.concat.js"] 28 | }, 29 | 30 | copy: { 31 | build: { 32 | files: [{ 33 | expand: true, 34 | cwd: 'src/', 35 | src: [ 36 | '**', 37 | '!static/scripts/**', 38 | '!static/scripts/**/*.js', 39 | '!static/styles/**/*.scss' 40 | ], 41 | dest: 'dist/' 42 | }] 43 | }, 44 | 45 | serviceWorker: { 46 | files: [{ 47 | expand: true, 48 | cwd: 'src/', 49 | src: [ 50 | 'static/scripts/third_party/serviceworker-cache-polyfill.js', 51 | 'static/scripts/sw.js' 52 | ], 53 | dest: 'dist/' 54 | }] 55 | }, 56 | 57 | html: { 58 | files: [{ 59 | expand: true, 60 | cwd: 'src/', 61 | src: [ 62 | '**/*.html' 63 | ], 64 | dest: 'dist/' 65 | }] 66 | }, 67 | 68 | license: { 69 | files: [{ 70 | expand: false, 71 | src: [ 72 | './LICENSE' 73 | ], 74 | dest: 'dist/' 75 | }] 76 | } 77 | }, 78 | 79 | concurrent: { 80 | options: { 81 | logConcurrentOutput: true 82 | }, 83 | build: { 84 | tasks: ['watch:notjsorcss', 'watch:js', 'watch:scss'] 85 | } 86 | }, 87 | 88 | watch: { 89 | notjsorcss: { 90 | files: [ 91 | 'src/**/*.*', 92 | '!src/scripts/*.*', 93 | '!src/styles/*.*' 94 | ], 95 | tasks: ['copy:html'] 96 | }, 97 | js: { 98 | files: [ 99 | 'src/static/scripts/**/*.js', 100 | '!src/static/scripts/cds.concat.js' 101 | ], 102 | tasks: ['codekit', 'uglify', 'copy:serviceWorker'] 103 | }, 104 | scss: { 105 | files: ['src/static/styles/**/*.scss'], 106 | tasks: ['sass'] 107 | } 108 | }, 109 | 110 | /** JavaScript **/ 111 | 112 | codekit: { 113 | build: { 114 | files: { 115 | 'src/static/scripts/cds.concat.js': 116 | 'src/static/scripts/cds.js' 117 | } 118 | } 119 | }, 120 | 121 | uglify: { 122 | options: { 123 | sourceMap: false, 124 | }, 125 | build: { 126 | src: 'src/static/scripts/cds.concat.js', 127 | dest: 'dist/static/scripts/cds.min.js' 128 | } 129 | }, 130 | 131 | /** CSS **/ 132 | 133 | sass: { 134 | build: { 135 | options: { 136 | outputStyle: 'compressed', 137 | sourceMap: false 138 | }, 139 | files: [{ 140 | expand: true, 141 | cwd: 'src/static/styles/', 142 | src: ['cds.scss', 'reg-form.scss'], 143 | dest: 'dist/static/styles/', 144 | ext: '.min.css' 145 | }] 146 | } 147 | }, 148 | 149 | /** Images **/ 150 | 151 | imageoptim: { 152 | options: { 153 | jpegMini: false, 154 | imageAlpha: false, 155 | imageOptim: true, 156 | quitAfter: true 157 | }, 158 | build: { 159 | src: [ 160 | 'dist/**/*.png', 161 | 'dist/**/*.jpg', 162 | 'dist/**/*.gif' 163 | ] 164 | } 165 | }, 166 | 167 | /** Licensing **/ 168 | 169 | usebanner: { 170 | js: { 171 | options: { 172 | banner: [ 173 | '/**\n', 174 | '<%= grunt.file.read("licenses/apache-2.txt") %>', 175 | '<%= grunt.file.read("licenses/signals.txt") %>', 176 | '<%= grunt.file.read("licenses/requestanimationframe.txt") %>', 177 | '<%= grunt.file.read("licenses/serviceworker.txt") %>', 178 | '*/'].join('\n---\n') 179 | 180 | }, 181 | files: { 182 | src: ['dist/static/scripts/cds.min.js'] 183 | } 184 | }, 185 | 186 | css: { 187 | options: { 188 | banner: '/** \n<%= grunt.file.read("licenses/apache-2.txt") %>\n*/' 189 | }, 190 | files: { 191 | src: ['dist/static/styles/cds.min.css'] 192 | } 193 | } 194 | } 195 | 196 | }); 197 | 198 | grunt.loadNpmTasks('grunt-contrib-clean'); 199 | grunt.loadNpmTasks('grunt-contrib-copy'); 200 | grunt.loadNpmTasks('grunt-contrib-watch'); 201 | grunt.loadNpmTasks('grunt-contrib-uglify'); 202 | grunt.loadNpmTasks('grunt-concurrent'); 203 | grunt.loadNpmTasks('grunt-sass'); 204 | grunt.loadNpmTasks('grunt-codekit'); 205 | grunt.loadNpmTasks('grunt-imageoptim'); 206 | grunt.loadNpmTasks('grunt-banner'); 207 | 208 | grunt.registerTask('dev', [ 209 | 'clean:dist', 210 | 'copy', 211 | 'codekit', 212 | 'uglify', 213 | 'clean:concatenatedjsfile', 214 | 'sass', 215 | 'concurrent']); 216 | 217 | grunt.registerTask('full', [ 218 | 'clean:dist', 219 | 'copy', 220 | 'codekit', 221 | 'uglify', 222 | 'clean:concatenatedjsfile', 223 | 'sass', 224 | 'imageoptim', 225 | 'usebanner']); 226 | 227 | grunt.registerTask('default', [ 228 | 'clean:dist', 229 | 'copy', 230 | 'codekit', 231 | 'uglify', 232 | 'clean:concatenatedjsfile', 233 | 'sass', 234 | 'usebanner']); 235 | }; 236 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Chrome Dev Summit site 2 | 3 | The site is based on Google AppEngine, so you'll need the [SDK and launcher](https://cloud.google.com/appengine/downloads). 4 | 5 | Once you have that, you'll need to: 6 | 7 | 1. Install node.js. 8 | 1. Install npm and sass. 9 | 1. Run `npm install`. 10 | 1. Run `grunt dev` during work and `grunt` to do a full build. (You can also do `grunt full` if you want to have images optimized via ImageOptim.) 11 | 12 | # License 13 | 14 | Please see the LICENSE file. 15 | -------------------------------------------------------------------------------- /app.yaml: -------------------------------------------------------------------------------- 1 | application: chromedevsummit-site 2 | version: v20141208 3 | 4 | runtime: python27 5 | api_version: 1 6 | threadsafe: true 7 | 8 | handlers: 9 | 10 | - url: /devsummit 11 | script: redirector.app 12 | secure: always 13 | 14 | - url: /devsummit/ 15 | script: template.app 16 | secure: always 17 | 18 | - url: /devsummit/images/(.*) 19 | static_files: dist/static/images/\1 20 | expiration: "365d" 21 | upload: dist/static/images/(.*) 22 | secure: always 23 | 24 | - url: /devsummit/sw.js 25 | static_files: dist/static/scripts/sw.js 26 | expiration: "1s" 27 | upload: dist/static/scripts/sw.js 28 | secure: always 29 | 30 | - url: /devsummit/manifest.json 31 | static_files: dist/manifest.json 32 | expiration: "1s" 33 | upload: dist/manifest.json 34 | secure: always 35 | 36 | - url: /devsummit/scripts/(.*) 37 | static_files: dist/static/scripts/\1 38 | expiration: "1d" 39 | upload: dist/static/scripts/(.*) 40 | secure: always 41 | 42 | - url: /devsummit/styles/(.*) 43 | static_files: dist/static/styles/\1 44 | expiration: "1d" 45 | upload: dist/static/styles/(.*) 46 | secure: always 47 | 48 | - url: /devsummit/LICENSE 49 | static_files: dist/LICENSE 50 | expiration: "7d" 51 | mime_type: text/plain 52 | upload: dist/LICENSE 53 | secure: always 54 | 55 | - url: /devsummit/(.*) 56 | script: template.app 57 | secure: always 58 | 59 | - url: /src/(.*) 60 | static_files: src/\1 61 | upload: src/(.*) 62 | secure: always 63 | 64 | libraries: 65 | - name: webapp2 66 | version: latest 67 | - name: jinja2 68 | version: latest 69 | 70 | pagespeed: 71 | disabled_rewriters: 72 | - add_instrumentation 73 | - CombineJs 74 | - ConvertMetaTags 75 | - FallbackRewriteCssUrls 76 | - FlattenCssImports 77 | - FlushSubresources 78 | - ImageConvertGifToPng 79 | - ImageConvertToJpeg 80 | - ImageConvertToWebpLossless 81 | - ImageResize 82 | - InlineImages 83 | - InlineImportToLink 84 | - InlinePreviewImages 85 | - InsertDnsPrefetch 86 | - JsOptimize 87 | - LazyloadImages 88 | - MinifyCss 89 | - MoveCssToHead 90 | - ProxyCss 91 | - ProxyImages 92 | - ProxyJs 93 | enabled_rewriters: 94 | - CombineCss 95 | - InlineCss 96 | - WebpOptimization 97 | - PrioritizeCriticalCss 98 | - ImageJpegSubsampling 99 | - ImageProgressiveJpeg 100 | - ImageRecompressJpeg 101 | - ImageRecompressPng 102 | - ImageStripColorProfile 103 | - ImageStripMetadata 104 | -------------------------------------------------------------------------------- /dist/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/favicon.ico -------------------------------------------------------------------------------- /dist/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "CDS 2014", 3 | "name": "Chrome Dev Summit 2014", 4 | "icons": [ 5 | { 6 | "src": "/devsummit/images/chrome-touch-icon-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png", 9 | "density": "4.0" 10 | } 11 | ], 12 | "start_url": "/devsummit/", 13 | "display": "standalone", 14 | "orientation": "portrait" 15 | } 16 | -------------------------------------------------------------------------------- /dist/robots.txt: -------------------------------------------------------------------------------- 1 | # www.robotstxt.org/ 2 | 3 | # Allow crawling of all content 4 | User-agent: * 5 | Disallow: 6 | -------------------------------------------------------------------------------- /dist/static/images/chrome-dev-summit-masthead.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/chrome-dev-summit-masthead.jpg -------------------------------------------------------------------------------- /dist/static/images/chrome-icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/chrome-icon.jpg -------------------------------------------------------------------------------- /dist/static/images/chrome-icon@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/chrome-icon@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/chrome-touch-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/chrome-touch-icon-192x192.png -------------------------------------------------------------------------------- /dist/static/images/chrome-touch-icon-196x196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/chrome-touch-icon-196x196.png -------------------------------------------------------------------------------- /dist/static/images/icon-back-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /dist/static/images/icon-camera.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | camera-icon 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /dist/static/images/icon-get-involved.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Path 4 + Oval 10 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /dist/static/images/icon-play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /dist/static/images/icon-quad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/icon-quad.png -------------------------------------------------------------------------------- /dist/static/images/icon-schedule-gray.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /dist/static/images/icon-schedule.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Group 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /dist/static/images/icon-sessions.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Group 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /dist/static/images/icon-star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /dist/static/images/illustration-livestream.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Rectangle 54 + Path 3 + Rectangle 57 + Rectangle 59 + Rectangle 60 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /dist/static/images/illustration-questions.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Rectangle 55 + Oval 10 + Path 4 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /dist/static/images/linus-masthead.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/linus-masthead.jpg -------------------------------------------------------------------------------- /dist/static/images/linus-masthead@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/linus-masthead@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/masthead-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/masthead-1.jpg -------------------------------------------------------------------------------- /dist/static/images/masthead-1@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/masthead-1@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/masthead-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/masthead-2.jpg -------------------------------------------------------------------------------- /dist/static/images/masthead-2@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/masthead-2@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/masthead-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/masthead-3.jpg -------------------------------------------------------------------------------- /dist/static/images/masthead-3@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/masthead-3@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/masthead-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/masthead-4.jpg -------------------------------------------------------------------------------- /dist/static/images/masthead-4@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/masthead-4@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/ms-touch-icon-144x144-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/ms-touch-icon-144x144-precomposed.png -------------------------------------------------------------------------------- /dist/static/images/pic-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/pic-1.jpg -------------------------------------------------------------------------------- /dist/static/images/pic-1@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/pic-1@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/pic-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/pic-2.jpg -------------------------------------------------------------------------------- /dist/static/images/pic-2@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/pic-2@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/pic-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/pic-3.jpg -------------------------------------------------------------------------------- /dist/static/images/pic-3@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/pic-3@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/asking-for-super-powers-chromes-permission-model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/asking-for-super-powers-chromes-permission-model.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/asking-for-super-powers-chromes-permission-model@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/asking-for-super-powers-chromes-permission-model@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/chrome-touch-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/chrome-touch-icon-192x192.png -------------------------------------------------------------------------------- /dist/static/images/sessions/closing-keynote.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/closing-keynote.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/closing-keynote@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/closing-keynote@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/easy-composition-and-reuse.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/easy-composition-and-reuse.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/easy-composition-and-reuse@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/easy-composition-and-reuse@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/fundamentals-of-mobile-web-development.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/fundamentals-of-mobile-web-development.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/fundamentals-of-mobile-web-development@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/fundamentals-of-mobile-web-development@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/keynote.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/keynote.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/keynote@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/keynote@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/lets-build-some-apps-with-polymer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/lets-build-some-apps-with-polymer.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/lets-build-some-apps-with-polymer@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/lets-build-some-apps-with-polymer@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/making-web-apps-appy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/making-web-apps-appy.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/making-web-apps-appy@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/making-web-apps-appy@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/material-design-deconstructed.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/material-design-deconstructed.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/material-design-deconstructed@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/material-design-deconstructed@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/panel.png -------------------------------------------------------------------------------- /dist/static/images/sessions/panel@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/panel@2x.png -------------------------------------------------------------------------------- /dist/static/images/sessions/polymer-state-of-the-union.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/polymer-state-of-the-union.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/polymer-state-of-the-union@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/polymer-state-of-the-union@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/sample-pic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/sample-pic.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/sample-pic@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/sample-pic@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/the-applied-science-of-runtime-performance.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/the-applied-science-of-runtime-performance.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/the-applied-science-of-runtime-performance@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/the-applied-science-of-runtime-performance@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/tls-all-the-things-security-with-performance.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/tls-all-the-things-security-with-performance.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/tls-all-the-things-security-with-performance@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/tls-all-the-things-security-with-performance@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/web-components-and-polymer-panel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/web-components-and-polymer-panel.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/web-components-and-polymer-panel@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/web-components-and-polymer-panel@2x.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/wicked-fast.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/wicked-fast.jpg -------------------------------------------------------------------------------- /dist/static/images/sessions/wicked-fast@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/dist/static/images/sessions/wicked-fast@2x.jpg -------------------------------------------------------------------------------- /dist/static/scripts/sw.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | importScripts('scripts/third_party/serviceworker-cache-polyfill.js'); 18 | 19 | var CACHE_NAME = 'chrome-dev-summit'; 20 | var CACHE_VERSION = 42; 21 | 22 | self.oninstall = function(event) { 23 | 24 | event.waitUntil( 25 | caches.open(CACHE_NAME + '-v' + CACHE_VERSION).then(function(cache) { 26 | 27 | return cache.addAll([ 28 | 29 | '/devsummit/', 30 | '/devsummit/schedule/', 31 | '/devsummit/sessions/', 32 | '/devsummit/attendee-information/', 33 | '/devsummit/get-involved/', 34 | '/devsummit/about-chrome-dev-summit/', 35 | 36 | '/devsummit/styles/cds.min.css', 37 | '/devsummit/scripts/cds.min.js', 38 | '/devsummit/images/chrome-icon.jpg', 39 | '/devsummit/images/chrome-icon@2x.jpg', 40 | '/devsummit/images/icon-camera.svg', 41 | '/devsummit/images/masthead-1.jpg', 42 | '/devsummit/images/masthead-1@2x.jpg', 43 | '/devsummit/images/masthead-2.jpg', 44 | '/devsummit/images/masthead-2@2x.jpg', 45 | '/devsummit/images/masthead-3.jpg', 46 | '/devsummit/images/masthead-3@2x.jpg', 47 | '/devsummit/images/masthead-4.jpg', 48 | '/devsummit/images/masthead-4@2x.jpg', 49 | '/devsummit/images/icon-back-arrow.svg', 50 | '/devsummit/images/icon-schedule.svg', 51 | '/devsummit/images/icon-schedule-gray.svg', 52 | '/devsummit/images/icon-sessions.svg', 53 | '/devsummit/images/icon-quad.svg', 54 | '/devsummit/images/icon-get-involved.svg', 55 | '/devsummit/images/pic-1.jpg', 56 | '/devsummit/images/pic-1@2x.jpg', 57 | '/devsummit/images/pic-2.jpg', 58 | '/devsummit/images/pic-2@2x.jpg', 59 | '/devsummit/images/pic-3.jpg', 60 | '/devsummit/images/pic-3@2x.jpg', 61 | 62 | '/devsummit/images/sessions/keynote.jpg', 63 | '/devsummit/images/sessions/keynote@2x.jpg', 64 | '/devsummit/images/sessions/wicked-fast.jpg', 65 | '/devsummit/images/sessions/wicked-fast@2x.jpg', 66 | '/devsummit/images/sessions/asking-for-super-powers-chromes-permission-model.jpg', 67 | '/devsummit/images/sessions/asking-for-super-powers-chromes-permission-model@2x.jpg', 68 | '/devsummit/images/sessions/material-design-deconstructed.jpg', 69 | '/devsummit/images/sessions/material-design-deconstructed@2x.jpg', 70 | '/devsummit/images/sessions/the-applied-science-of-runtime-performance.jpg', 71 | '/devsummit/images/sessions/the-applied-science-of-runtime-performance@2x.jpg', 72 | '/devsummit/images/sessions/making-web-apps-appy.jpg', 73 | '/devsummit/images/sessions/making-web-apps-appy@2x.jpg', 74 | '/devsummit/images/sessions/tls-all-the-things-security-with-performance.jpg', 75 | '/devsummit/images/sessions/tls-all-the-things-security-with-performance@2x.jpg', 76 | '/devsummit/images/sessions/easy-composition-and-reuse.jpg', 77 | '/devsummit/images/sessions/easy-composition-and-reuse@2x.jpg', 78 | '/devsummit/images/sessions/polymer-state-of-the-union.jpg', 79 | '/devsummit/images/sessions/polymer-state-of-the-union@2x.jpg', 80 | '/devsummit/images/sessions/lets-build-some-apps-with-polymer.jpg', 81 | '/devsummit/images/sessions/lets-build-some-apps-with-polymer@2x.jpg', 82 | '/devsummit/images/sessions/fundamentals-of-mobile-web-development.jpg', 83 | '/devsummit/images/sessions/fundamentals-of-mobile-web-development@2x.jpg', 84 | '/devsummit/images/sessions/closing-keynote.jpg', 85 | '/devsummit/images/sessions/closing-keynote@2x.jpg', 86 | '/devsummit/images/sessions/panel.png', 87 | '/devsummit/images/sessions/panel@2x.png', 88 | 89 | '/devsummit/images/chrome-touch-icon-192x192.png' 90 | 91 | ]); 92 | }) 93 | ); 94 | }; 95 | 96 | self.onactivate = function(event) { 97 | 98 | var currentCacheName = CACHE_NAME + '-v' + CACHE_VERSION; 99 | caches.keys().then(function(cacheNames) { 100 | return Promise.all( 101 | cacheNames.map(function(cacheName) { 102 | if (cacheName.indexOf(CACHE_NAME) == -1) { 103 | return; 104 | } 105 | 106 | if (cacheName != currentCacheName) { 107 | return caches.delete(cacheName); 108 | } 109 | }) 110 | ); 111 | }); 112 | 113 | }; 114 | 115 | self.onfetch = function(event) { 116 | 117 | var request = event.request; 118 | 119 | event.respondWith( 120 | 121 | // Check the cache for a hit. 122 | caches.match(request).then(function(response) { 123 | 124 | // If we have a response return it. 125 | if (response) 126 | return response; 127 | 128 | // Otherwise fetch it, store and respond. 129 | return fetch(request).then(function(response) { 130 | 131 | var responseToCache = response.clone(); 132 | 133 | caches.open(CACHE_NAME + '-v' + CACHE_VERSION).then( 134 | function(cache) { 135 | cache.put(request, responseToCache).catch(function(err) { 136 | // Likely we got an opaque response which the polyfill 137 | // can't deal with, so log out a warning. 138 | console.warn(requestURL + ': ' + err.message); 139 | }); 140 | }); 141 | 142 | return response; 143 | }); 144 | 145 | }) 146 | ); 147 | }; 148 | -------------------------------------------------------------------------------- /dist/static/scripts/third_party/serviceworker-cache-polyfill.js: -------------------------------------------------------------------------------- 1 | if (!Cache.prototype.add) { 2 | Cache.prototype.add = function add(request) { 3 | return this.addAll([request]); 4 | }; 5 | } 6 | 7 | if (!Cache.prototype.addAll) { 8 | Cache.prototype.addAll = function addAll(requests) { 9 | var cache = this; 10 | 11 | // Since DOMExceptions are not constructable: 12 | function NetworkError(message) { 13 | this.name = 'NetworkError'; 14 | this.code = 19; 15 | this.message = message; 16 | } 17 | NetworkError.prototype = Object.create(Error.prototype); 18 | 19 | return Promise.resolve().then(function() { 20 | if (arguments.length < 1) throw new TypeError(); 21 | 22 | // Simulate sequence<(Request or USVString)> binding: 23 | var sequence = []; 24 | 25 | requests = requests.map(function(request) { 26 | if (request instanceof Request) { 27 | return request; 28 | } 29 | else { 30 | return String(request); // may throw TypeError 31 | } 32 | }); 33 | 34 | return Promise.all( 35 | requests.map(function(request) { 36 | if (typeof request === 'string') { 37 | request = new Request(request); 38 | } 39 | 40 | var scheme = new URL(request.url).protocol; 41 | 42 | if (scheme !== 'http:' && scheme !== 'https:') { 43 | throw new NetworkError("Invalid scheme"); 44 | } 45 | 46 | return fetch(request.clone()); 47 | }) 48 | ); 49 | }).then(function(responses) { 50 | // TODO: check that requests don't overwrite one another 51 | // (don't think this is possible to polyfill due to opaque responses) 52 | return Promise.all( 53 | responses.map(function(response, i) { 54 | return cache.put(requests[i], response); 55 | }) 56 | ); 57 | }).then(function() { 58 | return undefined; 59 | }); 60 | }; 61 | } 62 | 63 | if (!CacheStorage.prototype.match) { 64 | // This is probably vulnerable to race conditions (removing caches etc) 65 | CacheStorage.prototype.match = function match(request, opts) { 66 | var caches = this; 67 | 68 | return this.keys().then(function(cacheNames) { 69 | var match; 70 | 71 | return cacheNames.reduce(function(chain, cacheName) { 72 | return chain.then(function() { 73 | return match || caches.open(cacheName).then(function(cache) { 74 | return cache.match(request, opts); 75 | }).then(function(response) { 76 | match = response; 77 | return match; 78 | }); 79 | }); 80 | }, Promise.resolve()); 81 | }); 82 | }; 83 | } -------------------------------------------------------------------------------- /licenses/apache-2.txt: -------------------------------------------------------------------------------- 1 | Copyright 2014 Google Inc. All rights reserved. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /licenses/requestanimationframe.txt: -------------------------------------------------------------------------------- 1 | requestAnimationFrame Polyfill from http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/ 2 | -------------------------------------------------------------------------------- /licenses/serviceworker.txt: -------------------------------------------------------------------------------- 1 | Service Worker Cache Polyfill from https://github.com/coonsta/cache-polyfill 2 | -------------------------------------------------------------------------------- /licenses/signals.txt: -------------------------------------------------------------------------------- 1 | JS Signals 2 | Released under the MIT license 3 | Author: Miller Medeiros 4 | Version: 1.0.0 - Build: 268 (2012/11/29 05:48 PM) 5 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "chrome-dev-summit-2014", 3 | "version": "2.20140827.0", 4 | "repository": "https://github.com/GoogleChrome/devsummitsite", 5 | "devDependencies": { 6 | "grunt": "^0.4.5", 7 | "grunt-banner": "^0.2.3", 8 | "grunt-codekit": "^0.4.1", 9 | "grunt-concurrent": "^0.5.0", 10 | "grunt-contrib-clean": "^0.6.0", 11 | "grunt-contrib-copy": "^0.5.0", 12 | "grunt-contrib-uglify": "^0.5.1", 13 | "grunt-contrib-watch": "^0.6.1", 14 | "grunt-imageoptim": "^1.4.1", 15 | "grunt-sass": "^0.14.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /redirector.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 Google Inc. All rights reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License 14 | 15 | import webapp2 16 | 17 | app = webapp2.WSGIApplication([ 18 | webapp2.Route('/devsummit', webapp2.RedirectHandler, defaults={'_uri': '/devsummit/'}) 19 | ], debug=True) 20 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/favicon.ico -------------------------------------------------------------------------------- /src/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "CDS 2014", 3 | "name": "Chrome Dev Summit 2014", 4 | "icons": [ 5 | { 6 | "src": "/devsummit/images/chrome-touch-icon-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png", 9 | "density": "4.0" 10 | } 11 | ], 12 | "start_url": "/devsummit/", 13 | "display": "standalone", 14 | "orientation": "portrait" 15 | } 16 | -------------------------------------------------------------------------------- /src/robots.txt: -------------------------------------------------------------------------------- 1 | # www.robotstxt.org/ 2 | 3 | # Allow crawling of all content 4 | User-agent: * 5 | Disallow: 6 | -------------------------------------------------------------------------------- /src/static/images/chrome-dev-summit-masthead.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/chrome-dev-summit-masthead.jpg -------------------------------------------------------------------------------- /src/static/images/chrome-icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/chrome-icon.jpg -------------------------------------------------------------------------------- /src/static/images/chrome-icon@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/chrome-icon@2x.jpg -------------------------------------------------------------------------------- /src/static/images/chrome-touch-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/chrome-touch-icon-192x192.png -------------------------------------------------------------------------------- /src/static/images/chrome-touch-icon-196x196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/chrome-touch-icon-196x196.png -------------------------------------------------------------------------------- /src/static/images/icon-back-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/static/images/icon-camera.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | camera-icon 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/static/images/icon-get-involved.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Path 4 + Oval 10 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/static/images/icon-play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/static/images/icon-quad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/icon-quad.png -------------------------------------------------------------------------------- /src/static/images/icon-schedule-gray.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/static/images/icon-schedule.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Group 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/static/images/icon-sessions.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Group 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/static/images/icon-star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/static/images/illustration-livestream.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Rectangle 54 + Path 3 + Rectangle 57 + Rectangle 59 + Rectangle 60 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/static/images/illustration-questions.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Rectangle 55 + Oval 10 + Path 4 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/static/images/linus-masthead.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/linus-masthead.jpg -------------------------------------------------------------------------------- /src/static/images/linus-masthead@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/linus-masthead@2x.jpg -------------------------------------------------------------------------------- /src/static/images/masthead-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/masthead-1.jpg -------------------------------------------------------------------------------- /src/static/images/masthead-1@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/masthead-1@2x.jpg -------------------------------------------------------------------------------- /src/static/images/masthead-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/masthead-2.jpg -------------------------------------------------------------------------------- /src/static/images/masthead-2@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/masthead-2@2x.jpg -------------------------------------------------------------------------------- /src/static/images/masthead-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/masthead-3.jpg -------------------------------------------------------------------------------- /src/static/images/masthead-3@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/masthead-3@2x.jpg -------------------------------------------------------------------------------- /src/static/images/masthead-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/masthead-4.jpg -------------------------------------------------------------------------------- /src/static/images/masthead-4@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/masthead-4@2x.jpg -------------------------------------------------------------------------------- /src/static/images/ms-touch-icon-144x144-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/ms-touch-icon-144x144-precomposed.png -------------------------------------------------------------------------------- /src/static/images/pic-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/pic-1.jpg -------------------------------------------------------------------------------- /src/static/images/pic-1@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/pic-1@2x.jpg -------------------------------------------------------------------------------- /src/static/images/pic-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/pic-2.jpg -------------------------------------------------------------------------------- /src/static/images/pic-2@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/pic-2@2x.jpg -------------------------------------------------------------------------------- /src/static/images/pic-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/pic-3.jpg -------------------------------------------------------------------------------- /src/static/images/pic-3@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/pic-3@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/asking-for-super-powers-chromes-permission-model.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/asking-for-super-powers-chromes-permission-model.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/asking-for-super-powers-chromes-permission-model@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/asking-for-super-powers-chromes-permission-model@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/chrome-touch-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/chrome-touch-icon-192x192.png -------------------------------------------------------------------------------- /src/static/images/sessions/closing-keynote.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/closing-keynote.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/closing-keynote@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/closing-keynote@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/easy-composition-and-reuse.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/easy-composition-and-reuse.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/easy-composition-and-reuse@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/easy-composition-and-reuse@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/fundamentals-of-mobile-web-development.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/fundamentals-of-mobile-web-development.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/fundamentals-of-mobile-web-development@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/fundamentals-of-mobile-web-development@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/keynote.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/keynote.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/keynote@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/keynote@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/lets-build-some-apps-with-polymer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/lets-build-some-apps-with-polymer.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/lets-build-some-apps-with-polymer@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/lets-build-some-apps-with-polymer@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/making-web-apps-appy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/making-web-apps-appy.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/making-web-apps-appy@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/making-web-apps-appy@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/material-design-deconstructed.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/material-design-deconstructed.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/material-design-deconstructed@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/material-design-deconstructed@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/panel.png -------------------------------------------------------------------------------- /src/static/images/sessions/panel@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/panel@2x.png -------------------------------------------------------------------------------- /src/static/images/sessions/polymer-state-of-the-union.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/polymer-state-of-the-union.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/polymer-state-of-the-union@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/polymer-state-of-the-union@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/sample-pic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/sample-pic.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/sample-pic@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/sample-pic@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/the-applied-science-of-runtime-performance.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/the-applied-science-of-runtime-performance.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/the-applied-science-of-runtime-performance@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/the-applied-science-of-runtime-performance@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/tls-all-the-things-security-with-performance.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/tls-all-the-things-security-with-performance.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/tls-all-the-things-security-with-performance@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/tls-all-the-things-security-with-performance@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/web-components-and-polymer-panel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/web-components-and-polymer-panel.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/web-components-and-polymer-panel@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/web-components-and-polymer-panel@2x.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/wicked-fast.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/wicked-fast.jpg -------------------------------------------------------------------------------- /src/static/images/sessions/wicked-fast@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/udacity/devsummit/da9565f61e0a323c243d4db157157943d8c95162/src/static/images/sessions/wicked-fast@2x.jpg -------------------------------------------------------------------------------- /src/static/scripts/bootstrap.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | CDS.EventPublisher.add('load', function() { 17 | 18 | // Remove the color-blocks 19 | document.body.classList.remove('deeplink-schedule'); 20 | document.body.classList.remove('deeplink-sessions'); 21 | document.body.classList.remove('deeplink-attendee-information'); 22 | document.body.classList.remove('deeplink-get-involved'); 23 | document.body.classList.remove('deeplink-about-chrome-dev-summit'); 24 | 25 | document.body.classList.add('loaded'); 26 | 27 | }); 28 | 29 | CDS.History.init(); 30 | 31 | if ('serviceWorker' in navigator) { 32 | 33 | navigator.serviceWorker.register('/devsummit/sw.js', { 34 | scope: '/devsummit/' 35 | }).then(function(registration) { 36 | 37 | var newServiceWorkerAvailableMessage = 38 | 'A new version of this page is available. Please force-refresh.'; 39 | 40 | // If this fires we should check if there's a new Service Worker 41 | // waiting to be activated. If so, ask the user to force refresh. 42 | if (registration.waiting) { 43 | CDS.Toaster.create(newServiceWorkerAvailableMessage); 44 | return; 45 | } 46 | 47 | // We should also start tracking for any updates to the Service Worker. 48 | registration.onupdatefound = function(event) { 49 | 50 | console.log("A new version has been found... Installing..."); 51 | 52 | // If an update is found the spec says that there is a new Service Worker 53 | // installing, so we should wait for that to complete then show a 54 | // notification to the user. 55 | registration.installing.onstatechange = function(event) { 56 | if (this.state === 'installed') 57 | CDS.Toaster.create(newServiceWorkerAvailableMessage); 58 | else 59 | console.log("New Service Worker state: ", this.state); 60 | }; 61 | }; 62 | }, function(err) { 63 | console.log(err); 64 | }); 65 | } 66 | -------------------------------------------------------------------------------- /src/static/scripts/cds.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // @codekit-prepend 'third_party/signals.min.js' 18 | // @codekit-prepend 'third_party/requestAnimationFrame.js' 19 | 20 | var CDS = {}; 21 | 22 | // @codekit-append 'helper/event-publisher.js' 23 | // @codekit-append 'helper/util.js' 24 | // @codekit-append 'helper/history.js' 25 | // @codekit-append 'helper/analytics.js' 26 | // @codekit-append 'helper/theme.js' 27 | // @codekit-append 'helper/video-embedder.js' 28 | 29 | // @codekit-append 'components/button.js' 30 | // @codekit-append 'components/card.js' 31 | // @codekit-append 'components/cards.js' 32 | // @codekit-append 'components/toast.js' 33 | 34 | // @codekit-append 'components/masthead.js' 35 | // @codekit-append 'components/schedule.js' 36 | 37 | // @codekit-append 'bootstrap.js' 38 | 39 | -------------------------------------------------------------------------------- /src/static/scripts/components/button.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | CDS.Button = (function() { 18 | 19 | "use strict"; 20 | 21 | var buttons = document.querySelectorAll('.paper-button'); 22 | var button, bound, x, y, ripple, size, transformString; 23 | var frameCount = 0; 24 | 25 | for (var b = 0; b < buttons.length; b++) { 26 | 27 | button = buttons[b]; 28 | bound = button.getBoundingClientRect(); 29 | size = Math.max(bound.width, bound.height) * 2; 30 | 31 | ripple = button.querySelector('.button__ripple'); 32 | 33 | if (!ripple) 34 | continue; 35 | 36 | ripple.style.width = size + 'px'; 37 | ripple.style.height = size + 'px'; 38 | 39 | button.addEventListener('click', onClick); 40 | } 41 | 42 | function onClick(evt) { 43 | 44 | if (frameCount > 0) 45 | return; 46 | 47 | if (evt.currentTarget.dataset && evt.currentTarget.dataset.embed) 48 | CDS.VideoEmbedder.embed(evt.currentTarget); 49 | 50 | if (evt.currentTarget.dataset && evt.currentTarget.dataset.url) 51 | window.location = evt.currentTarget.dataset.url; 52 | 53 | frameCount = 1; 54 | bound = evt.currentTarget.getBoundingClientRect(); 55 | x = Math.round(evt.clientX - bound.left); 56 | y = Math.round(evt.clientY - bound.top); 57 | transformString = 'translate(-50%, -50%) ' + 58 | 'translate(' + x + 'px, ' + y + 'px) ' + 59 | 'scale(0.0001, 0.0001)'; 60 | 61 | ripple = evt.currentTarget.querySelector('.button__ripple'); 62 | ripple.style.webkitTransform = transformString; 63 | ripple.style.transform = transformString; 64 | ripple.style.opacity = '0.4'; 65 | ripple.classList.remove('button__ripple--animate'); 66 | 67 | requestAnimFrame(reset); 68 | 69 | } 70 | 71 | function reset() { 72 | 73 | if (frameCount-- > 0) { 74 | requestAnimFrame(reset); 75 | } else { 76 | 77 | transformString = 'translate(-50%, -50%) ' + 78 | 'translate(' + x + 'px, ' + y + 'px)' + 79 | 'scale(1, 1)'; 80 | 81 | ripple.style.webkitTransform = transformString; 82 | ripple.style.transform = transformString; 83 | ripple.style.opacity = '0'; 84 | ripple.classList.add('button__ripple--animate'); 85 | } 86 | } 87 | 88 | 89 | })(); 90 | -------------------------------------------------------------------------------- /src/static/scripts/components/cards.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | CDS.Cards = (function() { 18 | 19 | "use strict"; 20 | 21 | var cardElements = document.querySelectorAll('.card'); 22 | var card; 23 | var cards = {}; 24 | var cardId = ''; 25 | 26 | function onCardChange() { 27 | 28 | CDS.VideoEmbedder.killAllEmbeddedVideos(); 29 | 30 | if (!CDS.Cards[window.location.pathname]) { 31 | CDS.Theme.set('#362A6C'); 32 | return; 33 | } 34 | 35 | var currentCard = CDS.Cards[window.location.pathname]; 36 | CDS.Theme.set(currentCard.getContentColor()); 37 | } 38 | 39 | for (var i = 0; i < cardElements.length; i++) { 40 | card = cardElements[i]; 41 | cardId = card.querySelector('.card__see-more').getAttribute('href'); 42 | cards[cardId] = new CDS.Card(card); 43 | cards[cardId].addEventListener('expand', onCardChange); 44 | cards[cardId].addEventListener('collapse', onCardChange); 45 | } 46 | 47 | return cards; 48 | 49 | })(); 50 | -------------------------------------------------------------------------------- /src/static/scripts/components/masthead.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | CDS.Masthead = (function() { 18 | 19 | "use strict"; 20 | 21 | var RANGE = 30; 22 | var masthead = document.querySelector('.masthead'); 23 | var mastheadColorBlock = masthead.querySelector('.masthead__color-block'); 24 | var y; 25 | 26 | function onScroll() { 27 | 28 | y = CDS.Util.getWindowScrollPosition(); 29 | 30 | if (y < 0) 31 | return; 32 | 33 | mastheadColorBlock.style.opacity = Math.min(1, Math.max(0, y / RANGE)); 34 | } 35 | 36 | CDS.EventPublisher.add('scroll', onScroll); 37 | 38 | })(); 39 | -------------------------------------------------------------------------------- /src/static/scripts/components/schedule.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | CDS.Schedule = (function() { 18 | 19 | "use strict"; 20 | 21 | var dPR = window.devicePixelRatio; 22 | var card = CDS.Cards['/devsummit/schedule/']; 23 | var rootElement = card.getRootElement(); 24 | var container = rootElement.querySelector('.schedule__overview-container'); 25 | var canvas = rootElement.querySelector('canvas'); 26 | var day1Button = rootElement.querySelector('.schedule__day-1'); 27 | var day2Button = rootElement.querySelector('.schedule__day-2'); 28 | var ctx = canvas.getContext('2d'); 29 | 30 | var padding = { 31 | top: 82, 32 | bottom: 74, 33 | left: 16, 34 | right: 54 35 | }; 36 | var lineOvershoot = 10; 37 | var rootWidth = 0; 38 | var rootHeight = 0; 39 | var labelWidth = 165; 40 | var availableWidth = 0; 41 | var availableHeight = 0; 42 | var selectedDay = 0; 43 | var today = new Date(); 44 | var day1HitArea = { 45 | x: 0, y: 0, 46 | width: 50, height: 26 47 | }; 48 | var day2HitArea = { 49 | x: 0, y: 0, 50 | width: 50, height: 26 51 | }; 52 | 53 | var WHITE = '#FFF'; 54 | var PURPLE = '#362A6C'; 55 | var BLUE = '#4A90E2'; 56 | 57 | var days = [{ 58 | "Breakfast": [{ 59 | start: 8, duration: 1 60 | }], 61 | "Keynote": [{ 62 | start: 9, duration: 0.5 63 | },{ 64 | start: 17, duration: 0.25 65 | }], 66 | "Sessions": [{ 67 | start: 9.5, duration: 1.5 68 | }, { 69 | start: 11.5, duration: 1.5 70 | },{ 71 | start: 14.5, duration: 1.5 72 | },{ 73 | start: 16.5, duration: 0.5 74 | }], 75 | "Break": [{ 76 | start: 11, duration: 0.5 77 | },{ 78 | start: 13, duration: 1.5 79 | },{ 80 | start: 16, duration: 0.5 81 | }], 82 | "After Party": [{ 83 | start: 17.25, duration: 4.75 84 | }] 85 | }, 86 | { 87 | "Breakfast": [{ 88 | start: 8, duration: 1.5 89 | }], 90 | "Sessions": [{ 91 | start: 9.5, duration: 2 92 | },{ 93 | start: 12, duration: 1 94 | },{ 95 | start: 14.25, duration: 1.75 96 | }], 97 | "Breakout Discussion": [{ 98 | start: 16.5, duration: 1.5 99 | }], 100 | "Break": [{ 101 | start: 11.5, duration: 0.5 102 | },{ 103 | start: 13, duration: 1.25 104 | },{ 105 | start: 16, duration: 0.5 106 | }] 107 | }]; 108 | var dayData = {}; 109 | 110 | function getHoursRange(dayId) { 111 | var min = Number.POSITIVE_INFINITY; 112 | var max = Number.NEGATIVE_INFINITY; 113 | var day = days[dayId]; 114 | var section, blocks, block; 115 | 116 | if (dayData[dayId]) 117 | return dayData[dayId]; 118 | 119 | var sections = Object.keys(day); 120 | for (var s = 0; s < sections.length; s++) { 121 | section = sections[s]; 122 | for (var t = 0; t < day[section].length; t++) { 123 | blocks = day[section]; 124 | 125 | for (var b = 0; b < blocks.length; b++) { 126 | block = blocks[b]; 127 | if (block.start < min) 128 | min = block.start; 129 | if (block.start + block.duration > max) 130 | max = block.start + block.duration; 131 | } 132 | } 133 | } 134 | 135 | dayData[dayId] = { 136 | min: min, 137 | max: max 138 | }; 139 | 140 | return dayData[dayId]; 141 | } 142 | 143 | function onResize() { 144 | 145 | rootWidth = rootElement.offsetWidth; 146 | rootHeight = rootElement.offsetHeight; 147 | 148 | canvas.width = rootWidth * dPR; 149 | canvas.height = rootHeight * dPR; 150 | 151 | ctx.scale(dPR, dPR); 152 | 153 | canvas.style.width = rootWidth + 'px'; 154 | canvas.style.height = rootHeight + 'px'; 155 | 156 | availableWidth = rootWidth - labelWidth - padding.left - padding.right; 157 | availableHeight = rootHeight - padding.top - padding.bottom; 158 | 159 | day1HitArea.x = rootWidth - 136; 160 | day1HitArea.y = 20; 161 | 162 | day2HitArea.x = rootWidth - 66; 163 | day2HitArea.y = 20; 164 | 165 | draw(); 166 | } 167 | 168 | function clear() { 169 | ctx.clearRect(0, 0, rootWidth, rootHeight); 170 | // ctx.fillStyle = PURPLE; 171 | // ctx.fillRect(padding.left + labelWidth, padding.top, 172 | // availableWidth, availableHeight); 173 | } 174 | 175 | function draw() { 176 | 177 | clear(); 178 | var timeRange = getHoursRange(selectedDay); 179 | drawLinesAndTimes(timeRange); 180 | drawBlocksAndLabels(timeRange); 181 | updateDayLabels(); 182 | } 183 | 184 | function updateDayLabels() { 185 | 186 | if (selectedDay === 0) 187 | day1Button.classList.remove('schedule__day-1--inactive'); 188 | else 189 | day1Button.classList.add('schedule__day-1--inactive'); 190 | 191 | if (selectedDay === 1) 192 | day2Button.classList.remove('schedule__day-2--inactive'); 193 | else 194 | day2Button.classList.add('schedule__day-2--inactive'); 195 | } 196 | 197 | function drawLinesAndTimes(timeRange) { 198 | 199 | var range = timeRange.max - timeRange.min; 200 | var step = Math.floor(availableWidth / range); 201 | var x, time; 202 | var lineHeight = availableHeight + lineOvershoot * 2; 203 | 204 | ctx.save(); 205 | ctx.translate(padding.left + labelWidth + 0.5, 206 | padding.top + 0.5 - lineOvershoot); 207 | ctx.fillStyle = '#FFF'; 208 | ctx.strokeStyle = '#FFF'; 209 | ctx.globalAlpha = 0.3; 210 | ctx.textAlign = 'center'; 211 | ctx.textBaseline = 'top'; 212 | 213 | for (var r = 0; r <= range; r++) { 214 | 215 | x = r * step; 216 | time = (timeRange.min + r) % 12; 217 | 218 | if (r === 0) 219 | time += 'AM'; 220 | else if (time === 0) 221 | time = '12PM'; 222 | 223 | ctx.beginPath(); 224 | ctx.moveTo(x, 0); 225 | ctx.lineTo(x, lineHeight); 226 | ctx.stroke(); 227 | ctx.closePath(); 228 | 229 | ctx.font = '500 16px/1 Roboto'; 230 | ctx.fillText(time, x, lineHeight + 5); 231 | } 232 | ctx.restore(); 233 | } 234 | 235 | function drawBlocksAndLabels(timeRange) { 236 | 237 | var range = timeRange.max - timeRange.min; 238 | var day = days[selectedDay]; 239 | var height = 10; 240 | var halfHeight = height * 0.5; 241 | var section, blocks, block, x, y, width; 242 | var sections = Object.keys(day); 243 | var widthStep = Math.floor(availableWidth / range); 244 | var heightStep = (availableHeight - height) / (sections.length - 1); 245 | 246 | ctx.save(); 247 | ctx.textAlign = 'left'; 248 | ctx.textBaseline = 'top'; 249 | ctx.translate(padding.left, padding.top); 250 | 251 | for (var s = 0; s < sections.length; s++) { 252 | 253 | section = sections[s]; 254 | y = Math.floor(s * heightStep); 255 | 256 | ctx.fillStyle = WHITE; 257 | ctx.globalAlpha = 0.56; 258 | ctx.font = '300 16px/1 Roboto'; 259 | ctx.fillText(section, 0, y - halfHeight); 260 | 261 | ctx.fillStyle = BLUE; 262 | ctx.globalAlpha = 1; 263 | 264 | ctx.save(); 265 | ctx.translate(labelWidth, 0); 266 | 267 | for (var t = 0; t < day[section].length; t++) { 268 | blocks = day[section]; 269 | 270 | for (var b = 0; b < blocks.length; b++) { 271 | block = blocks[b]; 272 | 273 | x = Math.floor((block.start - timeRange.min) * widthStep); 274 | width = Math.round(block.duration * widthStep); 275 | 276 | ctx.fillRect(x, y, width, height); 277 | } 278 | } 279 | 280 | ctx.restore(); 281 | } 282 | 283 | ctx.restore(); 284 | 285 | } 286 | 287 | function onDay1ButtonClick(evt) { 288 | evt.preventDefault(); 289 | selectedDay = 0; 290 | draw(); 291 | } 292 | 293 | function onDay2ButtonClick(evt) { 294 | evt.preventDefault(); 295 | selectedDay = 1; 296 | draw(); 297 | } 298 | 299 | function onExpand() { 300 | container.classList.add('schedule__overview-container--hidden'); 301 | } 302 | 303 | function onCollapse() { 304 | container.classList.remove('schedule__overview-container--hidden'); 305 | } 306 | 307 | function onLoad() { 308 | draw(); 309 | } 310 | 311 | if (today.getMonth() === 10 && 312 | today.getDate() === 20 && 313 | today.getFullYear() === 2014) { 314 | selectedDay = 1; 315 | } 316 | 317 | (function init() { 318 | 319 | day1Button.addEventListener('click', onDay1ButtonClick); 320 | day2Button.addEventListener('click', onDay2ButtonClick); 321 | 322 | card.addEventListener('expand', onExpand); 323 | card.addEventListener('collapse', onCollapse); 324 | onResize(); 325 | clear(); 326 | })(); 327 | 328 | CDS.EventPublisher.add('resize', onResize); 329 | CDS.EventPublisher.add('load', onLoad); 330 | 331 | })(); 332 | -------------------------------------------------------------------------------- /src/static/scripts/components/toast.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | CDS.Toast = function(message) { 18 | 19 | this.element_ = document.createElement('div'); 20 | this.elementInner_ = document.createElement('div'); 21 | 22 | this.elementInner_.innerText = message; 23 | 24 | this.element_.classList.add('toast'); 25 | this.elementInner_.classList.add('toast__message'); 26 | 27 | this.hide = this.hide.bind(this); 28 | 29 | this.element_.appendChild(this.elementInner_); 30 | document.body.appendChild(this.element_); 31 | 32 | requestAnimFrame(this.hide); 33 | 34 | return this; 35 | }; 36 | 37 | CDS.Toast.prototype = { 38 | 39 | hide: function() { 40 | this.element_.classList.add('toast__hidden'); 41 | this.element_.addEventListener('transitionend', this.remove_); 42 | this.element_.addEventListener('webkittransitionend', this.remove_); 43 | }, 44 | 45 | remove_: function() { 46 | 47 | if (!this.element_) 48 | return; 49 | 50 | document.removeChild(this.element_); 51 | } 52 | }; 53 | 54 | CDS.Toaster = { 55 | create: function(message) { 56 | return new CDS.Toast(message); 57 | } 58 | }; 59 | -------------------------------------------------------------------------------- /src/static/scripts/helper/analytics.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | CDS.Analytics = (function() { 18 | 19 | "use strict"; 20 | 21 | function track(name, type, value) { 22 | 23 | if (typeof ga === 'function') { 24 | ga('send', 'event', name, type, value); 25 | } 26 | } 27 | 28 | return { 29 | track: track 30 | }; 31 | 32 | })(); 33 | -------------------------------------------------------------------------------- /src/static/scripts/helper/event-publisher.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | CDS.EventPublisher = (function() { 18 | 19 | "use strict"; 20 | 21 | var eventSignals = { 22 | resize: new signals.Signal(), 23 | scroll: new signals.Signal(), 24 | keyup: new signals.Signal(), 25 | load: new signals.Signal() 26 | }; 27 | var target = window; 28 | 29 | function onEvent(evt) { 30 | 31 | if (!eventSignals[evt.type]) 32 | throw 'Unsupported event' + evt.type; 33 | 34 | eventSignals[evt.type].dispatch(evt); 35 | 36 | // It may well be that we have used some addOnce 37 | // listeners and these may have expired. If so, remove. 38 | if (eventSignals[evt.type].getNumListeners() > 0) 39 | return; 40 | 41 | target.removeEventListener(evt.type, onEvent); 42 | } 43 | 44 | function add(eventName, eventHandler) { 45 | if (!eventSignals[eventName]) 46 | throw 'Unsupported event: ' + eventName; 47 | 48 | eventSignals[eventName].add(eventHandler); 49 | 50 | // If we have already subscribed for these events 51 | // we can afford to leave, otherwise subscribe. 52 | if (eventSignals[eventName].getNumListeners() > 1) 53 | return; 54 | 55 | target.addEventListener(eventName, onEvent); 56 | } 57 | 58 | function addOnce(eventName, eventHandler) { 59 | if (!eventSignals[eventName]) 60 | throw 'Unsupported event: ' + eventName; 61 | 62 | eventSignals[eventName].addOnce(eventHandler); 63 | 64 | // If we have already subscribed for these events 65 | // we can afford to leave, otherwise subscribe. 66 | if (eventSignals[eventName].getNumListeners() > 1) 67 | return; 68 | 69 | target.addEventListener(eventName, onEvent); 70 | } 71 | 72 | function remove(name) { 73 | 74 | if (!eventSignals[eventName]) 75 | throw 'Unsupported event: ' + eventName; 76 | 77 | eventSignals[eventName].remove(eventHandler); 78 | 79 | // If we still have listeners leave, otherwise remove 80 | // the event listener. 81 | if (eventSignals[eventName].getNumListeners() > 0) 82 | return; 83 | 84 | target.removeEventListener(eventName, onEvent); 85 | } 86 | 87 | return { 88 | add: add, 89 | addOnce: addOnce, 90 | remove: remove 91 | }; 92 | 93 | 94 | })(); 95 | -------------------------------------------------------------------------------- /src/static/scripts/helper/history.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | CDS.History = (function() { 18 | 19 | "use strict"; 20 | 21 | var activePath; 22 | var transitioningCard = null; 23 | 24 | function manageCards(opt_disableAnimation) { 25 | 26 | var currentPath = document.location.pathname; 27 | var compositePath = '/'; 28 | 29 | if (typeof opt_disableAnimation !== 'boolean') 30 | opt_disableAnimation = false; 31 | 32 | if (activePath === currentPath) 33 | return; 34 | 35 | if (transitioningCard) 36 | return; 37 | 38 | // If the new card is not a child of the current section collapse it 39 | // before opening the new card. 40 | if (currentPath.indexOf(activePath) === -1 && 41 | typeof CDS.Cards[activePath] !== 'undefined') { 42 | 43 | transitioningCard = CDS.Cards[activePath]; 44 | transitioningCard.collapse(); 45 | 46 | } else if (typeof CDS.Cards[currentPath] !== 'undefined') { 47 | 48 | // Step up through the path making sure any other cards are enabled 49 | currentPath.split('/').forEach(function(part) { 50 | 51 | if (part === '') 52 | return; 53 | 54 | compositePath += part + '/'; 55 | 56 | if (compositePath !== currentPath && 57 | typeof CDS.Cards[compositePath] !== 'undefined') { 58 | 59 | CDS.Cards[compositePath].expand(true); 60 | 61 | } else if (compositePath === currentPath) { 62 | 63 | transitioningCard = CDS.Cards[currentPath]; 64 | transitioningCard.expand(opt_disableAnimation); 65 | } 66 | }); 67 | } 68 | 69 | if (transitioningCard !== null) { 70 | transitioningCard.addEventListener('transitionend', 71 | onTransitionEnd.bind(transitioningCard), true); 72 | } 73 | 74 | activePath = currentPath; 75 | } 76 | 77 | function onPopState(evt) { 78 | evt.preventDefault(); 79 | requestAnimFrame(manageCards); 80 | } 81 | 82 | function onTransitionEnd() { 83 | transitioningCard = null; 84 | requestAnimFrame(manageCards); 85 | } 86 | 87 | function forth(path) { 88 | window.history.pushState(null, "", path); 89 | requestAnimFrame(manageCards); 90 | } 91 | 92 | function back() { 93 | window.history.back(); 94 | } 95 | 96 | function init() { 97 | manageCards(true); 98 | transitioningCard = null; 99 | } 100 | 101 | function onKeyUp(evt) { 102 | 103 | // We only care about the user hitting escape 104 | // to collapse the card down. 105 | if (evt.keyCode !== 27) 106 | return; 107 | 108 | if (typeof CDS.Cards[activePath] !== 'undefined') 109 | forth('../'); 110 | 111 | } 112 | 113 | window.addEventListener('keyup', onKeyUp); 114 | window.addEventListener('popstate', onPopState); 115 | 116 | return { 117 | back: back, 118 | forth: forth, 119 | init: init 120 | }; 121 | 122 | })(); 123 | -------------------------------------------------------------------------------- /src/static/scripts/helper/theme.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | CDS.Theme = (function() { 18 | 19 | "use strict"; 20 | 21 | var themeMeta = document.querySelector('#theme-color'); 22 | 23 | function set(color) { 24 | themeMeta.content = color; 25 | } 26 | 27 | return { 28 | set: set 29 | }; 30 | 31 | })(); 32 | -------------------------------------------------------------------------------- /src/static/scripts/helper/util.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | CDS.Util = (function() { 18 | 19 | "use strict"; 20 | var appElement = document.querySelector('.app'); 21 | 22 | function makeObject(keys, defaultValue) { 23 | 24 | var obj = {}; 25 | for (var i = 0; i < keys.length; i++) { 26 | obj[keys[i]] = defaultValue; 27 | } 28 | 29 | return obj; 30 | } 31 | 32 | function getWindowScrollPosition() { 33 | if (typeof window.scrollY === 'undefined') 34 | return document.documentElement.scrollTop; 35 | else 36 | return window.scrollY; 37 | } 38 | 39 | function isIOS() { 40 | return (/(iPhone|iPad|iPod)/gi).test(navigator.platform); 41 | } 42 | 43 | function isSafari() { 44 | var userAgent = navigator.userAgent; 45 | return (/Safari/gi).test(userAgent) && 46 | !(/Chrome/gi).test(userAgent); 47 | } 48 | 49 | function canRunFastClipAnimations() { 50 | // Right now the only answer to this is Chrome, 51 | // but in future I'm hopeful we can expand this. 52 | var userAgent = navigator.userAgent; 53 | return (/Chrome/gi).test(userAgent); 54 | } 55 | 56 | function isIE() { 57 | var userAgent = navigator.userAgent; 58 | return (/Trident/gi).test(userAgent); 59 | } 60 | 61 | return { 62 | appElement: appElement, 63 | isIE: isIE, 64 | isIOS: isIOS, 65 | isSafari: isSafari, 66 | canRunFastClipAnimations: canRunFastClipAnimations, 67 | makeObject: makeObject, 68 | getWindowScrollPosition: getWindowScrollPosition 69 | }; 70 | 71 | })(); 72 | -------------------------------------------------------------------------------- /src/static/scripts/helper/video-embedder.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | CDS.VideoEmbedder = (function() { 18 | 19 | function embed(element) { 20 | 21 | var containerElement = element.parentNode 22 | .querySelector('.session__header-image'); 23 | var youtubeURL = /youtube\.com/; 24 | var urlToEmbed = element.dataset.embed; 25 | var iframe; 26 | 27 | if (!youtubeURL.test(urlToEmbed)) 28 | return; 29 | 30 | if (containerElement.querySelector('iframe')) { 31 | iframe = containerElement.querySelector('iframe'); 32 | } else { 33 | iframe = document.createElement('iframe'); 34 | containerElement.appendChild(iframe); 35 | } 36 | 37 | iframe.setAttribute('width', '100%'); 38 | iframe.setAttribute('height', '100%'); 39 | iframe.setAttribute('src', urlToEmbed + '?autoplay=1'); 40 | iframe.setAttribute('frameborder', '0'); 41 | iframe.setAttribute('allowfullscreen', 'yes'); 42 | iframe.classList.add('session__video-embed'); 43 | 44 | element.classList.add('hidden'); 45 | } 46 | 47 | function killAllEmbeddedVideos() { 48 | var videos = document.querySelectorAll('.session__video-embed'); 49 | var videoEmbedFABS = document.querySelectorAll('.session__fab'); 50 | 51 | for (var i = 0; i < videos.length; i++) 52 | videos[i].parentNode.removeChild(videos[i]); 53 | 54 | for (var j = 0; j < videoEmbedFABS.length; j++) 55 | videoEmbedFABS[j].classList.remove('hidden'); 56 | } 57 | 58 | return { 59 | embed: embed, 60 | killAllEmbeddedVideos: killAllEmbeddedVideos 61 | }; 62 | })(); 63 | -------------------------------------------------------------------------------- /src/static/scripts/sw.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | importScripts('scripts/third_party/serviceworker-cache-polyfill.js'); 18 | 19 | var CACHE_NAME = 'chrome-dev-summit'; 20 | var CACHE_VERSION = 43; 21 | 22 | self.oninstall = function(event) { 23 | 24 | event.waitUntil( 25 | caches.open(CACHE_NAME + '-v' + CACHE_VERSION).then(function(cache) { 26 | 27 | return cache.addAll([ 28 | 29 | '/devsummit/', 30 | '/devsummit/schedule/', 31 | '/devsummit/sessions/', 32 | '/devsummit/attendee-information/', 33 | '/devsummit/get-involved/', 34 | '/devsummit/about-chrome-dev-summit/', 35 | 36 | '/devsummit/styles/cds.min.css', 37 | '/devsummit/scripts/cds.min.js', 38 | '/devsummit/images/chrome-icon.jpg', 39 | '/devsummit/images/chrome-icon@2x.jpg', 40 | '/devsummit/images/icon-camera.svg', 41 | '/devsummit/images/masthead-1.jpg', 42 | '/devsummit/images/masthead-1@2x.jpg', 43 | '/devsummit/images/masthead-2.jpg', 44 | '/devsummit/images/masthead-2@2x.jpg', 45 | '/devsummit/images/masthead-3.jpg', 46 | '/devsummit/images/masthead-3@2x.jpg', 47 | '/devsummit/images/masthead-4.jpg', 48 | '/devsummit/images/masthead-4@2x.jpg', 49 | '/devsummit/images/icon-back-arrow.svg', 50 | '/devsummit/images/icon-schedule.svg', 51 | '/devsummit/images/icon-schedule-gray.svg', 52 | '/devsummit/images/icon-sessions.svg', 53 | '/devsummit/images/icon-quad.svg', 54 | '/devsummit/images/icon-get-involved.svg', 55 | '/devsummit/images/pic-1.jpg', 56 | '/devsummit/images/pic-1@2x.jpg', 57 | '/devsummit/images/pic-2.jpg', 58 | '/devsummit/images/pic-2@2x.jpg', 59 | '/devsummit/images/pic-3.jpg', 60 | '/devsummit/images/pic-3@2x.jpg', 61 | 62 | '/devsummit/images/sessions/keynote.jpg', 63 | '/devsummit/images/sessions/keynote@2x.jpg', 64 | '/devsummit/images/sessions/wicked-fast.jpg', 65 | '/devsummit/images/sessions/wicked-fast@2x.jpg', 66 | '/devsummit/images/sessions/asking-for-super-powers-chromes-permission-model.jpg', 67 | '/devsummit/images/sessions/asking-for-super-powers-chromes-permission-model@2x.jpg', 68 | '/devsummit/images/sessions/material-design-deconstructed.jpg', 69 | '/devsummit/images/sessions/material-design-deconstructed@2x.jpg', 70 | '/devsummit/images/sessions/the-applied-science-of-runtime-performance.jpg', 71 | '/devsummit/images/sessions/the-applied-science-of-runtime-performance@2x.jpg', 72 | '/devsummit/images/sessions/making-web-apps-appy.jpg', 73 | '/devsummit/images/sessions/making-web-apps-appy@2x.jpg', 74 | '/devsummit/images/sessions/tls-all-the-things-security-with-performance.jpg', 75 | '/devsummit/images/sessions/tls-all-the-things-security-with-performance@2x.jpg', 76 | '/devsummit/images/sessions/easy-composition-and-reuse.jpg', 77 | '/devsummit/images/sessions/easy-composition-and-reuse@2x.jpg', 78 | '/devsummit/images/sessions/polymer-state-of-the-union.jpg', 79 | '/devsummit/images/sessions/polymer-state-of-the-union@2x.jpg', 80 | '/devsummit/images/sessions/lets-build-some-apps-with-polymer.jpg', 81 | '/devsummit/images/sessions/lets-build-some-apps-with-polymer@2x.jpg', 82 | '/devsummit/images/sessions/fundamentals-of-mobile-web-development.jpg', 83 | '/devsummit/images/sessions/fundamentals-of-mobile-web-development@2x.jpg', 84 | '/devsummit/images/sessions/closing-keynote.jpg', 85 | '/devsummit/images/sessions/closing-keynote@2x.jpg', 86 | '/devsummit/images/sessions/panel.png', 87 | '/devsummit/images/sessions/panel@2x.png', 88 | 89 | '/devsummit/images/chrome-touch-icon-192x192.png' 90 | 91 | ]); 92 | }) 93 | ); 94 | }; 95 | 96 | self.onactivate = function(event) { 97 | 98 | var currentCacheName = CACHE_NAME + '-v' + CACHE_VERSION; 99 | caches.keys().then(function(cacheNames) { 100 | return Promise.all( 101 | cacheNames.map(function(cacheName) { 102 | if (cacheName.indexOf(CACHE_NAME) == -1) { 103 | return; 104 | } 105 | 106 | if (cacheName != currentCacheName) { 107 | return caches.delete(cacheName); 108 | } 109 | }) 110 | ); 111 | }); 112 | 113 | }; 114 | 115 | self.onfetch = function(event) { 116 | 117 | var request = event.request; 118 | 119 | event.respondWith( 120 | 121 | // Check the cache for a hit. 122 | caches.match(request).then(function(response) { 123 | 124 | // If we have a response return it. 125 | if (response) 126 | return response; 127 | 128 | // Otherwise fetch it, store and respond. 129 | return fetch(request).then(function(response) { 130 | 131 | var responseToCache = response.clone(); 132 | 133 | caches.open(CACHE_NAME + '-v' + CACHE_VERSION).then( 134 | function(cache) { 135 | cache.put(request, responseToCache).catch(function(err) { 136 | // Likely we got an opaque response which the polyfill 137 | // can't deal with, so log out a warning. 138 | console.warn(requestURL + ': ' + err.message); 139 | }); 140 | }); 141 | 142 | return response; 143 | }); 144 | 145 | }) 146 | ); 147 | }; 148 | -------------------------------------------------------------------------------- /src/static/scripts/third_party/requestAnimationFrame.js: -------------------------------------------------------------------------------- 1 | window.requestAnimFrame = (function(){ 2 | return window.requestAnimationFrame || 3 | window.webkitRequestAnimationFrame || 4 | window.mozRequestAnimationFrame || 5 | function( callback ){ 6 | window.setTimeout(callback, 1000 / 60); 7 | }; 8 | })(); 9 | -------------------------------------------------------------------------------- /src/static/scripts/third_party/serviceworker-cache-polyfill.js: -------------------------------------------------------------------------------- 1 | if (!Cache.prototype.add) { 2 | Cache.prototype.add = function add(request) { 3 | return this.addAll([request]); 4 | }; 5 | } 6 | 7 | if (!Cache.prototype.addAll) { 8 | Cache.prototype.addAll = function addAll(requests) { 9 | var cache = this; 10 | 11 | // Since DOMExceptions are not constructable: 12 | function NetworkError(message) { 13 | this.name = 'NetworkError'; 14 | this.code = 19; 15 | this.message = message; 16 | } 17 | NetworkError.prototype = Object.create(Error.prototype); 18 | 19 | return Promise.resolve().then(function() { 20 | if (arguments.length < 1) throw new TypeError(); 21 | 22 | // Simulate sequence<(Request or USVString)> binding: 23 | var sequence = []; 24 | 25 | requests = requests.map(function(request) { 26 | if (request instanceof Request) { 27 | return request; 28 | } 29 | else { 30 | return String(request); // may throw TypeError 31 | } 32 | }); 33 | 34 | return Promise.all( 35 | requests.map(function(request) { 36 | if (typeof request === 'string') { 37 | request = new Request(request); 38 | } 39 | 40 | var scheme = new URL(request.url).protocol; 41 | 42 | if (scheme !== 'http:' && scheme !== 'https:') { 43 | throw new NetworkError("Invalid scheme"); 44 | } 45 | 46 | return fetch(request.clone()); 47 | }) 48 | ); 49 | }).then(function(responses) { 50 | // TODO: check that requests don't overwrite one another 51 | // (don't think this is possible to polyfill due to opaque responses) 52 | return Promise.all( 53 | responses.map(function(response, i) { 54 | return cache.put(requests[i], response); 55 | }) 56 | ); 57 | }).then(function() { 58 | return undefined; 59 | }); 60 | }; 61 | } 62 | 63 | if (!CacheStorage.prototype.match) { 64 | // This is probably vulnerable to race conditions (removing caches etc) 65 | CacheStorage.prototype.match = function match(request, opts) { 66 | var caches = this; 67 | 68 | return this.keys().then(function(cacheNames) { 69 | var match; 70 | 71 | return cacheNames.reduce(function(chain, cacheName) { 72 | return chain.then(function() { 73 | return match || caches.open(cacheName).then(function(cache) { 74 | return cache.match(request, opts); 75 | }).then(function(response) { 76 | match = response; 77 | return match; 78 | }); 79 | }); 80 | }, Promise.resolve()); 81 | }); 82 | }; 83 | } -------------------------------------------------------------------------------- /src/static/scripts/third_party/signals.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | JS Signals 4 | Released under the MIT license 5 | Author: Miller Medeiros 6 | Version: 1.0.0 - Build: 268 (2012/11/29 05:48 PM) 7 | */ 8 | (function(i){function h(a,b,c,d,e){this._listener=b;this._isOnce=c;this.context=d;this._signal=a;this._priority=e||0}function g(a,b){if(typeof a!=="function")throw Error("listener is a required param of {fn}() and should be a Function.".replace("{fn}",b));}function e(){this._bindings=[];this._prevParams=null;var a=this;this.dispatch=function(){e.prototype.dispatch.apply(a,arguments)}}h.prototype={active:!0,params:null,execute:function(a){var b;this.active&&this._listener&&(a=this.params?this.params.concat(a): 9 | a,b=this._listener.apply(this.context,a),this._isOnce&&this.detach());return b},detach:function(){return this.isBound()?this._signal.remove(this._listener,this.context):null},isBound:function(){return!!this._signal&&!!this._listener},isOnce:function(){return this._isOnce},getListener:function(){return this._listener},getSignal:function(){return this._signal},_destroy:function(){delete this._signal;delete this._listener;delete this.context},toString:function(){return"[SignalBinding isOnce:"+this._isOnce+ 10 | ", isBound:"+this.isBound()+", active:"+this.active+"]"}};e.prototype={VERSION:"1.0.0",memorize:!1,_shouldPropagate:!0,active:!0,_registerListener:function(a,b,c,d){var e=this._indexOfListener(a,c);if(e!==-1){if(a=this._bindings[e],a.isOnce()!==b)throw Error("You cannot add"+(b?"":"Once")+"() then add"+(!b?"":"Once")+"() the same listener without removing the relationship first.");}else a=new h(this,a,b,c,d),this._addBinding(a);this.memorize&&this._prevParams&&a.execute(this._prevParams);return a}, 11 | _addBinding:function(a){var b=this._bindings.length;do--b;while(this._bindings[b]&&a._priority<=this._bindings[b]._priority);this._bindings.splice(b+1,0,a)},_indexOfListener:function(a,b){for(var c=this._bindings.length,d;c--;)if(d=this._bindings[c],d._listener===a&&d.context===b)return c;return-1},has:function(a,b){return this._indexOfListener(a,b)!==-1},add:function(a,b,c){g(a,"add");return this._registerListener(a,!1,b,c)},addOnce:function(a,b,c){g(a,"addOnce");return this._registerListener(a, 12 | !0,b,c)},remove:function(a,b){g(a,"remove");var c=this._indexOfListener(a,b);c!==-1&&(this._bindings[c]._destroy(),this._bindings.splice(c,1));return a},removeAll:function(){for(var a=this._bindings.length;a--;)this._bindings[a]._destroy();this._bindings.length=0},getNumListeners:function(){return this._bindings.length},halt:function(){this._shouldPropagate=!1},dispatch:function(a){if(this.active){var b=Array.prototype.slice.call(arguments),c=this._bindings.length,d;if(this.memorize)this._prevParams= 13 | b;if(c){d=this._bindings.slice();this._shouldPropagate=!0;do c--;while(d[c]&&this._shouldPropagate&&d[c].execute(b)!==!1)}}},forget:function(){this._prevParams=null},dispose:function(){this.removeAll();delete this._bindings;delete this._prevParams},toString:function(){return"[Signal active:"+this.active+" numListeners:"+this.getNumListeners()+"]"}};var f=e;f.Signal=e;typeof define==="function"&&define.amd?define(function(){return f}):typeof module!=="undefined"&&module.exports?module.exports=f:i.signals= 14 | f})(this); 15 | -------------------------------------------------------------------------------- /src/static/styles/base/_buttons.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @mixin button() { 18 | background: $color-accent; 19 | color: #FFF; 20 | border-radius: 2px; 21 | border: none; 22 | padding: 0.8em 1.6em; 23 | overflow: hidden; 24 | position: relative; 25 | display: block; 26 | } 27 | 28 | .button__ripple { 29 | width: 50px; 30 | height: 50px; 31 | background: #FFF; 32 | position: absolute; 33 | left: 0; 34 | top: 0; 35 | opacity: 0; 36 | border-radius: 50%; 37 | pointer-events: none; 38 | 39 | -webkit-transform: translate(-50%, -50%); 40 | transform: translate(-50%, -50%); 41 | 42 | } 43 | 44 | .button__ripple--animate { 45 | 46 | -webkit-transition: -webkit-transform $card-anim-time + 0.6s cubic-bezier(0.0, 0.0, 0.2, 1), 47 | opacity $card-anim-time + 0.6s cubic-bezier(0.0, 0.0, 0.2, 1); 48 | transition: transform $card-anim-time + 0.6s cubic-bezier(0.0, 0.0, 0.2, 1), 49 | opacity $card-anim-time + 0.6s cubic-bezier(0.0, 0.0, 0.2, 1); 50 | } 51 | -------------------------------------------------------------------------------- /src/static/styles/base/_color.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | $color-text: #212121; 18 | $color-heading: #000; 19 | $color-body: #F9F9F9; 20 | $color-primary: #362A6C; 21 | $color-accent: #4A90E2; 22 | $color-action: #4CBB47; 23 | $color-hotpink: #EA006F; 24 | $color-yellow: #FFD200; 25 | $color-brown: #AB7317; 26 | $color-orange: #C67008; 27 | $color-darkgray: #3C4C5D; 28 | -------------------------------------------------------------------------------- /src/static/styles/base/_deeplinks.scss: -------------------------------------------------------------------------------- 1 | body.deeplink-schedule:after, 2 | body.deeplink-sessions:after, 3 | body.deeplink-attendee-information:after, 4 | body.deeplink-get-involved:after 5 | body.deeplink-about-chrome-dev-summit:after { 6 | content: ''; 7 | position: fixed; 8 | top: 0; 9 | right: 0; 10 | bottom: 0; 11 | left: 0; 12 | } 13 | 14 | body.deeplink-schedule:after { 15 | background: $color-primary; 16 | } 17 | 18 | body.deeplink-sessions:after { 19 | background: $color-accent; 20 | } 21 | 22 | body.deeplink-attendee-information:after { 23 | background: $color-hotpink; 24 | } 25 | 26 | body.deeplink-get-involved:after { 27 | background: $color-yellow; 28 | } 29 | 30 | body.deeplink-about-chrome-dev-summit:after { 31 | background: $color-action; 32 | } 33 | -------------------------------------------------------------------------------- /src/static/styles/base/_dialogs.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .summit-dialog-panel-container { 18 | position: fixed; 19 | z-index: 1000; 20 | top: 0; 21 | left: 0; 22 | width: 100%; 23 | height: 100%; 24 | background: rgba(0,0,0,0.3); 25 | 26 | will-change: opacity; 27 | -webkit-backface-visibility: hidden; 28 | opacity: 0; 29 | pointer-events: none; 30 | 31 | -webkit-transition: opacity 0.5s cubic-bezier(0.0, 0.0, 0.2, 1) 0.2s; 32 | transition: opacity 0.5s cubic-bezier(0.0, 0.0, 0.2, 1) 0.2s; 33 | } 34 | 35 | .summit-dialog-panel { 36 | width: 100%; 37 | max-width: 300px; 38 | border-radius: 2px; 39 | background: #FFF; 40 | padding: 24px 24px 16px 24px; 41 | position: absolute; 42 | left: 50%; 43 | top: 50%; 44 | opacity: 0; 45 | 46 | will-change: opacity, transform; 47 | -webkit-backface-visibility: hidden; 48 | 49 | -webkit-transform: translate(-50%, -50%) translateY(15px); 50 | transform: translate(-50%, -50%) translateY(15px); 51 | 52 | -webkit-transition: -webkit-transform 0.15s cubic-bezier(0.0, 0.0, 0.2, 1), 53 | opacity 0.15s cubic-bezier(0.0, 0.0, 0.2, 1); 54 | transition: transform 0.15s cubic-bezier(0.0, 0.0, 0.2, 1), 55 | opacity 0.15s cubic-bezier(0.0, 0.0, 0.2, 1); 56 | 57 | @include shadow-z4(); 58 | } 59 | 60 | .summit-dialog-buttons { 61 | height: 36px; 62 | line-height: 36px; 63 | } 64 | 65 | .summit-dialog-button { 66 | @include button(); 67 | @include typo-button(); 68 | margin: 0; 69 | background: none; 70 | float: right; 71 | } 72 | 73 | .summit-dialog-button.primary { 74 | color: $color-accent; 75 | padding-right: 16px; 76 | } 77 | 78 | .summit-dialog-panel-content { 79 | padding-bottom: 24px; 80 | } 81 | 82 | .summit-dialog-title { 83 | @include typo-title(); 84 | padding-bottom: 24px; 85 | letter-spacing: 0; 86 | } 87 | 88 | .summit-dialog-panel-container.active { 89 | pointer-events: auto; 90 | opacity: 1; 91 | 92 | -webkit-transition: opacity 0.3s cubic-bezier(0.0, 0.0, 0.2, 1) 0.1s; 93 | transition: opacity 0.3s cubic-bezier(0.0, 0.0, 0.2, 1) 0.1s; 94 | } 95 | 96 | .summit-dialog-panel-container.active .summit-dialog-panel { 97 | opacity: 1; 98 | transform: translate(-50%, -50%); 99 | 100 | -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.0, 0.0, 0.2, 1) 0.2s, 101 | opacity 0.3s cubic-bezier(0.0, 0.0, 0.2, 1) 0.2s; 102 | transition: transform 0.3s cubic-bezier(0.0, 0.0, 0.2, 1) 0.2s, 103 | opacity 0.3s cubic-bezier(0.0, 0.0, 0.2, 1) 0.2s; 104 | } 105 | 106 | @media(min-width: 356px) { 107 | .summit-dialog-panel { 108 | max-width: 320px; 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /src/static/styles/base/_layout.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @mixin keyline-72l() { 18 | padding-left: 72px; 19 | } 20 | 21 | @mixin keyline-24l() { 22 | padding-left: 24px; 23 | } 24 | 25 | @mixin keyline-16l() { 26 | padding-left: 16px; 27 | } 28 | 29 | @mixin keyline-72() { 30 | padding: 0 72px 0 72px; 31 | } 32 | 33 | @mixin keyline-24() { 34 | padding: 0 24px 0 24px; 35 | } 36 | 37 | @mixin keyline-16() { 38 | padding: 0 16px 0 16px; 39 | } 40 | -------------------------------------------------------------------------------- /src/static/styles/base/_reset.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | html, body { 18 | background: $color-body; 19 | margin: 0; 20 | padding: 0; 21 | 22 | -webkit-font-smoothing: antialiased; 23 | } 24 | 25 | body { 26 | overflow-x: auto; 27 | overflow-y: scroll; 28 | } 29 | 30 | * { 31 | box-sizing: border-box; 32 | } 33 | 34 | /** 35 | * Clearfix helper 36 | * Used to contain floats: h5bp.com/q 37 | */ 38 | 39 | .clearfix::before, 40 | .clearfix::after { 41 | content: ""; 42 | display: table; 43 | } 44 | 45 | .clearfix::after { 46 | clear: both; 47 | } 48 | -------------------------------------------------------------------------------- /src/static/styles/base/_shadow.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @mixin shadow-z1() { 18 | box-shadow: 0px 1px 1.5px 0px rgba(0,0,0,0.12), 19 | 0px 1px 1px 0px rgba(0,0,0,0.24); 20 | } 21 | 22 | @mixin shadow-z2() { 23 | box-shadow: 0px 2px 5px 0px rgba(0,0,0,0.16), 24 | 0px 2px 5px 0px rgba(0,0,0,0.23); 25 | } 26 | 27 | @mixin shadow-z3() { 28 | box-shadow: 0px 10px 10px 0px rgba(0,0,0,0.19), 29 | 0px 6px 3px 0px rgba(0,0,0,0.23); 30 | } 31 | 32 | @mixin shadow-z4() { 33 | box-shadow: 0px 14px 14px 0px rgba(0,0,0,0.25), 34 | 0px 10px 5px 0px rgba(0,0,0,0.22); 35 | } 36 | 37 | @mixin shadow-z5() { 38 | box-shadow: 0px 19px 19px 0px rgba(0,0,0,0.30), 39 | 0px 15px 6px 0px rgba(0,0,0,0.22); 40 | } 41 | 42 | .shadow-z1 { 43 | @include shadow-z1(); 44 | } 45 | 46 | .shadow-z2 { 47 | @include shadow-z2(); 48 | } 49 | 50 | -------------------------------------------------------------------------------- /src/static/styles/base/_typography.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | html, body { 18 | font-family: 'Helvetica', 'Arial', 'sans-serif'; 19 | font-size: 14px; 20 | font-weight: 400; 21 | line-height: 20px; 22 | color: $color-text; 23 | } 24 | 25 | h1, h2, h3, h4, h5, h6, p { 26 | margin: 0; 27 | padding: 0; 28 | color: $color-heading; 29 | } 30 | 31 | p { 32 | margin: 0 0 8px 0; 33 | color: $color-text; 34 | } 35 | 36 | a { 37 | color: $color-accent; 38 | font-weight: bold; 39 | } 40 | 41 | .strong { 42 | font-weight: bold; 43 | } 44 | 45 | li { 46 | line-height: 1.7; 47 | } 48 | 49 | @mixin typo-base() { 50 | font-family: 'Roboto', sans-serif; 51 | line-height: 1; 52 | letter-spacing: -0.01em; 53 | } 54 | 55 | @mixin typo-display-4() { 56 | font-family: 'Roboto', sans-serif; 57 | font-size: 112px; 58 | font-weight: 300; 59 | opacity: 0.54; 60 | line-height: 1; 61 | letter-spacing: -0.04em; 62 | } 63 | 64 | @mixin typo-display-3() { 65 | font-family: 'Roboto', sans-serif; 66 | font-size: 56px; 67 | font-weight: 400; 68 | opacity: 0.54; 69 | line-height: 1; 70 | letter-spacing: -0.02em; 71 | } 72 | 73 | @mixin typo-display-2() { 74 | font-family: 'Roboto', sans-serif; 75 | font-size: 45px; 76 | font-weight: 400; 77 | opacity: 0.54; 78 | line-height: 48px; 79 | } 80 | 81 | @mixin typo-display-1() { 82 | font-family: 'Roboto', sans-serif; 83 | font-size: 34px; 84 | font-weight: 400; 85 | opacity: 0.54; 86 | line-height: 40px; 87 | } 88 | 89 | @mixin typo-headline() { 90 | font-family: 'Roboto', sans-serif; 91 | font-size: 24px; 92 | font-weight: 400; 93 | opacity: 0.87; 94 | line-height: 32px; 95 | -moz-osx-font-smoothing: grayscale; 96 | } 97 | 98 | @mixin typo-title() { 99 | font-family: 'Roboto', sans-serif; 100 | font-size: 20px; 101 | font-weight: 500; 102 | opacity: 0.87; 103 | line-height: 1; 104 | letter-spacing: 0.02em; 105 | } 106 | 107 | @mixin typo-subhead() { 108 | font-family: 'Roboto', sans-serif; 109 | font-size: 16px; 110 | font-weight: 400; 111 | opacity: 0.87; 112 | line-height: 24px; 113 | letter-spacing: 0.04em; 114 | } 115 | 116 | @mixin typo-subhead-2() { 117 | font-family: 'Roboto', sans-serif; 118 | font-size: 16px; 119 | font-weight: 400; 120 | opacity: 0.87; 121 | line-height: 24px; 122 | letter-spacing: 0.04em; 123 | } 124 | 125 | @mixin typo-subhead-2() { 126 | font-family: 'Roboto', sans-serif; 127 | line-height: 28px; 128 | } 129 | 130 | @mixin typo-body-2() { 131 | font-size: 14px; 132 | font-weight: 500; 133 | opacity: 0.87; 134 | line-height: 24px; 135 | letter-spacing: 0.04em; 136 | } 137 | 138 | @mixin typo-caption() { 139 | font-family: 'Roboto', sans-serif; 140 | font-size: 12px; 141 | font-weight: 400; 142 | opacity: 0.54; 143 | line-height: 1; 144 | letter-spacing: 0.08em; 145 | } 146 | 147 | @mixin typo-menu() { 148 | font-family: 'Roboto', sans-serif; 149 | font-size: 14px; 150 | font-weight: 500; 151 | opacity: 0.87; 152 | line-height: 1; 153 | letter-spacing: 0.04em; 154 | } 155 | 156 | @mixin typo-button() { 157 | font-family: 'Roboto', sans-serif; 158 | font-size: 14px; 159 | font-weight: 500; 160 | text-transform: uppercase; 161 | opacity: 0.87; 162 | line-height: 1; 163 | letter-spacing: 0.04em; 164 | } 165 | -------------------------------------------------------------------------------- /src/static/styles/base/_zindex.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .toast { 18 | z-index: 5; 19 | } 20 | 21 | .masthead { 22 | z-index: 3; 23 | } 24 | 25 | .livestream { 26 | z-index: 0; 27 | } 28 | 29 | .livestream__image { 30 | z-index: 0; 31 | } 32 | 33 | .livestream__anchor { 34 | z-index: 1; 35 | } 36 | 37 | .app { 38 | z-index: 0; 39 | } 40 | 41 | .app-sections { 42 | z-index: 4; 43 | } 44 | 45 | .card { 46 | z-index: 1; 47 | } 48 | 49 | .card--expanded { 50 | z-index: 4; 51 | } 52 | 53 | .card--expanded .card--expanded { 54 | z-index: 5; 55 | } 56 | 57 | .card__see-more { 58 | z-index: 4; 59 | } 60 | 61 | .card__content { 62 | z-index: 0; 63 | } 64 | 65 | .card__logo { 66 | z-index: 4; 67 | } 68 | 69 | .card__title { 70 | z-index: 5; 71 | } 72 | 73 | .card__collapse-button { 74 | z-index: 5; 75 | } 76 | 77 | .card__container:before { 78 | z-index: 4; 79 | } 80 | 81 | .card__container:after { 82 | z-index: 5; 83 | } 84 | 85 | .schedule__overview-container { 86 | z-index: 5; 87 | } 88 | 89 | body.deeplink-schedule:after, 90 | body.deeplink-sessions:after, 91 | body.deeplink-attendee-information:after, 92 | body.deeplink-get-involved:after 93 | body.deeplink-about-chrome-dev-summit:after { 94 | z-index: 1; 95 | } 96 | 97 | @media (min-width: 900px) { 98 | 99 | .card__container:before { 100 | z-index: auto; 101 | } 102 | } 103 | 104 | @media (min-width: 960px) { 105 | .masthead { 106 | z-index: 0; 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/static/styles/cds.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | $card-anim-time: 0; 18 | 19 | @import 'base/_color'; 20 | @import 'base/_shadow'; 21 | @import 'base/_typography'; 22 | @import 'base/_buttons'; 23 | @import 'base/_dialogs'; 24 | 25 | @import 'base/_deeplinks'; 26 | 27 | @import 'base/_reset'; 28 | @import 'base/_layout'; 29 | @import 'base/_zindex'; 30 | 31 | @import 'components/_app'; 32 | @import 'components/_masthead'; 33 | @import 'components/_livestream'; 34 | @import 'components/_pics'; 35 | @import 'components/_card'; 36 | @import 'components/_footer'; 37 | @import 'components/_toast'; 38 | 39 | @import 'components/cards/_schedule'; 40 | @import 'components/cards/_sessions'; 41 | @import 'components/cards/_session-details'; 42 | @import 'components/cards/_attendee-information'; 43 | @import 'components/cards/_get-involved'; 44 | @import 'components/cards/_about-chrome-dev-summit'; 45 | -------------------------------------------------------------------------------- /src/static/styles/components/_app.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | html.locked, 18 | html.locked body { 19 | overflow: hidden; 20 | height: 100%; 21 | } 22 | 23 | .app.locked { 24 | overflow: hidden; 25 | } 26 | 27 | .app-sections { 28 | background: #FFF; 29 | } 30 | 31 | .app-sections__card-breaker { 32 | clear: both; 33 | display: block; 34 | 35 | &:after { 36 | content: ''; 37 | clear: both; 38 | display: table; 39 | } 40 | } 41 | 42 | @media (min-width: 600px) { 43 | .app-sections__card-breaker { 44 | clear: none; 45 | display: none; 46 | } 47 | } 48 | 49 | @media (min-width: 960px) { 50 | 51 | .app-sections { 52 | background: none; 53 | } 54 | 55 | .app__group { 56 | background: #FFF; 57 | max-width: 960px; 58 | margin: 0 auto 20px auto; 59 | border-radius: 3px; 60 | @include shadow-z2(); 61 | 62 | &:after { 63 | content: ''; 64 | clear: both; 65 | display: table; 66 | } 67 | } 68 | 69 | .app__group--bottom { 70 | padding-top: 4px; 71 | margin-bottom: 155px; 72 | } 73 | 74 | .app__group--livestream { 75 | border-radius: 3px; 76 | overflow: hidden; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/static/styles/components/_card.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .card { 18 | height: 168px; 19 | position: relative; 20 | background: #FFF; 21 | display: block; 22 | -webkit-tap-highlight-color: transparent; 23 | } 24 | 25 | .card--left-half { 26 | width: 50%; 27 | float: left; 28 | 29 | & > .card__container { 30 | margin-right: 2px; 31 | position: relative; 32 | } 33 | } 34 | 35 | .card--right-half { 36 | width: 50%; 37 | float: right; 38 | 39 | & > .card__container { 40 | margin-left: 2px; 41 | position: relative; 42 | } 43 | } 44 | 45 | .card--expanded { 46 | -webkit-backface-visibility: hidden; 47 | 48 | & > .card__container { 49 | -webkit-backface-visibility: hidden; 50 | 51 | & > .card__title, 52 | & > .card__logo, 53 | & > .card__content-wrapper, 54 | & > .card__collapse-button { 55 | -webkit-backface-visibility: hidden; 56 | } 57 | } 58 | } 59 | 60 | .card__see-more { 61 | display: block; 62 | width: 100%; 63 | height: 100%; 64 | position: absolute; 65 | text-indent: -30000px; 66 | overflow: hidden; 67 | } 68 | 69 | .card__see-more:focus { 70 | background: rgba(0,0,0,0.12); 71 | } 72 | 73 | .card__title { 74 | @include typo-base(); 75 | font-size: 16px; 76 | opacity: 1; 77 | color: #FFF; 78 | top: 16px; 79 | left: 16px; 80 | position: absolute; 81 | line-height: 18px; 82 | margin: 0; 83 | padding: 0; 84 | height: 18px; 85 | pointer-events: none; 86 | 87 | /* Make for neater text transitions in FF */ 88 | -moz-osx-font-smoothing: grayscale; 89 | 90 | -webkit-transform-origin: 0 0; 91 | transform-origin: 0 0; 92 | 93 | } 94 | 95 | .card__collapse-button { 96 | 97 | position: absolute; 98 | top: 16px; 99 | left: 16px; 100 | width: 24px; 101 | height: 24px; 102 | background: url(../images/icon-back-arrow.svg) center center no-repeat; 103 | background-size: contain; 104 | text-indent: -2000px; 105 | overflow: hidden; 106 | pointer-events: none; 107 | opacity: 0; 108 | 109 | -webkit-transform-origin: 0 0; 110 | transform-origin: 0 0; 111 | } 112 | 113 | .card__logo { 114 | position: absolute; 115 | pointer-events: none; 116 | 117 | -webkit-transform-origin: 0 0; 118 | transform-origin: 0 0; 119 | } 120 | 121 | .card__container { 122 | height: 100%; 123 | overflow: hidden; 124 | position: relative; 125 | 126 | &:after { 127 | content: ''; 128 | display: block; 129 | width: 100%; 130 | height: 100%; 131 | position: absolute; 132 | left: 0; 133 | top: 0; 134 | opacity: 0; 135 | pointer-events: none; 136 | background: #000; 137 | 138 | -webkit-transition: opacity $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 139 | transition: opacity $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 140 | } 141 | } 142 | 143 | .card__container--scrollable { 144 | overflow-x: hidden; 145 | overflow-y: scroll; 146 | -webkit-overflow-scrolling: touch; 147 | -ms-overflow-style: none; 148 | } 149 | 150 | .card__content-wrapper { 151 | border-top: 136px solid $color-hotpink; 152 | position: relative; 153 | min-height: calc(100vh - 60px); 154 | top: 260px; 155 | background: #FFF; 156 | 157 | -webkit-transform-origin: 0 0; 158 | transform-origin: 0 0; 159 | } 160 | 161 | .card__content-block { 162 | margin-bottom: 20px; 163 | } 164 | 165 | .card--expanded { 166 | 167 | & > .card__container { 168 | margin: 0; 169 | position: fixed; 170 | top: 0; 171 | left: 0; 172 | width: 100%; 173 | min-height: 100%; 174 | height: 100vh; 175 | 176 | & > .card__see-more { 177 | display: none; 178 | } 179 | 180 | & > .card__collapse-button { 181 | top: 16px; 182 | left: 16px; 183 | pointer-events: auto; 184 | opacity: 1; 185 | position: fixed; 186 | 187 | &:focus, &:hover { 188 | opacity: 1; 189 | outline: none; 190 | } 191 | } 192 | 193 | & > .card__title { 194 | font-size: 20px; 195 | left: 72px; 196 | height: 22px; 197 | line-height: 22px; 198 | position: fixed; 199 | } 200 | 201 | & > .card__content-wrapper { 202 | top: 64px; 203 | } 204 | 205 | &:before { 206 | position: fixed; 207 | content: ''; 208 | height: 56px; 209 | width: 100%; 210 | background: black; 211 | top: 0; 212 | left: 0; 213 | display: block; 214 | } 215 | 216 | &.card--navbar-shadow:before { 217 | @include shadow-z2(); 218 | } 219 | } 220 | 221 | & > .card__container--scrollable > .card__collapse-button { 222 | opacity: 0.7; 223 | } 224 | 225 | &.card__no-fixed-header > .card__container > .card__collapse-button { 226 | position: relative; 227 | display: inline-block; 228 | top: 16px; 229 | } 230 | 231 | &.card__no-fixed-header > .card__container > .card__title { 232 | position: relative; 233 | display: inline-block; 234 | top: 20px; 235 | left: 43px; 236 | } 237 | 238 | &.card__no-fixed-header > .card__container:before { 239 | position: relative; 240 | display: none; 241 | } 242 | 243 | &.card__no-fixed-header > .card__container > .card__content-wrapper { 244 | top: 36px; 245 | } 246 | } 247 | 248 | .card--animatable { 249 | 250 | & > .card__container { 251 | margin: 0; 252 | position: fixed; 253 | top: 0; 254 | left: 0; 255 | width: 100%; 256 | height: 100%; 257 | 258 | -webkit-transition: clip $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 259 | transition: clip $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 260 | 261 | & > .card__title, 262 | & > .card__content-wrapper { 263 | -webkit-transition: -webkit-transform $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1), 264 | opacity $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 265 | transition: transform $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1), 266 | opacity $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 267 | } 268 | 269 | & > .card__logo { 270 | -webkit-transition: -webkit-transform $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1), 271 | opacity $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 272 | transition: transform $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1), 273 | opacity $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 274 | } 275 | 276 | & > .card__collapse-button { 277 | -webkit-transition: -webkit-transform $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1), 278 | opacity $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 279 | transition: transform $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1), 280 | opacity $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 281 | } 282 | } 283 | 284 | & > .card__container--lofi-animations { 285 | -webkit-transform-origin: 0 0; 286 | transform-origin: 0 0; 287 | 288 | -webkit-transition: -webkit-transform $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 289 | transition: transform $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 290 | } 291 | 292 | & > .card__container--lofi-animations:after { 293 | -webkit-transition: none; 294 | transition: none; 295 | opacity: 1; 296 | } 297 | } 298 | 299 | .card--collapsing { 300 | 301 | & > .card__container { 302 | -webkit-transition: clip $card-anim-time + 0.32666s cubic-bezier(0,0,0.21,1); 303 | transition: clip $card-anim-time + 0.32666s cubic-bezier(0,0,0.21,1); 304 | } 305 | 306 | & > .card__container--lofi-animations { 307 | -webkit-transition: -webkit-transform $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 308 | transition: transform $card-anim-time + 0.33333s cubic-bezier(0,0,0.21,1); 309 | } 310 | } 311 | 312 | @media (min-width: 475px) { 313 | .card { 314 | height: 210px; 315 | } 316 | 317 | .card__title { 318 | font-size: 18px; 319 | } 320 | } 321 | 322 | @media (min-width: 600px) { 323 | .card { 324 | height: 240px; 325 | } 326 | 327 | .card__content-wrapper { 328 | top: 240px; 329 | } 330 | 331 | } 332 | 333 | @media (min-width: 900px) { 334 | .card__content-wrapper { 335 | max-width: 574px; 336 | height: auto; 337 | min-height: initial; 338 | margin: 0 auto; 339 | border-radius: 3px; 340 | @include shadow-z2(); 341 | } 342 | 343 | .card--expanded > .card__container:before { 344 | height: 64px; 345 | } 346 | } 347 | -------------------------------------------------------------------------------- /src/static/styles/components/_footer.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .footer { 18 | height: 96px; 19 | background: $color-primary; 20 | line-height: 96px; 21 | color: #B2B5BF; 22 | font-size: 12px; 23 | clear: both; 24 | position: relative; 25 | } 26 | 27 | .footer__content { 28 | @include keyline-16l(); 29 | margin: 0 auto; 30 | max-width: 960px; 31 | } 32 | 33 | .footer__copyright, 34 | .footer__privacy-and-terms { 35 | margin-right: 10px; 36 | } 37 | 38 | .footer a { 39 | color: #FFF; 40 | text-decoration: none; 41 | will-change: opacity; 42 | } 43 | 44 | .footer a:hover { 45 | opacity: 1; 46 | } 47 | 48 | @media (min-width: 460px) { 49 | .footer { 50 | font-size: 13px; 51 | } 52 | } 53 | 54 | @media (min-width: 960px) { 55 | .footer__content { 56 | padding-left: 0; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/static/styles/components/_livestream.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .livestream { 18 | width: 100%; 19 | max-width: 960px; 20 | margin: 0 auto; 21 | position: relative; 22 | background: $color-primary; 23 | } 24 | 25 | .livestream:after { 26 | content: ''; 27 | height: 4px; 28 | width: 100%; 29 | background: #FFF; 30 | display: block; 31 | z-index: 2; 32 | position: absolute; 33 | bottom: 0; 34 | } 35 | 36 | .livestream__image { 37 | width: 100%; 38 | height: 380px; 39 | background-size: cover; 40 | position: relative; 41 | } 42 | 43 | .livestream--embedded { 44 | 45 | & .livestream__image { 46 | background: $color-primary; 47 | padding-top: 64px; 48 | } 49 | } 50 | 51 | .livestream__image--image-1 { 52 | background-image: url(../images/masthead-1.jpg); 53 | } 54 | 55 | .livestream__image--image-2 { 56 | background-image: url(../images/masthead-2.jpg); 57 | background-position: center top; 58 | } 59 | 60 | .livestream__image--image-3 { 61 | background-image: url(../images/masthead-3.jpg); 62 | background-position: 65% top; 63 | } 64 | 65 | .livestream__image--image-4 { 66 | background-image: url(../images/masthead-4.jpg); 67 | background-position: 60% top 68 | } 69 | 70 | .livestream__anchor { 71 | position: relative; 72 | padding: 17px 40px 0 76px; 73 | display: block; 74 | height: 80px; 75 | width: 100%; 76 | color: #FFF; 77 | font-size: 16px; 78 | font-weight: 400; 79 | line-height: 1.375; 80 | background: $color-action url(../images/icon-camera.svg) 15px 20px no-repeat; 81 | } 82 | 83 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 84 | .livestream__image--image-1 { 85 | background-image: url(../images/masthead-1@2x.jpg); 86 | } 87 | 88 | .livestream__image--image-2 { 89 | background-image: url(../images/masthead-2@2x.jpg); 90 | } 91 | 92 | .livestream__image--image-3 { 93 | background-image: url(../images/masthead-3@2x.jpg); 94 | } 95 | 96 | .livestream__image--image-4 { 97 | background-image: url(../images/masthead-4@2x.jpg); 98 | } 99 | } 100 | 101 | @media (min-width: 445px) { 102 | .livestream__anchor { 103 | padding-top: 0; 104 | line-height: 76px; 105 | } 106 | } 107 | 108 | @media (min-width: 600px) { 109 | .livestream__anchor { 110 | font-size: 18px; 111 | } 112 | 113 | .livestream__image { 114 | height: 460px; 115 | } 116 | } 117 | 118 | @media (min-width: 830px) { 119 | .livestream__image { 120 | height: 560px; 121 | } 122 | } 123 | 124 | @media (min-width: 960px) { 125 | 126 | 127 | .livestream--embedded { 128 | 129 | margin-bottom: 0; 130 | 131 | & > .livestream__image { 132 | background: $color-primary; 133 | padding-top: 0; 134 | } 135 | } 136 | 137 | .livestream { 138 | border-radius: 3px; 139 | } 140 | 141 | .livestream:after { 142 | display: none; 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /src/static/styles/components/_masthead.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .masthead { 18 | min-height: 56px; 19 | position: fixed; 20 | width: 100%; 21 | top: 0; 22 | } 23 | 24 | .masthead__color-block { 25 | background: $color-primary; 26 | position: absolute; 27 | top: 0; 28 | left: 0; 29 | height: 56px; 30 | width: 100%; 31 | min-height: 64px; 32 | opacity: 0; 33 | @include shadow-z2(); 34 | } 35 | 36 | .masthead__container { 37 | width: 100%; 38 | max-width: 960px; 39 | margin: 0 auto; 40 | position: relative; 41 | } 42 | 43 | .masthead__title { 44 | @include keyline-16l(); 45 | @include typo-headline(); 46 | font-size: 20px; 47 | color: #FFF; 48 | line-height: 64px; 49 | } 50 | 51 | .masthead__subtitle { 52 | display: none; 53 | @include typo-base(); 54 | font-size: 19px; 55 | color: #FFF; 56 | line-height: 23px; 57 | } 58 | 59 | .masthead__date-and-location { 60 | display: none; 61 | @include typo-base(); 62 | font-size: 16px; 63 | color: #FFF; 64 | line-height: 1; 65 | } 66 | 67 | @media (min-width: 960px) { 68 | .masthead { 69 | height: 396px; 70 | position: relative; 71 | background: #493B8A; 72 | margin-bottom: -135px; 73 | } 74 | 75 | .masthead__color-block { 76 | opacity: 1 !important; 77 | box-shadow: none; 78 | } 79 | 80 | .masthead__title { 81 | position: relative; 82 | letter-spacing: -0.03em; 83 | top: 112px; 84 | left: 146px; 85 | font-size: 48px; 86 | line-height: 1; 87 | width: 550px; 88 | } 89 | 90 | .masthead__subtitle { 91 | display: block; 92 | position: relative; 93 | top: 110px; 94 | left: 164px; 95 | font-weight: 300; 96 | opacity: 0.8; 97 | width: 550px; 98 | } 99 | 100 | .masthead__date-and-location { 101 | display: block; 102 | position: relative; 103 | top: 126px; 104 | left: 164px; 105 | font-weight: 500; 106 | letter-spacing: 0.01em; 107 | width: 550px; 108 | } 109 | 110 | .masthead__container:after { 111 | content: ''; 112 | width: 100px; 113 | height: 100px; 114 | position: absolute; 115 | display: block; 116 | left: 32px; 117 | top: 102px; 118 | background: url('../images/chrome-icon.jpg') center center no-repeat; 119 | background-size: 100px 100px; 120 | } 121 | } 122 | 123 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 960px) { 124 | .masthead__container:after { 125 | background-image: url('../images/chrome-icon@2x.jpg'); 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /src/static/styles/components/_pics.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .pic-1 { 18 | position: relative; 19 | display: block; 20 | width: 100%; 21 | height: 168px; 22 | margin: 4px 0; 23 | background: $color-primary center center no-repeat; 24 | background-size: cover; 25 | } 26 | 27 | .pic-2 { 28 | position: relative; 29 | float: right; 30 | display: block; 31 | width: calc(50% - 2px); 32 | margin-left: 2px; 33 | height: 168px; 34 | background: $color-primary center -40px no-repeat; 35 | background-size: cover; 36 | } 37 | 38 | .pic-3 { 39 | position: relative; 40 | float: right; 41 | display: none; 42 | width: calc(50% - 2px); 43 | height: 240px; 44 | background: $color-primary left top no-repeat; 45 | background-size: cover; 46 | } 47 | 48 | .loaded .pic-1 { 49 | background-image: url(../images/pic-1.jpg); 50 | } 51 | 52 | .loaded .pic-2 { 53 | background-image: url(../images/pic-2.jpg); 54 | } 55 | 56 | .loaded .pic-3 { 57 | background-image: url(../images/pic-3.jpg); 58 | } 59 | 60 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 61 | 62 | .loaded .pic-1 { 63 | background-image: url(../images/pic-1@2x.jpg); 64 | } 65 | 66 | .loaded .pic-2 { 67 | background-image: url(../images/pic-2@2x.jpg); 68 | } 69 | 70 | .loaded .pic-3 { 71 | background-image: url(../images/pic-3@2x.jpg); 72 | } 73 | } 74 | 75 | @media (min-width: 475px) { 76 | .pic-1 { 77 | height: 240px; 78 | } 79 | 80 | .pic-2 { 81 | height: 210px; 82 | } 83 | } 84 | 85 | @media (min-width: 600px) { 86 | .pic-1 { 87 | margin: 0 0 4px 0; 88 | width: calc(50% - 2px); 89 | float: left; 90 | } 91 | } 92 | 93 | @media (min-width: 600px) { 94 | .pic-2 { 95 | margin: 0 0 4px 0; 96 | width: calc(50% - 2px); 97 | float: left; 98 | height: 484px; 99 | clear: both; 100 | } 101 | 102 | .pic-3 { 103 | display: block; 104 | } 105 | } 106 | 107 | @media (min-width: 800px) { 108 | .pic-1 { 109 | margin: 0 2px 4px 4px; 110 | width: calc(25% - 4px); 111 | float: right; 112 | background-position: 55% center; 113 | } 114 | 115 | .pic-2 { 116 | clear: none; 117 | float: left; 118 | width: calc(25% - 2px); 119 | background-position: top center; 120 | } 121 | 122 | .pic-3 { 123 | margin-top: 4px; 124 | width: calc(25% - 4px); 125 | } 126 | } 127 | 128 | @media (min-width: 960px) { 129 | .pic-2 { 130 | width: calc(25% - 6px); 131 | margin-left: 4px; 132 | } 133 | 134 | .pic-3 { 135 | width: calc(25% - 8px); 136 | margin-right: 4px; 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /src/static/styles/components/_summit-get-involved.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .summit-get-involved { 18 | 19 | max-width: 960px; 20 | width: 100%; 21 | 22 | margin: 144px auto 0 auto; 23 | padding-top: 48px; 24 | border-top: 1px solid #E1E1E1; 25 | 26 | padding-bottom: 48px; 27 | } 28 | 29 | .summit-get-involved-title { 30 | @include typo-title(); 31 | @include keyline-16l(); 32 | color: $color-primary; 33 | letter-spacing: 0; 34 | padding-bottom: 32px; 35 | } 36 | 37 | .summit-get-involved-item { 38 | padding-bottom: 48px; 39 | max-width: 360px; 40 | margin: 0 auto; 41 | } 42 | 43 | .summit-get-involved-item:before { 44 | content: ''; 45 | width: 100%; 46 | height: 240px; 47 | display: block; 48 | } 49 | 50 | .summit-get-involved-item.quad:before { 51 | background: #EA006F url(../images/illustration-quad.svg) center center no-repeat; 52 | background-size: contain; 53 | } 54 | 55 | .summit-get-involved-item.livestream:before { 56 | background: #4CBB47 url(../images/illustration-livestream.svg) center center no-repeat; 57 | background-size: contain; 58 | } 59 | 60 | .summit-get-involved-item.questions:before { 61 | background: #4A90E2 url(../images/illustration-questions.svg) center center no-repeat; 62 | background-size: contain; 63 | } 64 | 65 | .summit-get-involved-item-title { 66 | @include typo-body-2(); 67 | padding: 8px 16px 24px 16px; 68 | font-weight: 700; 69 | letter-spacing: 0; 70 | } 71 | 72 | .summit-get-involved-item p { 73 | @include keyline-16(); 74 | color: #757575; 75 | line-height: 1.7; 76 | } 77 | 78 | @media (min-width: 660px) { 79 | .summit-get-involved-item { 80 | display: block; 81 | float: left; 82 | width: 33.33%; 83 | padding-right: 4px; 84 | } 85 | 86 | .summit-get-involved-item:last-of-type { 87 | padding-right: 0; 88 | } 89 | 90 | } 91 | 92 | @media (min-width: 960px) { 93 | 94 | .summit-get-involved-title, 95 | .summit-get-involved-item-title { 96 | padding-left: 0; 97 | } 98 | 99 | .summit-get-involved-item { 100 | display: block; 101 | float: left; 102 | vertical-align: top; 103 | width: 304px; 104 | margin-right: 24px; 105 | padding-right: 0; 106 | } 107 | 108 | .summit-get-involved-item:last-of-type { 109 | margin-right: 0; 110 | } 111 | 112 | .summit-get-involved-item:before { 113 | width: 304px; 114 | height: 304px; 115 | @include shadow-z1(); 116 | border-radius: 2px; 117 | } 118 | 119 | .summit-get-involved-item p { 120 | padding: 0 32px 0 0; 121 | } 122 | 123 | .summit-get-involved { 124 | padding-bottom: 224px; 125 | } 126 | 127 | } 128 | -------------------------------------------------------------------------------- /src/static/styles/components/_summit-home-content.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @mixin g-contain() { 18 | overflow: hidden; 19 | } 20 | 21 | @mixin g-w25() { 22 | width: 25%; 23 | } 24 | 25 | @mixin g-w50() { 26 | width: 50%; 27 | } 28 | 29 | @mixin g-w75() { 30 | width: 75%; 31 | } 32 | 33 | @mixin g-w100() { 34 | width: 100%; 35 | } 36 | 37 | @mixin g-h25() { 38 | height: 25%; 39 | } 40 | 41 | @mixin g-h50() { 42 | height: 50%; 43 | } 44 | 45 | @mixin g-h75() { 46 | height: 75%; 47 | } 48 | 49 | @mixin g-h100() { 50 | height: 100%; 51 | } 52 | 53 | @mixin g-left() { 54 | float: left; 55 | } 56 | 57 | @mixin g-right() { 58 | float: right; 59 | } 60 | 61 | .summit-home-content { 62 | position: relative; 63 | } 64 | 65 | .summit-intro-content { 66 | width: 100%; 67 | height: 100%; 68 | background: #FFF; 69 | padding-top: 32px; 70 | padding-bottom: 32px; 71 | } 72 | 73 | .summit-intro-text-container { 74 | width: 100%; 75 | height: 100%; 76 | background: #FFF; 77 | padding: 32px 32px 16px 16px; 78 | position: relative; 79 | } 80 | 81 | .summit-intro-text-container p { 82 | line-height: 1.7; 83 | } 84 | 85 | .summit-intro-text-container p:first-of-type { 86 | font-family: Roboto; 87 | font-weight: 400; 88 | font-size: 16px; 89 | opacity: 0.54; 90 | line-height: 1.5; 91 | letter-spacing: 0px; 92 | } 93 | 94 | .summit-register-button { 95 | @include typo-button(); 96 | @include button(); 97 | background: $color-action; 98 | position: absolute; 99 | bottom: 16px; 100 | right: 16px; 101 | } 102 | 103 | .summit-home-grid { 104 | width: 100%; 105 | max-width: 960px; 106 | margin: 0 auto; 107 | height: 600px; 108 | } 109 | 110 | .summit-pic { 111 | @include g-contain(); 112 | width: 100%; 113 | height: 100%; 114 | display: block; 115 | line-height: 1; 116 | padding: 0; 117 | margin: 0; 118 | background-origin: border-box; 119 | background-size: cover; 120 | } 121 | 122 | .summit-intro { 123 | @include g-w100(); 124 | height: 68%; 125 | padding: 0 0 2px 0; 126 | } 127 | 128 | .summit-pic-3-1 { 129 | @include g-w50(); 130 | @include g-h25(); 131 | @include g-left(); 132 | padding: 2px 2px 2px 0; 133 | } 134 | 135 | .summit-pic-3-1 .summit-pic { 136 | background-image: url(../images/pic-3-1.jpg); 137 | background-position: center center; 138 | background-repeat: no-repeat; 139 | } 140 | 141 | .summit-pic-3-2 { 142 | @include g-w50(); 143 | @include g-h25(); 144 | @include g-left(); 145 | padding: 2px 2px 2px 0; 146 | } 147 | 148 | .summit-pic-3-2 .summit-pic { 149 | background-image: url(../images/pic-3-2.jpg); 150 | background-position: right center; 151 | background-repeat: no-repeat; 152 | } 153 | 154 | .summit-pic-4-2 { 155 | @include g-w50(); 156 | @include g-h50(); 157 | @include g-right(); 158 | padding: 2px 0 2px 2px; 159 | } 160 | 161 | .summit-pic-4-2 .summit-pic { 162 | background-image: url(../images/pic-4-2.jpg); 163 | background-position: right top; 164 | background-repeat: no-repeat; 165 | } 166 | 167 | .summit-pic-2-3 { 168 | @include g-w100(); 169 | @include g-h50(); 170 | @include g-right(); 171 | padding: 2px 0 2px 0; 172 | } 173 | 174 | .summit-pic-2-3 .summit-pic { 175 | background-image: url(../images/pic-2-3.jpg); 176 | background-position: left top; 177 | background-repeat: no-repeat; 178 | } 179 | 180 | .summit-pic-1-3 { 181 | display: none; 182 | } 183 | 184 | .summit-pic-1-3 .summit-pic { 185 | background-image: url(../images/pic-1-3.jpg); 186 | background-position: left top; 187 | background-repeat: no-repeat; 188 | } 189 | 190 | .summit-pic-4-4 { 191 | @include g-w100(); 192 | @include g-h50(); 193 | @include g-right(); 194 | padding: 2px 0 0 0; 195 | } 196 | 197 | .summit-pic-4-4 .summit-pic { 198 | background: $color-primary; 199 | color: #FFF; 200 | line-height: 2; 201 | padding: 16px; 202 | } 203 | 204 | .summit-pic-4-4 .format-list { 205 | margin: 0; 206 | padding: 4px 0 4px 16px; 207 | } 208 | 209 | .summit-format-title { 210 | @include typo-title(); 211 | color: #FFF; 212 | line-height: 2; 213 | } 214 | 215 | @media (min-width: 600px) { 216 | 217 | .summit-home-grid { 218 | height: 800px; 219 | } 220 | 221 | .summit-intro { 222 | @include g-w50(); 223 | @include g-h50(); 224 | @include g-left(); 225 | padding: 0 2px 2px 0; 226 | } 227 | 228 | .summit-intro-text-container p { 229 | line-height: 1.5; 230 | } 231 | 232 | .summit-pic-3-1 { 233 | @include g-h25(); 234 | padding: 0 0 2px 2px; 235 | } 236 | 237 | .summit-pic-3-2 { 238 | @include g-w25(); 239 | @include g-h25(); 240 | padding: 2px; 241 | } 242 | 243 | .summit-pic-4-2 { 244 | @include g-w25(); 245 | @include g-h25(); 246 | } 247 | 248 | .summit-pic-2-3 { 249 | @include g-w50(); 250 | @include g-h25(); 251 | @include g-right(); 252 | padding: 2px 0 2px 2px; 253 | } 254 | 255 | .summit-pic-1-3 { 256 | @include g-w50(); 257 | @include g-h50(); 258 | @include g-left(); 259 | display: block; 260 | padding: 2px 2px 0 0; 261 | } 262 | 263 | .summit-pic-4-4 { 264 | @include g-w50(); 265 | @include g-h25(); 266 | padding: 2px 0 0 2px; 267 | } 268 | 269 | .summit-pic-4-4 .summit-pic { 270 | line-height: 1.6; 271 | } 272 | 273 | .summit-format-title { 274 | line-height: 1; 275 | } 276 | } 277 | 278 | @media (min-width: 650px) { 279 | 280 | .summit-intro-text-container p { 281 | line-height: 1.7; 282 | } 283 | } 284 | 285 | @media (min-width: 960px) { 286 | .summit-home-grid { 287 | height: 960px; 288 | margin-top: 432px; 289 | } 290 | 291 | .summit-intro-text-container { 292 | padding: 32px 64px 32px 32px; 293 | } 294 | 295 | .summit-intro-text-container p { 296 | line-height: 1.8; 297 | } 298 | 299 | .summit-intro-text-container p:first-of-type { 300 | font-family: Roboto; 301 | font-weight: 400; 302 | font-size: 22px; 303 | line-height: 1.5; 304 | letter-spacing: 0px; 305 | padding-bottom: 16px; 306 | } 307 | 308 | .summit-pic-4-2 { 309 | @include g-h50(); 310 | @include g-right(); 311 | } 312 | 313 | .summit-pic-2-3 { 314 | @include g-w50(); 315 | @include g-h50(); 316 | @include g-left(); 317 | padding: 2px 2px 0 2px; 318 | } 319 | 320 | .summit-pic-1-3 { 321 | @include g-w25(); 322 | @include g-h50(); 323 | @include g-left(); 324 | } 325 | 326 | .summit-pic-4-4 { 327 | @include g-w25(); 328 | @include g-h25(); 329 | @include g-right(); 330 | } 331 | 332 | .summit-pic { 333 | background-size: auto; 334 | } 335 | 336 | .summit-pic-4-4 .summit-pic { 337 | line-height: 1.8; 338 | } 339 | } 340 | 341 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2) { 342 | .summit-pic-3-1 .summit-pic { 343 | background-image: url(../images/pic-3-1@2x.jpg); 344 | background-size: cover; 345 | } 346 | 347 | .summit-pic-3-2 .summit-pic { 348 | background-image: url(../images/pic-3-2@2x.jpg); 349 | background-size: cover; 350 | } 351 | 352 | .summit-pic-4-2 .summit-pic { 353 | background-image: url(../images/pic-4-2@2x.jpg); 354 | background-size: cover; 355 | } 356 | 357 | .summit-pic-2-3 .summit-pic { 358 | background-image: url(../images/pic-2-3@2x.jpg); 359 | background-size: cover; 360 | } 361 | } 362 | -------------------------------------------------------------------------------- /src/static/styles/components/_toast.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .toast { 18 | @include typo-base(); 19 | will-change: opacity; 20 | position: fixed; 21 | top: 10%; 22 | width: 100%; 23 | text-align: center; 24 | } 25 | 26 | .toast__message { 27 | width: 90%; 28 | max-width: 360px; 29 | background: rgba(0,0,0,0.6); 30 | padding: 16px 24px; 31 | border-radius: 40px; 32 | font-size: 16px; 33 | color: #FFF; 34 | text-align: center; 35 | line-height: 1.45; 36 | margin: 0 auto; 37 | } 38 | 39 | .toast__hidden { 40 | opacity: 0; 41 | -webkit-transition: opacity 1.2s cubic-bezier(0,0,0.21,1) 4s; 42 | transition: opacity 1.2s cubic-bezier(0,0,0.21,1) 4s; 43 | } 44 | 45 | @media (min-width: 530px) { 46 | .toast__message { 47 | max-width: 600px; 48 | } 49 | } 50 | 51 | @media (min-width: 960px) { 52 | .toast { 53 | top: 36px; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/static/styles/components/cards/_about-chrome-dev-summit.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .about-chrome-dev-summit.card { 18 | margin: 4px 0; 19 | } 20 | 21 | .about-chrome-dev-summit .card__container { 22 | background: $color-action; 23 | 24 | &:after, &:before { 25 | background: $color-action; 26 | } 27 | } 28 | 29 | .about-chrome-dev-summit .card__logo { 30 | @include typo-base(); 31 | font-weight: 300; 32 | font-size: 16px; 33 | color: darken($color-action, 32%); 34 | line-height: 1.45; 35 | padding: 40px 16px 10px 16px; 36 | } 37 | 38 | .about-chrome-dev-summit.card--expanded { 39 | .card__logo { 40 | top: 40px; 41 | } 42 | } 43 | 44 | .about-chrome-dev-summit .card__content-wrapper { 45 | border-top: 166px solid $color-action; 46 | padding: 16px; 47 | } 48 | 49 | @media (min-width: 475px) { 50 | 51 | .about-chrome-dev-summit .card__logo { 52 | font-size: 20px; 53 | padding-right: 90px; 54 | top: 10px; 55 | } 56 | } 57 | 58 | @media (min-width: 600px) { 59 | 60 | .about-chrome-dev-summit.card { 61 | clear: both; 62 | } 63 | 64 | .about-chrome-dev-summit .card__logo { 65 | font-size: 22px; 66 | padding-right: 70px; 67 | } 68 | } 69 | 70 | @media (min-width: 800px) { 71 | .about-chrome-dev-summit.card { 72 | width: calc(50% - 2px); 73 | margin: 0 0 0 4px; 74 | float: left; 75 | clear: none; 76 | } 77 | 78 | .about-chrome-dev-summit .card__logo { 79 | font-size: 22px; 80 | padding-right: 0; 81 | width: 400px; 82 | } 83 | 84 | .about-chrome-dev-summit.card--expanded .card__logo { 85 | width: 680px; 86 | } 87 | } 88 | 89 | @media (min-width: 900px) { 90 | .about-chrome-dev-summit.card--expanded .card__logo { 91 | left: calc(50% - 286px); 92 | width: 400px; 93 | } 94 | 95 | .about-chrome-dev-summit .card__content-wrapper { 96 | border-top: 166px solid darken($color-action, 5%); 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /src/static/styles/components/cards/_attendee-information.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .attendee-information.card { 18 | height: 240px; 19 | margin-bottom: 4px; 20 | } 21 | 22 | .attendee-information__join-wait-list { 23 | @include typo-button(); 24 | @include button(); 25 | color: $color-accent; 26 | background: #FFF; 27 | margin-top: 24px; 28 | } 29 | 30 | .attendee-information .ripple { 31 | background: $color-hotpink; 32 | } 33 | 34 | .attendee-information .card__container { 35 | background: $color-hotpink; 36 | 37 | &:after { 38 | background: $color-hotpink; 39 | } 40 | 41 | &:before { 42 | background: $color-hotpink; 43 | } 44 | } 45 | 46 | .attendee-information__address { 47 | margin: 16px 0; 48 | } 49 | 50 | .attendee-information div[itemprop="name"] { 51 | font-weight: bold; 52 | } 53 | 54 | .attendee-information .card__content-wrapper { 55 | padding: 0 16px 30px 16px; 56 | border-top: 136px solid $color-hotpink; 57 | 58 | h1 { 59 | @include typo-base(); 60 | font-size: 24px; 61 | font-weight: 400; 62 | line-height: 32px; 63 | color: $color-hotpink; 64 | margin-bottom: 16px; 65 | padding-top: 20px; 66 | } 67 | 68 | a { 69 | color: $color-hotpink; 70 | } 71 | } 72 | 73 | .attendee-information .card__logo { 74 | width: 191px; 75 | height: 191px; 76 | left: calc(50% - 96px); 77 | top: calc(50% - 85px); 78 | background: url(../images/icon-quad.png) top left no-repeat; 79 | background-size: contain; 80 | } 81 | 82 | .attendee-information.card--expanded { 83 | .card__logo { 84 | left: calc(50% - 61px); 85 | top: 66px; 86 | 87 | width: 120px; 88 | height: 120px; 89 | } 90 | 91 | .card__content-wrapper { 92 | top: 60px; 93 | } 94 | } 95 | 96 | @media (min-width: 600px) { 97 | .attendee-information.card { 98 | float: left; 99 | width: calc(50% - 2px); 100 | } 101 | } 102 | 103 | @media (min-width: 800px) { 104 | .attendee-information.card { 105 | float: left; 106 | width: calc(25% - 2px); 107 | } 108 | } 109 | 110 | @media (min-width: 900px) { 111 | 112 | .attendee-information .card__content-wrapper { 113 | border-top: 136px solid darken($color-hotpink, 16%); 114 | } 115 | } 116 | 117 | @media (min-width: 960px) { 118 | .attendee-information.card { 119 | width: calc(25% - 6px); 120 | margin-left: 4px; 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /src/static/styles/components/cards/_get-involved.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .get-involved .card__container { 18 | background: $color-yellow; 19 | 20 | &:after, &:before { 21 | background: $color-yellow; 22 | } 23 | } 24 | 25 | .get-involved .card__title { 26 | color: $color-orange; 27 | } 28 | 29 | .get-involved .card__logo { 30 | width: 125px; 31 | height: 125px; 32 | left: calc(50% - 44px); 33 | top: calc(50% - 30px); 34 | background: url(../images/icon-get-involved.svg) top left no-repeat; 35 | background-size: contain; 36 | } 37 | 38 | .get-involved.card--expanded { 39 | .card__logo { 40 | top: 85px; 41 | width: 125px; 42 | height: 125px; 43 | left: calc(50% - 54px); 44 | } 45 | } 46 | 47 | .get-involved .card__content-wrapper { 48 | padding: 16px 16px 30px 16px; 49 | border-top: 136px solid $color-yellow; 50 | 51 | h1 { 52 | @include typo-base(); 53 | font-size: 24px; 54 | font-weight: 400; 55 | line-height: 32px; 56 | color: $color-orange; 57 | margin-bottom: 16px; 58 | padding-top: 20px; 59 | } 60 | 61 | a { 62 | color: $color-orange; 63 | } 64 | } 65 | 66 | @media (min-width: 475px) { 67 | .get-involved .card__logo { 68 | width: 185px; 69 | height: 185px; 70 | left: calc(50% - 64px); 71 | top: calc(50% - 49px); 72 | } 73 | } 74 | 75 | @media (min-width: 600px) { 76 | .get-involved { 77 | float: right; 78 | margin-bottom: 4px; 79 | } 80 | 81 | .get-involved .card__container { 82 | margin: 0 0 0 2px; 83 | } 84 | 85 | .get-involved.card--expanded .card__container { 86 | margin: 0; 87 | } 88 | } 89 | 90 | @media (min-width: 800px) { 91 | .get-involved { 92 | float: left; 93 | width: 25%; 94 | } 95 | 96 | .get-involved .card__container { 97 | margin: 0 0 0 4px; 98 | } 99 | } 100 | 101 | @media (min-width: 900px) { 102 | 103 | .get-involved .card__content-wrapper { 104 | border-top: 136px solid $color-orange; 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /src/static/styles/components/cards/_schedule.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .schedule .card__container { 18 | background: $color-primary; 19 | 20 | &:after, &:before { 21 | background: $color-primary; 22 | } 23 | } 24 | 25 | .schedule .card__logo { 26 | width: 112px; 27 | height: 112px; 28 | left: calc(50% - 36px); 29 | top: calc(50% - 30px); 30 | background: url(../images/icon-schedule.svg) top left no-repeat; 31 | background-size: contain; 32 | } 33 | 34 | .schedule.card--expanded { 35 | .card__logo { 36 | width: 112px; 37 | height: 112px; 38 | left: calc(50% - 36px); 39 | top: 90px; 40 | opacity: 1; 41 | } 42 | 43 | .card__color-block { 44 | height: 208px; 45 | } 46 | } 47 | 48 | .schedule__overview-container { 49 | display: none; 50 | transition: opacity 0.33333s cubic-bezier(0,0,0.21,1) 0.2s; 51 | opacity: 1; 52 | pointer-events: none; 53 | } 54 | 55 | .schedule__overview-container canvas { 56 | pointer-events: none; 57 | } 58 | 59 | .schedule__overview-container--hidden { 60 | transition: opacity 0.13333s cubic-bezier(0,0,0.21,1); 61 | opacity: 0; 62 | } 63 | 64 | .schedule .card__content-wrapper { 65 | padding: 16px; 66 | border-top: 136px solid $color-primary; 67 | } 68 | 69 | .schedule__day { 70 | 71 | position: relative; 72 | margin-bottom: 40px; 73 | will-change: transform; 74 | 75 | & > h1 { 76 | @include typo-base(); 77 | font-size: 24px; 78 | font-weight: 400; 79 | line-height: 32px; 80 | color: $color-primary; 81 | margin-bottom: 16px; 82 | padding-top: 20px; 83 | } 84 | 85 | &:after { 86 | content: ''; 87 | width: 48px; 88 | height: 48px; 89 | background: url(../images/icon-schedule-gray.svg) center center no-repeat; 90 | background-size: contain; 91 | top: 86px; 92 | left: 10px; 93 | position: absolute; 94 | will-change: opacity; 95 | } 96 | } 97 | 98 | .schedule__block { 99 | padding: 16px 0; 100 | margin: 0 0 0 56px; 101 | border-bottom: 1px solid rgba(33,33,33,0.1); 102 | } 103 | 104 | .schedule__block-title { 105 | font-weight: 300; 106 | font-size: 16px; 107 | } 108 | 109 | .schedule__block-time { 110 | opacity: 0.56; 111 | } 112 | 113 | @media (min-width: 475px) { 114 | .schedule .card__logo { 115 | width: 142px; 116 | height: 142px; 117 | left: calc(50% - 46px); 118 | top: calc(50% - 40px); 119 | } 120 | } 121 | 122 | @media (min-width: 600px) { 123 | .schedule { 124 | float: none; 125 | width: 100%; 126 | height: 296px; 127 | margin-bottom: 4px; 128 | } 129 | 130 | .schedule .card__container { 131 | margin: 0 0 4px 0; 132 | } 133 | 134 | .schedule__overview-container, 135 | .schedule canvas { 136 | display: block; 137 | width: 100%; 138 | height: 100%; 139 | position: absolute; 140 | left: 0; 141 | top: 0; 142 | } 143 | 144 | .schedule__day-1, 145 | .schedule__day-2 { 146 | @include typo-base(); 147 | position: absolute; 148 | font-weight: 400; 149 | color: #FFF; 150 | font-size: 18px; 151 | line-height: 1; 152 | background: none; 153 | border: none; 154 | cursor: pointer; 155 | pointer-events: auto; 156 | } 157 | 158 | .schedule__day-1 { 159 | right: 106px; 160 | top: 16px; 161 | } 162 | 163 | .schedule__day-2 { 164 | right: 40px; 165 | top: 16px; 166 | } 167 | 168 | .schedule__day-1--inactive, 169 | .schedule__day-2--inactive { 170 | color: rgba(255, 255, 255, 0.4); 171 | } 172 | 173 | .schedule .card__logo { 174 | opacity: 0; 175 | } 176 | } 177 | 178 | @media (min-width: 900px) { 179 | 180 | .schedule .card__content-wrapper { 181 | top: 340px; 182 | border-top: 136px solid darken($color-primary, 8%); 183 | } 184 | } 185 | 186 | @media (min-width: 960px) { 187 | .schedule { 188 | margin: 0; 189 | } 190 | } 191 | -------------------------------------------------------------------------------- /src/static/styles/components/cards/_session-details.scss: -------------------------------------------------------------------------------- 1 | .loaded .session__header-image.keynote { 2 | background-image: url(../images/sessions/keynote.jpg); 3 | } 4 | 5 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 6 | .loaded .session__header-image.keynote { 7 | background-image: url(../images/sessions/keynote@2x.jpg); 8 | } 9 | } 10 | 11 | .loaded .session__header-image.wicked-fast { 12 | background-image: url(../images/sessions/wicked-fast.jpg); 13 | } 14 | 15 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 16 | .loaded .session__header-image.wicked-fast { 17 | background-image: url(../images/sessions/wicked-fast@2x.jpg); 18 | } 19 | } 20 | 21 | .loaded .session__header-image.asking-for-super-powers-chromes-permission-model { 22 | background-image: url(../images/sessions/asking-for-super-powers-chromes-permission-model.jpg); 23 | } 24 | 25 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 26 | .loaded .session__header-image.asking-for-super-powers-chromes-permission-model { 27 | background-image: url(../images/sessions/asking-for-super-powers-chromes-permission-model@2x.jpg); 28 | } 29 | } 30 | 31 | .loaded .session__header-image.material-design-deconstructed { 32 | background-image: url(../images/sessions/material-design-deconstructed.jpg); 33 | } 34 | 35 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 36 | .loaded .session__header-image.material-design-deconstructed { 37 | background-image: url(../images/sessions/material-design-deconstructed@2x.jpg); 38 | } 39 | } 40 | 41 | .loaded .session__header-image.the-applied-science-of-runtime-performance { 42 | background-image: url(../images/sessions/the-applied-science-of-runtime-performance.jpg); 43 | } 44 | 45 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 46 | .loaded .session__header-image.the-applied-science-of-runtime-performance { 47 | background-image: url(../images/sessions/the-applied-science-of-runtime-performance@2x.jpg); 48 | } 49 | } 50 | 51 | .loaded .session__header-image.making-web-apps-appy { 52 | background-image: url(../images/sessions/making-web-apps-appy.jpg); 53 | } 54 | 55 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 56 | .loaded .session__header-image.making-web-apps-appy { 57 | background-image: url(../images/sessions/making-web-apps-appy@2x.jpg); 58 | } 59 | } 60 | 61 | .loaded .session__header-image.tls-all-the-things-security-with-performance { 62 | background-image: url(../images/sessions/tls-all-the-things-security-with-performance.jpg); 63 | } 64 | 65 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 66 | .loaded .session__header-image.tls-all-the-things-security-with-performance { 67 | background-image: url(../images/sessions/tls-all-the-things-security-with-performance@2x.jpg); 68 | } 69 | } 70 | 71 | .loaded .session__header-image.easy-composition-and-reuse { 72 | background-image: url(../images/sessions/easy-composition-and-reuse.jpg); 73 | } 74 | 75 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 76 | .loaded .session__header-image.easy-composition-and-reuse { 77 | background-image: url(../images/sessions/easy-composition-and-reuse@2x.jpg); 78 | } 79 | } 80 | 81 | .loaded .session__header-image.polymer-state-of-the-union { 82 | background-image: url(../images/sessions/polymer-state-of-the-union.jpg); 83 | } 84 | 85 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 86 | .loaded .session__header-image.polymer-state-of-the-union { 87 | background-image: url(../images/sessions/polymer-state-of-the-union@2x.jpg); 88 | } 89 | } 90 | 91 | .loaded .session__header-image.lets-build-some-apps-with-polymer { 92 | background-image: url(../images/sessions/lets-build-some-apps-with-polymer.jpg); 93 | } 94 | 95 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 96 | .loaded .session__header-image.lets-build-some-apps-with-polymer { 97 | background-image: url(../images/sessions/lets-build-some-apps-with-polymer@2x.jpg); 98 | } 99 | } 100 | 101 | .loaded .session__header-image.fundamentals-of-mobile-web-development { 102 | background-image: url(../images/sessions/fundamentals-of-mobile-web-development.jpg); 103 | } 104 | 105 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 106 | .loaded .session__header-image.fundamentals-of-mobile-web-development { 107 | background-image: url(../images/sessions/fundamentals-of-mobile-web-development@2x.jpg); 108 | } 109 | } 110 | 111 | .loaded .session__header-image.closing-keynote { 112 | background-image: url(../images/sessions/closing-keynote.jpg); 113 | } 114 | 115 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 116 | .loaded .session__header-image.closing-keynote { 117 | background-image: url(../images/sessions/closing-keynote@2x.jpg); 118 | } 119 | } 120 | 121 | .loaded .sessions__session-detail--panel .session__header-image { 122 | background-image: url(../images/sessions/panel.png); 123 | } 124 | 125 | @media (min-resolution: 2.0dppx), (-webkit-min-device-pixel-ratio: 2), (min-width: 600px) { 126 | .loaded .sessions__session-detail--panel .session__header-image { 127 | background-image: url(../images/sessions/panel@2x.png); 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /src/static/styles/components/cards/_sessions.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2014 Google Inc. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | .sessions .card__container { 18 | background: $color-accent; 19 | 20 | &:after, &:before { 21 | background: $color-accent; 22 | } 23 | } 24 | 25 | .sessions__session-detail > .card__container { 26 | background: darken($color-accent, 16%); 27 | 28 | &:after, &:before { 29 | background: darken($color-accent, 16%); 30 | } 31 | } 32 | 33 | .sessions__session-detail--panel > .card__container { 34 | background: darken($color-darkgray, 5%); 35 | 36 | &:after, &:before { 37 | background: darken($color-accent, 5%); 38 | } 39 | } 40 | 41 | .session__fab{ 42 | cursor: pointer; 43 | @include shadow-z2(); 44 | overflow: hidden; 45 | text-indent: -2000px; 46 | width: 48px; 47 | height: 48px; 48 | border-radius: 24px; 49 | border: none; 50 | background: $color-action; 51 | position: absolute; 52 | right: 24px; 53 | top: 244px - 24px; 54 | outline: none; 55 | 56 | -webkit-transition: -webkit-transform 0.3333s cubic-bezier(0,0,0.21,1); 57 | transition: transform 0.3333s cubic-bezier(0,0,0.21,1); 58 | 59 | &.hidden { 60 | -webkit-transform: scale(0); 61 | transform: scale(0); 62 | } 63 | } 64 | 65 | .session__fab-inner { 66 | width: 48px; 67 | height: 48px; 68 | left: 0; 69 | top: 0; 70 | position: absolute; 71 | overflow: hidden; 72 | background: url(../images/icon-play.svg) center center no-repeat; 73 | -webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAChUlEQVRoBdWav84xQRSHj5FISBQSjWgV7kCtULsBhcoFqF2BmxEthQtwAwq1SiIhCM28++xr2G8/y/r32nMS2V125jy/md0zM2ekRMR6n5csm81Ko9GQer0u1WpVKpWKFAoFyefzfr2bzUZWq5XM53OZzWYymUxkPB7Lfr9/ya8rjICHPx6gbbfbdjAY2O12ax81ylCWOqjrGYZTmcfgc7mc7fV6dr1eP8oceT91USd1PyEknoB0Om07nY5dLBaRIK/+QN34wNcDQu4LKJfLdjqdvsoXuzy+8BlTxG0BtVrto60epYrewHcMEdECWq2W9SJFlI+Pf49vGO6IuC6AgkmxOyL+F0DXfbPlww0Hy43H6V8BvDyfjDRhuLjXMEW82BcBhK+/jDZx4d19sF0JsRcBxOCkG4yhl/pXAKNgEh+dcIPCGByxjafGt263K6VSyV0m9ggjrEHzJ1PvnNuEW+3d17C6CaDfA81m8zz1DSpL6jnTdJixs4CkwkZxOQEpbzFil8uleC9G1L2J/H6320mxWBTDSkobPC0KM+yGZaBWg92whtVqsBsW4FoNdkP2QKvBnjocDjaTyajUcDwef8cBlfQnaEPSSavBbsiYaTXYDek+rQa7IVep1WA3JFq1Guz6J3NeykJGo5G6ToAZdn89MBwO1QkIMutfUhJP+/2+ml6ANTh++XkWUhUa0yq0+jlRpDqxhRD1qUVEqE7uusdJdXrdiVC9wREU8c2NDnzf2Z0hAF2i0LVzHqdvhFd83tiVOUfOuwIQxYv9lxsfb91mdb1CiGWc+GRvUDc+ruzCBFs8fH77EXIC3JERW+VfDZwAdyQ/n4Q/e6ROQN7hefvm321+AJNtWIdxshmHAAAAAElFTkSuQmCC); 74 | 75 | border-radius: 24px; 76 | } 77 | 78 | .session__fab:focus { 79 | background: lighten($color-action, 3%); 80 | } 81 | 82 | .session__ask-a-question { 83 | @include typo-button(); 84 | @include button(); 85 | color: $color-accent; 86 | background: #FFF; 87 | margin: 16px 0 48px 0; 88 | } 89 | 90 | .session__ask-a-question .button__ripple { 91 | background: $color-darkgray; 92 | } 93 | 94 | .sessions > .card__container > .card__logo { 95 | width: 112px; 96 | height: 112px; 97 | left: calc(50% - 16px); 98 | top: calc(50% - 36px); 99 | background: url(../images/icon-sessions.svg) top left no-repeat; 100 | background-size: contain; 101 | } 102 | 103 | .sessions > .card__container > .card__content-wrapper { 104 | border-top: 136px solid $color-accent; 105 | } 106 | 107 | .sessions.card--expanded { 108 | 109 | & > .card__container { 110 | 111 | padding-bottom: 200px; 112 | 113 | & > .card__logo { 114 | width: 112px; 115 | height: 112px; 116 | left: calc(50% - 16px); 117 | top: 85px; 118 | } 119 | 120 | & > .card__content-wrapper { 121 | top: 60px; 122 | } 123 | 124 | & .sessions__day > .card { 125 | -webkit-backface-visibility: hidden; 126 | } 127 | } 128 | } 129 | 130 | .sessions__session-detail { 131 | 132 | min-height: 244px; 133 | margin-bottom: 4px; 134 | float: left; 135 | width: calc(50% - 2px); 136 | 137 | &:nth-of-type(2n) { 138 | margin-left: 4px; 139 | } 140 | 141 | & > .card__container { 142 | 143 | &:before { 144 | display: none; 145 | } 146 | 147 | & > .card__content-wrapper { 148 | border-top: none; 149 | min-height: 100vh; 150 | width: 100vw; 151 | top: 0; 152 | left: -50%; 153 | opacity: 0.4; 154 | } 155 | } 156 | 157 | &.sessions__session-detail--panel > .card__container > .card__content-wrapper { 158 | opacity: 0.2; 159 | } 160 | 161 | & .card__title { 162 | @include typo-base(); 163 | font-size: 15px; 164 | letter-spacing: 0.01em; 165 | font-weight: 400; 166 | opacity: 0.87; 167 | top: auto; 168 | bottom: 0; 169 | left: 0; 170 | width: 100%; 171 | padding: 16px; 172 | display: table; 173 | vertical-align: bottom; 174 | height: auto; 175 | line-height: 1.45; 176 | max-width: 185px; 177 | 178 | & > .card__subtitle { 179 | display: block; 180 | font-size: 13px; 181 | font-weight: 700; 182 | margin-top: 0.5em; 183 | opacity: 0.56; 184 | } 185 | } 186 | 187 | &:hover .card__title { 188 | opacity: 1; 189 | } 190 | 191 | & .session__header-image { 192 | width: 100%; 193 | height: 100%; 194 | background: $color-accent top center no-repeat; 195 | background-size: cover; 196 | min-height: 244px; 197 | max-height: 396px; 198 | position: relative; 199 | overflow: hidden; 200 | left: 50%; 201 | display: table; 202 | line-height: 0; 203 | 204 | -webkit-transform: translateX(-50%); 205 | transform: translateX(-50%); 206 | 207 | & .session__video-embed { 208 | min-height: 244px; 209 | max-height: 396px; 210 | } 211 | } 212 | } 213 | 214 | .sessions__session-detail.card--expanded { 215 | 216 | & .card__title { 217 | left: 0; 218 | bottom: 0; 219 | font-size: 15px; 220 | opacity: 0; 221 | height: auto; 222 | line-height: 1.45; 223 | } 224 | 225 | & .session__header-image { 226 | left: 0; 227 | 228 | -webkit-transform: none; 229 | transform: none; 230 | } 231 | 232 | & .session__header-image:after { 233 | opacity: 0; 234 | } 235 | 236 | & > .card__container { 237 | 238 | &.card__container--scrollable > .card__collapse-button { 239 | position: absolute; 240 | } 241 | 242 | & > .card__content-wrapper { 243 | left: 0; 244 | opacity: 1; 245 | } 246 | } 247 | 248 | &.card__no-fixed-header > .card__container { 249 | 250 | & > .card__title { 251 | display: none; 252 | } 253 | 254 | & > .card__content-wrapper { 255 | top: 0; 256 | } 257 | } 258 | } 259 | 260 | .sessions__day { 261 | 262 | position: relative; 263 | padding: 4px; 264 | padding-bottom: 40px; 265 | -webkit-backface-visibility: hidden; 266 | 267 | & > h1 { 268 | @include typo-base(); 269 | font-size: 24px; 270 | font-weight: 400; 271 | line-height: 32px; 272 | color: $color-accent; 273 | margin-bottom: 16px; 274 | padding-top: 20px; 275 | padding-left: 12px; 276 | -webkit-backface-visibility: hidden; 277 | } 278 | 279 | &:after { 280 | content: ''; 281 | display: table; 282 | clear: both; 283 | } 284 | 285 | &:last-of-type { 286 | padding-bottom: 0; 287 | } 288 | } 289 | 290 | .session__header-headline { 291 | background: $color-accent; 292 | padding: 16px 72px 16px 16px; 293 | } 294 | 295 | .session__header-name { 296 | @include typo-headline(); 297 | letter-spacing: 0.01em; 298 | font-size: 20px; 299 | color: #FFF; 300 | line-height: 1.3; 301 | margin-bottom: 8px; 302 | } 303 | 304 | .session__header-time-and-location { 305 | @include typo-subhead(); 306 | font-size: 16px; 307 | opacity: 0.87; 308 | letter-spacing: 0.01em; 309 | color: #FFF; 310 | } 311 | 312 | .session__abstract { 313 | padding: 16px 16px 140px 16px; 314 | font-size: 13px; 315 | } 316 | 317 | .session__speaker { 318 | margin: 1em 0; 319 | font-size: 13px; 320 | font-weight: bold; 321 | } 322 | 323 | @media (min-width: 475px) { 324 | 325 | .sessions { 326 | height: 210px; 327 | } 328 | 329 | .sessions > .card__container > .card__logo { 330 | width: 142px; 331 | height: 142px; 332 | left: calc(50% - 20px); 333 | top: calc(50% - 46px); 334 | } 335 | } 336 | 337 | @media (min-width: 520px) { 338 | .sessions__session-detail { 339 | 340 | width: calc(33.3333% - 3px); 341 | min-height: 294px; 342 | 343 | &:nth-of-type(2n) { 344 | margin-left: 0; 345 | } 346 | 347 | &:nth-of-type(3n + 2), 348 | &:nth-of-type(3n + 3) { 349 | margin-left: 4px; 350 | } 351 | 352 | &:nth-of-type(3n + 3) { 353 | width: calc(33.3333% - 2px); 354 | } 355 | 356 | & .session__header-image { 357 | min-height: 294px; 358 | 359 | .session__video-embed { 360 | height: 294px; 361 | } 362 | } 363 | 364 | & .card__container > .card__content-wrapper { 365 | left: -100%; 366 | } 367 | } 368 | 369 | .session__fab { 370 | top: 294px - 24px; 371 | } 372 | } 373 | 374 | @media (min-width: 600px) { 375 | .sessions { 376 | height: 484px 377 | } 378 | 379 | .sessions > .card__container > .card__content-wrapper { 380 | top: 581px; 381 | } 382 | 383 | .sessions > .card__container > .card__logo { 384 | width: 224px; 385 | height: 224px; 386 | left: calc(50% - 35px); 387 | top: calc(50% - 76px); 388 | } 389 | 390 | } 391 | 392 | @media (min-width: 900px) { 393 | 394 | .sessions > .card__container > .card__content-wrapper { 395 | border-top: 136px solid darken($color-accent, 16%); 396 | } 397 | 398 | } 399 | 400 | @media (min-width: 960px) { 401 | .sessions.card--right-half { 402 | width: calc(50% - 4px); 403 | margin-right: 4px; 404 | } 405 | } 406 | -------------------------------------------------------------------------------- /template.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 Google Inc. All rights reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License 14 | 15 | import os 16 | import jinja2 17 | import webapp2 18 | import random 19 | import re 20 | 21 | JINJA_ENVIRONMENT = jinja2.Environment( 22 | loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), 23 | extensions=['jinja2.ext.autoescape'], 24 | autoescape=True) 25 | 26 | class MainPage(webapp2.RequestHandler): 27 | 28 | def choose_template_from_url(self, url): 29 | 30 | path = re.compile('/devsummit/([^/]*)'); 31 | 32 | deeplink_path = path.match(url).group(1) 33 | deeplink_paths = [ 34 | 'schedule', 35 | 'sessions', 36 | 'attendee-information', 37 | 'get-involved', 38 | 'about-chrome-dev-summit'] 39 | 40 | deeplink_class = '' 41 | 42 | if (deeplink_path in deeplink_paths): 43 | deeplink_class = 'deeplink-' + deeplink_path 44 | 45 | return { 46 | 'path': 'dist/index.html', 47 | 'data': { 48 | 'deeplink_class': deeplink_class, 49 | 'livestreamimage': random.randrange(1,5,1), 50 | 'section': 'Home' 51 | } 52 | } 53 | 54 | def get(self, url): 55 | 56 | template_data = self.choose_template_from_url(url) 57 | template = JINJA_ENVIRONMENT.get_template(template_data['path']) 58 | self.response.write(template.render(template_data['data'])) 59 | 60 | app = webapp2.WSGIApplication([ 61 | ('(.*)', MainPage), 62 | ], debug=False) 63 | --------------------------------------------------------------------------------