├── .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 |
5 |
--------------------------------------------------------------------------------
/dist/static/images/icon-camera.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/dist/static/images/icon-get-involved.svg:
--------------------------------------------------------------------------------
1 |
2 |
23 |
--------------------------------------------------------------------------------
/dist/static/images/icon-play.svg:
--------------------------------------------------------------------------------
1 |
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 |
8 |
--------------------------------------------------------------------------------
/dist/static/images/icon-schedule.svg:
--------------------------------------------------------------------------------
1 |
2 |
24 |
--------------------------------------------------------------------------------
/dist/static/images/icon-sessions.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/dist/static/images/icon-star.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/dist/static/images/illustration-livestream.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/dist/static/images/illustration-questions.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 |
5 |
--------------------------------------------------------------------------------
/src/static/images/icon-camera.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/static/images/icon-get-involved.svg:
--------------------------------------------------------------------------------
1 |
2 |
23 |
--------------------------------------------------------------------------------
/src/static/images/icon-play.svg:
--------------------------------------------------------------------------------
1 |
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 |
8 |
--------------------------------------------------------------------------------
/src/static/images/icon-schedule.svg:
--------------------------------------------------------------------------------
1 |
2 |
24 |
--------------------------------------------------------------------------------
/src/static/images/icon-sessions.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/static/images/icon-star.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/static/images/illustration-livestream.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/static/images/illustration-questions.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------