mirror of
https://github.com/webslides/WebSlides.git
synced 2025-09-21 18:31:40 +02:00
Compare commits
158 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
5024cca7d9 | ||
|
2f64994409 | ||
|
53fbbfe76d | ||
|
8cc71eb804 | ||
|
34d8ca3cdb | ||
|
d0ec93d7e4 | ||
|
0db6e051de | ||
|
b0954cf0db | ||
|
a79cda7fab | ||
|
db1e3109d7 | ||
|
0ce47ea35d | ||
|
aaf1a21c8b | ||
|
3ff7053105 | ||
|
bc1639cd97 | ||
|
28c6c938c2 | ||
|
d8a5dedf83 | ||
|
de951d5186 | ||
|
54b03963da | ||
|
8e723b2854 | ||
|
81e749b77c | ||
|
510d59e4fd | ||
|
05379d1783 | ||
|
b78b791865 | ||
|
c3100f5d44 | ||
|
129fc0064c | ||
|
0e03674df7 | ||
|
54e83e3a20 | ||
|
ead4193525 | ||
|
728e665fc9 | ||
|
0832388ead | ||
|
2c4e84915a | ||
|
bbebd84792 | ||
|
c8603a1830 | ||
|
38a061d6d1 | ||
|
4cd60540c0 | ||
|
b65727b30c | ||
|
d318b3ad87 | ||
|
c6e954e791 | ||
|
5694444c5e | ||
|
99ddf85cc0 | ||
|
ae273d05fc | ||
|
33c409eb61 | ||
|
19b60c7487 | ||
|
159386b557 | ||
|
da783659d7 | ||
|
c8e2e02830 | ||
|
d2bb7fa254 | ||
|
2c96d440e3 | ||
|
d7767a7381 | ||
|
c4e5e8d335 | ||
|
956f1b041a | ||
|
419fdad5a3 | ||
|
3bd5502443 | ||
|
2e1b39d088 | ||
|
b03fa122bd | ||
|
2384a57254 | ||
|
14aaa18c57 | ||
|
e53ed53ab1 | ||
|
adfe0e98bc | ||
|
e12bb58d10 | ||
|
7c736dd6a0 | ||
|
0467c21ec7 | ||
|
daf4914b28 | ||
|
fc724175bb | ||
|
7376b636ae | ||
|
02823113f9 | ||
|
d82aa792e7 | ||
|
b9454480b0 | ||
|
4096c85f83 | ||
|
b2e6e032d4 | ||
|
f4d52e36e2 | ||
|
66d80f0b5d | ||
|
0a9bdd0b46 | ||
|
a9e8788024 | ||
|
ce9f1c7531 | ||
|
5f04b2e441 | ||
|
8bb245fced | ||
|
0c1a7ca55f | ||
|
f21b207fee | ||
|
4fb309c7c4 | ||
|
df9ff3d272 | ||
|
f8a0c4e937 | ||
|
35acefa8c7 | ||
|
373327b091 | ||
|
e88dab3b7a | ||
|
a5b36cc002 | ||
|
3b0ae3b97f | ||
|
1869cdc9e3 | ||
|
a4f232453c | ||
|
87786525f5 | ||
|
2db8b49ec8 | ||
|
84d8d7c80e | ||
|
cd9356796c | ||
|
6c5a31af85 | ||
|
47b714d60b | ||
|
94efbda6be | ||
|
6437695ef2 | ||
|
70feb2c7c4 | ||
|
c9ad5306ea | ||
|
2d86be6aac | ||
|
3d549d7b97 | ||
|
dff7b2b771 | ||
|
aa54207108 | ||
|
f155092537 | ||
|
5edd685cc5 | ||
|
e208bbb530 | ||
|
629066feeb | ||
|
4018ced8a3 | ||
|
a9370ee5ce | ||
|
aaa99ce584 | ||
|
9723aedc32 | ||
|
1cb0f7a15b | ||
|
b904c4da0f | ||
|
13bccdfa88 | ||
|
4467297545 | ||
|
81d6b27fe0 | ||
|
ab444db877 | ||
|
695a100558 | ||
|
d995f973f2 | ||
|
6d1cafd09a | ||
|
5c489e623c | ||
|
d81775d1c6 | ||
|
40fdcf7e86 | ||
|
56114d1464 | ||
|
e4a962ba9b | ||
|
f8340bd821 | ||
|
94f21e7232 | ||
|
d2e1ee0559 | ||
|
a5cfa93eaa | ||
|
a8031db1f2 | ||
|
a8734a57d3 | ||
|
8139c1aa79 | ||
|
46cfbf9e3a | ||
|
2a9279585c | ||
|
bfe1cdddc7 | ||
|
46a7ef4f80 | ||
|
886b01de7b | ||
|
85db8868a1 | ||
|
5d2a24962a | ||
|
8b0f11ea3b | ||
|
2d8fb02f48 | ||
|
504ad61dce | ||
|
2723006399 | ||
|
ebb390f3e4 | ||
|
07e0c42871 | ||
|
b833a94c0b | ||
|
c6c263b63e | ||
|
c58e108184 | ||
|
7f53462d46 | ||
|
8f7707b996 | ||
|
dc0386cb49 | ||
|
21f7ba37ca | ||
|
9bbbd7362b | ||
|
6818e4c99c | ||
|
23ad0338cb | ||
|
440e1bf37e | ||
|
f086aefe71 | ||
|
8ae6954e5f |
@@ -7,6 +7,7 @@ charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
max_line_length = 233
|
||||
end_of_line = lf
|
||||
|
||||
[*.json]
|
||||
indent_style = space
|
||||
|
132
.eslintrc
Normal file
132
.eslintrc
Normal file
@@ -0,0 +1,132 @@
|
||||
{
|
||||
"env": {
|
||||
"browser": true
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 6,
|
||||
"sourceType": "module"
|
||||
},
|
||||
"rules": {
|
||||
"no-cond-assign": 0,
|
||||
"no-console": 2,
|
||||
"no-constant-condition": 2,
|
||||
"no-control-regex": 2,
|
||||
"no-debugger": 2,
|
||||
"no-dupe-args": 2,
|
||||
"no-dupe-keys": 2,
|
||||
"no-duplicate-case": 2,
|
||||
"no-empty-character-class": 2,
|
||||
"no-empty": [2, {
|
||||
"allowEmptyCatch": true
|
||||
}],
|
||||
"no-ex-assign": 2,
|
||||
"no-extra-boolean-cast": 2,
|
||||
"no-extra-semi": 2,
|
||||
"no-func-assign": 2,
|
||||
"no-inner-declarations": 2,
|
||||
"no-invalid-regexp": 2,
|
||||
"no-irregular-whitespace": 2,
|
||||
"no-obj-calls": 2,
|
||||
"no-regex-spaces": 2,
|
||||
"no-sparse-arrays": 2,
|
||||
"no-unexpected-multiline": 2,
|
||||
"no-unreachable": 2,
|
||||
"no-unsafe-finally": 2,
|
||||
"use-isnan": 2,
|
||||
"valid-jsdoc": [2, {
|
||||
"requireParamDescription": false,
|
||||
"requireReturnDescription": false,
|
||||
"requireReturn": false,
|
||||
"prefer": {"returns": "return"}
|
||||
}],
|
||||
"valid-typeof": 2,
|
||||
"max-len": [1, 80, 2],
|
||||
|
||||
// Best Practices
|
||||
"eqeqeq": 0,
|
||||
"guard-for-in": 2,
|
||||
"no-alert": 0,
|
||||
"no-caller": 2,
|
||||
"no-case-declarations": 2,
|
||||
"no-empty-pattern": 2,
|
||||
"no-extend-native": 2,
|
||||
"no-extra-bind": 2,
|
||||
"no-fallthrough": 2,
|
||||
"no-invalid-this": 2,
|
||||
"no-multi-spaces": 2,
|
||||
"no-multi-str": 2,
|
||||
"no-new-wrappers": 2,
|
||||
"no-octal": 2,
|
||||
"no-redeclare": 2,
|
||||
"no-self-assign": 2,
|
||||
"no-throw-literal": 2,
|
||||
"no-unused-labels": 2,
|
||||
"no-with": 2,
|
||||
"no-delete-var": 2,
|
||||
"no-undef": 2,
|
||||
"no-unused-vars": [2, {"args": "none"}],
|
||||
// Stylistic Issues
|
||||
// ----------------------------------------------
|
||||
"array-bracket-spacing": [2, "never"],
|
||||
"brace-style": 2,
|
||||
"camelcase": [2, {"properties": "never"}],
|
||||
"comma-dangle": [2, "never"],
|
||||
"comma-spacing": 2,
|
||||
"comma-style": 2,
|
||||
"computed-property-spacing": 2,
|
||||
"eol-last": 2,
|
||||
"func-call-spacing": 2,
|
||||
"key-spacing": 2,
|
||||
"keyword-spacing": 0,
|
||||
"linebreak-style": 2,
|
||||
"new-cap": 2,
|
||||
"no-array-constructor": 2,
|
||||
"no-mixed-spaces-and-tabs": 2,
|
||||
"no-multiple-empty-lines": [2, {"max": 2}],
|
||||
"no-new-object": 2,
|
||||
"no-trailing-spaces": 2,
|
||||
"object-curly-spacing": 2,
|
||||
"one-var": [2, {
|
||||
"var": "never",
|
||||
"let": "never",
|
||||
"const": "never"
|
||||
}],
|
||||
"padded-blocks": [2, "never"],
|
||||
"quote-props": [2, "consistent"],
|
||||
"quotes": [2, "single", {"allowTemplateLiterals": true}],
|
||||
"require-jsdoc": [2, {
|
||||
"require": {
|
||||
"FunctionDeclaration": true,
|
||||
"MethodDefinition": true,
|
||||
"ClassDeclaration": true
|
||||
}
|
||||
}],
|
||||
"semi-spacing": 2,
|
||||
"semi": 2,
|
||||
"space-before-blocks": 2,
|
||||
"space-before-function-paren": [2, "never"],
|
||||
"spaced-comment": [2, "always"],
|
||||
|
||||
// ECMAScript 6
|
||||
// http://eslint.org/docs/rules/#ecmascript-6
|
||||
// ------------------------------------------
|
||||
"arrow-parens": [2, "as-needed"],
|
||||
"constructor-super": 2,
|
||||
"generator-star-spacing": [2, "after"],
|
||||
"no-const-assign": 0,
|
||||
"no-dupe-class-members": 0,
|
||||
"no-new-symbol": 2,
|
||||
"no-this-before-super": 2,
|
||||
"no-var": 2,
|
||||
"prefer-rest-params": 2,
|
||||
"prefer-spread": 2,
|
||||
"prefer-const": 2,
|
||||
"prefer-arrow-callback": 2,
|
||||
"prefer-template": 2,
|
||||
"require-yield": 2,
|
||||
"rest-spread-spacing": 2,
|
||||
"yield-star-spacing": [2, "after"]
|
||||
}
|
||||
}
|
||||
|
||||
|
76
CHANGELOG.md
76
CHANGELOG.md
@@ -1,16 +1,72 @@
|
||||
# 1.3.0 (2017-04-20)
|
||||
|
||||
## Misc
|
||||
|
||||
- 4 new demos: Longforms, Interviews, Netflix Culture, and Media (YouTube API, videos, images, maps...)
|
||||
- Deps updated.
|
||||
- Now using [eslint](http://eslint.org/) to enforce code style.
|
||||
- Adding a new badge so the release number is quickly seen.
|
||||
- [[#51](https://github.com/webslides/webslides/issues/51)] Autoslide is now a plugin.
|
||||
- Docs moved to [Wiki](https://github.com/webslides/WebSlides/wiki)!
|
||||
- Moved to org!
|
||||
- Demos: GitHub links updated.
|
||||
|
||||
## New features
|
||||
|
||||
- Videos
|
||||
- [[#72](https://github.com/webslides/webslides/issues/72)] Integration with YouTube's API.
|
||||
- [[#54](https://github.com/webslides/webslides/issues/54)] Added video and youtube plugins to allow autoplaying videos (and pausing) entering and leaving the slide.
|
||||
- [[#68](https://github.com/webslides/webslides/issues/68)] Responsive background videos (`<video>`).
|
||||
- [[#46](https://github.com/webslides/webslides/issues/46)] Added slide animation for mobile devices. `.slideInLeft` and `.slideInRight`.
|
||||
- Added longform elements.
|
||||
- Naming conventions:
|
||||
- Introducing `.text-emoji`.
|
||||
- Introducing `.text-quote`.
|
||||
- Introducing `.text-interview` = `dl.text-interview`, dt (name), dd (question/answer).
|
||||
- `.card` is now a `card: width: 100%`.
|
||||
- [[#51](https://github.com/webslides/webslides/issues/51)] Autoslide now pauses if a focusable element gains focus.
|
||||
- [[#56](https://github.com/webslides/webslides/issues/56)] Added option to disable looping.
|
||||
- [[#74](https://github.com/webslides/webslides/issues/74)] Added `ws-ready` to actually lock the scroll.
|
||||
- Fluid `.wrap` (`width: 90%`).
|
||||
- `.gallery li:nth-child(n+4)`: `auto-fill` removed. Now: equal width (useful for gallery layouts).
|
||||
- Added padding to `form[class*="bg-"]`.
|
||||
- A better CSS print: A4 landscape.
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Fixed issues with the grid.
|
||||
- [[#33](https://github.com/webslides/webslides/issues/33)] Fixed video issue.
|
||||
- [[#61](https://github.com/webslides/webslides/issues/61)] Fixed print issue which prevented to export the slides to PDF in an easy way.
|
||||
|
||||
|
||||
# 1.2.1 (2017-03-02)
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Scrollbar showing in Firefox
|
||||
|
||||
# 1.2.0 (2017-03-02)
|
||||
|
||||
## New Features
|
||||
|
||||
- [[#48](https://github.com/webslides/webslides/issues/48)] Allows to navigate with AvPag & RePag to allow presentation devices to work.
|
||||
- [[#49](https://github.com/webslides/webslides/issues/49)] Allowing to go to first and last slides by using home and end keys respectively.
|
||||
- [[#50](https://github.com/webslides/webslides/issues/50)] Using the keyboard on inputs and editable content won't trigger any events that might cause navigation.
|
||||
- [[#47](https://github.com/webslides/webslides/issues/47)] Allowing options to be configured. [Read More](/docs/technical.md#options).
|
||||
|
||||
# 1.1.0 (2017-02-28)
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Fixed a bug which caused Chrome on OSX to stutter a lot on vertical transitioning due to elastic scroll bounce.
|
||||
- [[#28](https://github.com/jlantunez/webslides/issues/28)] Fixed scroll on Firefox.
|
||||
- [[#38](https://github.com/jlantunez/webslides/issues/38)] Fixed a bug in Safari which lead to unexpected behaviour using any form of movements.
|
||||
- [[#10](https://github.com/jlantunez/webslides/issues/10)] Fixed animation flash on Safari.
|
||||
- [[#28](https://github.com/webslides/webslides/issues/28)] Fixed scroll on Firefox.
|
||||
- [[#38](https://github.com/webslides/webslides/issues/38)] Fixed a bug in Safari which lead to unexpected behaviour using any form of movements.
|
||||
- [[#10](https://github.com/webslides/webslides/issues/10)] Fixed animation flash on Safari.
|
||||
|
||||
## New Features
|
||||
|
||||
- [[#1](https://github.com/jlantunez/webslides/issues/1)] Adding option to click to go to the next slide. Read more [here](https://github.com/jlantunez/webslides/blob/master/docs/click-to-nav.md).
|
||||
- [[#1](https://github.com/jlantunez/webslides/issues/1)] Improved sliding with mouse scroll and touchpad. It's now possible to use scroll to move an horizontal presentation.
|
||||
- [[#1](https://github.com/webslides/webslides/issues/1)] Adding option to click to go to the next slide. Read more [here](https://github.com/webslides/webslides/blob/master/docs/click-to-nav.md).
|
||||
- [[#1](https://github.com/webslides/webslides/issues/1)] Improved sliding with mouse scroll and touchpad. It's now possible to use scroll to move an horizontal presentation.
|
||||
It's also possible to scroll horizontally on horizontal presentations to move forward/backwards the presentation.
|
||||
|
||||
## Regression
|
||||
@@ -20,19 +76,19 @@ It's also possible to scroll horizontally on horizontal presentations to move fo
|
||||
# 1.0.0 (2017-02-23)
|
||||
|
||||
This release is a special one since it sets up in the path of a better development environment. Although it's far from
|
||||
perfect, it's a solid beginning.
|
||||
perfect, it's a solid beginning.
|
||||
|
||||
All the code has been migrated from **jQuery** with ES5 to **vanilla JavaScript with ES2015 (or ES6) and is fully modular**.
|
||||
This means that WebSlides is a (base module)[src/js/modules/webslides.js] with a solid API (few public methods) and
|
||||
All the code has been migrated from **jQuery** with ES5 to **vanilla JavaScript with ES2015 (or ES6) and is fully modular**.
|
||||
This means that WebSlides is a (base module)[src/js/modules/webslides.js] with a solid API (few public methods) and
|
||||
it's extended by (plugins)[src/js/plugins]. This leads to more granularity and less code to dive through while fixing a
|
||||
bug.
|
||||
bug.
|
||||
|
||||
**The benefit from this approach is that now it's really easy to extend WebSlides** to achieve what you need. You can also
|
||||
overwrite current plugins. Say you don't like the current navigation with arrows and want to create a menu instead, you
|
||||
can just write that for yourself with your custom needs and register it as `nav` and it will overwrite our nav with
|
||||
your code.
|
||||
|
||||
We hope this leads to a better environment in which WebSlides can grow better.
|
||||
We hope this leads to a better environment in which WebSlides can grow better.
|
||||
|
||||
All the technical specs live now in [this document](docs/technical.md).
|
||||
|
||||
|
34
README.md
34
README.md
@@ -1,9 +1,11 @@
|
||||
# WebSlides = Good Karma
|
||||
# WebSlides = Create stories with Karma
|
||||
|
||||
[](http://opensource.org/licenses/MIT)
|
||||
[](https://twitter.com/webslides)
|
||||
[](https://github.com/webslides/webslides/releases/latest)
|
||||
[](https://www.paypal.me/jlantunez/8)
|
||||
[](https://twitter.com/webslides)
|
||||
|
||||
Finally, everything you need to make HTML presentations in a beautiful way. Just the essentials. You can create your own presentation instantly. A new release (at least) every 8th day of the month — [https://webslides.tv/demos](https://webslides.tv/demos).
|
||||
Finally, everything you need to make HTML presentations, landings, and longforms in a beautiful way. Just the essentials. A new release (at least) every 8th day of the month — [https://webslides.tv/demos](https://webslides.tv/demos).
|
||||
|
||||
* * *
|
||||
### Download
|
||||
@@ -11,16 +13,16 @@ Simply choose a demo and customize it in minutes. Latest version: [webslides.tv/
|
||||
* * *
|
||||
|
||||
|
||||
### Why WebSlides?
|
||||
Good karma and productivity. Just a basic knowledge of HTML and CSS is required. Designers, marketers, and journalists can now focus on the content.
|
||||
### Why WebSlides? Productivity
|
||||
This is about telling the story, and sharing it in a beautiful way. Just a basic knowledge of HTML and CSS is required. Designers, marketers, and journalists can now focus on the content.
|
||||
|
||||
### Features
|
||||
## Features
|
||||
|
||||
- Navigation (horizontal and vertical sliding): touchpad, keyboard shortcuts, and swipe.
|
||||
- Navigation (horizontal and vertical sliding): remote presenters, touchpad, keyboard shortcuts, and swipe.
|
||||
- Slide counter.
|
||||
- Permalinks: go to a specific slide.
|
||||
- Autoslide.
|
||||
- Click to nav. [Read more](docs/click-to-nav.md)!
|
||||
- Click to nav.
|
||||
- Simple CSS alignments. Put content wherever you want (vertical centering...)
|
||||
- 40+ components: background images/videos, quotes, cards, covers...
|
||||
- Flexible blocks with auto-fill and equal height.
|
||||
@@ -79,7 +81,6 @@ webslides/
|
||||
- Cards: `.card-50`, `.card-40`...
|
||||
- Flexible Blocks: `.flexblock.clients`, `.flexblock.metrics`...
|
||||
|
||||
|
||||
### Extensions
|
||||
|
||||
You can add:
|
||||
@@ -87,19 +88,18 @@ You can add:
|
||||
- [Unsplash](https://unsplash.com) photos
|
||||
- [animate.css](https://daneden.github.io/animate.css)
|
||||
- [particles.js](https://github.com/VincentGarreau/particles.js)
|
||||
- [Animate on scroll](http://michalsnik.github.io/aos/) (Useful for longform articles)
|
||||
- [pt](http://williamngan.github.io/pt/)
|
||||
|
||||
### License
|
||||
|
||||
WebSlides is licensed under the [MIT License](https://opensource.org/licenses/MIT).
|
||||
Use it to make something cool.
|
||||
|
||||
### Dive In!
|
||||
|
||||
Please check out:
|
||||
|
||||
- Want to get techie? Read [our technical docs](docs/technical.md)
|
||||
- Do not miss [our demos](https://webslides.tv/)
|
||||
- Do not miss [our demos](https://webslides.tv/).
|
||||
- Want to get techie? Read [our wiki](wiki):
|
||||
- [FAQ](https://github.com/webslides/WebSlides/wiki)
|
||||
- [Core API](https://github.com/webslides/WebSlides/wiki/Core-API)
|
||||
- [Plugin Docs](https://github.com/webslides/WebSlides/wiki/Plugin-docs)
|
||||
- [Plugin Development](https://github.com/webslides/WebSlides/wiki/Plugin-development)
|
||||
|
||||
### Credits
|
||||
|
||||
|
@@ -9,10 +9,9 @@
|
||||
|
||||
you're a curious person and a fast learner ;)
|
||||
Let's make something beautiful together. Contribute on Github:
|
||||
https://github.com/jlantunez/webslides
|
||||
https://github.com/webslides/webslides
|
||||
|
||||
Thanks,
|
||||
@jlantunez.
|
||||
Thanks!
|
||||
-->
|
||||
|
||||
<!-- SEO -->
|
||||
@@ -71,7 +70,7 @@
|
||||
<p class="logo"><a href="../index.html" title="WebSlides">WebSlides</a></p>
|
||||
<ul>
|
||||
<li class="github">
|
||||
<a rel="external" href="https://github.com/jlantunez/webslides" title="Github">
|
||||
<a rel="external" href="https://github.com/webslides/webslides" title="Github">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
@@ -86,7 +85,7 @@
|
||||
<em>@WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/jlantunez" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>jlantunez</em></a></li> -->
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/webslides" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>webslides</em></a></li> -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
@@ -97,18 +96,18 @@
|
||||
<!-- Quick Guide
|
||||
- Each parent <section> in the <article id="webslides"> element is an individual slide.
|
||||
- Vertical sliding = <article id="webslides" class="vertical">
|
||||
- <div class="wrap"> = container 1200px
|
||||
- <div class="wrap"> = container 90% / <div class="wrap size-50"> = 45%;
|
||||
-->
|
||||
|
||||
<section class="bg-black-blue aligncenter">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/6njoEbtarec/')"></span>
|
||||
<!--.wrap = container 1200px with fadein animation -->
|
||||
<!--.wrap = container (width: 90%) with fadein animation -->
|
||||
<div class="wrap">
|
||||
<p class="text-subtitle">WebSlides Tutorial</p>
|
||||
<h1 class="text-landing">Classes</h1>
|
||||
<p class="text-symbols">* * * </p>
|
||||
<p>
|
||||
<a class="button ghost" href="https://github.com/jlantunez/webslides" title="Download WebSlides">
|
||||
<a class="button ghost" href="https://github.com/webslides/webslides" title="Download WebSlides">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
@@ -119,7 +118,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="aligncenter">
|
||||
<!--.wrap = container 1200px with fadein animation -->
|
||||
<!--.wrap = container (width: 90%) with fadein animation -->
|
||||
<div class="wrap">
|
||||
<h2><strong>WebSlides Classes</strong></h2>
|
||||
<p class="text-intro">Friendly naming conventions.</p>
|
||||
@@ -226,7 +225,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="grid vertical-align">
|
||||
<div class="column">
|
||||
@@ -244,7 +243,7 @@
|
||||
<span class="code-comment"><!-- Slide 2 --></span>
|
||||
<section class="bg-primary">
|
||||
<div class="wrap">
|
||||
<h2>.wrap = container 1200px with fadein</h2>
|
||||
<h2>.wrap = container (width: 90%) with fadein</h2>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
@@ -405,7 +404,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="aligncenter">
|
||||
<!--.wrap = container 1200px with fadein animation -->
|
||||
<!--.wrap = container (width: 90%) with fadein animation -->
|
||||
<div class="wrap">
|
||||
<h2>.grid + .column</h2>
|
||||
<p class="text-intro">Basic Grid (auto-fill and equal height).</p>
|
||||
@@ -417,7 +416,7 @@
|
||||
</div>
|
||||
<!-- end .column -->
|
||||
<div class="column">
|
||||
<figure><img src="../static/images/setup.png" alt="WebSlides Files"></figure>
|
||||
<figure><img class="aligncenter" src="../static/images/setup.png" alt="WebSlides Files"></figure>
|
||||
</div>
|
||||
<!-- end .column -->
|
||||
<div class="column">
|
||||
@@ -432,7 +431,7 @@
|
||||
<!-- end .wrap -->
|
||||
</section>
|
||||
<section class="aligncenter">
|
||||
<!--.wrap = container 1200px with fadein animation -->
|
||||
<!--.wrap = container (width: 90%) with fadein animation -->
|
||||
<div class="wrap">
|
||||
<h2>.grid.<strong>vertical-align</strong> + .column</h2>
|
||||
<p class="text-intro">Basic Grid (auto-fill and equal height).</p>
|
||||
@@ -444,7 +443,7 @@
|
||||
</div>
|
||||
<!-- end .column -->
|
||||
<div class="column">
|
||||
<figure><img src="../static/images/setup.png" alt="WebSlides Files"></figure>
|
||||
<figure><img class="aligncenter" src="../static/images/setup.png" alt="WebSlides Files"></figure>
|
||||
</div>
|
||||
<!-- end .column -->
|
||||
<div class="column">
|
||||
@@ -518,43 +517,6 @@
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<div class="card-50 bg-white">
|
||||
<figure>
|
||||
<img src="https://source.unsplash.com/POYDluw0tyw/800x600" alt="Big Ben, London">
|
||||
<figcaption>
|
||||
<a href="https://unsplash.com/@dibert" title="David Dibert">
|
||||
<svg class="fa-camera">
|
||||
<use xlink:href="#fa-camera"></use>
|
||||
</svg>
|
||||
David Dibert (Unsplash)
|
||||
</a>
|
||||
</figcaption>
|
||||
</figure>
|
||||
<!-- end figure-->
|
||||
<div class="flex-content">
|
||||
<h2>
|
||||
Discover London
|
||||
</h2>
|
||||
<p>.card-50.bg-white</p>
|
||||
<ul class="description">
|
||||
<li>
|
||||
<strong title="Density">Density:</strong> 5,518/km<sup>2</sup>
|
||||
</li>
|
||||
<li><strong title="Population">Population:</strong> 8,673,713</li>
|
||||
<li><strong title="Website">Website:</strong> <a href="http://www.visitlondon.com/">visitlondon.com</a></li>
|
||||
</ul>
|
||||
<p>
|
||||
There are many reasons to visit London. London has a diverse range of people and cultures, and more than 300 languages are spoken in the region.
|
||||
</p>
|
||||
</div>
|
||||
<!-- end .flex-content-->
|
||||
</div>
|
||||
<!-- end .card-50-->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<div class="card-50 bg-white">
|
||||
@@ -590,6 +552,43 @@
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<div class="card-50 bg-white">
|
||||
<figure>
|
||||
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d1241.8442158987712!2d-0.1268272!3d51.5005848!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x487604c38c8cd1d9%3A0xb78f2474b9a45aa9!2sBig+Ben!5e0!3m2!1ses!2ses!4v1491497625579" width="800" height="600" allowfullscreen></iframe>
|
||||
<figcaption>
|
||||
<a href="https://maps.google.com" title="Google Maps">
|
||||
<svg class="fa-maps">
|
||||
<use xlink:href="#fa-maps"></use>
|
||||
</svg>
|
||||
Google Maps
|
||||
</a>
|
||||
</figcaption>
|
||||
</figure>
|
||||
<!-- end figure-->
|
||||
<div class="flex-content">
|
||||
<h2>
|
||||
Discover London
|
||||
</h2>
|
||||
<p>.card-50.bg-white</p>
|
||||
<ul class="description">
|
||||
<li>
|
||||
<strong title="Density">Density:</strong> 5,518/km<sup>2</sup>
|
||||
</li>
|
||||
<li><strong title="Population">Population:</strong> 8,673,713</li>
|
||||
<li><strong title="Website">Website:</strong> <a href="http://www.visitlondon.com/">visitlondon.com</a></li>
|
||||
</ul>
|
||||
<p>
|
||||
There are many reasons to visit London. London has a diverse range of people and cultures, and more than 300 languages are spoken in the region.
|
||||
</p>
|
||||
</div>
|
||||
<!-- end .flex-content-->
|
||||
</div>
|
||||
<!-- end .card-50-->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="fullscreen">
|
||||
<div class="card-50">
|
||||
<figure>
|
||||
@@ -711,7 +710,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-gradient-h aligncenter">
|
||||
<!--.wrap = container 1200px with fadein animation -->
|
||||
<!--.wrap = container (width: 90%) with fadein animation -->
|
||||
<div class="wrap">
|
||||
<h1>Horizontal Gradient</h1>
|
||||
<p><code>section.bg-gradient-h</code></p>
|
||||
@@ -726,7 +725,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-gradient-v aligncenter">
|
||||
<!--.wrap = container 1200px with fadein animation -->
|
||||
<!--.wrap = container (width: 90%) with fadein animation -->
|
||||
<div class="wrap">
|
||||
<h1>Vertical Gradient</h1>
|
||||
<p><code>section.bg-gradient-v</code></p>
|
||||
@@ -768,10 +767,10 @@
|
||||
<div class="content-left">
|
||||
<h3>Fullscreen Background Images</h3>
|
||||
<pre><section>
|
||||
<span class="background" style="background-image:url('https://source.unsplash.com/UJbHNoVPZW0/')"></span>
|
||||
<section>
|
||||
<h1>Slide</h1>
|
||||
</section>
|
||||
<span <strong>class="background"</strong> style="background-image:url('https://source.unsplash.com/UJbHNoVPZW0/')"></span>
|
||||
<div class="wrap">
|
||||
<h1>Slide</h1>
|
||||
</div>
|
||||
</section></pre>
|
||||
<p>How to <a href="https://source.unsplash.com/">embed Unsplash photos</a>?</p>
|
||||
</div>
|
||||
@@ -856,7 +855,7 @@
|
||||
</section>
|
||||
<section class="aligncenter bg-black">
|
||||
<span class="background anim" style="background-image:url('https://source.unsplash.com/n9WPPWiPPJw/')"></span>
|
||||
<!--.wrap = container 1200px with fadein animation -->
|
||||
<!--.wrap = container (width: 90%) with fadein animation -->
|
||||
<div class="wrap">
|
||||
<h2>.background.anim</h2>
|
||||
</div>
|
||||
@@ -1545,7 +1544,7 @@
|
||||
<!-- .end card-50 -->
|
||||
</section>
|
||||
<section class="bg-gradient-gray">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50">
|
||||
<h3>.flexblock.reasons</h3>
|
||||
<hr>
|
||||
@@ -1723,7 +1722,7 @@
|
||||
<p><code>.text-data</code></p>
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px with fadein animation -->
|
||||
<!--.wrap = container (width: 90%) with fadein animation -->
|
||||
<div class="wrap">
|
||||
<p class="text-context">Why WebSlides? .text-context</p>
|
||||
<h2>WebSlides is incredibly easy and versatile. The easiest way to make HTML presentations.</h2>
|
||||
@@ -1828,7 +1827,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="aligncenter text-serif">
|
||||
<!--.wrap = container 1200px with fadein animation -->
|
||||
<!--.wrap = container (width: 90%) with fadein animation -->
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h2>WebSlides is incredibly easy and versatile.</h2>
|
||||
@@ -1905,12 +1904,12 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="aligncenter">
|
||||
<!-- .wrap = container 1200px -->
|
||||
<!-- .wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2><strong>Start in seconds</strong> </h2>
|
||||
<p class="text-intro">Create your own presentation instantly. <br>120+ prebuilt slides ready to use.</p>
|
||||
<p>
|
||||
<a href="https://github.com/jlantunez/webslides/archive/master.zip" class="button" title="Download WebSlides">
|
||||
<a href="https://webslides.tv/webslides-latest.zip" class="button" title="Download WebSlides">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg>
|
||||
@@ -1933,11 +1932,13 @@
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<script src="../static/js/svg-icons.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<script>
|
||||
window.ws = new WebSlides();
|
||||
</script>
|
||||
|
||||
<!-- OPTIONAL - svg-icons.js (fontastic.me - Font Awesome as svg icons) -->
|
||||
<script defer src="../static/js/svg-icons.js"></script>
|
||||
|
||||
|
@@ -9,10 +9,9 @@
|
||||
|
||||
you're a curious person and a fast learner ;)
|
||||
Let's make something beautiful together. Contribute on Github:
|
||||
https://github.com/jlantunez/webslides
|
||||
https://github.com/webslides/webslides
|
||||
|
||||
Thanks,
|
||||
@jlantunez.
|
||||
Thanks!
|
||||
-->
|
||||
|
||||
<!-- SEO -->
|
||||
@@ -71,7 +70,7 @@
|
||||
<p class="logo"><a href="../index.html" title="WebSlides">WebSlides</a></p>
|
||||
<ul>
|
||||
<li class="github">
|
||||
<a rel="external" href="https://github.com/jlantunez/webslides" title="Github">
|
||||
<a rel="external" href="https://github.com/webslides/webslides" title="Github">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
@@ -86,7 +85,7 @@
|
||||
<em>@WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/jlantunez" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>jlantunez</em></a></li> -->
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/webslides" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>webslides</em></a></li> -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
@@ -97,18 +96,18 @@
|
||||
<!-- Quick Guide
|
||||
- Each parent <section> in the <article id="webslides"> element is an individual slide.
|
||||
- Vertical sliding = <article id="webslides" class="vertical">
|
||||
- <div class="wrap"> = container 1200px
|
||||
- <div class="wrap"> = container 90% / <div class="wrap size-50"> = 45%;
|
||||
-->
|
||||
|
||||
<section class="bg-black-blue aligncenter">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/6njoEbtarec/')"></span>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<p class="text-subtitle">WebSlides Tutorial</p>
|
||||
<h1 class="text-landing">Components</h1>
|
||||
<p class="text-symbols">* * *</p>
|
||||
<p>
|
||||
<a class="button ghost" href="https://github.com/jlantunez/webslides" title="Download WebSlides">
|
||||
<a class="button ghost" href="https://github.com/webslides/webslides" title="Download WebSlides">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
@@ -186,12 +185,12 @@
|
||||
<li><a target="_blank" href="#slide=101">Background Videos</a></li>
|
||||
<li><a target="_blank" href="#slide=103">Embedding videos, charts...</a></li>
|
||||
<li><a target="_blank" href="#slide=108">Maps</a></li>
|
||||
<li><a target="_blank" href="#slide=109">500+ SVG Icons</a></li>
|
||||
<li><a target="_blank" href="#slide=110">Logos</a></li>
|
||||
<li><a target="_blank" href="#slide=111">Avatars</a></li>
|
||||
<li><a target="_blank" href="#slide=112">Devices</a></li>
|
||||
<li><a target="_blank" href="#slide=113">Screenshots</a></li>
|
||||
<li><a target="_blank" href="#slide=114">CSS Animations</a></li>
|
||||
<li><a target="_blank" href="#slide=110">500+ SVG Icons</a></li>
|
||||
<li><a target="_blank" href="#slide=111">Logos</a></li>
|
||||
<li><a target="_blank" href="#slide=112">Avatars</a></li>
|
||||
<li><a target="_blank" href="#slide=113">Devices</a></li>
|
||||
<li><a target="_blank" href="#slide=114">Screenshots</a></li>
|
||||
<li><a target="_blank" href="#slide=115">CSS Animations</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</li>
|
||||
@@ -200,7 +199,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="grid vertical-align">
|
||||
<div class="column">
|
||||
@@ -218,7 +217,7 @@
|
||||
<span class="code-comment"><!-- Slide 2 --></span>
|
||||
<section class="bg-primary">
|
||||
<div class="wrap">
|
||||
<h2>.wrap = container 1200px with fadein</h2>
|
||||
<h2>.wrap = container (width: 90%) with fadein</h2>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
@@ -319,11 +318,6 @@
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<h1>Navigation</h1>
|
||||
<ul class="tabs">
|
||||
<li class="tab current" data-tab="tab-1">ul.tabs</li>
|
||||
<li class="tab" data-tab="tab-2">columns</li>
|
||||
</ul>
|
||||
<div id="tab-1" class="tab-content current">
|
||||
<nav role="navigation">
|
||||
<ul>
|
||||
<li><a href="">About</a></li>
|
||||
@@ -372,9 +366,7 @@
|
||||
</ul>
|
||||
</nav>
|
||||
<p>nav.navbar</p>
|
||||
</div>
|
||||
<!-- end .tab-content -->
|
||||
<div id="tab-2" class="tab-content">
|
||||
<hr>
|
||||
<div class="grid">
|
||||
<div class="column">
|
||||
<h3>Company</h3>
|
||||
@@ -433,8 +425,6 @@
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .column -->
|
||||
</div>
|
||||
<!-- .end .grid -->
|
||||
</div>
|
||||
<!-- end .tab-content -->
|
||||
</div>
|
||||
@@ -1697,7 +1687,7 @@
|
||||
<p class="text-intro">Create a simple web presence easily. <br> Clean markup and lovely CSS.
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://github.com/jlantunez/webslides" class="button">
|
||||
<a href="https://github.com/webslides/webslides" class="button">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
@@ -1728,18 +1718,18 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="cta-cover">
|
||||
<h1><strong>HTML Presentations</strong> Made Easy</h1>
|
||||
<p class="alignright">
|
||||
<a class="button" href="https://github.com/jlantunez/webslides/archive/master.zip" title="Download WebSlides">
|
||||
<a class="button" href="https://webslides.tv/webslides-latest.zip" title="Download WebSlides">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg>
|
||||
WebSlides
|
||||
</a>
|
||||
<span class="try"><a href="../demos/index.html" title="WebSlides Demos">Demos</a> · <a href="https://github.com/jlantunez/webslides" title="Github">Github</a></span>
|
||||
<span class="try"><a href="../demos/index.html" title="WebSlides Demos">Demos</a> · <a href="https://github.com/webslides/webslides" title="Github">Github</a></span>
|
||||
</p>
|
||||
</div>
|
||||
<ul class="flexblock features">
|
||||
@@ -1801,7 +1791,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="aligncenter">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div id="tab-3" class="tab-content current">
|
||||
<h1 class="text-landing">Tell a Story</h1>
|
||||
@@ -1948,7 +1938,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-apple aligncenter">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2 class="text-data">$56 Billion</h2>
|
||||
<h3>Revenue in Q3 2017</h3>
|
||||
@@ -2015,7 +2005,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h2>WebSlides was made to inspire people.</h2>
|
||||
@@ -2152,7 +2142,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h2>iPhone 7</h2>
|
||||
@@ -2432,7 +2422,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<!-- alignment [class*="content-"] = container max-width:50% = 600px -->
|
||||
<div class="content-center">
|
||||
@@ -2446,9 +2436,9 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-black-blue">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<blockquote class="wall">
|
||||
<blockquote class="text-quote">
|
||||
<p>Leadership is not bullying and leadership is not aggression. Leadership is the expectation that you can use your voice for good.</p>
|
||||
<p><cite><a href="https://en.wikipedia.org/wiki/Sheryl_Sandberg">Sheryl Sandberg</a>, COO of Facebook.</cite></p>
|
||||
</blockquote>
|
||||
@@ -2456,9 +2446,9 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-primary">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50">
|
||||
<blockquote class="wall">
|
||||
<blockquote class="text-quote">
|
||||
<p>Finally, everything you need to make HTML presentations in a simple way.</p>
|
||||
<p><cite><a href="https://twitter.com/jlantunez">@jlantunez</a></cite></p>
|
||||
</blockquote>
|
||||
@@ -2544,7 +2534,7 @@
|
||||
</section>
|
||||
<section class="bg-black">
|
||||
<span class="background" style="background-image:url('https://source.unsplash.com/p3UCTiZIU6M/')"></span>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-70 aligncenter">
|
||||
<h2>Planning a vacation?</h2>
|
||||
<p class="text-intro">Hidden attractions and unusual things to do.</p>
|
||||
@@ -2559,7 +2549,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-green">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="grid vertical-align">
|
||||
<div class="column">
|
||||
@@ -2633,7 +2623,7 @@
|
||||
</section>
|
||||
<section class="bg-primary">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/RkBTPqPEGDo/')"></span>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-30">
|
||||
<p><a href="#" title="Microsoft"><img class="whitelogo aligncenter" src="../static/images/logos/microsoft.svg" alt="Microsoft"></a></p>
|
||||
<form action="/" method="post">
|
||||
@@ -2673,10 +2663,10 @@
|
||||
</h3>
|
||||
<p class="text-intro"><a href="https://source.unsplash.com/">How to embed Unsplash photos? →</a></p>
|
||||
<pre><section>
|
||||
<span class="background" style="background-image:url('https://source.unsplash.com/LcDPAqX8dt8/')"></span>
|
||||
<div class="wrap">
|
||||
<h1>Slide</h1>
|
||||
</div>
|
||||
<span class="background" style="background-image:url('https://source.unsplash.com/LcDPAqX8dt8/')"></span>
|
||||
<div class="wrap">
|
||||
<h1>Slide</h1>
|
||||
</div>
|
||||
</section></pre>
|
||||
<p>
|
||||
<svg class="fa-info">
|
||||
@@ -2692,11 +2682,11 @@
|
||||
<div class="wrap size-50">
|
||||
<h1 class="text-landing text-shadow">Opacity</h1>
|
||||
<p><code>[class*="bg-"] > .background.light</code></p>
|
||||
<pre><section class="bg-black">
|
||||
<span class="background light" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso/')"></span>
|
||||
<div class="wrap">
|
||||
<h1>Slide</h1>
|
||||
</div>
|
||||
<pre><section>
|
||||
<span class="background light" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso/')"></span>
|
||||
<div class="wrap">
|
||||
<h1>Slide</h1>
|
||||
</div>
|
||||
</section></pre>
|
||||
</div>
|
||||
</section>
|
||||
@@ -2705,11 +2695,11 @@
|
||||
<div class="wrap size-50">
|
||||
<h1 class="text-landing text-shadow">Opacity</h1>
|
||||
<p><code>[class*="bg-"] > .background.dark</code></p>
|
||||
<pre><section class="bg-black">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso/')"></span>
|
||||
<div class="wrap">
|
||||
<h1>Slide</h1>
|
||||
</div>
|
||||
<pre><section>
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso/')"></span>
|
||||
<div class="wrap">
|
||||
<h1>Slide</h1>
|
||||
</div>
|
||||
</section></pre>
|
||||
</div>
|
||||
</section>
|
||||
@@ -2778,7 +2768,7 @@
|
||||
</section>
|
||||
<section class="aligncenter bg-black">
|
||||
<span class="background anim" style="background-image:url('https://source.unsplash.com/n9WPPWiPPJw/')"></span>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2>.background.anim</h2>
|
||||
</div>
|
||||
@@ -2786,26 +2776,36 @@
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-60">
|
||||
<h3>Background Videos</h3>
|
||||
<pre><video class="background-video" autoplay muted loop poster="image.jpg">
|
||||
<source src="video.mp4" type="video/mp4">
|
||||
</video></pre>
|
||||
<p><code>.background-video</code></p>
|
||||
<h3>Background videos</h3>
|
||||
<pre><strong><section class="fullscreen"></strong>
|
||||
<div class="embed">
|
||||
<video autoplay loop poster="image.jpg">
|
||||
<source src="video.mp4" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
<strong></section></strong>
|
||||
</pre>
|
||||
<p>.fullscreen > .embed (responsive) > video</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-blue aligncenter">
|
||||
<video class="background-video dark" autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<section class="fullscreen bg-blue aligncenter">
|
||||
<div class="embed dark">
|
||||
<video autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<source src="https://webslides.tv/static/videos/peggy.mp4" type="video/mp4">
|
||||
</video>
|
||||
<div class="wrap">
|
||||
<h2><strong>Be Awesome</strong></h2>
|
||||
<p>Overlay: <code>section.bg-blue > .background-video.dark</code> or .light</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
<!-- .end .embed -->
|
||||
<div class="wrap">
|
||||
<h2><strong>Muted</strong></h2>
|
||||
<p>Overlay: <code>section.fullscreen.bg-blue > embed.dark</code> or .light</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-black aligncenter">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/MDGpwpMY2Ws/')"></span>
|
||||
<!-- background with a frame frame -->
|
||||
<span class="background frame"></span>
|
||||
<div class="wrap">
|
||||
<h2>Embedding Media</h2>
|
||||
<p>Videos, charts, maps...</p>
|
||||
@@ -2815,12 +2815,13 @@
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h3>Responsive Videos</h3>
|
||||
<h3><a href="https://webslides.tv/demos/media#slide=2">YouTube API</a></h3>
|
||||
<p>Embed videos with loop, autoplay, and muted attributes.</p>
|
||||
<pre><div class="embed">
|
||||
<iframe src="https://www.youtube.com/embed/XjJQBjWYDTs">
|
||||
</iframe>
|
||||
</div></pre>
|
||||
<p><code>.embed</code></p>
|
||||
<p><code>.embed</code> (responsive)</p>
|
||||
</div>
|
||||
<!-- end .content-left -->
|
||||
<div class="content-left">
|
||||
@@ -2838,7 +2839,7 @@
|
||||
<div class="wrap size-60">
|
||||
<!-- Responsive video/iframe... Add <div class="embed"> -->
|
||||
<div class="embed">
|
||||
<iframe width="800" height="450" src="https://www.youtube.com/embed/_m67JbGjWnc?list=PL27Ptt5XwkS39IrY8SeNaELghs_NLjMEs" allowfullscreen></iframe>
|
||||
<div data-youtube data-youtube-id="vXeF6Uot8pk" data-autoplay></div>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
</div>
|
||||
@@ -2874,6 +2875,43 @@
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<div class="card-50 bg-white">
|
||||
<figure>
|
||||
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3170.254536199183!2d-5.994303837186783!3d37.38381233311839!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xbaa976bfaec1fe87!2sReal+Alc%C3%A1zar+de+Sevilla!5e0!3m2!1ses!2ses!4v1489408674667" width="800" height="600" allowfullscreen></iframe>
|
||||
<figcaption>
|
||||
<a href="https://maps.google.com" title="Google Maps">
|
||||
<svg class="fa-map">
|
||||
<use xlink:href="#fa-map"></use>
|
||||
</svg>
|
||||
Google Maps
|
||||
</a>
|
||||
</figcaption>
|
||||
</figure>
|
||||
<!-- end figure-->
|
||||
<div class="flex-content">
|
||||
<h2>
|
||||
Discover Seville
|
||||
</h2>
|
||||
<p>.card-50.bg-white</p>
|
||||
<ul class="description">
|
||||
<li>
|
||||
<strong class="text-label" title="Density">Density:</strong> 140/km<sup>2</sup>
|
||||
</li>
|
||||
<li><strong class="text-label" title="Population">Population:</strong> 703,021</li>
|
||||
<li><strong class="text-label" title="Website">Website:</strong> <a href="http://www.visitasevilla.es/en">visitasevilla.es</a></li>
|
||||
</ul>
|
||||
<p>
|
||||
There are many reasons to visit Seville. Its Old Town contains three UNESCO World Heritage Sites: the Alcázar palace complex, the Cathedral and the General Archive of the Indies.
|
||||
</p>
|
||||
</div>
|
||||
<!-- end .flex-content-->
|
||||
</div>
|
||||
<!-- end .card-50-->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-50">
|
||||
<p class="text-subtitle">Optional · 500+ icons</p>
|
||||
@@ -2945,9 +2983,9 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<blockquote class="wall">
|
||||
<blockquote class="text-quote">
|
||||
<p>"An avatar is the graphical representation of the user or the user's alter ego or character. The <a href="https://en.wikipedia.org/wiki/Avatar_(computing)">word avatar</a> originates in Hinduism."</p>
|
||||
<p><cite> <a href="http://twitter.com/username/"><img class="avatar-56" src="../static/images/avatar.jpg" alt="Avatar"> @username</a>, .avatar-56</cite></p>
|
||||
</blockquote>
|
||||
@@ -3015,7 +3053,7 @@
|
||||
<h2>Screenshots</h2>
|
||||
<p>HTML/CSS Browser.</p>
|
||||
<pre><figure class="browser">
|
||||
<img alt="Screenshot" src="image.png">
|
||||
<img alt="Screenshot" src="image.png">
|
||||
</figure></pre>
|
||||
</div>
|
||||
<!-- .end .content-left -->
|
||||
@@ -3033,7 +3071,7 @@
|
||||
</div>
|
||||
</section>
|
||||
</article></pre>
|
||||
<p>Just 3 basic animations: .fadeIn, .fadeInUp, and .zoomIn.</p>
|
||||
<p>Just 5 basic animations: .fadeIn, .fadeInUp, .zoomIn, .slideInLeft, and .slideInRight.</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
@@ -3070,40 +3108,13 @@
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-60">
|
||||
<h3>WebSlides is clean, consistent, and <strong>extensible</strong>.</h3>
|
||||
<p>If you want to add more animations, videos...</p>
|
||||
<ul class="flexblock border blink">
|
||||
<li>
|
||||
<a href="https://github.com/daneden/animate.css/" title="Animate.css">
|
||||
<h2>Animate.css</h2>
|
||||
Highly recommended. It is so easy and cool.
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://github.com/VincentGarreau/particles.js" title="particles.js">
|
||||
<h2>particles.js</h2>
|
||||
A lightweight .js library for creating particles.
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://pixabay.com/en/videos" title="Pixabay">
|
||||
<h2>Pixabay</h2>
|
||||
Beautiful background videos. 100% license free.
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="aligncenter">
|
||||
<!-- .wrap = container 1200px -->
|
||||
<!-- .wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2><strong>Start in Seconds</strong> </h2>
|
||||
<p class="text-intro">Create your own presentation instantly. <br>120+ prebuilt slides ready to use.</p>
|
||||
<p>
|
||||
<a href="https://github.com/jlantunez/webslides/archive/master.zip" class="button" title="Download WebSlides">
|
||||
<a href="https://webslides.tv/webslides-latest.zip" class="button" title="Download WebSlides">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg>
|
||||
@@ -3126,8 +3137,9 @@
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<script src="../static/js/svg-icons.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<script>
|
||||
window.ws = new WebSlides();
|
||||
</script>
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
you're a curious person and a fast learner ;)
|
||||
Let's make something beautiful together. Contribute on Github:
|
||||
https://github.com/jlantunez/webslides
|
||||
https://github.com/webslides/webslides
|
||||
|
||||
Thanks,
|
||||
@jlantunez.
|
||||
@@ -71,7 +71,7 @@
|
||||
<p class="logo"><a href="../index.html" title="WebSlides">WebSlides</a></p>
|
||||
<ul>
|
||||
<li class="github">
|
||||
<a rel="external" href="https://github.com/jlantunez/webslides" title="Github">
|
||||
<a rel="external" href="https://github.com/webslides/webslides" title="Github">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
@@ -86,7 +86,7 @@
|
||||
<em>@WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/jlantunez" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>jlantunez</em></a></li> -->
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/webslides" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>webslides</em></a></li> -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
@@ -97,12 +97,12 @@
|
||||
<!-- Quick Guide
|
||||
- Each parent <section> in the <article id="webslides"> element is an individual slide.
|
||||
- Vertical sliding = <article id="webslides" class="vertical">
|
||||
- <div class="wrap"> = container 1200px
|
||||
- <div class="wrap"> = container 90% / <div class="wrap size-50"> = 45%;
|
||||
-->
|
||||
|
||||
<section>
|
||||
<span class="background-right" style="background-image:url('https://webslides.tv/static/images/architecture.png')"></span>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h1><strong>WebSlides Demos</strong></h1>
|
||||
<p class="text-intro">All of these presentations are free and responsive.<br>
|
||||
@@ -112,7 +112,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-white">
|
||||
<!-- .wrap = container 1200px -->
|
||||
<!-- .wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<ul class="flexblock gallery">
|
||||
<li>
|
||||
@@ -121,7 +121,7 @@
|
||||
<img alt="Thumbnail Why WebSlides?" src="https://webslides.tv/static/images/demos-why.png">
|
||||
<figcaption>
|
||||
<h2>Why WebSlides?</h2>
|
||||
<time datetime="2017-12-08T21:21:44-05:00">Jan 08, 2017</time>
|
||||
<time datetime="2017-01-08T16:21:44-08:00">Jan 08, 2017</time>
|
||||
</figcaption>
|
||||
</figure>
|
||||
</a>
|
||||
@@ -132,7 +132,7 @@
|
||||
<img alt="Thumbnail Landings" src="https://webslides.tv/static/images/demos-landings.png">
|
||||
<figcaption>
|
||||
<h2>Landings</h2>
|
||||
<time datetime="2017-01-07T19:21:26-05:00">Jan 07, 2017</time>
|
||||
<time datetime="2017-01-07T19:21:26-08:00">Jan 07, 2017</time>
|
||||
</figcaption>
|
||||
</figure>
|
||||
</a>
|
||||
@@ -143,7 +143,7 @@
|
||||
<img alt="Thumbnail Portfolios" src="https://webslides.tv/static/images/demos-portfolios.png">
|
||||
<figcaption>
|
||||
<h2>Portfolios</h2>
|
||||
<time datetime="2017-01-06T21:22:21-05:00">Jan 06, 2017</time>
|
||||
<time datetime="2017-01-06T21:22:21-08:00">Jan 06, 2017</time>
|
||||
</figcaption>
|
||||
</figure>
|
||||
</a>
|
||||
@@ -154,7 +154,40 @@
|
||||
<img alt="Thumbnail Apple Keynote" src="https://webslides.tv/static/images/demos-apple.png">
|
||||
<figcaption>
|
||||
<h2>Apple Keynote</h2>
|
||||
<time datetime="2017-01-05T20:13:48-05:00">Jan 05, 2017</time>
|
||||
<time datetime="2017-01-05T20:13:48-08:00">Jan 05, 2017</time>
|
||||
</figcaption>
|
||||
</figure>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="../demos/netflix-culture.html" title="Netflix's Culture">
|
||||
<figure>
|
||||
<img alt="Thumbnail Netflix's Culture" src="https://webslides.tv/static/images/demos-netflix.png">
|
||||
<figcaption>
|
||||
<h2>Netflix's Culture</h2>
|
||||
<time datetime="2017-04-16T20:16:48-08:00">Mar 16, 2017</time>
|
||||
</figcaption>
|
||||
</figure>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="../demos/longforms.html" title="Longform Articles">
|
||||
<figure>
|
||||
<img alt="Thumbnail Apple Keynote" src="https://webslides.tv/static/images/demos-longforms.png">
|
||||
<figcaption>
|
||||
<h2>Longforms</h2>
|
||||
<time datetime="2017-04-15T20:16:48-08:00">Apr 15, 2017</time>
|
||||
</figcaption>
|
||||
</figure>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="../demos/interviews.html" title="Interviews">
|
||||
<figure>
|
||||
<img alt="Thumbnail Apple Keynote" src="https://webslides.tv/static/images/demos-interviews.png">
|
||||
<figcaption>
|
||||
<h2>Interviews</h2>
|
||||
<time datetime="2017-04-14T24:08:16-24:32">Apr 14, 2017</time>
|
||||
</figcaption>
|
||||
</figure>
|
||||
</a>
|
||||
@@ -164,10 +197,10 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px with fadein animation -->
|
||||
<!--.wrap = container (width: 90%) with fadein animation -->
|
||||
<div class="wrap">
|
||||
<h2 class="aligncenter">General Questions</h2>
|
||||
<p class="aligncenter">WebSlides Documentation: <a href="../demos/components.html" title="WebSlides Components">Components</a> · <a href="../demos/classes.html" title="WebSlides Classes">Classes</a>.</p>
|
||||
<p class="aligncenter">WebSlides Documentation: <a href="../demos/components.html" title="WebSlides Components">Components</a> · <a href="../demos/classes.html" title="WebSlides Classes">Classes</a> · <a href="../demos/media.html" title="WebSlides Media">Media</a>.</p>
|
||||
<div class="grid">
|
||||
<div class="column">
|
||||
<h6>Why WebSlides? Good karma</h6>
|
||||
@@ -177,12 +210,12 @@
|
||||
</div>
|
||||
<!-- end .column -->
|
||||
<div class="column">
|
||||
<figure><img src="../static/images/setup.png" alt="WebSlides Files"></figure>
|
||||
<figure><img class="aligncenter" src="../static/images/setup.png" alt="WebSlides Files"></figure>
|
||||
</div>
|
||||
<!-- end .column -->
|
||||
<div class="column">
|
||||
<h6>What can you do with WebSlides?</h6>
|
||||
<p>WebSlides is a cute solution for making HTML presentations, landings, and portfolios. <a href="../demos/components.html#slide=15">Put content wherever you want</a>, add <a href="../demos/components.html#slide=98">background images</a>, <a href="../demos/components.html#slide=101">videos</a>...
|
||||
<p>WebSlides is a cute solution for making HTML presentations, landings, and portfolios. <a href="../demos/components.html#slide=15">Put content wherever you want</a>, add <a href="../demos/media.html#slide=2">background images, videos</a>...
|
||||
</p>
|
||||
<h6>How easy is WebSlides?</h6>
|
||||
<p>You can create your own presentation instantly. Just a basic knowledge of HTML and CSS is required. Simply choose a demo and customize it.</p>
|
||||
@@ -194,12 +227,12 @@
|
||||
<!-- end .wrap -->
|
||||
</section>
|
||||
<section class="bg-white aligncenter">
|
||||
<!-- .wrap = container 1200px -->
|
||||
<!-- .wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2><strong>Start in seconds</strong> </h2>
|
||||
<p class="text-intro">Create your own presentation instantly. <br>120+ premium slides ready to use.</p>
|
||||
<p>
|
||||
<a href="https://github.com/jlantunez/webslides/archive/master.zip" class="button" title="Download WebSlides">
|
||||
<a href="https://webslides.tv/webslides-latest.zip" class="button" title="Download WebSlides">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg>
|
||||
@@ -222,7 +255,7 @@
|
||||
</main>
|
||||
<!-- end main -->
|
||||
|
||||
<script src="../static/js/svg-icons.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
<script>
|
||||
window.ws = new WebSlides();
|
||||
|
361
demos/interviews.html
Normal file
361
demos/interviews.html
Normal file
@@ -0,0 +1,361 @@
|
||||
<!doctype html>
|
||||
<html lang="en" prefix="og: http://ogp.me/ns#">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- CLEAN MARKUP = GOOD KARMA.
|
||||
Hi source code lover,
|
||||
|
||||
you're a curious person and a fast learner ;)
|
||||
Let's make something beautiful together. Contribute on Github:
|
||||
https://github.com/webslides/webslides
|
||||
|
||||
Thanks!
|
||||
-->
|
||||
|
||||
<!-- SEO -->
|
||||
<title>WebSlides Demo: Longform Interviews</title>
|
||||
<meta name="description" content="WebSlides is about telling stories. Create longform interviews with ease.">
|
||||
|
||||
<!-- URL CANONICAL -->
|
||||
<!-- <link rel="canonical" href="http://your-url.com/permalink"> -->
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,700,700i%7CMaitree:200,300,400,600,700&subset=latin-ext" rel="stylesheet">
|
||||
|
||||
<!-- CSS Base -->
|
||||
<link rel="stylesheet" type="text/css" media="all" href="../static/css/base.css">
|
||||
|
||||
<!-- CSS Colors -->
|
||||
<link rel="stylesheet" type="text/css" media="all" href="../static/css/colors.css">
|
||||
|
||||
<!-- Optional - CSS SVG Icons (Font Awesome) -->
|
||||
<link rel="stylesheet" type="text/css" media="all" href="../static/css/svg-icons.css">
|
||||
|
||||
<!-- SOCIAL CARDS (ADD YOUR INFO) -->
|
||||
|
||||
<!-- FACEBOOK -->
|
||||
<meta property="og:url" content="http://your-url.com/permalink">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:title" content="WebSlides Demo: Longform Interviews" />
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:description" content="Create longform interviews with ease. Just the essentials.">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:updated_time" content="2017-03-28T12:17:24">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:image" content="../static/images/share-webslides.jpg" >
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:image:width" content="800">
|
||||
<meta property="og:image:height" content="429">
|
||||
|
||||
<!-- TWITTER -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:site" content="@webslides">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:creator" content="@jlantunez">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:title" content="WebSlides Demo: Longform Interviews">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:description" content="Create longform interviews with ease. Just the essentials.">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:image" content="../static/images/share-webslides.jpg">
|
||||
|
||||
<!-- EDIT -->
|
||||
|
||||
<!-- FAVICONS -->
|
||||
<link rel="shortcut icon" sizes="16x16" href="../static/images/favicons/favicon.png">
|
||||
<link rel="shortcut icon" sizes="32x32" href="../static/images/favicons/favicon-32.png">
|
||||
<link rel="apple-touch-icon icon" sizes="76x76" href="../static/images/favicons/favicon-76.png">
|
||||
<link rel="apple-touch-icon icon" sizes="120x120" href="../static/images/favicons/favicon-120.png">
|
||||
<link rel="apple-touch-icon icon" sizes="152x152" href="../static/images/favicons/favicon-152.png">
|
||||
<link rel="apple-touch-icon icon" sizes="180x180" href="../static/images/favicons/favicon-180.png">
|
||||
<link rel="apple-touch-icon icon" sizes="192x192" href="../static/images/favicons/favicon-192.png">
|
||||
|
||||
<!-- Android -->
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="theme-color" content="#333333">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header role="banner">
|
||||
<nav role="navigation">
|
||||
<p class="logo"><a href="../index.html" title="WebSlides">WebSlides</a></p>
|
||||
<ul>
|
||||
<li class="github">
|
||||
<a rel="external" href="https://github.com/webslides/webslides" title="Github">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
<em>WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<li class="twitter">
|
||||
<a rel="external" href="https://twitter.com/webslides" title="Twitter">
|
||||
<svg class="fa-twitter">
|
||||
<use xlink:href="#fa-twitter"></use>
|
||||
</svg>
|
||||
<em>@WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/webslides" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>webslides</em></a></li> -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main role="main">
|
||||
<article>
|
||||
|
||||
<section class="bg-black">
|
||||
<!-- Overlay/Opacity: [class*="bg-"] > .background.dark or .light -->
|
||||
<span class="background" style="background-image:url('https://source.unsplash.com/E695OZJiju4/1600x800')"></span>
|
||||
<!--.wrap = container width: 90% -->
|
||||
<div class="wrap">
|
||||
<p class="text-subtitle">Powered by <a href="https://webslides.tv">WebSlides</a>.</p>
|
||||
<h1>
|
||||
<strong>Designing Interviews</strong>
|
||||
</h1>
|
||||
<p>All content is for demo purposes only.</p>
|
||||
<p><img class="avatar-40" src="../static/images/avatar.jpg" alt="Avatar David Yang"> By David Yang. Nov 8th, 2024.</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-white">
|
||||
<!--.wrap.longform (width:72rem=720px) = Better reading experience (90-95 characters per line) -->
|
||||
<div class="wrap longform">
|
||||
<h2><strong>The Art of the Interview</strong></h2>
|
||||
<p class="text-intro">The stories you tell, whether in text form, by way of video or through audio, are only as good as the information you gather.</p>
|
||||
<p>Interviewing is the cornerstone of journalism. Interviews usually take place face to face and in person, although modern communications technologies such as the Internet have enabled conversations to happen in which parties are separated geographically, such as with videoconferencing software, and of course telephone interviews can happen without visual contact.</p>
|
||||
<hr>
|
||||
<dl class="text-interview">
|
||||
<dt>David:</dt>
|
||||
<dd>
|
||||
<p><strong>Hi, this is a WebSlides Demo, where we interview the people who make us happy. I’m your host, David González. This week I interviewed lawyer Sheryl Hadid. Hi Sheryl!</strong></p>
|
||||
</dd>
|
||||
<dt>Sheryl:</dt>
|
||||
<dd>
|
||||
<p>Hi David!</p>
|
||||
</dd>
|
||||
<dt>David:</dt>
|
||||
<dd>
|
||||
<p><strong>Are interviews copyrighted? When does an interview become copyrightable?</strong></p>
|
||||
</dd>
|
||||
<dt>Sheryl:</dt>
|
||||
<dd>
|
||||
<p>The answer is it depends. Copyright of speech given during an interview relies heavily on the "fixation" element of copyright law. When a work is fixed in a copy or recording, the work is created. This gives the work its copyright. Therefore, when an interview is physically recorded it becomes copyrighted.</p>
|
||||
</dd>
|
||||
<dt>David:</dt>
|
||||
<dd>
|
||||
<p><strong>How could the person being interviewed own the copyright to an interview?</strong></p>
|
||||
</dd>
|
||||
<dt>Sheryl:</dt>
|
||||
<dd>
|
||||
<p>This may be a surprise but there are moments when the person being interviewed could in fact have copyright ownership in their words. For example, if the person being interviewed receives a list of questions from the interviewer and records their calculated responses, they could have copyright ownership in their answers because they not the interviewer actually wrote down or otherwise recorded their response.</p>
|
||||
</dd>
|
||||
<dd>
|
||||
<blockquote class="text-quote">
|
||||
<p>People want to be smart. So, if you ask smart questions and show an interest in a particular subject they love sharing their insight.<code>.text-quote</code>.</p>
|
||||
</blockquote>
|
||||
</dd>
|
||||
<dd>
|
||||
<p>However, courts are hesitant to apply this concept broadly to spoken interviews because of the impact it could have on the First Amendment and the heavy caseload it would bring to an already overloaded court system. See Falwell v. Penthouse Intern., Ltd. This also opens the door for other legal arguments such as fair use. Furthermore, there are times when contractual releases could affect the copyright and alter default copyright rules. </p>
|
||||
</dd>
|
||||
</dl>
|
||||
<hr>
|
||||
<div class="text-pull embed">
|
||||
<iframe width="800" height="450" src="https://www.youtube.com/embed/7xYZ3rMT8_A?rel=0&controls=0" allowfullscreen></iframe>
|
||||
</div>
|
||||
<!--.text-pull.embed (responsive video) -->
|
||||
<hr>
|
||||
<dl class="text-interview">
|
||||
<dt>David:</dt>
|
||||
<dd>
|
||||
<p><strong>What are some methods to record an interview and what should the person being interviewed do?</strong></p>
|
||||
</dd>
|
||||
<dt>Sheryl:</dt>
|
||||
<dd>
|
||||
<p>Most often when problems with interview ownership arise it’s because persons being interviewed are unhappy with the way an interviewer uses their responses during interviews to mislead readers or viewers of a broadcast. This causes interviewees to claim their copyright was infringed because they claim to own the copyright to their speech during the interview.</p>
|
||||
</dd>
|
||||
<dt>David:</dt>
|
||||
<dd>
|
||||
<p><strong>When do problems with interview ownership arise, and who usually owns the copyright?</strong></p>
|
||||
</dd>
|
||||
<dt>Sheryl:</dt>
|
||||
<dd>
|
||||
<p>The most successful way to fix an interview is for interviewers to audio record or hand write the responses of the person being interviewed. If the interview is recorded by hand, it is helpful if the writing is legible and clearly communicates the conversation because it may help solve questions about fixation. Short hand that only describes excerpts from the interview typically are not enough to constitute fixation and copyright ownership. So please remember, if there is no fixation of the interview then no copyright exists in that interview.</p>
|
||||
</dd>
|
||||
<dd>
|
||||
<p>Further, if you are being interviewed please be aware that you do not possess ownership over your responses in most situations. It is always best to briefly think about your answer before you respond to avoid the misuse of your words by others. And if you truly don’t feel comfortable being interviewed by a particular media source, remember you always have the power to say no to doing the interview.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container width: 90% -->
|
||||
<div class="wrap size-50 aligncenter">
|
||||
<h3><strong>Things you can do with WebSlides</strong></h3>
|
||||
<p class="text-intro"><a href="/demos/why-webslides" title="Why WebSlides?">Presentations</a>, <a href="/demos/landings" title="Landings">landings</a>, <a href="/demos/portfolios" title="Portfolios">portfolios</a>, and <a href="/demos/longforms" title="Longforms">longforms</a>.</p>
|
||||
<div class="bg-white shadow">
|
||||
<ul class="flexblock reasons">
|
||||
<li>
|
||||
<h2>An opportunity to engage.</h2>
|
||||
<p><a href="https://webslides.tv" title="WebSlides">WebSlides</a> is about good karma. This is about telling the story, and sharing it in a beautiful way. HTML and CSS as narrative elements.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h2>Work better, faster.</h2>
|
||||
<p>Designers, marketers, and journalists can now focus on the content. Simply <a href="https://webslides.tv/demos" title="WebSlides Demos">choose a demo</a> and customize it in minutes.</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .bg-white shadow -->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-white">
|
||||
<!--.wrap = container width: 90% -->
|
||||
<div class="wrap longform">
|
||||
<dl class="text-interview">
|
||||
<dt>David:</dt>
|
||||
<dd>
|
||||
<p><strong>Is a web address (a domain name) subject to copyright law?</strong></p>
|
||||
</dd>
|
||||
<dt>Sheryl:</dt>
|
||||
<dd>
|
||||
<p>No, for a variety of reasons web addresses (also known as a domain names or URLs) aren't protected by copyright. Even though copyright doesn’t protect domain names, that doesn’t mean domain names are entirely unprotected. Trademark law protects web addresses. And for a variety of reasons, companies are often more apt to go after individual instances of trademark infringement than individual copyright infringers. </p>
|
||||
</dd>
|
||||
<dt>David:</dt>
|
||||
<dd>
|
||||
<p><strong>Are there easier alternatives than copyright?</strong></p>
|
||||
</dd>
|
||||
<dt>Sheryl:</dt>
|
||||
<dd>
|
||||
<p>Some persons and organizations hope to make the rules about using and reusing work more user-friendly. These groups may make their work freely available under <a href="https://creativecommons.org/">Creative Commons</a> licenses or expressly abandon them into the public domain. </p>
|
||||
</dd>
|
||||
<dd>
|
||||
<p>But just because an author employs either of these copyright alternatives, that doesn’t mean that they are completely free of legal issues. For example, imagine you’re an advertising designer for Virgin Mobile, and you need a photo of a pretty teenage girl for your latest ad. You find a photo on Flickr that is free to use under a Creative Commons Attribution license. You use the photo in your ad campaign and plaster the photo on bus stops across Australia. This is exactly what happened, and since the photographer was adequately credited and copyright issues were non-existent everybody lived happily ever after, right?</p>
|
||||
</dd>
|
||||
<dd>
|
||||
<p>If you have any questions about alternatives to the standard copyright scheme or how these alternatives are being utilized by thousands of artists every day, feel free to contact <a href="https://www.newmediarights.org/about_us/contact_us">New Media Rights</a>.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<p><a href="http://www.newmediarights.org/are_interviews_copyrighted" target="_blank">"Are interviews copyrighted"</a> by NewMediaRights is licensed under CC BY NC 3.0.</p>
|
||||
<hr>
|
||||
<h3 class="aligncenter"><strong>Stories that stay with you</strong></h3>
|
||||
<p class="aligncenter">Subscribe to our newsletter. All content is for demo purposes only.</p>
|
||||
<form action="/" class="bg-light user" method="post">
|
||||
<input type="email" name="email" tabindex="1" autocomplete="off" placeholder="your@email.com" required>
|
||||
<button type="submit" tabindex="2" title="Subscribe">Subscribe ›</button>
|
||||
</form>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!-- .wrap = container width: 90% -->
|
||||
<div class="wrap aligncenter">
|
||||
<h2><strong>Ready to start?</strong> </h2>
|
||||
<p class="text-intro">Create your stories instantly.</p>
|
||||
<p>
|
||||
<a href="https://webslides.tv/webslides-latest.zip" class="button" title="Download WebSlides">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg>
|
||||
Free Download
|
||||
</a>
|
||||
<span class="try">
|
||||
<a href="https://www.paypal.me/jlantunez/8" title="Thanks :)">
|
||||
<svg class="fa-paypal">
|
||||
<use xlink:href="#fa-paypal"></use>
|
||||
</svg>
|
||||
Pay what you want.
|
||||
</a>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
|
||||
</article>
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<footer role="contentinfo">
|
||||
<div class="wrap">
|
||||
<div class="grid">
|
||||
<div class="column">
|
||||
<h3>Company</h3>
|
||||
<ul>
|
||||
<li><a href="#">About</a></li>
|
||||
<li><a href="#">Team</a></li>
|
||||
<li><a href="#">Blog</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .column -->
|
||||
<div class="column">
|
||||
<h3>Support</h3>
|
||||
<ul>
|
||||
<li><a href="#">Shipping & Returns</a></li>
|
||||
<li><a href="#">FAQ</a></li>
|
||||
<li><a href="#">Contact</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .column -->
|
||||
<div class="column">
|
||||
<h3>Legal</h3>
|
||||
<ul>
|
||||
<li><a href="#">Terms of Service</a></li>
|
||||
<li><a href="#">Privacy Policy</a></li>
|
||||
<li><a href="#">Cookies</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .column -->
|
||||
<div class="column">
|
||||
<h3>Community</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="#">
|
||||
<svg class="fa-facebook">
|
||||
<use xlink:href="#fa-facebook"></use>
|
||||
</svg>
|
||||
Facebook
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<svg class="fa-youtube">
|
||||
<use xlink:href="#fa-youtube"></use>
|
||||
</svg>
|
||||
YouTube
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<svg class="fa-twitter">
|
||||
<use xlink:href="#fa-twitter"></use>
|
||||
</svg>
|
||||
Twitter
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .column -->
|
||||
</div>
|
||||
<!-- .end .grid -->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</footer>
|
||||
|
||||
<!-- OPTIONAL - svg-icons.js (fontastic.me - Font Awesome as svg icons) -->
|
||||
<script defer src="../static/js/svg-icons.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -9,10 +9,9 @@
|
||||
|
||||
you're a curious person and a fast learner ;)
|
||||
Let's make something beautiful together. Contribute on Github:
|
||||
https://github.com/jlantunez/webslides
|
||||
https://github.com/webslides/webslides
|
||||
|
||||
Thanks,
|
||||
@jlantunez.
|
||||
Thanks!
|
||||
-->
|
||||
|
||||
<!-- SEO -->
|
||||
@@ -71,7 +70,7 @@
|
||||
<p class="logo"><a href="../index.html" title="WebSlides">WebSlides</a></p>
|
||||
<ul>
|
||||
<li class="github">
|
||||
<a rel="external" href="https://github.com/jlantunez/webslides" title="Github">
|
||||
<a rel="external" href="https://github.com/webslides/webslides" title="Github">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
@@ -86,7 +85,7 @@
|
||||
<em>@WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/jlantunez" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>jlantunez</em></a></li> -->
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/webslides" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>webslides</em></a></li> -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
@@ -97,18 +96,18 @@
|
||||
<!-- Quick Guide
|
||||
- Each parent <section> in the <article id="webslides"> element is an individual slide.
|
||||
- Vertical sliding = <article id="webslides" class="vertical">
|
||||
- <div class="wrap"> = container 1200px
|
||||
- <div class="wrap"> = container 90% / <div class="wrap size-50"> = 45%;
|
||||
-->
|
||||
|
||||
<section class="bg-apple aligncenter">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h1><img class="whitelogo" src="../static/images/logos/apple.svg" alt="Apple Logo"></h1>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-apple">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50">
|
||||
<h1>Make a Keynote presentation using HTML</h1>
|
||||
<p class="text-intro">WebSlides is an open source framework for building HTML presentations, landings, and portfolios.</p>
|
||||
@@ -117,7 +116,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-apple aligncenter">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2>HTML presentations can be easy</h2>
|
||||
</div>
|
||||
@@ -328,7 +327,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-apple aligncenter">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2 class="text-data">$48 Billion</h2>
|
||||
<h3>Revenue in Q4 2024</h3>
|
||||
@@ -490,7 +489,7 @@
|
||||
</section>
|
||||
<section class="bg-apple">
|
||||
<span class="background-right-bottom" style="background-image:url('../static/images/iphone-hand.png')"></span>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h2>Payments Made Simple</h2>
|
||||
@@ -568,9 +567,9 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-apple">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<blockquote class="wall">
|
||||
<blockquote class="text-quote">
|
||||
<p>I'm an optimist in the sense that I believe humans are noble and honorable, and some of them are really smart. I have a very optimistic view of individuals.</p>
|
||||
<p>
|
||||
<cite>
|
||||
@@ -723,7 +722,7 @@
|
||||
</div>
|
||||
</section>
|
||||
</article></pre>
|
||||
<p>Just 3 basic animations: .fadeIn, .fadeInUp, and .zoomIn.</p>
|
||||
<p>Just 5 basic animations: .fadeIn, .fadeInUp, .zoomIn, .slideInLeft, and .slideInRight.</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
@@ -737,18 +736,18 @@
|
||||
<section class="bg-apple">
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h3>Responsive Videos</h3>
|
||||
<h3><a href="https://webslides.tv/demos/media#slide=2">YouTube API</a></h3>
|
||||
<p>Embed videos with loop, autoplay, and muted attributes. The video will automatically play when the slide is loaded.</p>
|
||||
<pre><div class="embed">
|
||||
<iframe src="https://www.youtube.com/embed/XjJQBjWYDTs">
|
||||
</iframe>
|
||||
<div data-youtube data-youtube-id="CQY3KUR3VzM" data-autoplay ></div>
|
||||
</div></pre>
|
||||
<p><code>.embed</code></p>
|
||||
<p><code>.embed</code> (responsive)</p>
|
||||
</div>
|
||||
<!-- end .content-left -->
|
||||
<div class="content-left">
|
||||
<!-- <div class="embed"> = Responsive -->
|
||||
<div class="embed">
|
||||
<iframe src="https://www.youtube.com/embed/CQY3KUR3VzM" allowfullscreen></iframe>
|
||||
<div data-youtube data-youtube-id="CQY3KUR3VzM" data-autoplay data-no-controls></div>
|
||||
</div>
|
||||
<!-- end .embed -->
|
||||
</div>
|
||||
@@ -759,26 +758,31 @@
|
||||
<section class="bg-apple fullscreen">
|
||||
<!-- Fullscreen Video -->
|
||||
<div class="embed">
|
||||
<iframe width="800" height="450" src="https://www.youtube.com/embed/mtY0K2fiFOA" allowfullscreen></iframe>
|
||||
<div data-youtube data-youtube-id="lvOKBQvbLhg" data-autoplay></div>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
</section>
|
||||
<section class="bg-black aligncenter">
|
||||
<video class="background-video" autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<section class="fullscreen bg-apple aligncenter">
|
||||
<div class="embed">
|
||||
<video autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<source src="https://webslides.tv/static/videos/peggy.mp4" type="video/mp4">
|
||||
</video>
|
||||
</video>
|
||||
</div><!-- .embed -->
|
||||
<!-- .wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50">
|
||||
<h2><strong>Be Awesome</strong></h2>
|
||||
</div>
|
||||
</section>
|
||||
<section class="bg-black aligncenter">
|
||||
<video class="background-video dark" autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<source src="https://webslides.tv/static/videos/peggy.mp4" type="video/mp4">
|
||||
</video>
|
||||
<!-- .wrap = container 1200px -->
|
||||
<section class="fullscreen bg-black aligncenter">
|
||||
<div class="embed dark">
|
||||
<video autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<source src="https://webslides.tv/static/videos/peggy.mp4" type="video/mp4">
|
||||
</video>
|
||||
</div><!-- .embed -->
|
||||
<!-- .wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50">
|
||||
<h2><strong>Think Different</strong></h2>
|
||||
<p>0verlay: <code>.bg-black > .background-video.dark</code> or .light</p>
|
||||
<p>Overlay: <code>fullscreen.bg-black > .embed.dark</code> or .light</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
@@ -810,12 +814,12 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-apple aligncenter">
|
||||
<!-- .wrap = container 1200px -->
|
||||
<!-- .wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2><strong>Start in seconds</strong></h2>
|
||||
<p class="text-intro">120+ prebuilt slides ready to use.</p>
|
||||
<p>
|
||||
<a href="https://github.com/jlantunez/webslides/archive/master.zip" class="button" title="Download WebSlides">
|
||||
<a href="https://webslides.tv/webslides-latest.zip" class="button" title="Download WebSlides">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg>
|
||||
@@ -835,7 +839,7 @@
|
||||
</section>
|
||||
<section class="bg-apple aligncenter">
|
||||
<h2><strong>Thank you!</strong></h2>
|
||||
<p><a href="https://twitter.com/webslides" title="@jlantunez on Twitter">@jlantunez</a></p>
|
||||
<p><a href="https://twitter.com/webslides" title="@WebSlides on Twitter">@WebSlides</a></p>
|
||||
<p class="text-symbols">* * *</p>
|
||||
</section>
|
||||
|
||||
@@ -843,8 +847,9 @@
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<script src="../static/js/svg-icons.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<script>
|
||||
window.ws = new WebSlides();
|
||||
</script>
|
||||
|
@@ -9,10 +9,9 @@
|
||||
|
||||
you're a curious person and a fast learner ;)
|
||||
Let's make something beautiful together. Contribute on Github:
|
||||
https://github.com/jlantunez/webslides
|
||||
https://github.com/webslides/webslides
|
||||
|
||||
Thanks,
|
||||
@jlantunez.
|
||||
Thanks!
|
||||
-->
|
||||
|
||||
<!-- SEO -->
|
||||
@@ -71,7 +70,7 @@
|
||||
<p class="logo"><a href="../index.html" title="WebSlides">WebSlides</a></p>
|
||||
<ul>
|
||||
<li class="github">
|
||||
<a rel="external" href="https://github.com/jlantunez/webslides" title="Github">
|
||||
<a rel="external" href="https://github.com/webslides/webslides" title="Github">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
@@ -86,7 +85,7 @@
|
||||
<em>@WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/jlantunez" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>jlantunez</em></a></li> -->
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/webslides" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>webslides</em></a></li> -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
@@ -96,16 +95,16 @@
|
||||
<!-- Quick Guide
|
||||
- Each parent <section> in the <article id="webslides"> element is an individual slide.
|
||||
- Vertical sliding = <article id="webslides" class="vertical">
|
||||
- <div class="wrap"> = container 1200px / <div class="wrap size-50"> = 600px;
|
||||
- <div class="wrap"> = container 90% / <div class="wrap size-50"> = 45%;
|
||||
-->
|
||||
|
||||
<section class="bg-purple aligncenter">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/C1HhAQrbykQ/')"></span>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h1 class="text-landing">Landings</h1>
|
||||
<p class="text-symbols">* * * </p>
|
||||
<p><a class="button ghost" href="https://github.com/jlantunez/webslides" title="Download WebSlides for free"><svg class="fa-github">
|
||||
<p><a class="button ghost" href="https://github.com/webslides/webslides" title="Download WebSlides for free"><svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg> WebSlides</a>
|
||||
</p>
|
||||
@@ -113,7 +112,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap aligncenter">
|
||||
<p class="text-subtitle">The interface is your brand:</p>
|
||||
<h2>Create a stylish web presence easily</h2>
|
||||
@@ -121,7 +120,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="grid vertical-align">
|
||||
<div class="column">
|
||||
@@ -139,7 +138,7 @@
|
||||
<span class="code-comment"><!-- Slide 2 --></span>
|
||||
<section class="bg-primary">
|
||||
<div class="wrap">
|
||||
<h2>.wrap = container 1200px</h2>
|
||||
<h2>.wrap = container (width: 90%)</h2>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
@@ -176,7 +175,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="aligncenter">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50">
|
||||
<h2 class="text-landing">Welcomes</h2>
|
||||
<p class="text-intro"><strong>WebSlides</strong> is an open source tool for telling stories.<br>
|
||||
@@ -185,13 +184,13 @@
|
||||
<ul>
|
||||
<li><a href="https://twitter.com/webslides">Twitter</a></li>
|
||||
<li><a href="https://dribbble.com/tags/webslides">Dribbble</a></li>
|
||||
<li><a href="https://github.com/jlantunez/webslides">Github</a></li>
|
||||
<li><a href="https://github.com/webslides/webslides">Github</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</section>
|
||||
<section class="bg-secondary">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50 frame">
|
||||
<h2 class="text-serif aligncenter">How to Tell Your Story?</h2>
|
||||
<p class="text-symbols">* * *</p>
|
||||
@@ -199,7 +198,7 @@
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-60">
|
||||
<h3><strong>Why WebSlides?</strong> Good karma and productivity.</h3>
|
||||
<hr>
|
||||
@@ -231,18 +230,18 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="cta-cover">
|
||||
<h1><strong>HTML Presentations</strong> Made Easy</h1>
|
||||
<p class="alignright">
|
||||
<a class="button" href="https://github.com/jlantunez/webslides/archive/master.zip" title="Download WebSlides">
|
||||
<a class="button" href="https://webslides.tv/webslides-latest.zip" title="Download WebSlides">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg>
|
||||
WebSlides
|
||||
</a>
|
||||
<span class="try"><a href="https://webslides.tv/demos" title="WebSlides Demos">Demos</a> · <a href="https://github.com/jlantunez/webslides" title="Github">Github</a></span>
|
||||
<span class="try"><a href="https://webslides.tv/demos" title="WebSlides Demos">Demos</a> · <a href="https://github.com/webslides/webslides" title="Github">Github</a></span>
|
||||
</p>
|
||||
</div>
|
||||
<ul class="flexblock features">
|
||||
@@ -600,7 +599,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="grid">
|
||||
<div class="column">
|
||||
@@ -880,7 +879,7 @@
|
||||
</section>
|
||||
<section>
|
||||
<span class="background-right" style="background-image:url('../static/images/iphone.png')"></span>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h2>iPhone 7</h2>
|
||||
@@ -1447,7 +1446,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<!-- alignment [class*="content-"] = container max-width:50% = 600px -->
|
||||
<div class="content-center">
|
||||
@@ -1461,9 +1460,9 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-black-blue">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<blockquote class="wall">
|
||||
<blockquote class="text-quote">
|
||||
<p>I have always appreciated designers who dare to reinterpret fabrics and proportions, so I follow the Japanese and Belgian designers.
|
||||
</p>
|
||||
<p><cite><a href="https://en.wikipedia.org/wiki/Zaha_Hadid">Zaha Hadid</a></cite></p>
|
||||
@@ -1553,7 +1552,7 @@
|
||||
</section>
|
||||
<section class="bg-black">
|
||||
<span class="background" style="background-image:url('https://source.unsplash.com/p3UCTiZIU6M/')"></span>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-70 aligncenter">
|
||||
<h2>Planning a vacation?</h2>
|
||||
<p class="text-intro">Hidden attractions and unusual things to do.</p>
|
||||
@@ -1568,7 +1567,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-gradient-white">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="grid vertical-align">
|
||||
<div class="column">
|
||||
@@ -1643,7 +1642,7 @@
|
||||
</section>
|
||||
<section class="bg-primary">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/RkBTPqPEGDo/')"></span>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-30">
|
||||
<p><a href="#" title="Microsoft"><img class="whitelogo aligncenter" src="../static/images/logos/microsoft.svg" alt="Microsoft"></a></p>
|
||||
<form action="/" method="post">
|
||||
@@ -1737,7 +1736,7 @@
|
||||
</div>
|
||||
</section>
|
||||
</article></pre>
|
||||
<p>Just 3 basic animations: .fadeIn, .fadeInUp, and .zoomIn.</p>
|
||||
<p>Just 5 basic animations: .fadeIn, .fadeInUp, .zoomIn, .slideInLeft, and .slideInRight.</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
@@ -1809,12 +1808,13 @@
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h3>Responsive Videos</h3>
|
||||
<h3><a href="https://webslides.tv/demos/media#slide=2">YouTube API</a></h3>
|
||||
<p>Embed videos with loop, autoplay, and muted attributes.</p>
|
||||
<pre><div class="embed">
|
||||
<iframe src="https://www.youtube.com/embed/XjJQBjWYDTs">
|
||||
</iframe>
|
||||
</div></pre>
|
||||
<p><code>.embed</code></p>
|
||||
<p><code>.embed</code> (responsive)</p>
|
||||
</div>
|
||||
<!-- end .content-left -->
|
||||
<div class="content-left">
|
||||
@@ -1832,7 +1832,7 @@
|
||||
<div class="wrap size-60">
|
||||
<!-- Responsive video/iframe... Add <div class="embed"> -->
|
||||
<div class="embed">
|
||||
<iframe width="800" height="450" src="https://www.youtube.com/embed/vXeF6Uot8pk?list=PL27Ptt5XwkS3YU7n0p7Qer2j_DhTSi0jW" allowfullscreen></iframe>
|
||||
<div data-youtube data-youtube-id="vXeF6Uot8pk" data-autoplay></div>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
</div>
|
||||
@@ -1841,28 +1841,32 @@
|
||||
<section class="fullscreen">
|
||||
<!-- Fullscreen Video -->
|
||||
<div class="embed">
|
||||
<iframe width="800" height="450" src="https://www.youtube.com/embed/b4LrTkWq9jU" allowfullscreen></iframe>
|
||||
<div data-youtube data-youtube-id="b4LrTkWq9jU" data-autoplay></div>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
</section>
|
||||
<section class="bg-black aligncenter">
|
||||
<video class="background-video" autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<source src="https://webslides.tv/static/videos/peggy.mp4" type="video/mp4">
|
||||
</video>
|
||||
<!-- .wrap = container 1200px -->
|
||||
<section class="fullscreen bg-black aligncenter">
|
||||
<div class="embed">
|
||||
<video autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<source src="https://webslides.tv/static/videos/peggy.mp4" type="video/mp4">
|
||||
</video>
|
||||
</div><!-- .end .embed -->
|
||||
<!-- .wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2><strong>Every end is a new beginning</strong></h2>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-blue aligncenter">
|
||||
<video class="background-video dark" autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<source src="https://webslides.tv/static/videos/peggy.mp4" type="video/mp4">
|
||||
</video>
|
||||
<!-- .wrap = container 1200px -->
|
||||
<section class="fullscreen bg-blue aligncenter">
|
||||
<div class="embed dark">
|
||||
<video autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<source src="https://webslides.tv/static/videos/peggy.mp4" type="video/mp4">
|
||||
</video>
|
||||
</div><!-- .end .embed -->
|
||||
<!-- .wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2><strong>Overlay</strong></h2>
|
||||
<p><code>section.bg-blue > .background-video.dark</code> or .light</p>
|
||||
<p><code>section.fullscreen.bg-blue > .embed.dark</code> or .light</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
@@ -1890,12 +1894,12 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="aligncenter">
|
||||
<!-- .wrap = container 1200px -->
|
||||
<!-- .wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2><strong>Start in seconds</strong> </h2>
|
||||
<p class="text-intro">120+ prebuilt slides ready to use.</p>
|
||||
<p>
|
||||
<a href="https://github.com/jlantunez/webslides" class="button" title="Download WebSlides">
|
||||
<a href="https://webslides.tv/webslides-latest.zip" class="button" title="Download WebSlides">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg>
|
||||
@@ -1918,13 +1922,15 @@
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<script src="../static/js/svg-icons.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<script>
|
||||
window.ws = new WebSlides();
|
||||
</script>
|
||||
|
||||
<!-- OPTIONAL - svg-icons.js (fontastic.me - Font Awesome as svg icons) -->
|
||||
<script defer src="../static/js/svg-icons.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
418
demos/longforms.html
Normal file
418
demos/longforms.html
Normal file
@@ -0,0 +1,418 @@
|
||||
<!doctype html>
|
||||
<html lang="en" prefix="og: http://ogp.me/ns#">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- CLEAN MARKUP = GOOD KARMA.
|
||||
Hi source code lover,
|
||||
|
||||
you're a curious person and a fast learner ;)
|
||||
Let's make something beautiful together. Contribute on Github:
|
||||
https://github.com/webslides/webslides
|
||||
|
||||
Thanks!
|
||||
-->
|
||||
|
||||
<!-- SEO -->
|
||||
<title>WebSlides Demo: Longforms</title>
|
||||
<meta name="description" content="WebSlides is about telling stories. Create longform articles with ease.">
|
||||
|
||||
<!-- URL CANONICAL -->
|
||||
<!-- <link rel="canonical" href="http://your-url.com/permalink"> -->
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,700,700i%7CMaitree:200,300,400,600,700&subset=latin-ext" rel="stylesheet">
|
||||
|
||||
<!-- CSS Base -->
|
||||
<link rel="stylesheet" type="text/css" media="all" href="../static/css/base.css">
|
||||
|
||||
<!-- CSS Colors -->
|
||||
<link rel="stylesheet" type="text/css" media="all" href="../static/css/colors.css">
|
||||
|
||||
<!-- Optional - CSS SVG Icons (Font Awesome) -->
|
||||
<link rel="stylesheet" type="text/css" media="all" href="../static/css/svg-icons.css">
|
||||
|
||||
<!-- SOCIAL CARDS (ADD YOUR INFO) -->
|
||||
|
||||
<!-- FACEBOOK -->
|
||||
<meta property="og:url" content="https://webslides.tv/demos/why-webslides">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:title" content="WebSlides Demo: Longforms" />
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:description" content="Create longform articles with ease. Just the essentials.">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:updated_time" content="2017-03-28T18:24:48">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:image" content="../static/images/share-webslides.jpg" >
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:image:width" content="800">
|
||||
<meta property="og:image:height" content="429">
|
||||
|
||||
<!-- TWITTER -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:site" content="@webslides">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:creator" content="@jlantunez">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:title" content="WebSlides Demo: Longforms">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:description" content="Create longform articles with ease. Just the essentials.">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:image" content="../static/images/share-webslides.jpg">
|
||||
|
||||
<!-- EDIT -->
|
||||
|
||||
<!-- FAVICONS -->
|
||||
<link rel="shortcut icon" sizes="16x16" href="../static/images/favicons/favicon.png">
|
||||
<link rel="shortcut icon" sizes="32x32" href="../static/images/favicons/favicon-32.png">
|
||||
<link rel="apple-touch-icon icon" sizes="76x76" href="../static/images/favicons/favicon-76.png">
|
||||
<link rel="apple-touch-icon icon" sizes="120x120" href="../static/images/favicons/favicon-120.png">
|
||||
<link rel="apple-touch-icon icon" sizes="152x152" href="../static/images/favicons/favicon-152.png">
|
||||
<link rel="apple-touch-icon icon" sizes="180x180" href="../static/images/favicons/favicon-180.png">
|
||||
<link rel="apple-touch-icon icon" sizes="192x192" href="../static/images/favicons/favicon-192.png">
|
||||
|
||||
<!-- Android -->
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="theme-color" content="#333333">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header role="banner">
|
||||
<nav role="navigation">
|
||||
<p class="logo"><a href="../index.html" title="WebSlides">WebSlides</a></p>
|
||||
<ul>
|
||||
<li class="github">
|
||||
<a rel="external" href="https://github.com/webslides/webslides" title="Github">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
<em>WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<li class="twitter">
|
||||
<a rel="external" href="https://twitter.com/webslides" title="Twitter">
|
||||
<svg class="fa-twitter">
|
||||
<use xlink:href="#fa-twitter"></use>
|
||||
</svg>
|
||||
<em>@WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/webslides" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>webslides</em></a></li> -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<main role="main">
|
||||
<article>
|
||||
<section>
|
||||
<!-- Overlay/Opacity: [class*="bg-"] > .background.dark or .light -->
|
||||
<span class="background-bottom" style="background-image:url('https://webslides.tv/static/images/nyc.jpg')"></span>
|
||||
<!--.wrap = container width: 90% -->
|
||||
<div class="wrap aligncenter">
|
||||
<h1 class="text-landing">
|
||||
<strong>Longform Demo</strong>
|
||||
</h1>
|
||||
<p class="text-intro">How to engage readers with longform journalism?<br> All content is for demo purposes only.
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://webslides.tv/webslides-latest.zip" title="Download WebSlides for free" class="button zoomIn">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg>
|
||||
WebSlides
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-white">
|
||||
<!--.wrap.longform (width:72rem=720px) = Better reading experience (90-95 characters per line) -->
|
||||
<div class="wrap longform">
|
||||
<h2><strong>The Art of Storytelling</strong></h2>
|
||||
<p><a href="https://twitter.com/webslides" title="David Yang"><img class="avatar-40" src="../static/images/avatar.jpg" alt="David Yang"></a> David Yang. Nov 16th, 2032.</p>
|
||||
<p class="text-intro">
|
||||
WebSlides want to help tell stories that are meaningful. All content is for demo purposes only.
|
||||
</p>
|
||||
<p>People share content that makes them feel inspired. WebSlides is free and open source. We built it because we need a platform for beautiful storytelling. Longform journalism has grown in popularity over the past several years, with blogs and media organizations including <a href="https://medium.com">Medium</a>, <a href="http://highline.huffingtonpost.com/">The Huffington Post</a>, and <a href="http://nytimes.com">The New York Times</a> creating or expanding longform coverage and new companies such as <a href="https://atavist.com/">The Atavist</a>, <a href="https://longreads.com/">Longreads.com</a> and <a href="https://longform.com/">Longform.org</a> being founded to capitalize on the new interest.</p>
|
||||
<hr>
|
||||
<p class="aligncenter"><code>.wrap.longform</code> = 72rem (720px). <br>
|
||||
Why? Reading efficiency is highest at <a href="http://uxmovement.com/content/how-margins-and-line-lengths-affect-user-reading/">90-95 characters per line</a>.
|
||||
</p>
|
||||
<hr>
|
||||
<p>Longform journalism is a branch of journalism dedicated to longer articles with larger amounts of content. Typically this will be between 1,000 and 20,000 words.</p>
|
||||
<p>Storytelling is the social and cultural activity of sharing stories, often with improvisation, theatrics, or embellishment. Stories or narratives have been shared in every culture as a means of entertainment, education, cultural preservation and instilling moral values.</p>
|
||||
<p>Crucial elements of stories and storytelling include plot, characters and narrative point of view. The term 'storytelling' is used in a narrow sense to refer specifically to oral storytelling and also in a looser sense to refer to techniques used in other media to unfold or disclose the narrative of a story.</p>
|
||||
<p>Storytelling predates writing, with the earliest forms of storytelling usually oral combined with gestures and expressions. In addition to being part of religious rituals, some archaeologists believe rock art may have served as a form of storytelling for many ancient cultures.</p>
|
||||
<h2><strong>Alignments</strong></h2>
|
||||
<p>This is an image of a Nao (robot), aligned to the right. It also has a small caption.</p>
|
||||
<figure class="alignright">
|
||||
<img src="https://source.unsplash.com/2EJCSULRwC8/600x400" alt="Robot">
|
||||
<figcaption>
|
||||
<p><code>figure.alignright</code></p>
|
||||
</figcaption>
|
||||
</figure>
|
||||
<p>For the floated image to look good, the surrounding text will need to be of a certain length. That's why I'm writing this filler text.</p>
|
||||
<p>Nao (pronounced now) is an autonomous, programmable humanoid robot developed by Aldebaran Robotics, a French robotics company headquartered in Paris. The robot's development began with the launch of Project Nao in 2004. On 15 August 2007, Nao replaced Sony's robot dog Aibo as the robot used in the RoboCup Standard Platform League (SPL), an international robot soccer competition. The Nao was used in RoboCup 2008 and 2009, and the NaoV3R was chosen as the platform for the SPL at RoboCup 2010.</p>
|
||||
<hr>
|
||||
<figure class="text-pull-left">
|
||||
<img src="https://source.unsplash.com/cr6RJblqjyo/600x400" alt="Skater">
|
||||
<figcaption>
|
||||
<p><code>.text-pull-left</code></p>
|
||||
</figcaption>
|
||||
</figure>
|
||||
<p>This is an image of a skate, aligned to the left. It also has a small caption. For the floated image to look good, the surrounding text will need to be of a certain length. That's why I'm writing this filler text</p>
|
||||
<p>Typically one character is printed per keypress. The machine prints characters by making ink impressions of type elements similar to the sorts used in movable type letterpress printing.</p>
|
||||
<hr>
|
||||
<p>The story was then told using a combination of oral narrative, music, rock art and dance, which bring understanding and meaning of human existence through remembrance and enactment of stories. People have used the carved trunks of living trees and ephemeral media (such as sand and leaves) to record stories in pictures or with writing. Complex forms of tattooing may also represent stories, with information about genealogy, affiliation and social status.</p>
|
||||
<blockquote class="text-pull-right">
|
||||
<p>"The art of narrative is, by definition, an aesthetic enterprise, and there are a number of artistic elements that typically interact in well-developed stories." — <code>.text-pull-right</code>.</p>
|
||||
</blockquote>
|
||||
<p>With the advent of writing and the use of stable, portable media, stories were recorded, transcribed and shared over wide regions of the world. Stories have been carved, scratched, painted, printed or inked onto wood or bamboo, ivory and other bones, pottery, clay tablets, stone, palm-leaf books, skins (parchment), bark cloth, paper, silk, canvas and other textiles, recorded on film and stored electronically in digital form. Oral stories continue to be created, improvisationally by impromptu storytellers, as well as committed to memory and passed from generation to generation, despite the increasing popularity of written and televised media in much of the world.</p>
|
||||
<hr>
|
||||
<h3>Center aligned</h3>
|
||||
<figure class="aligncenter">
|
||||
<img src="https://source.unsplash.com/BnQULvE2mEA/800x600" alt="Scene from the Women’s March on Washington, DC.">
|
||||
<figcaption>
|
||||
<p><code>figure.aligncenter</code></p>
|
||||
</figcaption>
|
||||
</figure>
|
||||
<p>This is a center aligned image. It also has a small caption. The sky (or celestial dome) is everything that lies above the surface of the Earth, including the atmosphere and outer space. The intensity of the sky varies greatly over the day, and the primary cause of that intensity differs as well. </p>
|
||||
<hr>
|
||||
<figure class="text-pull">
|
||||
<img src="https://source.unsplash.com/9bdt03k4ujw/800x400" alt="Japan">
|
||||
<figcaption>
|
||||
<p><code>figure.text-pull</code></p>
|
||||
</figcaption>
|
||||
</figure>
|
||||
<p>When the sun is well above the horizon, direct scattering of sunlight (Rayleigh scattering) is the overwhelmingly dominant source of light. However, in twilight, the period of time between sunset and night and between night and sunrise, the situation is more complicated.</p>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-80">
|
||||
<h3><strong>Building a platform for storytelling</strong></h3>
|
||||
<p><code>.text-cols (2 columns)</code>.</p>
|
||||
<div class="text-cols">
|
||||
<p>The art of narrative is, by definition, an aesthetic enterprise, and there are a number of artistic elements that typically interact in well-developed stories.</p>
|
||||
<p>Human knowledge is based on stories and the human brain consists of cognitive machinery necessary to understand, remember and tell stories.</p>
|
||||
<p>Humans are storytelling organisms that both individually and socially, lead storied lives. Stories mirror human thought as humans think in narrative structures and most often remember facts in story form. </p>
|
||||
<p>Facts can be understood as smaller versions of a larger story, thus storytelling can supplement analytical thinking. Because storytelling requires auditory and visual senses from listeners, one can learn to organize their mental representation of a story, recognize structure of language and express his or her thoughts.</p>
|
||||
<h4><strong>Stories with karma</strong></h4>
|
||||
<p>For many multi-media communication complex institutions, communicating by using storytelling techniques can be a more compelling and effective route of delivering information than that of using only dry facts. Uses include:</p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-white">
|
||||
<div class="wrap longform">
|
||||
<h1>Heading one</h1>
|
||||
<h2>Heading two</h2>
|
||||
<h3>Heading three</h3>
|
||||
<h4>Heading four</h4>
|
||||
<h5>Heading five</h5>
|
||||
<h6>Heading six</h6>
|
||||
<hr />
|
||||
<h3>Ordered List</h3>
|
||||
<ol>
|
||||
<li>Medium = Beautiful articles.</li>
|
||||
<li>Typeform = Beautiful forms.</li>
|
||||
<li>WebSlides = Beautiful presentations and longforms.</li>
|
||||
</ol>
|
||||
<h3>Unordered List</h3>
|
||||
<ul>
|
||||
<li>List Item 1</li>
|
||||
<li>List Item 2</li>
|
||||
<li>List Item 3</li>
|
||||
</ul>
|
||||
<h3>Mixed List</h3>
|
||||
<ol>
|
||||
<li>
|
||||
List Item 1
|
||||
<ul>
|
||||
<li>List Item 1</li>
|
||||
<li>
|
||||
List Item 2
|
||||
<ol>
|
||||
<li>List Item 1</li>
|
||||
<li>
|
||||
List Item 2
|
||||
<ul>
|
||||
<li>List Item 1</li>
|
||||
<li>List Item 2</li>
|
||||
<li>List Item 3</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>List Item 3</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>List Item 3</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>List Item 2</li>
|
||||
<li>List Item 3</li>
|
||||
</ol>
|
||||
<hr />
|
||||
<h3>Table Styles</h3>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>Table Header 1</th>
|
||||
<th>Table Header 2</th>
|
||||
<th>Table Header 3</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Division 1</td>
|
||||
<td>Division 2</td>
|
||||
<td>Division 3</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td>Division 1</td>
|
||||
<td>Division 2</td>
|
||||
<td>Division 3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Division 1</td>
|
||||
<td>Division 2</td>
|
||||
<td>Division 3</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2>Blockquote</h2>
|
||||
<p>The blockquote tag can be used to display a quote from a person or from another site. It can be as long or as short as you like, and it is displayed like this:</p>
|
||||
<blockquote>
|
||||
<p>"Women, like men, should try to do the impossible. And when they fail, their failure should be a challenge to others."</p>
|
||||
<p><cite>Amelia Earhart.</cite></p>
|
||||
</blockquote>
|
||||
<p>Modern storytelling has a broad purview. In addition to its traditional forms (fairytales, folktales, mythology, legends, fables etc.), it has extended itself to representing history, personal narrative, political commentary and evolving cultural norms. Contemporary storytelling is also widely used to address educational objectives.</p>
|
||||
<blockquote class="text-pull">
|
||||
<p>"Without freedom of thought, there can be no such thing as wisdom - and no such thing as public liberty without freedom of speech." <code>.text-pull </code> </p>
|
||||
<p><cite>Benjamin Franklin.</cite></p>
|
||||
</blockquote>
|
||||
<p>Storytelling is increasingly used in advertising today in order to build customer loyalty. According to Giles Lury, this marketing trend echoes the deeply rooted need of all humans to be entertained. Stories are illustrative, easily memorable and allow any firm to create stronger emotional bonds with the customers.</p>
|
||||
<p>A Nielsen study shows consumers want a more personal connection in the way they gather information. Our brains are far more engaged by storytelling than by cold, hard facts. When reading straight data, only the language parts of our brains work to decode the meaning. But when we read a story, not only do the language parts of our brains light up, but any other part of the brain that we would use if we were actually experiencing what we're reading about becomes activated as well. This means it's far easier for us to remember stories than hard facts.</p>
|
||||
<blockquote class="text-quote">
|
||||
<p>Leadership is not bullying and leadership is not aggression. Leadership is the expectation that you can use your voice for good. That you can make the world a better place.</p>
|
||||
<p><cite>Sheryl Sandberg.</cite></p>
|
||||
</blockquote>
|
||||
<p>Storytelling is a means for sharing and interpreting experiences. Peter L. Berger says human life is narratively rooted, humans construct their lives and shape their world into homes in terms of these groundings and memories. <strong>Stories are universal in that they can bridge cultural, linguistic and age-related divides</strong>. Storytelling can be adaptive for all ages, leaving out the notion of age segregation.
|
||||
</p>
|
||||
<p>Storytelling can be used as a method to teach ethics, values and cultural norms and differences. Learning is most effective when it takes place in social environments that provide authentic social cues about how knowledge is to be applied. Stories function as a tool to pass on knowledge in a social context. So, every story has 3 parts. First, The setup (The Hero's world before the adventure starts). Second, The Confrontation (The hero's world turned upside down). Third, The Resolution (Hero conquer's villain, but it's not enough for Hero to survive. The Hero or World must be transformed). Any story can be framed in such format.</p>
|
||||
<hr>
|
||||
<h3 class="aligncenter"><strong>Stories that stay with you</strong></h3>
|
||||
<p class="aligncenter">Subscribe to our newsletter. All content is for demo purposes only.</p>
|
||||
<form action="/" class="bg-light user" method="post">
|
||||
<input type="email" name="email" tabindex="1" autocomplete="off" placeholder="your@email.com" required>
|
||||
<button type="submit" tabindex="2" title="Subscribe">Subscribe ›</button>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<!-- .wrap = container width: 90% -->
|
||||
<div class="wrap aligncenter">
|
||||
<h2><strong>Ready to start?</strong> </h2>
|
||||
<p class="text-intro">Create your stories instantly.</p>
|
||||
<p>
|
||||
<a href="https://webslides.tv/webslides-latest.zip" class="button" title="Download WebSlides">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg>
|
||||
Free Download
|
||||
</a>
|
||||
<span class="try">
|
||||
<a href="https://www.paypal.me/jlantunez/8" title="Thanks :)">
|
||||
<svg class="fa-paypal">
|
||||
<use xlink:href="#fa-paypal"></use>
|
||||
</svg>
|
||||
Pay what you want.
|
||||
</a>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
|
||||
</article>
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<footer role="contentinfo">
|
||||
<div class="wrap">
|
||||
<div class="grid">
|
||||
<div class="column">
|
||||
<h3>Company</h3>
|
||||
<ul>
|
||||
<li><a href="#">About</a></li>
|
||||
<li><a href="#">Team</a></li>
|
||||
<li><a href="#">Blog</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .column -->
|
||||
<div class="column">
|
||||
<h3>Support</h3>
|
||||
<ul>
|
||||
<li><a href="#">Shipping & Returns</a></li>
|
||||
<li><a href="#">FAQ</a></li>
|
||||
<li><a href="#">Contact</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .column -->
|
||||
<div class="column">
|
||||
<h3>Legal</h3>
|
||||
<ul>
|
||||
<li><a href="#">Terms of Service</a></li>
|
||||
<li><a href="#">Privacy Policy</a></li>
|
||||
<li><a href="#">Cookies</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .column -->
|
||||
<div class="column">
|
||||
<h3>Community</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="#">
|
||||
<svg class="fa-facebook">
|
||||
<use xlink:href="#fa-facebook"></use>
|
||||
</svg>
|
||||
Facebook
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<svg class="fa-youtube">
|
||||
<use xlink:href="#fa-youtube"></use>
|
||||
</svg>
|
||||
YouTube
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#">
|
||||
<svg class="fa-twitter">
|
||||
<use xlink:href="#fa-twitter"></use>
|
||||
</svg>
|
||||
Twitter
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .column -->
|
||||
</div>
|
||||
<!-- .end .grid -->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</footer>
|
||||
|
||||
<!-- OPTIONAL - svg-icons.js (fontastic.me - Font Awesome as svg icons) -->
|
||||
<script defer src="../static/js/svg-icons.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
951
demos/media.html
Normal file
951
demos/media.html
Normal file
@@ -0,0 +1,951 @@
|
||||
<!doctype html>
|
||||
<html lang="en" prefix="og: http://ogp.me/ns#">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- CLEAN MARKUP = GOOD KARMA.
|
||||
Hi source code lover,
|
||||
|
||||
you're a curious person and a fast learner ;)
|
||||
Let's make something beautiful together. Contribute on Github:
|
||||
https://github.com/webslides/webslides
|
||||
|
||||
Thanks!
|
||||
-->
|
||||
|
||||
<!-- SEO -->
|
||||
<title>WebSlides Tutorial: Videos, Images, and Maps</title>
|
||||
<meta name="description" content="How to embed images, videos, and maps in your presentation.">
|
||||
|
||||
<!-- URL CANONICAL -->
|
||||
<!-- <link rel="canonical" href="http://your-url.com/permalink"> -->
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,700,700i%7CMaitree:200,300,400,600,700&subset=latin-ext" rel="stylesheet">
|
||||
|
||||
<!-- CSS Base -->
|
||||
<link rel="stylesheet" type='text/css' media='all' href="../static/css/base.css">
|
||||
|
||||
<!-- CSS Colors -->
|
||||
<link rel="stylesheet" type='text/css' media='all' href="../static/css/colors.css">
|
||||
|
||||
<!-- Optional - CSS SVG Icons (Font Awesome) -->
|
||||
<link rel="stylesheet" type='text/css' media='all' href="../static/css/svg-icons.css">
|
||||
|
||||
<!-- SOCIAL CARDS (ADD YOUR INFO) -->
|
||||
|
||||
<!-- FACEBOOK -->
|
||||
<meta property="og:url" content="/" />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:title" content="WebSlides Tutorial: Media" />
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:description" content="How to embed images, videos, and maps in your presentation.">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:updated_time" content="2017-01-04T17:25:31">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:image" content="../static/images/share-webslides.jpg" >
|
||||
|
||||
<!-- EDIT -->
|
||||
|
||||
<!-- TWITTER -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:site" content="@webslides">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:creator" content="@jlantunez">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:title" content="WebSlides Tutorial: Media">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:description" content="How to embed images, videos, and maps in your presentation.">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:image" content="../static/images/share-webslides.jpg">
|
||||
|
||||
<!-- EDIT -->
|
||||
|
||||
<!-- FAVICONS -->
|
||||
<link rel="shortcut icon" sizes="16x16" href="../static/images/favicons/favicon.png">
|
||||
<link rel="shortcut icon" sizes="32x32" href="../static/images/favicons/favicon-32.png">
|
||||
<link rel="apple-touch-icon icon" sizes="76x76" href="../static/images/favicons/favicon-76.png">
|
||||
<link rel="apple-touch-icon icon" sizes="120x120" href="../static/images/favicons/favicon-120.png">
|
||||
<link rel="apple-touch-icon icon" sizes="152x152" href="../static/images/favicons/favicon-152.png">
|
||||
<link rel="apple-touch-icon icon" sizes="180x180" href="../static/images/favicons/favicon-180.png">
|
||||
<link rel="apple-touch-icon icon" sizes="192x192" href="../static/images/favicons/favicon-192.png">
|
||||
|
||||
<!-- Android -->
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="theme-color" content="#333333">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header role="banner">
|
||||
<nav role="navigation">
|
||||
<p class="logo"><a href="../index.html" title="WebSlides">WebSlides</a></p>
|
||||
<ul>
|
||||
<li class="github">
|
||||
<a rel="external" href="https://github.com/webslides/webslides" title="Github">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
<em>WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<li class="twitter">
|
||||
<a rel="external" href="https://twitter.com/webslides" title="Twitter">
|
||||
<svg class="fa-twitter">
|
||||
<use xlink:href="#fa-twitter"></use>
|
||||
</svg>
|
||||
<em>@WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/webslides" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>webslides</em></a></li> -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main role="main">
|
||||
<article id="webslides">
|
||||
|
||||
<!-- Quick Guide
|
||||
- Each parent <section> in the <article id="webslides"> element is an individual slide.
|
||||
- Vertical sliding = <article id="webslides" class="vertical">
|
||||
- <div class="wrap"> = container 90% / <div class="wrap size-50"> = 45%;
|
||||
-->
|
||||
|
||||
<section class="bg-black-blue aligncenter">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/Zq_K89I9E-8/)"></span>
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<p class="text-subtitle">WebSlides Tutorial</p>
|
||||
<h1 class="text-landing">Media</h1>
|
||||
<p class="text-symbols">* * *</p>
|
||||
<p>
|
||||
<a class="button ghost" href="https://github.com/webslides/webslides" title="Download WebSlides">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
Free Download
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="aligncenter">
|
||||
<div class="wrap">
|
||||
<h2><strong>A quick reference guide for beginners</strong></h2>
|
||||
<p class="text-intro">Videos, images, maps, and charts.</p>
|
||||
<ul class="flexblock border">
|
||||
<li>
|
||||
<!--div required = padding li or li>a-->
|
||||
<div>
|
||||
<h3><a target="_blank" href="#slide=3">Images</a></h3>
|
||||
<ol>
|
||||
<li><a target="_blank" href="#slide=4">Background Images</a></li>
|
||||
<li><a target="_blank" href="#slide=9">Overlays (light and dark)</a></li>
|
||||
<li><a target="_blank" href="#slide=11">500+ SVG Icons</a></li>
|
||||
<li><a target="_blank" href="#slide=13">Logos</a></li>
|
||||
<li><a target="_blank" href="#slide=14">Avatars</a></li>
|
||||
<li><a target="_blank" href="#slide=15">Devices</a></li>
|
||||
<li><a target="_blank" href="#slide=16">Screenshots</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<!--div required = padding li or li>a-->
|
||||
<div>
|
||||
<h3><a target="_blank" href="#slide=17">Videos</a></h3>
|
||||
<ol>
|
||||
<li><a target="_blank" href="#slide=18">Background Videos (hosted & overlay)</a></li>
|
||||
<li><a target="_blank" href="#slide=22">Embedding YouTube videos</a></li>
|
||||
<li><a target="_blank" href="#slide=24">Fullscreen YouTube videos</a></li>
|
||||
<li>
|
||||
<a target="_blank" href="#slide=26"><strong>YouTube API:</strong></a>
|
||||
<ol>
|
||||
<li><a target="_blank" href="#slide=27">Autoplay, loop, mute, and no controls</a></li>
|
||||
<li><a target="_blank" href="#slide=30">Fullscreen video</a></li>
|
||||
<li><a target="_blank" href="#slide=32">Background video with overlay</a></li>
|
||||
</ol>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<!--div required = padding li or li>a-->
|
||||
<div>
|
||||
<h3><a target="_blank" href="#slide=34">Maps & Charts</a></h3>
|
||||
<ol>
|
||||
<li><a target="_blank" href="#slide=35">Embedding maps</a></li>
|
||||
<li><a target="_blank" href="#slide=36">Embedding the map in a card</a></li>
|
||||
<li><a target="_blank" href="#slide=37">Fullscreen maps</a></li>
|
||||
<li><a target="_blank" href="#slide=38">Embedding charts</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<span class="background-bottom" style="background-image:url('https://source.unsplash.com/GQD3Av_9A88/1600x800)"></span>
|
||||
<div class="wrap aligncenter">
|
||||
<h3>
|
||||
<svg class="fa-camera">
|
||||
<use xlink:href="#fa-camera"></use>
|
||||
</svg>
|
||||
Insert images wherever you want
|
||||
</h3>
|
||||
<p class="text-intro">15 different positions.</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<h3>15 Different Backgrounds</h3>
|
||||
<ul class="text-cols">
|
||||
<li><strong>.background</strong> (fullscreen)</li>
|
||||
<li>.background-top (cover)</li>
|
||||
<li>.background-bottom (cover)</li>
|
||||
<li>.background.light (opacity)</li>
|
||||
<li>.background.dark (opacity)</li>
|
||||
<li>.background-center</li>
|
||||
<li>.background-center-top</li>
|
||||
<li>.background-center-bottom</li>
|
||||
<li>.background-left</li>
|
||||
<li>.background-left-top</li>
|
||||
<li>.background-left-bottom</li>
|
||||
<li>.background-right</li>
|
||||
<li>.background-right-top</li>
|
||||
<li>.background-right-bottom</li>
|
||||
<li>.background-anim (animated)</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-50">
|
||||
<h4>
|
||||
<svg class="fa-camera">
|
||||
<use xlink:href="#fa-camera"></use>
|
||||
</svg>
|
||||
.background = Fullscreen Backgrounds
|
||||
</h4>
|
||||
<p class="text-intro"><a href="https://source.unsplash.com/">How to embed Unsplash photos? →</a></p>
|
||||
<pre><section>
|
||||
<span class="background" style="background-image:url('https://source.unsplash.com/nwfuaYecNUs/')"></span>
|
||||
<div class="wrap">
|
||||
<h1>Slide</h1>
|
||||
</div>
|
||||
</section></pre>
|
||||
<p>
|
||||
<svg class="fa-info">
|
||||
<use xlink:href="#fa-info"></use>
|
||||
</svg>
|
||||
Position .background outside of .wrap container.
|
||||
</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<span class="background-right-bottom" style="background-image:url('../static/images/iphone-hand.png')"></span>
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h3>.background-(position)</h3>
|
||||
<p><code>.background-right-bottom</code></p>
|
||||
<ul class="flexblock specs">
|
||||
<li>
|
||||
<div>
|
||||
<svg class="fa-wifi">
|
||||
<use xlink:href="#fa-wifi"></use>
|
||||
</svg>
|
||||
<h2>Ultra-Fast WiFi</h2>
|
||||
Simple and secure file sharing.
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<svg class="fa-battery-full">
|
||||
<use xlink:href="#fa-battery-full"></use>
|
||||
</svg>
|
||||
<h2>All day battery life</h2>
|
||||
Your battery worries may be over.
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<svg class="fa-life-ring">
|
||||
<use xlink:href="#fa-life-ring"></use>
|
||||
</svg>
|
||||
<h2>Lifetime Warranty </h2>
|
||||
We'll fix it or if we can't, we'll replace it.
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<span class="background-left-bottom" style="background-image:url('../static/images/iphone-hand.png')"></span>
|
||||
<div class="wrap">
|
||||
<div class="content-right">
|
||||
<h3>.background-(position)</h3>
|
||||
<p><code>.background-left-bottom</code></p>
|
||||
<ul class="flexblock specs">
|
||||
<li>
|
||||
<div>
|
||||
<svg class="fa-wifi">
|
||||
<use xlink:href="#fa-wifi"></use>
|
||||
</svg>
|
||||
<h2>Ultra-Fast WiFi</h2>
|
||||
Simple and secure file sharing.
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<svg class="fa-battery-full">
|
||||
<use xlink:href="#fa-battery-full"></use>
|
||||
</svg>
|
||||
<h2>All day battery life</h2>
|
||||
Your battery worries may be over.
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<svg class="fa-life-ring">
|
||||
<use xlink:href="#fa-life-ring"></use>
|
||||
</svg>
|
||||
<h2>Lifetime Warranty </h2>
|
||||
We'll fix it or if we can't, we'll replace it.
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="aligncenter bg-black">
|
||||
<span class="background anim" style="background-image:url('https://source.unsplash.com/n9WPPWiPPJw/')"></span>
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2>.background.anim</h2>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-black aligncenter">
|
||||
<span class="background light" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso/')"></span>
|
||||
<div class="wrap size-50">
|
||||
<h1 class="text-landing text-shadow">Opacity</h1>
|
||||
<p><code>[class*="bg-"] > .background.light</code></p>
|
||||
<pre><section class="bg-black">
|
||||
<span class="background light" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso/')"></span>
|
||||
<div class="wrap">
|
||||
<h1>Slide</h1>
|
||||
</div>
|
||||
</section></pre>
|
||||
</div>
|
||||
</section>
|
||||
<section class="bg-black aligncenter">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso')"></span>
|
||||
<div class="wrap size-50">
|
||||
<h1 class="text-landing text-shadow">Opacity</h1>
|
||||
<p><code>[class*="bg-"] > .background.dark</code></p>
|
||||
<pre><section class="bg-black">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso/')"></span>
|
||||
<div class="wrap">
|
||||
<h1>Slide</h1>
|
||||
</div>
|
||||
</section></pre>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-50">
|
||||
<p class="text-subtitle">Optional · 500+ icons</p>
|
||||
<h2>
|
||||
<a href="http://fontawesome.io/icons/">
|
||||
<svg class="fa-flag">
|
||||
<use xlink:href="#fa-flag"></use>
|
||||
</svg>
|
||||
Font Awesome
|
||||
</a>
|
||||
as SVG icons
|
||||
</h2>
|
||||
<pre><svg class="fa-flag">
|
||||
<use xlink:href="#fa-flag"></use>
|
||||
</svg></pre>
|
||||
<p>How to change icons?</p>
|
||||
<ol class="text-cols">
|
||||
<li>Go to <a href="http://fontastic.me/">fontastic.me</a>.</li>
|
||||
<li>Create a free account.</li>
|
||||
<li>Select new icons.</li>
|
||||
<li>Publish as SVG sprite.</li>
|
||||
<li>Edit <strong>svg-icons.css</strong> and <strong>svg.icons.js</strong>.</li>
|
||||
</ol>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-green">
|
||||
<div class="wrap">
|
||||
<h3>ul.flexblock.metrics.border</h3>
|
||||
<!-- li>a? Add blink = <ul class="flexblock metrics blink">-->
|
||||
<ul class="flexblock metrics border">
|
||||
<li> Founded
|
||||
<span>2024</span>
|
||||
</li>
|
||||
<li>
|
||||
<span>
|
||||
<svg class="fa-users">
|
||||
<use xlink:href="#fa-users"></use>
|
||||
</svg>
|
||||
</span>
|
||||
24M Subscribers
|
||||
</li>
|
||||
<li>
|
||||
<span>
|
||||
<svg class="fa-line-chart">
|
||||
<use xlink:href="#fa-line-chart"></use>
|
||||
</svg>
|
||||
</span>
|
||||
Revenue: $16M
|
||||
</li>
|
||||
<li>
|
||||
Monthly Growth
|
||||
<span>64%</span>
|
||||
</li>
|
||||
<li>
|
||||
<span>
|
||||
<svg class="fa-building-o">
|
||||
<use xlink:href="#fa-building-o"></use>
|
||||
</svg>
|
||||
</span>
|
||||
8 Offices
|
||||
</li>
|
||||
<li>
|
||||
<span>
|
||||
<svg class="fa-smile-o">
|
||||
<use xlink:href="#fa-smile-o"></use>
|
||||
</svg>
|
||||
</span>
|
||||
48 Employees
|
||||
</li>
|
||||
<li>
|
||||
<span>
|
||||
<svg class="fa-usd">
|
||||
<use xlink:href="#fa-usd"></use>
|
||||
</svg>
|
||||
</span>
|
||||
EBITDA: $2,4M
|
||||
</li>
|
||||
<li>
|
||||
<span>
|
||||
<svg class="fa-university">
|
||||
<use xlink:href="#fa-university"></use>
|
||||
</svg>
|
||||
</span>
|
||||
Bank: $32M
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<h2>Transparent Logos</h2>
|
||||
<p>
|
||||
Change the color of a .svg/.png image using CSS. Images are property of their respective owners.
|
||||
</p>
|
||||
<hr>
|
||||
<ul class="flexblock blink">
|
||||
<li>
|
||||
<a href="#" title="Block Link = .blink">
|
||||
<div>
|
||||
<img src="../static/images/logos/google.svg" alt="Google">
|
||||
<p><strong>Height recommended</strong>: 48px</p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" title="Block Link = .blink">
|
||||
<div>
|
||||
<img class="blacklogo" src="../static/images/logos/airbnb.svg" alt="Airbnb">
|
||||
<p><code>img.blacklogo</code></p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" title="Block Link = .blink">
|
||||
<div>
|
||||
<img class="graylogo" src="../static/images/logos/microsoft.svg" alt="Microsoft">
|
||||
<p><code>img.graylogo</code></p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="bg-blue">
|
||||
<a href="" title="Block Link = .blink">
|
||||
<div>
|
||||
<img class="whitelogo" src="../static/images/logos/netflix.svg" alt="Netflix">
|
||||
<p><code>img.whitelogo</code></p>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<blockquote class="text-quote">
|
||||
<p>An avatar is the graphical representation of the user or the user's alter ego or character. The <a href="https://en.wikipedia.org/wiki/Avatar_(computing)">word avatar</a> originates in Hinduism.</p>
|
||||
<p><cite> <a href="http://twitter.com/username/"><img class="avatar-56" src="../static/images/avatar.jpg" alt="Avatar"> @username</a>, .avatar-56</cite></p>
|
||||
</blockquote>
|
||||
<hr>
|
||||
<p><code>img[class*="avatar-"]</code> (80, 72, 64, 56, 48, and 40).</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<div class="grid vertical-align">
|
||||
<div class="column">
|
||||
<h2>Devices</h2>
|
||||
<ul class="flexblock specs">
|
||||
<li>
|
||||
<div>
|
||||
<svg class="fa-wifi">
|
||||
<use xlink:href="#fa-wifi"></use>
|
||||
</svg>
|
||||
<h2>Ultra-Fast WiFi</h2>
|
||||
Simple and secure file sharing.
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<svg class="fa-battery-full">
|
||||
<use xlink:href="#fa-battery-full"></use>
|
||||
</svg>
|
||||
<h2>All day battery life</h2>
|
||||
Your battery worries may be over.
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<svg class="fa-life-ring">
|
||||
<use xlink:href="#fa-life-ring"></use>
|
||||
</svg>
|
||||
<h2>Lifetime Warranty </h2>
|
||||
We'll fix it or if we can't, we'll replace it.
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- end .column-->
|
||||
<div class="column">
|
||||
<figure>
|
||||
<img class="aligncenter" src="../static/images/iphone.png" alt="iPhone">
|
||||
</figure>
|
||||
</div>
|
||||
<!-- end .column-->
|
||||
</div>
|
||||
<!-- end .grid-->
|
||||
</div>
|
||||
<!-- end .wrap-->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<figure class="browser">
|
||||
<img alt="Screenshot" src="https://webslides.tv/static/images/cover-apple.jpg">
|
||||
</figure>
|
||||
</div>
|
||||
<!-- .end .content-left -->
|
||||
<div class="content-left">
|
||||
<h2>Screenshots</h2>
|
||||
<p>HTML/CSS Browser.</p>
|
||||
<pre><figure class="browser">
|
||||
<img alt="Screenshot" src="image.jpg">
|
||||
</figure></pre>
|
||||
</div>
|
||||
<!-- .end .content-left -->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-blue">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/R1J6Z1cnJZc/1600x800)"></span>
|
||||
<!-- background with a frame frame -->
|
||||
<span class="background frame"></span>
|
||||
<div class="wrap aligncenter">
|
||||
<h2>
|
||||
Videos
|
||||
</h2>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-60">
|
||||
<h3>Background videos</h3>
|
||||
<pre><strong><section class="fullscreen"></strong>
|
||||
<div class="embed">
|
||||
<video autoplay loop poster="image.jpg">
|
||||
<source src="video.mp4" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
<strong></section></strong>
|
||||
</pre>
|
||||
<p>.fullscreen > .embed (responsive) > video</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="fullscreen aligncenter">
|
||||
<div class="embed">
|
||||
<video autoplay loop poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<source src="https://webslides.tv/static/videos/peggy.mp4" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-60">
|
||||
<h3>Background videos</h3>
|
||||
<p>Transparent overlay:</p>
|
||||
<pre><strong><section class="fullscreen bg-blue"></strong>
|
||||
<div class="embed <strong>dark</strong>">
|
||||
<video autoplay muted loop poster="image.jpg">
|
||||
<source src="video.mp4" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
<strong></section></strong>
|
||||
</pre>
|
||||
<p>.fullscreen.bg-blue > .embed.dark (or .light) > video</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="fullscreen bg-blue aligncenter">
|
||||
<div class="embed dark">
|
||||
<video autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<source src="https://webslides.tv/static/videos/peggy.mp4" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
<div class="wrap">
|
||||
<h2><strong>Muted</strong></h2>
|
||||
<p>Overlay: <code>section.fullscreen.bg-blue > embed.dark</code> or .light</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h3>Responsive Videos</h3>
|
||||
<p>Just copy and paste the code from YouTube to your slide.</p>
|
||||
<pre><div class="embed">
|
||||
<strong><iframe src="https://www.youtube.com/embed/XjJQBjWYDTs">
|
||||
</iframe></strong>
|
||||
</div></pre>
|
||||
<p><code>.embed</code> (responsive)</p>
|
||||
</div>
|
||||
<!-- end .content-left -->
|
||||
<div class="content-left">
|
||||
<!-- <div class="embed"> = Responsive -->
|
||||
<div class="embed">
|
||||
<iframe src="https://www.youtube.com/embed/XjJQBjWYDTs" allowfullscreen></iframe>
|
||||
</div>
|
||||
<!-- end .embed -->
|
||||
</div>
|
||||
<!-- end .content-left -->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-60">
|
||||
<!-- Responsive video/iframe... Add <div class="embed"> -->
|
||||
<div class="embed">
|
||||
<iframe width="800" height="450" src="https://www.youtube.com/embed/3Q3eITC01Fg" allowfullscreen></iframe>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-60">
|
||||
<h3>Fullscreen YouTube Video</h3>
|
||||
<pre><strong><section class="fullscreen"></strong>
|
||||
<div class="embed">
|
||||
<iframe src="https://www.youtube.com/embed/iY05U7GaU5I">
|
||||
</iframe>
|
||||
</div>
|
||||
<strong></section></strong>
|
||||
</pre>
|
||||
<p><code>.fullscreen</code> > <code>.embed</code> (responsive)</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="fullscreen">
|
||||
<!-- Fullscreen Video -->
|
||||
<div class="embed">
|
||||
<iframe width="800" height="450" src="https://www.youtube.com/embed/xSMB7kBynZA?playsinline=1" allowfullscreen></iframe>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
</section>
|
||||
<section class="frame">
|
||||
<p class="aligncenter">
|
||||
<svg class="fa-thumbs-up large">
|
||||
<use xlink:href="#fa-thumbs-up"></use>
|
||||
</svg>
|
||||
</p>
|
||||
<div class="wrap size-60 bg-white">
|
||||
<h3>
|
||||
<a href="https://developers.google.com/youtube">
|
||||
<svg class="fa-youtube">
|
||||
<use xlink:href="#fa-youtube"></use>
|
||||
</svg>
|
||||
YouTube API
|
||||
</a>
|
||||
</h3>
|
||||
<p class="text-intro">Embed videos with <strong>loop, autoplay, and muted</strong> attributes. The video will automatically play when the slide is loaded.</p>
|
||||
<p><strong>You should use a local or a remote server</strong> since the YouTube API doesn't seem to work nicely when using the file directly on the browser.</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<h3>
|
||||
<svg class="fa-youtube">
|
||||
<use xlink:href="#fa-youtube"></use>
|
||||
</svg>
|
||||
YouTube API Parameters
|
||||
</h3>
|
||||
<p>Syntax: <code>data-autoplay, data-loop, data-no-controls, data-mute</code>.</p>
|
||||
<hr>
|
||||
<div class="grid">
|
||||
<div class="column">
|
||||
<pre><div class="embed">
|
||||
<strong><div data-youtube data-youtube-id="CQY3KUR3VzM" data-autoplay data-loop>
|
||||
</div></strong>
|
||||
</div></pre>
|
||||
<p>autoplay + loop</p>
|
||||
</div>
|
||||
<!-- .end .column -->
|
||||
<div class="column">
|
||||
<pre><div class="embed">
|
||||
<strong><div data-youtube data-youtube-id="CQY3KUR3VzM" data-autoplay data-mute data-no-controls>
|
||||
</div></strong>
|
||||
</div></pre>
|
||||
<p>autoplay + mute + no controls.</p>
|
||||
</div>
|
||||
<!-- .end .column -->
|
||||
</div>
|
||||
<!-- .end .grid -->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h3>YouTube API</h3>
|
||||
<p><code>autoplay + loop</code></p>
|
||||
<pre><div class="embed">
|
||||
<div data-youtube data-youtube-id="_m67JbGjWnc" <strong>data-autoplay data-loop</strong>>
|
||||
</div>
|
||||
</div></pre>
|
||||
</div>
|
||||
<!-- end .content-left -->
|
||||
<div class="content-left">
|
||||
<!-- <div class="embed"> = Responsive -->
|
||||
<div class="embed">
|
||||
<div data-youtube data-youtube-id="_m67JbGjWnc" data-autoplay data-loop></div>
|
||||
</div>
|
||||
<!-- end .embed -->
|
||||
</div>
|
||||
<!-- end .content-left -->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="frame">
|
||||
<div class="wrap size-60 bg-white">
|
||||
<h3>
|
||||
<svg class="fa-info-circle large">
|
||||
<use xlink:href="#fa-info-circle"></use>
|
||||
</svg>
|
||||
<strong>Autoplay Feature</strong>
|
||||
</h3>
|
||||
<p class="text-intro">Autoplay is generally disabled on all mobile devices to prevent bandwidth consumption. User must execute the play manually.</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-70">
|
||||
<h3><strong>Let's make some magic with the YouTube API</strong></h3>
|
||||
<p>How to make a fullscreen YouTube video? <code>.fullscreen > .embed</code></p>
|
||||
<hr>
|
||||
<pre><strong><section class="fullscreen"></strong>
|
||||
<div class="embed">
|
||||
<div data-youtube data-youtube-id="dmkwb2KfLW8" <strong>data-autoplay data-loop data-no-controls</strong></div>
|
||||
</div>
|
||||
<strong></section></strong>
|
||||
</pre>
|
||||
<p>The video will automatically play when the slide is loaded.</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="fullscreen">
|
||||
<!-- Fullscreen Video -->
|
||||
<div class="embed">
|
||||
<div data-youtube data-youtube-id="dmkwb2KfLW8" data-autoplay data-loop data-no-controls></div>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-70">
|
||||
<h3><strong>Fullscreen YouTube video background</strong></h3>
|
||||
<p>Overlaying a transparent background on an embedded Youtube video:</p>
|
||||
<hr>
|
||||
<pre><strong><section class="fullscreen bg-black"></strong>
|
||||
<div class="embed dark">
|
||||
<div data-youtube data-youtube-id="c9psfOxJysw" <strong>data-autoplay data-loop data-mute data-no-controls</strong></div>
|
||||
</div>
|
||||
<strong></section></strong>
|
||||
</pre>
|
||||
<p><code>.fullscreen[class*="bg-"] > .embed.dark</code> or .light</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="fullscreen bg-blue">
|
||||
<!-- Fullscreen Video -->
|
||||
<div class="embed dark">
|
||||
<div data-youtube data-youtube-id="SomZsr1J7ao" data-autoplay data-loop data-mute data-no-controls></div>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
<div class="wrap aligncenter">
|
||||
<h2><strong>Overlay</strong></h2>
|
||||
<p><code>.fullscreen[class*="bg-"] > .embed.dark</code> or .light</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-primary">
|
||||
<span class="background-bottom dark" style="background-image:url('https://source.unsplash.com/RkBTPqPEGDo/1600x800)"></span>
|
||||
<div class="wrap aligncenter">
|
||||
<h3>
|
||||
<svg class="fa-map">
|
||||
<use xlink:href="#fa-map"></use>
|
||||
</svg>
|
||||
Maps & Charts
|
||||
</h3>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-black-blue">
|
||||
<div class="wrap size-50">
|
||||
<p class="text-context">Status of Net Neutrality around the world.</p>
|
||||
<div class="embed">
|
||||
<iframe width='800' height='450' src='https://dejiaccessnow.carto.com/viz/4f239c60-356f-11e5-b01c-0e853d047bba/embed_map' allowfullscreen></iframe>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<div class="card-50 bg-white">
|
||||
<figure>
|
||||
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3170.254536199183!2d-5.994303837186783!3d37.38381233311839!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xbaa976bfaec1fe87!2sReal+Alc%C3%A1zar+de+Sevilla!5e0!3m2!1ses!2ses!4v1489408674667" width="800" height="600" allowfullscreen></iframe>
|
||||
<figcaption>
|
||||
<a href="https://maps.google.com" title="Google Maps">
|
||||
<svg class="fa-map">
|
||||
<use xlink:href="#fa-map"></use>
|
||||
</svg>
|
||||
Google Maps
|
||||
</a>
|
||||
</figcaption>
|
||||
</figure>
|
||||
<!-- end figure-->
|
||||
<div class="flex-content">
|
||||
<h2>
|
||||
Discover Seville
|
||||
</h2>
|
||||
<p>.card-50.bg-white</p>
|
||||
<ul class="description">
|
||||
<li>
|
||||
<strong class="text-label" title="Density">Density:</strong> 140/km<sup>2</sup>
|
||||
</li>
|
||||
<li><strong class="text-label" title="Population">Population:</strong> 703,021</li>
|
||||
<li><strong class="text-label" title="Website">Website:</strong> <a href="http://www.visitasevilla.es/en">visitasevilla.es</a></li>
|
||||
</ul>
|
||||
<p>
|
||||
There are many reasons to visit Seville. Its Old Town contains three UNESCO World Heritage Sites: the Alcazar palace complex, the Cathedral and the General Archive of the Indies.
|
||||
</p>
|
||||
</div>
|
||||
<!-- end .flex-content-->
|
||||
</div>
|
||||
<!-- end .card-50-->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="fullscreen">
|
||||
<div class="embed">
|
||||
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3170.254536199183!2d-5.994303837186783!3d37.38381233311839!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xbaa976bfaec1fe87!2sReal+Alc%C3%A1zar+de+Sevilla!5e0!3m2!1ses!2ses!4v1489408674667" width="800" height="600" allowfullscreen></iframe>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-60">
|
||||
<h3><a href="https://www.theatlas.com/" title="I love Quartz's charts">Charts</a></h3>
|
||||
<!-- Responsive video/iframe/chart... Add <div class="embed"> -->
|
||||
<div class="embed">
|
||||
<!-- I love Quartz's charts -->
|
||||
<div class="atlas-chart" data-id="rJt91kGnx" data-width="640" data-height="449"><img alt="Chart" src="https://www.theatlas.com/i/atlas_rJt91kGnx.png" style="max-width: 100%;"></div>
|
||||
<script src="https://www.theatlas.com/javascripts/atlas.js"></script>
|
||||
</div>
|
||||
<!-- end .embed -->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="aligncenter">
|
||||
<!-- .wrap = container width: 90% -->
|
||||
<div class="wrap">
|
||||
<h2><strong>Start in seconds</strong></h2>
|
||||
<p class="text-intro">120+ prebuilt slides ready to use.</p>
|
||||
<p>
|
||||
<a href="https://webslides.tv/webslides-latest.zip" class="button ga-track" data-ga-text="Download WebSlides (last slide demos)" title="Download WebSlides">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg>
|
||||
Free Download
|
||||
</a>
|
||||
<span class="try">
|
||||
<a href="https://www.paypal.me/jlantunez/8" title="Thanks :)">
|
||||
<svg class="fa-paypal">
|
||||
<use xlink:href="#fa-paypal"></use>
|
||||
</svg>
|
||||
Pay what you want.
|
||||
</a>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-primary aligncenter">
|
||||
<h2 class="text-emoji zoomIn"><strong><a href="https://webslides.tv" title="WebSlides">😎</a></strong></h2>
|
||||
<h3><a href="https://twitter.com/webslides" title="WebSlides on Twitter">@WebSlides</a></h3>
|
||||
</section>
|
||||
|
||||
</article>
|
||||
</main>
|
||||
<!--main-->
|
||||
<!-- Required -->
|
||||
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<script>
|
||||
window.ws = new WebSlides();
|
||||
</script>
|
||||
|
||||
<!-- OPTIONAL - svg-icons.js (fontastic.me - Font Awesome as svg icons) -->
|
||||
<script defer src="../static/js/svg-icons.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
391
demos/netflix-culture.html
Normal file
391
demos/netflix-culture.html
Normal file
@@ -0,0 +1,391 @@
|
||||
<!doctype html>
|
||||
<html lang="en" prefix="og: http://ogp.me/ns#">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- CLEAN MARKUP = GOOD KARMA.
|
||||
Hi source code lover,
|
||||
|
||||
you're a curious person and a fast learner ;)
|
||||
Let's make something beautiful together. Contribute on Github:
|
||||
https://github.com/webslides/webslides
|
||||
|
||||
Thanks!
|
||||
-->
|
||||
|
||||
<!-- SEO -->
|
||||
<title>Netflix's Culture · WebSlides</title>
|
||||
<meta name="description" content="Patty McCord wrote the document called 'Netflix Culture: Freedom & Responsibility'.It's one of the most important documents ever to come out of Silicon Valley.">
|
||||
|
||||
<!-- URL CANONICAL -->
|
||||
<!-- <link rel="canonical" href="http://your-url.com/permalink"> -->
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,700,700i%7CMaitree:200,300,400,600,700&subset=latin-ext" rel="stylesheet">
|
||||
|
||||
<!-- CSS Base -->
|
||||
<link rel="stylesheet" type="text/css" media="all" href="../static/css/base.css">
|
||||
|
||||
<!-- CSS Colors -->
|
||||
<link rel="stylesheet" type="text/css" media="all" href="../static/css/colors.css">
|
||||
|
||||
<!-- Optional - CSS SVG Icons (Font Awesome) -->
|
||||
<link rel="stylesheet" type="text/css" media="all" href="../static/css/svg-icons.css">
|
||||
|
||||
<!-- SOCIAL CARDS (ADD YOUR INFO) -->
|
||||
|
||||
<!-- FACEBOOK -->
|
||||
<!-- EDIT -->
|
||||
<meta property="og:url" content="http://your-url.com/permalink">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:title" content="WebSlides: Netflix's Culture" />
|
||||
<meta property="og:description" content="Patty McCord created Netflix's culture. This is a homage.">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta property="og:updated_time" content="2017-04-16T16:24:56">
|
||||
<!-- EDIT -->
|
||||
<meta property="og:image" content="../static/images/share-webslides.jpg" >
|
||||
<!-- EDIT -->
|
||||
<meta property="og:image:width" content="800">
|
||||
<meta property="og:image:height" content="429">
|
||||
|
||||
<!-- TWITTER -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:site" content="@webslides">
|
||||
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:creator" content="@jlantunez">
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:title" content="WebSlides: Netflix's Culture">
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:description" content="Patty McCord created Netflix's culture. This is a homage.">
|
||||
<!-- EDIT -->
|
||||
<meta name="twitter:image" content="../static/images/share-webslides.jpg">
|
||||
|
||||
<!-- EDIT -->
|
||||
|
||||
<!-- FAVICONS -->
|
||||
<link rel="shortcut icon" sizes="16x16" href="../static/images/favicons/favicon.png">
|
||||
<link rel="shortcut icon" sizes="32x32" href="../static/images/favicons/favicon-32.png">
|
||||
<link rel="apple-touch-icon icon" sizes="76x76" href="../static/images/favicons/favicon-76.png">
|
||||
<link rel="apple-touch-icon icon" sizes="120x120" href="../static/images/favicons/favicon-120.png">
|
||||
<link rel="apple-touch-icon icon" sizes="152x152" href="../static/images/favicons/favicon-152.png">
|
||||
<link rel="apple-touch-icon icon" sizes="180x180" href="../static/images/favicons/favicon-180.png">
|
||||
<link rel="apple-touch-icon icon" sizes="192x192" href="../static/images/favicons/favicon-192.png">
|
||||
|
||||
<!-- Android -->
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="theme-color" content="#333333">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header role="banner">
|
||||
<nav role="navigation">
|
||||
<p class="logo"><a href="https://webslides.tv" title="WebSlides">WebSlides</a></p>
|
||||
<ul>
|
||||
<li class="github">
|
||||
<a rel="external" href="https://github.com/webslides/webslides" title="Github">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
<em>WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<li class="twitter">
|
||||
<a rel="external" href="https://twitter.com/webslides" title="Twitter">
|
||||
<svg class="fa-twitter">
|
||||
<use xlink:href="#fa-twitter"></use>
|
||||
</svg>
|
||||
<em>@WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/webslides" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>webslides</em></a></li> -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main role="main">
|
||||
<article id="webslides">
|
||||
|
||||
<!-- Quick Guide
|
||||
- Each parent <section> in the <article id="webslides"> element is an individual slide.
|
||||
- Vertical sliding = <article id="webslides" class="vertical">
|
||||
- <div class="wrap"> = container 90% / <div class="wrap size-50"> = 45%;
|
||||
-->
|
||||
|
||||
<section class="bg-red">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/R1J6Z1cnJZc/1600x800')"></span>
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap aligncenter">
|
||||
<h1>
|
||||
<strong>Netflix's Culture</strong>
|
||||
</h1>
|
||||
<p class="text-symbols">* * * </p>
|
||||
<p><a class="button ghost" href="https://webslides.tv/webslides-latest.zip" title="Download WebSlides for free">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg> WebSlides</a>
|
||||
</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-50 bg-white">
|
||||
<h2>
|
||||
<svg class="fa-info-circle large">
|
||||
<use xlink:href="#fa-info-circle"></use>
|
||||
</svg>
|
||||
<strong>A bit of context</strong>
|
||||
</h2>
|
||||
<hr>
|
||||
<p><a href="http://firstround.com/review/The-woman-behind-the-Netflix-Culture-doc/">Patty McCord</a> created <a href="https://jobs.netflix.com/life-at-netflix">Netflix's culture</a>. She wrote the document called <strong>"Netflix Culture: Freedom & Responsibility."</strong> (2009). So far, it's been shared over 16 million times on <a href="https://www.slideshare.net/reed2001/culture-1798664">Slideshare</a> and has been called "the most important document ever to come out of the Valley" by Sheryl Sandberg.</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="grid vertical-align">
|
||||
<div class="column">
|
||||
<h3><strong>We seek excellence</strong></h3>
|
||||
</div>
|
||||
<div class="column">
|
||||
<p class="text-intro">We value candor, transparency, and courage. <strong>We embrace context and avoid control</strong>, seeking insight and understanding to make sound decisions.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-red">
|
||||
<span class="background" style="background-image:url('https://source.unsplash.com/BYYu5nvQoUM/1600x800')"></span>
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap aligncenter fadeInUp">
|
||||
<h3><strong>Diversity & Inclusiveness</strong></h3>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50">
|
||||
<h2><strong>7 Aspects</strong> of our Culture</h2>
|
||||
<hr>
|
||||
<ol class="text-cols">
|
||||
<li><strong>Values are what we Value</strong></li>
|
||||
<li>High Performance</li>
|
||||
<li>Freedom & Responsibility</li>
|
||||
<li>Context, not Control</li>
|
||||
<li>Highly Alined, Loosely Coupled</li>
|
||||
<li>Pay Top of Market</li>
|
||||
<li>Promotions & Development</li>
|
||||
</ol>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50 bg-white">
|
||||
<h3><strong>1/7 Values are what we value</strong></h3>
|
||||
<p class="text-intro">Make your values mean something.</p>
|
||||
<hr>
|
||||
<p>Many companies have nice sounding value statements displayed in the lobby. Enron, whose leaders went to jail, and which went <strong>bankrupt from <a href="https://www.youtube.com/watch?v=jrEf8uabe7E">fraud</a></strong> had these values displayed in their lobby: <strong>integrity, communication, respect, and excellence</strong>.</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50">
|
||||
<h2><strong>9 Behaviors</strong></h2>
|
||||
<p class="text-intro">At Netflix, we particularly value the following nine behaviors and skills. We hire and promote people who demonstrate these nine.</p>
|
||||
<hr>
|
||||
<ol class="text-cols">
|
||||
<li>Judgment</li>
|
||||
<li>Communication</li>
|
||||
<li>Impact</li>
|
||||
<li>Curiosity</li>
|
||||
<li>Innovation</li>
|
||||
<li>Courage</li>
|
||||
<li>Passion</li>
|
||||
<li>Honesty</li>
|
||||
<li>Selflessness</li>
|
||||
</ol>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50">
|
||||
<h2><strong>7 Aspects</strong> of our Culture</h2>
|
||||
<hr>
|
||||
<ol class="text-cols">
|
||||
<li><strong>Values are what we Value</strong></li>
|
||||
<li><strong>High Performance</strong></li>
|
||||
<li>Freedom & Responsibility</li>
|
||||
<li>Context, not Control</li>
|
||||
<li>Highly Alined, Loosely Coupled</li>
|
||||
<li>Pay Top of Market</li>
|
||||
<li>Promotions & Development</li>
|
||||
</ol>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-black">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/8lUTnkZXZSA/1600x800')"></span>
|
||||
<div class="wrap">
|
||||
<h3><strong>2/7 High Performance</strong></h3>
|
||||
<ul class="flexblock features">
|
||||
<li>
|
||||
<div>
|
||||
<h2>
|
||||
<svg class="fa-users">
|
||||
<use xlink:href="#fa-users"></use>
|
||||
</svg>
|
||||
We're a team
|
||||
</h2>
|
||||
not a family.
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<h2>
|
||||
<svg class="fa-trophy">
|
||||
<use xlink:href="#fa-trophy"></use>
|
||||
</svg>
|
||||
We're a pro sports team
|
||||
</h2>
|
||||
not a kid's recreational team.
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<h2>
|
||||
<svg class="fa-star">
|
||||
<use xlink:href="#fa-star"></use>
|
||||
</svg>
|
||||
We have stars
|
||||
</h2>
|
||||
in every position.
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<span class="background" style="background-image:url('https://source.unsplash.com/M-H70CDJnDI/1600x800')"></span>
|
||||
<div class="wrap size-60 bg-trans-dark">
|
||||
<h4><strong>Why are we so manic on high performance?</strong></h4>
|
||||
<p class="text-intro">In procedural work, the best are 2x better than the average.</p>
|
||||
<hr>
|
||||
<p class="text-intro">In creative work, the best are 10x better than the average, so huge premium on creating effective teams of the best.</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-black">
|
||||
<span class="background" style="background-image:url('https://source.unsplash.com/26qZsuRwm0c/1600x800')"></span>
|
||||
<div class="wrap aligncenter">
|
||||
<h2><strong>Content that people love</strong></h2>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="fullscreen">
|
||||
<div class="embed">
|
||||
<video autoplay loop poster="https://webslides.tv/static/images/netflix.jpg">
|
||||
<source src="https://webslides.tv/static/videos/netflix.mp4" type="video/mp4">
|
||||
</video>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-50">
|
||||
<h3><strong>3/7 Freedom & Responsibility</strong></h3>
|
||||
<p class="text-intro">Most companies have complex policies around what you can expense, how you travel, what gifts you can accept, etc.</p>
|
||||
<hr>
|
||||
<p class="text-intro"><strong>Netflix's Policy</strong>: "Act in Netflix's best interest" (5 words long).</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<h3><strong>"Act in Netflix's best interest"</strong> generally means...</h3>
|
||||
<ul class="flexblock border">
|
||||
<li>
|
||||
Expense only what you would otherwise not spend.
|
||||
</li>
|
||||
<li>
|
||||
Travel as you would if it were your own money.
|
||||
</li>
|
||||
<li>
|
||||
What gifts you can accept?
|
||||
Disclose non-trivial vendor gifts.
|
||||
</li>
|
||||
<li>
|
||||
Take from Netflix only when it is inefficient to not take (calls...)
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap size-50 bg-white">
|
||||
<h4><strong>Summary of Freedom & Responsibility</strong></h4>
|
||||
<hr>
|
||||
<ol>
|
||||
<li>As we grow, minimize rules.</li>
|
||||
<li>Inhibit chaos with ever more high performance people.</li>
|
||||
<li><strong>Flexibility is more important than efficiency</strong> in the long term.</li>
|
||||
</ol>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<div class="grid">
|
||||
<div class="column">
|
||||
<p class="text-context">
|
||||
This is a homage.
|
||||
</p>
|
||||
<p class="text-intro"><a href="http://firstround.com/review/The-woman-behind-the-Netflix-Culture-doc/">Patty McCord</a> wrote <strong>"Netflix Culture: Freedom & Responsibility"</strong>. Go to <a href="https://www.slideshare.net/reed2001/culture-1798664">Slideshare</a> to read the whole document.</p>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div>
|
||||
<div class="embed">
|
||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/uvG0aCbuG60?rel=0&controls=0" allowfullscreen></iframe>
|
||||
</div>
|
||||
<!-- normalize flexbox -->
|
||||
</div>
|
||||
<!-- end .embed -->
|
||||
</div>
|
||||
<!-- end .column -->
|
||||
</div>
|
||||
<!-- end .grid -->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
|
||||
</article>
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<footer>
|
||||
<div class="wrap">
|
||||
<p>
|
||||
<span class="alignright"><a href="http://netflix.com" title="Netflix"><img src="../static/images/logos/netflix.svg" alt="Netflix"></a></span>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
<script>
|
||||
window.ws = new WebSlides();
|
||||
</script> <!-- Autoslide? window.ws = new WebSlides({ autoslide: 8000 }); -->
|
||||
|
||||
<!-- OPTIONAL - svg-icons.js (fontastic.me - Font Awesome as svg icons) -->
|
||||
<script defer src="../static/js/svg-icons.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -9,10 +9,9 @@
|
||||
|
||||
you're a curious person and a fast learner ;)
|
||||
Let's make something beautiful together. Contribute on Github:
|
||||
https://github.com/jlantunez/webslides
|
||||
https://github.com/webslides/webslides
|
||||
|
||||
Thanks,
|
||||
@jlantunez.
|
||||
Thanks!
|
||||
-->
|
||||
|
||||
<!-- SEO -->
|
||||
@@ -71,7 +70,7 @@
|
||||
<p class="logo"><a href="../index.html" title="WebSlides">WebSlides</a></p>
|
||||
<ul>
|
||||
<li class="github">
|
||||
<a rel="external" href="https://github.com/jlantunez/webslides" title="Github">
|
||||
<a rel="external" href="https://github.com/webslides/webslides" title="Github">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
@@ -86,7 +85,7 @@
|
||||
<em>@WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/jlantunez" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>jlantunez</em></a></li> -->
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/webslides" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>webslides</em></a></li> -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
@@ -97,7 +96,7 @@
|
||||
<!-- Quick Guide
|
||||
- Each parent <section> in the <article id="webslides"> element is an individual slide.
|
||||
- Vertical sliding = <article id="webslides" class="vertical">
|
||||
- <div class="wrap"> = container 1200px
|
||||
- <div class="wrap"> = container 90% / <div class="wrap size-50"> = 45%;
|
||||
-->
|
||||
|
||||
<section class="bg-primary">
|
||||
@@ -105,14 +104,14 @@
|
||||
<div class="wrap aligncenter">
|
||||
<h1 class="text-landing">Portfolios</h1>
|
||||
<p class="text-symbols">* * * </p>
|
||||
<p><a class="button ghost" href="https://github.com/jlantunez/webslides/archive/master.zip" title="Download WebSlides for free"><svg class="fa-cloud-download">
|
||||
<p><a class="button ghost" href="https://webslides.tv/webslides-latest.zip" title="Download WebSlides for free"><svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg> WebSlides</a>
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap aligncenter">
|
||||
<p class="text-subtitle">Design faster, better.</p>
|
||||
<h2>Create a beautiful portfolio for your work</h2>
|
||||
@@ -120,7 +119,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="grid vertical-align">
|
||||
<div class="column">
|
||||
@@ -138,7 +137,7 @@
|
||||
<span class="code-comment"><!-- Slide 2 --></span>
|
||||
<section class="bg-primary">
|
||||
<div class="wrap">
|
||||
<h2>.wrap = container 1200px</h2>
|
||||
<h2>.wrap = container (width: 90%)</h2>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
@@ -333,7 +332,7 @@
|
||||
</div>
|
||||
</section>
|
||||
<section class="bg-black-blue">
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/nw6xREmkXkg/')"></span>
|
||||
<span class="background dark" style="background-image:url('https://source.unsplash.com/LW3FskrgQ9M/')"></span>
|
||||
<div class="wrap size-50">
|
||||
<p class="text-subtitle">Mercedes-Benz</p>
|
||||
<h2>Defining a new platform for the connected car</h2>
|
||||
@@ -432,7 +431,7 @@
|
||||
<section class="aligncenter">
|
||||
<div class="wrap size-50">
|
||||
<figure class="browser">
|
||||
<a href="#" title="Title"><img src="../static/images/cover-apple.jpg" alt="Screenshot"></a>
|
||||
<a href="#" title="Title"><img src="https://webslides.tv/static/images/cover-apple.jpg" alt="Screenshot"></a>
|
||||
</figure>
|
||||
<p>HTML/CSS Browser: <code>.browser</code></p>
|
||||
</div>
|
||||
@@ -569,7 +568,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-apple aligncenter">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2 class="text-data">$48 Billion</h2>
|
||||
<h3>Revenue in Q2 2019</h3>
|
||||
@@ -1211,7 +1210,7 @@
|
||||
</section>
|
||||
<section>
|
||||
<span class="background-right" style="background-image:url('../static/images/iphone.png')"></span>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h2>Call to action</h2>
|
||||
@@ -1389,7 +1388,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50 aligncenter">
|
||||
<h2><strong>Why WebSlides?</strong></h2>
|
||||
<blockquote>
|
||||
@@ -1400,9 +1399,9 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-black-blue">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<blockquote class="wall">
|
||||
<blockquote class="text-quote">
|
||||
<p>When I'm working on a problem, I never think about beauty. But when I have finished, if the solution is not beautiful, I know it is wrong.</p>
|
||||
<p><cite><a href="https://en.wikipedia.org/wiki/Buckminster_Fuller">R. Buckminster Fuller</a>.</cite></p>
|
||||
</blockquote>
|
||||
@@ -1619,7 +1618,7 @@
|
||||
</div>
|
||||
</section>
|
||||
</article></pre>
|
||||
<p>Just 3 basic animations: .fadeIn, .fadeInUp, and .zoomIn.</p>
|
||||
<p>Just 5 basic animations: .fadeIn, .fadeInUp, .zoomIn, .slideInLeft, and .slideInRight.</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
@@ -1720,12 +1719,13 @@
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h3>Responsive Videos</h3>
|
||||
<h3><a href="https://webslides.tv/demos/media#slide=2">YouTube API</a></h3>
|
||||
<p>Embed videos with loop, autoplay, and muted attributes.</p>
|
||||
<pre><div class="embed">
|
||||
<iframe src="https://www.youtube.com/embed/XjJQBjWYDTs">
|
||||
</iframe>
|
||||
</div></pre>
|
||||
<p><code>.embed</code></p>
|
||||
<p><code>.embed</code> (responsive)</p>
|
||||
</div>
|
||||
<!-- end .content-left -->
|
||||
<div class="content-left">
|
||||
@@ -1743,7 +1743,7 @@
|
||||
<div class="wrap size-60">
|
||||
<!-- Responsive video/iframe... Add <div class="embed"> -->
|
||||
<div class="embed">
|
||||
<iframe width="800" height="450" src="https://www.youtube.com/embed/vXeF6Uot8pk?list=PL27Ptt5XwkS3YU7n0p7Qer2j_DhTSi0jW" allowfullscreen></iframe>
|
||||
<div data-youtube data-youtube-id="vXeF6Uot8pk" data-autoplay></div>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
</div>
|
||||
@@ -1752,28 +1752,33 @@
|
||||
<section class="fullscreen">
|
||||
<!-- Fullscreen Video -->
|
||||
<div class="embed">
|
||||
<iframe width="800" height="450" src="https://www.youtube.com/embed/b4LrTkWq9jU" allowfullscreen></iframe>
|
||||
<div data-youtube data-youtube-id="b4LrTkWq9jU" data-autoplay></div>
|
||||
</div>
|
||||
<!-- .end .embed -->
|
||||
</section>
|
||||
<section class="bg-black aligncenter">
|
||||
<video class="background-video" autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<section class="fullscreen bg-black aligncenter">
|
||||
<div class="embed">
|
||||
<video autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<source src="https://webslides.tv/static/videos/peggy.mp4" type="video/mp4">
|
||||
</video>
|
||||
<!-- .wrap = container 1200px -->
|
||||
</video>
|
||||
</div><!-- .end .embed -->
|
||||
<!-- .wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50">
|
||||
<h2><strong>We build brands with integrity and substance</strong></h2>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="bg-blue">
|
||||
<video class="background-video dark" autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<section class="fullscreen bg-blue">
|
||||
<div class="embed dark">
|
||||
<video autoplay loop muted poster="https://webslides.tv/static/images/peggy.jpg">
|
||||
<source src="https://webslides.tv/static/videos/peggy.mp4" type="video/mp4">
|
||||
</video>
|
||||
<!-- .wrap = container 1200px -->
|
||||
</video>
|
||||
</div>
|
||||
<!-- .embed -->
|
||||
<!-- .wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50">
|
||||
<h2><strong>We help with design direction</strong></h2>
|
||||
<p>0verlay: <code>section.bg-blue > .background-video.dark</code> or .light</p>
|
||||
<p>0verlay: <code>section.fullscreen.bg-blue > .embed.dark</code> or .light</p>
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
@@ -1858,8 +1863,9 @@
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<script src="../static/js/svg-icons.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<script>
|
||||
window.ws = new WebSlides();
|
||||
</script>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<!doctype html>
|
||||
<html lang="en-US" prefix="og: http://ogp.me/ns#">
|
||||
<html lang="en" prefix="og: http://ogp.me/ns#">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
@@ -9,10 +9,9 @@
|
||||
|
||||
you're a curious person and a fast learner ;)
|
||||
Let's make something beautiful together. Contribute on Github:
|
||||
https://github.com/jlantunez/webslides
|
||||
https://github.com/webslides/webslides
|
||||
|
||||
Thanks,
|
||||
@jlantunez.
|
||||
Thanks!
|
||||
-->
|
||||
|
||||
<!-- SEO -->
|
||||
@@ -73,7 +72,7 @@
|
||||
<p class="logo"><a href="https://webslides.tv" title="WebSlides">WebSlides</a></p>
|
||||
<ul>
|
||||
<li class="github">
|
||||
<a rel="external" href="https://github.com/jlantunez/webslides" title="Github">
|
||||
<a rel="external" href="https://github.com/webslides/webslides" title="Github">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
@@ -88,7 +87,7 @@
|
||||
<em>@WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/jlantunez" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>jlantunez</em></a></li> -->
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/webslides" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>webslides</em></a></li> -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
@@ -99,11 +98,11 @@
|
||||
<!-- Quick Guide
|
||||
- Each parent <section> in the <article id="webslides"> element is an individual slide.
|
||||
- Vertical sliding = <article id="webslides" class="vertical">
|
||||
- <div class="wrap"> = container 1200px / <div class="wrap size-50"> = 600px;
|
||||
- <div class="wrap"> = container 90% / <div class="wrap size-50"> = 45%;
|
||||
-->
|
||||
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap aligncenter">
|
||||
<h1 class="text-landing">Good Karma</h1>
|
||||
<p class="text-intro">
|
||||
@@ -114,7 +113,7 @@
|
||||
<ul>
|
||||
<li><a href="https://twitter.com/webslides">Twitter</a></li>
|
||||
<li><a href="https://dribbble.com/tags/webslides">Dribbble</a></li>
|
||||
<li><a href="https://github.com/jlantunez/webslides">Github</a></li>
|
||||
<li><a href="https://github.com/webslides/webslides">Github</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
@@ -123,7 +122,9 @@
|
||||
<section class="bg-black aligncenter">
|
||||
<!-- Overlay/Opacity: [class*="bg-"] > .background.dark or .light -->
|
||||
<span class="background" style="background-image:url('https://source.unsplash.com/OkAAx4mI2Hc/')"></span>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!-- background with a frame frame -->
|
||||
<span class="background frame"></span>
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap fadeInUp">
|
||||
<h1>
|
||||
Everyone
|
||||
@@ -136,7 +137,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<!-- alignment [class*="content-"] = container max-width:50% = 600px -->
|
||||
<div class="content-center">
|
||||
@@ -150,7 +151,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="grid vertical-align">
|
||||
<div class="column">
|
||||
@@ -168,7 +169,7 @@
|
||||
<span class="code-comment"><!-- Slide 2 --></span>
|
||||
<section class="bg-primary">
|
||||
<div class="wrap">
|
||||
<h2>.wrap = container 1200px</h2>
|
||||
<h2>.wrap = container (width: 90%)</h2>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
@@ -181,7 +182,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="content-left">
|
||||
<h2>WebSlides was made to inspire people.</h2>
|
||||
@@ -302,7 +303,7 @@
|
||||
</ul>
|
||||
</div>
|
||||
<div class="column">
|
||||
<a href="https://github.com/jlantunez/webslides" title="Github"><img src="../static/images/setup.png" alt="WebSlides Files"></a>
|
||||
<a href="https://github.com/webslides/webslides" title="Github"><img class="aligncenter" src="../static/images/setup.png" alt="WebSlides Files"></a>
|
||||
</div>
|
||||
<div class="column">
|
||||
<h3>Extensible</h3>
|
||||
@@ -338,8 +339,9 @@
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<script src="../static/js/svg-icons.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<!-- Autoslide 5 seconds. If you don't want autoslide, remove: {autoslide: 5000} -->
|
||||
<script>
|
||||
window.ws = new WebSlides({ autoslide: 5000 });
|
||||
|
@@ -1,16 +0,0 @@
|
||||
## Click To Nav plugin
|
||||
|
||||
This plugin is included by default but disabled. In order to enable it, the option `changeOnClick` must be passed as
|
||||
`true`.
|
||||
|
||||
```javascript
|
||||
const ws = new WebSlides({ changeOnClick: true });
|
||||
```
|
||||
|
||||
This will make every click to navigate to the next slide except for clicks that happens on the following elements:
|
||||
|
||||
* `input`.
|
||||
* `select` or `option`.
|
||||
* `button`.
|
||||
* `a`.
|
||||
* Any element with the attribute `data-prevent-nav`.
|
@@ -1,136 +0,0 @@
|
||||
## Project Setup
|
||||
|
||||
This project assumes you have NodeJS. You should also have npm installed as well (this usually comes packaged with Node). Once you have it cloned, you should run `npm install` to get all the dependencies.
|
||||
|
||||
Finally, run one of the following commands in the cloned directory:
|
||||
|
||||
- `npm run dev`: This starts a dev server with autoreload on the port `8080`.
|
||||
- `npm run build`: This creates the `dist` files.
|
||||
|
||||
## JavaScript
|
||||
|
||||
In order to bootstrap the WebSlides you'll need to create a instance of it:
|
||||
|
||||
```javascript
|
||||
const ws = new WebSlides();
|
||||
```
|
||||
|
||||
That'll make everything run without any hassle.
|
||||
|
||||
### Options
|
||||
|
||||
WebSlides constructor accepts an object with options.
|
||||
|
||||
| Param | Type | Default | Description |
|
||||
|-----------|----------------|-----------|-------------------------------------------------------------------------------|
|
||||
| `autoslide` | `number` or `boolean` | `false` | Amount of milliseconds to wait to go to next slide automatically. |
|
||||
| `changeOnClick` | `boolean` | `false` | If true, clicking on the page will go to the next slide unless it's a clickable element. See [ClickToNav docs](./click-to-nav.md) for more info. |
|
||||
|
||||
|
||||
```javascript
|
||||
const ws = new WebSlides({
|
||||
autoslide: false
|
||||
});
|
||||
```
|
||||
|
||||
### API
|
||||
|
||||
Do you want to get your hands dirty? This is the API for the WebSlides module:
|
||||
|
||||
<dl>
|
||||
<dt><a href="#goToSlide">goToSlide(slideIndex, opt_forward)</a></dt>
|
||||
<dd><p>Goes to a given slide.</p></dd>
|
||||
<dt><a href="#goNext">goNext()</a></dt>
|
||||
<dd><p>Goes to the next slide.</p></dd>
|
||||
<dt><a href="#goPrev">goPrev()</a></dt>
|
||||
<dd><p>Goes to the previous slide.</p>
|
||||
<dt><a href="#play">play()</a></dt>
|
||||
<dd><p>Starts autosliding.</p>
|
||||
<dt><a href="#stop">stop()</a></dt>
|
||||
<dd><p>Stops autosliding.</p>
|
||||
</dd>
|
||||
<dt><a href="#registerPlugin">registerPlugin(key, cto)</a></dt>
|
||||
<dd><p>Registers a plugin to be loaded when the instance is created. It allows
|
||||
(on purpose) to replace default plugins.
|
||||
Those being:</p>
|
||||
<ul>
|
||||
<li>Navigation</li>
|
||||
<li>Hash</li>
|
||||
<li>Keyboard</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<a name="goToSlide"></a>
|
||||
|
||||
### `goToSlide(slideI, forward)`
|
||||
Goes to a given slide.
|
||||
|
||||
| Param | Type | Description |
|
||||
| --- | --- | --- | --- |
|
||||
| slideIndex | <code>number</code> | The slide index. |
|
||||
| forward | <code>boolean</code> | Whether we're forcing moving forward/backwards. This parameter is used only from the `goNext`, `goPrev` functions to adjust the scroll animations. |
|
||||
|
||||
<a name="goNext"></a>
|
||||
|
||||
### `goNext()`
|
||||
Goes to the next slide. If the page is vertical, it will animate the scroll down.
|
||||
|
||||
<a name="goPrev"></a>
|
||||
|
||||
### `goPrev()`
|
||||
Goes to the previous slide. If the page is vertical, it will animate the scroll up
|
||||
|
||||
<a name="play"></a>
|
||||
|
||||
### `play(time)`
|
||||
Autoplays slides. If time is omitted, it will use the default time passed to the constructor. This is useful if you don't want to autoslide from the beginning but you want to add a button to do it.
|
||||
|
||||
| Param | Type | Description |
|
||||
| --- | --- | --- | --- |
|
||||
| time | <code>number</code> | Amount of milliseconds to wait to go to next slide automatically. |
|
||||
|
||||
<a name="stop"></a>
|
||||
|
||||
### `stop()`
|
||||
Stops autosliding.
|
||||
|
||||
<a name="registerPlugin"></a>
|
||||
|
||||
### `registerPlugin(key, cto)`
|
||||
Registers a plugin to be loaded when the instance is created. It allows
|
||||
(on purpose) to replace default plugins.
|
||||
|
||||
Those being:
|
||||
|
||||
- Navigation
|
||||
- Hash
|
||||
- Keyboard
|
||||
|
||||
| Param | Type | Description |
|
||||
| --- | --- | --- |
|
||||
| key | <code>string</code> | They key under which it'll be stored inside of the instance, inside the plugins dict. |
|
||||
| cto | <code>function</code> | Plugin constructor. |
|
||||
|
||||
### Plugin development
|
||||
|
||||
Almost every single feature of WebSlides is a plugin that can be overwritten and you are able to create your custom plugins. Just call `registerPlugin` (as seen above) **before creating** the instance:
|
||||
|
||||
```javascript
|
||||
// Adding the constructor to WebSlides
|
||||
WebSlides.registerPlugin('myPlugin', MyPlugin);
|
||||
|
||||
// Starting WebSlides
|
||||
// Your plugin will be constructed at this time and it will receive the webslides instance as the only parameter.
|
||||
const ws = new WebSlides();
|
||||
// You can also access ws.plugins.myPlugin now
|
||||
```
|
||||
|
||||
This allows you to rewrite the navigation to use a menu (for example) or add that missing piece of functionality you'd like to see. See [this part of the code](../src/js/modules/webslides.js#L11) to see all the plugins we're using and the name they're using.
|
||||
|
||||
Make sure to let us know so it could get added to the repo!
|
||||
|
||||
### Roadmap
|
||||
|
||||
* Fix crossbrowser issues. Safari mostly.
|
||||
* Write tests
|
36
error.html
36
error.html
@@ -3,39 +3,39 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
|
||||
<!-- CLEAN MARKUP = GOOD KARMA.
|
||||
Hi source code lover,
|
||||
|
||||
|
||||
you're a curious person and a fast learner ;)
|
||||
Let's make something beautiful together. Contribute on Github:
|
||||
https://github.com/jlantunez/webslides
|
||||
|
||||
https://github.com/webslides/webslides
|
||||
|
||||
Thanks,
|
||||
@jlantunez.
|
||||
-->
|
||||
|
||||
|
||||
<!-- SEO -->
|
||||
<title>Page not found (404) - WebSlides</title>
|
||||
<meta name="description" content="Unfortunately, this page does not exist.">
|
||||
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,700,700i%7CMaitree:200,300,400,600,700&subset=latin-ext" rel="stylesheet">
|
||||
|
||||
|
||||
<!-- CSS Base -->
|
||||
<link rel="stylesheet" type='text/css' media='all' href="static/css/base.css">
|
||||
|
||||
|
||||
<!-- CSS Colors -->
|
||||
<link rel="stylesheet" type='text/css' media='all' href="static/css/colors.css">
|
||||
|
||||
|
||||
<!-- Optional - CSS SVG Icons (Font Awesome) -->
|
||||
<link rel="stylesheet" type='text/css' media='all' href="static/css/svg-icons.css">
|
||||
|
||||
|
||||
|
||||
<!-- FAVICONS -->
|
||||
<link rel="shortcut icon" sizes="16x16" href="static/images/favicons/favicon.png">
|
||||
<link rel="shortcut icon" sizes="32x32" href="static/images/favicons/favicon-32.png">
|
||||
|
||||
|
||||
<!-- Android -->
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="theme-color" content="#333333">
|
||||
@@ -46,7 +46,7 @@
|
||||
<p class="logo"><a href="index.html" title="WebSlides">WebSlides</a></p>
|
||||
<ul>
|
||||
<li class="github">
|
||||
<a rel="external" href="https://github.com/jlantunez/webslides" title="Github">
|
||||
<a rel="external" href="https://github.com/webslides/webslides" title="Github">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
@@ -61,11 +61,11 @@
|
||||
<em>@WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/jlantunez" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>jlantunez</em></a></li> -->
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/webslides" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>jlantunez</em></a></li> -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
|
||||
<main role="main">
|
||||
<section class="aligncenter">
|
||||
<div class="wrap">
|
||||
@@ -73,14 +73,14 @@
|
||||
<p class="text-symbols">* * *</p>
|
||||
<p>Please check your URL or <a href="index.html">return to the Home Page</a>.</p>
|
||||
</div>
|
||||
<!-- end .wrap -->
|
||||
<!-- end .wrap -->
|
||||
</section>
|
||||
<!-- end section -->
|
||||
<!-- end section -->
|
||||
</main>
|
||||
<!-- end main -->
|
||||
<!-- end main -->
|
||||
|
||||
<!-- svg-icons.js is optional (fontastic.me - Font Awesome as svg icons) -->
|
||||
<script defer src="static/js/svg-icons.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
52
index.html
52
index.html
@@ -9,7 +9,7 @@
|
||||
|
||||
you're a curious person and a fast learner ;)
|
||||
Let's make something beautiful together. Contribute on Github:
|
||||
https://github.com/jlantunez/webslides
|
||||
https://github.com/webslides/webslides
|
||||
|
||||
Thanks,
|
||||
@jlantunez.
|
||||
@@ -72,7 +72,7 @@
|
||||
<p class="logo"><a href="index.html" title="WebSlides">WebSlides</a></p>
|
||||
<ul>
|
||||
<li class="github">
|
||||
<a rel="external" href="https://github.com/jlantunez/webslides" title="Github">
|
||||
<a rel="external" href="https://github.com/webslides/webslides" title="Github">
|
||||
<svg class="fa-github">
|
||||
<use xlink:href="#fa-github"></use>
|
||||
</svg>
|
||||
@@ -87,7 +87,7 @@
|
||||
<em>@WebSlides</em>
|
||||
</a>
|
||||
</li>
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/jlantunez" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>jlantunez</em></a></li> -->
|
||||
<!-- <li class="dribbble"><a rel="external" href="http://dribbble.com/webslides" title="Dribbble"><svg class="fa-dribbble"><use xlink:href="#fa-dribbble"></use></svg> <em>webslides</em></a></li> -->
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
@@ -97,19 +97,19 @@
|
||||
<!-- Quick Guide
|
||||
- Each parent <section> in the <article id="webslides"> element is an individual slide.
|
||||
- Vertical sliding = <article id="webslides" class="vertical">
|
||||
- <div class="wrap"> = container 1200px / <div class="wrap size-50"> = 600px;
|
||||
- <div class="wrap"> = container 90% / <div class="wrap size-50"> = 45%;
|
||||
-->
|
||||
|
||||
<section>
|
||||
<span class="background" style="background-image:url('https://webslides.tv/static/images/nature.jpg')"></span>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap aligncenter">
|
||||
<h1><strong>Create beautiful stories</strong></h1>
|
||||
<p class="text-intro">WebSlides makes HTML presentations easy.<br>
|
||||
Just the essentials and using lovely CSS.
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://github.com/jlantunez/webslides/archive/master.zip" class="button zoomIn" title="Download WebSlides for free">
|
||||
<a href="https://webslides.tv/webslides-latest.zip" class="button zoomIn" title="Download WebSlides for free">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg>
|
||||
@@ -120,15 +120,15 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap size-50 aligncenter">
|
||||
<h2><strong>Why WebSlides?</strong></h2>
|
||||
<p class="text-intro">Good karma and productivity.</p>
|
||||
<p class="text-intro"><a href="demos/why-webslides.html" title="Why WebSlides?">Presentations</a>, <a href="demos/landings.html" title="Landings">landings</a>, <a href="demos/portfolios.html" title="Portfolios">portfolios</a>, and <a href="demos/longforms.html" title="Longforms">longforms</a>.</p>
|
||||
<div class="bg-white shadow">
|
||||
<ul class="flexblock reasons">
|
||||
<li>
|
||||
<h2>An opportunity to engage.</h2>
|
||||
<p>WebSlides is about telling the story, and sharing it in a beautiful way. Hypertext and clean code as narrative elements.</p>
|
||||
<p>WebSlides is about good karma. This is about telling the story, and sharing it in a beautiful way. HTML and CSS as narrative elements.</p>
|
||||
</li>
|
||||
<li>
|
||||
<h2>Work better, faster.</h2>
|
||||
@@ -141,7 +141,7 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section>
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<div class="grid vertical-align">
|
||||
<div class="column">
|
||||
@@ -159,7 +159,7 @@
|
||||
<span class="code-comment"><!-- Slide 2 --></span>
|
||||
<section class="bg-primary">
|
||||
<div class="wrap">
|
||||
<h2>.wrap = container 1200px</h2>
|
||||
<h2>.wrap = container (width: 90%)</h2>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
@@ -181,7 +181,7 @@
|
||||
<span>→</span>
|
||||
Simple Navigation
|
||||
</h2>
|
||||
with arrow keys and swipe.
|
||||
with arrow keys, presenter...
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
@@ -241,7 +241,7 @@
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<h2><strong>WebSlides Demos</strong></h2>
|
||||
<p>Contribute on <a href="https://github.com/jlantunez/webslides" title="Contribute on Github">Github</a>. <span class="alignright"><a href="demos/index.html" title="WebSlides Demos">View all ›</a></span></p>
|
||||
<p>Contribute on <a href="https://github.com/webslides/webslides" title="Contribute on Github">Github</a>. <span class="alignright"><a href="demos/index.html" title="WebSlides Demos">View all ›</a></span></p>
|
||||
<ul class="flexblock gallery">
|
||||
<li>
|
||||
<a href="demos/why-webslides.html" title="Why WebSlides?">
|
||||
@@ -297,14 +297,15 @@
|
||||
</svg>
|
||||
<strong>Guides</strong>
|
||||
</h4>
|
||||
<p>If you need some help, here's just two tutorials. Just a basic knowledge of HTML is required:</p>
|
||||
<p>If you need help, here's just three tutorials. Just a basic knowledge of HTML is required:</p>
|
||||
<ul class="description">
|
||||
<li><a href="demos/components.html" title="WebSlides Components">WebSlides Components</a>.</li>
|
||||
<li><a href="demos/classes.html" title="WebSlides Classes">WebSlides Classes</a>.</li>
|
||||
<li><a href="demos/media.html" title="WebSlides Media">WebSlides Media: images, videos...</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="column">
|
||||
<figure><img src="static/images/setup.png" alt="WebSlides Files"></figure>
|
||||
<figure><img class="aligncenter" src="static/images/setup.png" alt="WebSlides Files"></figure>
|
||||
</div>
|
||||
<div class="column">
|
||||
<h4>
|
||||
@@ -313,10 +314,11 @@
|
||||
</svg>
|
||||
<strong>Built to expand</strong>
|
||||
</h4>
|
||||
<p>The best way to <strong>inspire with your content</strong> is to connect on a personal level. We love these solutions:</p>
|
||||
<p>The best way to <strong>inspire with your content</strong> is to connect on a personal level:</p>
|
||||
<ul class="description">
|
||||
<li>Background images: <a href="http://unsplash.com">Unsplash</a>.</li>
|
||||
<li>CSS animations: <a href="https://daneden.github.io/animate.css/">Animate.css</a>.</li>
|
||||
<li>Longforms: <a href="http://michalsnik.github.io/aos/"> Animate on scroll</a>.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -324,12 +326,12 @@
|
||||
</div>
|
||||
</section>
|
||||
<section class="aligncenter">
|
||||
<!-- .wrap = container 1200px -->
|
||||
<!-- .wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h2><strong>Ready to Start?</strong> </h2>
|
||||
<p class="text-intro">Create your own presentation instantly. <br>120+ premium slides ready to use.</p>
|
||||
<p>
|
||||
<a href="https://github.com/jlantunez/webslides/archive/master.zip" class="button" title="Download WebSlides">
|
||||
<a href="https://webslides.tv/webslides-latest.zip" class="button" title="Download WebSlides">
|
||||
<svg class="fa-cloud-download">
|
||||
<use xlink:href="#fa-cloud-download"></use>
|
||||
</svg>
|
||||
@@ -358,12 +360,8 @@
|
||||
</svg>
|
||||
</a>
|
||||
</h2>
|
||||
<p>People share content that makes them feel inspired. WebSlides is a very effective way to engage young audiences, customers, and teams. Best, <a href="https://twitter.com/jlantunez">@jlantunez</a>.</p>
|
||||
<figure>
|
||||
<a href="http://linkedin.com/in/jlantunez" title="LinkedIN — José Luis Antúnez">
|
||||
<img class="aligncenter fadeInUp" src="https://webslides.tv/static/images/signature.png" alt="Signature">
|
||||
</a>
|
||||
</figure>
|
||||
<p>People share content that makes them feel inspired. WebSlides is a very effective way to engage young audiences, customers, and teams.</p>
|
||||
<p>Best,<br> <a href="https://twitter.com/jlantunez">@jlantunez</a>, <a href="https://twitter.com/belelros">@belelros</a>, and <a href="https://twitter.com/luissacristan">@luissacristan</a>.</p>
|
||||
</div>
|
||||
<!-- .end .content-right -->
|
||||
</div>
|
||||
@@ -375,15 +373,15 @@
|
||||
</main>
|
||||
<!-- end main -->
|
||||
|
||||
<!-- Remove #webslides element :)
|
||||
<!-- A global footer
|
||||
|
||||
<footer role="contentinfo">
|
||||
<div class="wrap">
|
||||
<p>An <a href="https://github.com/jlantunez/webslides">open source solution</a>, by <a href="https://twitter.com/jlantunez">@jlantunez</a>.</p>
|
||||
<p>An <a href="https://github.com/webslides/webslides">open source solution</a>, by <a href="https://twitter.com/webslides">@webslides</a>.</p>
|
||||
</div>
|
||||
</footer> -->
|
||||
|
||||
<script src="static/js/svg-icons.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="static/js/webslides.js"></script>
|
||||
<script>
|
||||
window.ws = new WebSlides();
|
||||
|
49
package.json
49
package.json
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "webslides",
|
||||
"version": "1.1.0",
|
||||
"version": "1.3.0",
|
||||
"description": "Making HTML presentations easy",
|
||||
"main": "index.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/jlantunez/webslides.git"
|
||||
"url": "git+https://github.com/webslides/webslides.git"
|
||||
},
|
||||
"keywords": [
|
||||
"webslides",
|
||||
@@ -24,25 +24,33 @@
|
||||
],
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/jlantunez/webslides/issues"
|
||||
"url": "https://github.com/webslides/webslides/issues"
|
||||
},
|
||||
"homepage": "https://github.com/jlantunez/webslides#readme",
|
||||
"homepage": "https://github.com/webslides/webslides#readme",
|
||||
"devDependencies": {
|
||||
"babel-cli": "^6.23.0",
|
||||
"babel-core": "^6.23.1",
|
||||
"babel-loader": "^6.3.2",
|
||||
"babel-preset-es2015": "^6.22.0",
|
||||
"ava": "^0.19.1",
|
||||
"babel-cli": "^6.24.1",
|
||||
"babel-core": "^6.24.1",
|
||||
"babel-loader": "^6.4.1",
|
||||
"babel-preset-env": "^1.4.0",
|
||||
"babel-preset-es2015": "^6.24.1",
|
||||
"babel-preset-react": "^6.24.1",
|
||||
"browser-env": "^2.0.30",
|
||||
"eslint": "^3.19.0",
|
||||
"eslint-loader": "^1.7.1",
|
||||
"npm-run-all": "^4.0.2",
|
||||
"rimraf": "^2.6.0",
|
||||
"webpack": "^2.2.1",
|
||||
"webpack-dev-server": "^2.4.1"
|
||||
"rimraf": "^2.6.1",
|
||||
"smart-banner-webpack-plugin": "^3.0.1",
|
||||
"webpack": "^2.4.1",
|
||||
"webpack-dev-server": "^2.4.2"
|
||||
},
|
||||
"scripts": {
|
||||
"prebuild": "rimraf static/js/webslide*",
|
||||
"build": "npm-run-all --parallel build:*",
|
||||
"build:main": "webpack",
|
||||
"build:main.min": "webpack --output-filename [name].min.js -p",
|
||||
"dev": "webpack-dev-server"
|
||||
"dev": "webpack-dev-server",
|
||||
"test": "ava test/*.js"
|
||||
},
|
||||
"babel": {
|
||||
"presets": [
|
||||
@@ -50,8 +58,23 @@
|
||||
"es2015",
|
||||
{
|
||||
"modules": false
|
||||
}
|
||||
},
|
||||
"@ava/stage-4",
|
||||
"@ava/transform-test-files"
|
||||
]
|
||||
]
|
||||
},
|
||||
"ava": {
|
||||
"babel": {
|
||||
"presets": [
|
||||
"es2015",
|
||||
"stage-0",
|
||||
"react"
|
||||
]
|
||||
},
|
||||
"require": [
|
||||
"babel-register",
|
||||
"./test/helpers/setup-browser-env.js"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@@ -5,10 +5,17 @@ const CLASSES = {
|
||||
CURRENT: 'current'
|
||||
};
|
||||
|
||||
const Events = {
|
||||
ENTER: 'dom:enter',
|
||||
LEAVE: 'dom:leave',
|
||||
ENABLE: 'slide:enable',
|
||||
DISABLE: 'slide:disable'
|
||||
};
|
||||
|
||||
/**
|
||||
* Wrapper for the Slide section.
|
||||
*/
|
||||
export default class Slide {
|
||||
class Slide {
|
||||
/**
|
||||
* Bootstraps the slide by saving some data, adding a class and hiding it.
|
||||
* @param {Element} el Section element.
|
||||
@@ -29,7 +36,7 @@ export default class Slide {
|
||||
*/
|
||||
this.i = i;
|
||||
|
||||
this.el.id = 'section-' + (i + 1);
|
||||
this.el.id = `section-${(i + 1)}`;
|
||||
this.el.classList.add(CLASSES.SLIDE);
|
||||
|
||||
// Hide slides by default
|
||||
@@ -54,20 +61,55 @@ export default class Slide {
|
||||
|
||||
/**
|
||||
* Moves the section to the bottom of the section's list.
|
||||
* @fires Slide#dom:leave
|
||||
* @fires Slide#dom:enter
|
||||
*/
|
||||
moveAfterLast() {
|
||||
const last = this.parent.childNodes[this.parent.childElementCount - 1];
|
||||
|
||||
this.fire_(Events.LEAVE);
|
||||
this.parent.insertBefore(this.el, last.nextSibling);
|
||||
this.fire_(Events.ENTER);
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves the section to the top of the section's list.
|
||||
* @fires Slide#dom:leave
|
||||
* @fires Slide#dom:enter
|
||||
*/
|
||||
moveBeforeFirst() {
|
||||
const first = this.parent.childNodes[0];
|
||||
|
||||
this.fire_(Events.LEAVE);
|
||||
this.parent.insertBefore(this.el, first);
|
||||
this.fire_(Events.ENTER);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fires an enable event.
|
||||
* @fires Slide#slide:enable
|
||||
*/
|
||||
enable() {
|
||||
this.fire_(Events.ENABLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fires a disable event.
|
||||
* @fires Slide#slide:disable
|
||||
*/
|
||||
disable() {
|
||||
this.fire_(Events.DISABLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fires an event passing the slide instance on the detail.
|
||||
* @param {String} name Name of the event to fire.
|
||||
* @private
|
||||
*/
|
||||
fire_(name) {
|
||||
DOM.fireEvent(this.el, name, {
|
||||
slide: this
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -79,4 +121,33 @@ export default class Slide {
|
||||
static isCandidate(el) {
|
||||
return el.nodeType === 1 && el.tagName === 'SECTION';
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the section element from an inner element.
|
||||
* @param {Node} el
|
||||
* @return {{section: ?Node, i: ?number}} A map with the section and the
|
||||
* position of the section.
|
||||
*/
|
||||
static getSectionFromEl(el) {
|
||||
let parent = el;
|
||||
let section = null;
|
||||
let i = null;
|
||||
|
||||
while (parent.parentElement &&
|
||||
!parent.classList.contains(CLASSES.SLIDE)) {
|
||||
parent = parent.parentElement;
|
||||
}
|
||||
|
||||
if (parent.classList.contains(CLASSES.SLIDE)) {
|
||||
section = parent;
|
||||
i = parseInt(section.id.replace('section-', ''), 10);
|
||||
}
|
||||
|
||||
return {section, i};
|
||||
}
|
||||
}
|
||||
|
||||
export {
|
||||
Slide as default,
|
||||
Events
|
||||
};
|
||||
|
@@ -4,36 +4,61 @@ import DOM from '../utils/dom';
|
||||
import scrollTo from '../utils/scroll-to';
|
||||
|
||||
const CLASSES = {
|
||||
VERTICAL: 'vertical'
|
||||
VERTICAL: 'vertical',
|
||||
READY: 'ws-ready'
|
||||
};
|
||||
|
||||
// Default plugins
|
||||
const PLUGINS = {
|
||||
'autoslide': Plugins.AutoSlide,
|
||||
'clickNav': Plugins.ClickNav,
|
||||
'grid': Plugins.Grid,
|
||||
'hash': Plugins.Hash,
|
||||
'keyboard': Plugins.Keyboard,
|
||||
'nav': Plugins.Navigation,
|
||||
'scroll': Plugins.Scroll,
|
||||
'touch': Plugins.Touch
|
||||
'touch': Plugins.Touch,
|
||||
'video': Plugins.Video,
|
||||
'youtube': Plugins.YouTube
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* WebSlides module.
|
||||
*/
|
||||
export default class WebSlides {
|
||||
/**
|
||||
* Options for WebSlides
|
||||
* @param {number|boolean} autoslide Is false by default. If a number is
|
||||
* @param {boolean} changeOnClick Is false by default. If true, it will allow
|
||||
* @param {number|boolean} autoslide If a number is provided, it will allow
|
||||
* autosliding by said amount of milliseconds.
|
||||
* @param {boolean} changeOnClick If true, it will allow
|
||||
* clicking on any place to change the slide.
|
||||
* @param {boolean} loop Whether to go to first slide from last one or not.
|
||||
* @param {number} minWheelDelta Controls the amount of needed scroll to
|
||||
* trigger navigation.
|
||||
* @param {number} scrollWait Controls the amount of time to wait till
|
||||
* navigation can occur again with scroll.
|
||||
* @param {number} slideOffset Controls the amount of needed touch delta to
|
||||
* trigger navigation.
|
||||
*/
|
||||
constructor({
|
||||
autoslide = false,
|
||||
changeOnClick = false
|
||||
changeOnClick = false,
|
||||
loop = true,
|
||||
minWheelDelta = 40,
|
||||
scrollWait = 450,
|
||||
slideOffset = 50
|
||||
} = {}) {
|
||||
/**
|
||||
* WebSlide element.
|
||||
* @type {Element}
|
||||
*/
|
||||
this.el = document.getElementById('webslides');
|
||||
|
||||
if (!this.el) {
|
||||
throw new Error('Couldn\'t find the webslides container!');
|
||||
}
|
||||
|
||||
/**
|
||||
* Moving flag.
|
||||
* @type {boolean}
|
||||
@@ -73,35 +98,28 @@ export default class WebSlides {
|
||||
*/
|
||||
this.plugins = {};
|
||||
/**
|
||||
* Interval ID reference for the autoslide.
|
||||
* @type {?number}
|
||||
* @private
|
||||
* Options dictionary.
|
||||
* @type {Object}
|
||||
*/
|
||||
this.interval_ = null;
|
||||
this.options = {
|
||||
autoslide,
|
||||
changeOnClick,
|
||||
loop,
|
||||
minWheelDelta,
|
||||
scrollWait,
|
||||
slideOffset
|
||||
};
|
||||
/**
|
||||
* Amount of time to wait to go to next slide automatically or false to
|
||||
* disable the feature.
|
||||
* @type {boolean|number}
|
||||
* @private
|
||||
*/
|
||||
this.autoslide_ = autoslide;
|
||||
/**
|
||||
* Whether navigation should initiate on click or not.
|
||||
* Initialisation flag.
|
||||
* @type {boolean}
|
||||
* @private
|
||||
*/
|
||||
this.changeOnClick_ = changeOnClick;
|
||||
|
||||
if (!this.el) {
|
||||
throw new Error('Couldn\'t find the webslides container!');
|
||||
}
|
||||
this.initialised = false;
|
||||
|
||||
// Bootstrapping
|
||||
this.removeChildren_();
|
||||
this.grabSlides_();
|
||||
this.createPlugins_();
|
||||
this.initSlides_();
|
||||
this.play();
|
||||
// Finished
|
||||
this.onInit_();
|
||||
}
|
||||
@@ -131,8 +149,8 @@ export default class WebSlides {
|
||||
*/
|
||||
createPlugins_() {
|
||||
Object.keys(PLUGINS).forEach(pluginName => {
|
||||
const pluginCto = PLUGINS[pluginName];
|
||||
this.plugins[pluginName] = new pluginCto(this);
|
||||
const PluginCto = PLUGINS[pluginName];
|
||||
this.plugins[pluginName] = new PluginCto(this);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -142,7 +160,9 @@ export default class WebSlides {
|
||||
* @fires WebSlide#ws:init
|
||||
*/
|
||||
onInit_() {
|
||||
this.initialised = true;
|
||||
DOM.fireEvent(this.el, 'ws:init');
|
||||
document.documentElement.classList.add(CLASSES.READY);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -159,12 +179,14 @@ export default class WebSlides {
|
||||
/**
|
||||
* Goes to a given slide.
|
||||
* @param {!number} slideI The slide index.
|
||||
* @param {?boolean} forward Whether we're forcing moving forward/backwards.
|
||||
* @param {?boolean=} forward Whether we're forcing moving forward/backwards.
|
||||
* This parameter is used only from the goNext, goPrev functions to adjust the
|
||||
* scroll animations.
|
||||
*/
|
||||
goToSlide(slideI, forward = null) {
|
||||
if (this.isValidIndexSlide_(slideI) && !this.isMoving) {
|
||||
if (this.isValidIndexSlide_(slideI) &&
|
||||
!this.isMoving &&
|
||||
this.currentSlideI_ !== slideI) {
|
||||
this.isMoving = true;
|
||||
let isMovingForward = false;
|
||||
|
||||
@@ -198,7 +220,7 @@ export default class WebSlides {
|
||||
* @see scrollTo
|
||||
*/
|
||||
scrollTransitionToSlide_(isMovingForward, nextSlide, callback) {
|
||||
this.el.style.overflow = 'none';
|
||||
this.el.style.overflow = 'hidden';
|
||||
|
||||
if (!isMovingForward) {
|
||||
nextSlide.moveBeforeFirst();
|
||||
@@ -216,12 +238,15 @@ export default class WebSlides {
|
||||
}
|
||||
|
||||
this.el.style.overflow = 'auto';
|
||||
setTimeout(() => { callback.call(this, nextSlide); }, 150);
|
||||
setTimeout(() => {
|
||||
callback.call(this, nextSlide);
|
||||
}, 150);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Transitions to a slide, without doing the scroll animation.
|
||||
* Transitions to a slide, without doing the scroll animation. If the page is
|
||||
* already initialised and on mobile device, it will do a slide animation.
|
||||
* @param {boolean} isMovingForward Whether we're going forward or backwards.
|
||||
* @param {Slide} nextSlide Next slide.
|
||||
* @param {Function} callback Callback to be called upon finishing. This is a
|
||||
@@ -230,9 +255,11 @@ export default class WebSlides {
|
||||
*/
|
||||
transitionToSlide_(isMovingForward, nextSlide, callback) {
|
||||
scrollTo(0, 0);
|
||||
let className = 'slideInRight';
|
||||
|
||||
if (!isMovingForward) {
|
||||
nextSlide.moveBeforeFirst();
|
||||
className = 'slideInLeft';
|
||||
}
|
||||
|
||||
if (this.currentSlide_) {
|
||||
@@ -244,7 +271,19 @@ export default class WebSlides {
|
||||
}
|
||||
|
||||
nextSlide.show();
|
||||
callback.call(this, nextSlide);
|
||||
|
||||
if (this.initialised &&
|
||||
this.plugins.touch &&
|
||||
this.plugins.touch.isEnabled) {
|
||||
DOM.once(nextSlide.el, DOM.getAnimationEvent(), () => {
|
||||
nextSlide.el.classList.remove(className);
|
||||
callback.call(this, nextSlide);
|
||||
});
|
||||
|
||||
nextSlide.el.classList.add(className);
|
||||
} else {
|
||||
callback.call(this, nextSlide);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -256,8 +295,13 @@ export default class WebSlides {
|
||||
* @private
|
||||
*/
|
||||
onSlideChange_(slide) {
|
||||
if (this.currentSlide_) {
|
||||
this.currentSlide_.disable();
|
||||
}
|
||||
|
||||
this.currentSlide_ = slide;
|
||||
this.currentSlideI_ = slide.i;
|
||||
this.currentSlide_.enable();
|
||||
this.isMoving = false;
|
||||
|
||||
DOM.fireEvent(this.el, 'ws:slide-change', {
|
||||
@@ -274,6 +318,10 @@ export default class WebSlides {
|
||||
let nextIndex = this.currentSlideI_ + 1;
|
||||
|
||||
if (nextIndex >= this.maxSlide_) {
|
||||
if (!this.options.loop) {
|
||||
return;
|
||||
}
|
||||
|
||||
nextIndex = 0;
|
||||
}
|
||||
|
||||
@@ -287,6 +335,10 @@ export default class WebSlides {
|
||||
let prevIndex = this.currentSlideI_ - 1;
|
||||
|
||||
if (prevIndex < 0) {
|
||||
if (!this.options.loop) {
|
||||
return;
|
||||
}
|
||||
|
||||
prevIndex = this.maxSlide_ - 1;
|
||||
}
|
||||
|
||||
@@ -333,10 +385,6 @@ export default class WebSlides {
|
||||
/**
|
||||
* Registers a plugin to be loaded when the instance is created. It allows
|
||||
* (on purpose) to replace default plugins.
|
||||
* Those being:
|
||||
* - Navigation
|
||||
* - Hash
|
||||
* - Keyboard
|
||||
* @param {!string} key They key under which it'll be stored inside of the
|
||||
* instance, inside the plugins dict.
|
||||
* @param {!Function} cto Plugin constructor.
|
||||
@@ -344,28 +392,4 @@ export default class WebSlides {
|
||||
static registerPlugin(key, cto) {
|
||||
PLUGINS[key] = cto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts autosliding all the slides if it's not currently doing it and the
|
||||
* autoslide option was a number greater than 0.
|
||||
* @param {?number} time Amount of milliseconds to wait to go to next slide
|
||||
* automatically.
|
||||
*/
|
||||
play(time) {
|
||||
time = time || this.autoslide_;
|
||||
|
||||
if (!this.interval_ && typeof time === 'number' && time > 0) {
|
||||
this.interval_ = setInterval(this.goNext.bind(this), time);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops autosliding all the slides.
|
||||
*/
|
||||
stop() {
|
||||
if (this.interval_) {
|
||||
clearInterval(this.interval_);
|
||||
this.interval_ = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
74
src/js/plugins/autoslide.js
Normal file
74
src/js/plugins/autoslide.js
Normal file
@@ -0,0 +1,74 @@
|
||||
import DOM from '../utils/dom';
|
||||
|
||||
/**
|
||||
* Autoslide plugin.
|
||||
*/
|
||||
export default class AutoSlide {
|
||||
/**
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
/**
|
||||
* @type {WebSlides}
|
||||
* @private
|
||||
*/
|
||||
this.ws_ = wsInstance;
|
||||
/**
|
||||
* Interval ID reference for the autoslide.
|
||||
* @type {?number}
|
||||
* @private
|
||||
*/
|
||||
this.interval_ = null;
|
||||
/**
|
||||
* Internal stored time.
|
||||
* @type {?number}
|
||||
*/
|
||||
this.time = this.ws_.options.autoslide;
|
||||
|
||||
if (this.time) {
|
||||
DOM.once(wsInstance.el, 'ws:init', this.play.bind(this));
|
||||
document.body.addEventListener('focus', this.onFocus.bind(this));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* On focus handler. Will decide if stops/play depending on the focused
|
||||
* element if autoslide is active.
|
||||
*/
|
||||
onFocus() {
|
||||
if (DOM.isFocusableElement()) {
|
||||
this.stop();
|
||||
} else if (this.interval_ === null) {
|
||||
this.play();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts autosliding all the slides if it's not currently doing it and the
|
||||
* autoslide option was a number greater than 0.
|
||||
* @param {?number=} time Amount of milliseconds to wait to go to next slide
|
||||
* automatically.
|
||||
*/
|
||||
play(time) {
|
||||
if (typeof time !== 'number') {
|
||||
time = this.time;
|
||||
}
|
||||
|
||||
this.time = time;
|
||||
|
||||
if (!this.interval_ && typeof time === 'number' && time > 0) {
|
||||
this.interval_ = setInterval(this.ws_.goNext.bind(this.ws_), time);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops autosliding all the slides.
|
||||
*/
|
||||
stop() {
|
||||
if (this.interval_) {
|
||||
clearInterval(this.interval_);
|
||||
this.interval_ = null;
|
||||
}
|
||||
}
|
||||
}
|
@@ -7,10 +7,13 @@ const CLICKABLE_ELS = [
|
||||
'TEXTAREA'
|
||||
];
|
||||
|
||||
/**
|
||||
* ClickNav plugin that allows to click on the page to get to the next slide.
|
||||
*/
|
||||
export default class ClickNav {
|
||||
/**
|
||||
* ClickNav plugin that allows to click on the page to get to the next slide.
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
/**
|
||||
@@ -19,7 +22,7 @@ export default class ClickNav {
|
||||
*/
|
||||
this.ws_ = wsInstance;
|
||||
|
||||
if (wsInstance.changeOnClick_) {
|
||||
if (wsInstance.options.changeOnClick) {
|
||||
this.ws_.el.addEventListener('click', this.onClick_.bind(this));
|
||||
}
|
||||
}
|
||||
|
@@ -1,9 +1,16 @@
|
||||
import Keys from '../utils/keys';
|
||||
|
||||
const GRID_IMAGE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYAg' +
|
||||
'MAAACdGdVrAAAACVBMVEUAAAAtXsUtXcPDDPUWAAAAA3RSTlMAZmHzZFkxAAAAFklEQVQI12M' +
|
||||
'AA9bBR3ExhAJB1iooBQBGwgVEs/QtuAAAAABJRU5ErkJggg==';
|
||||
|
||||
/**
|
||||
* Grid plugin that shows a grid on top of the WebSlides for easy prototyping.
|
||||
*/
|
||||
export default class Grid {
|
||||
/**
|
||||
* Grid plugin that shows a grid on top of the WebSlides for easy prototyping.
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
/**
|
||||
@@ -13,14 +20,14 @@ export default class Grid {
|
||||
this.ws_ = wsInstance;
|
||||
|
||||
const CSS = `body.baseline {
|
||||
background: url(../images/baseline.png) left top .8rem/.8rem;
|
||||
background: url(${GRID_IMAGE}) left top .8rem/.8rem;
|
||||
}`;
|
||||
const head = document.head || document.getElementsByTagName('head')[0];
|
||||
const style = document.createElement('style');
|
||||
|
||||
style.type = 'text/css';
|
||||
|
||||
if (style.styleSheet){
|
||||
if (style.styleSheet) {
|
||||
style.styleSheet.cssText = CSS;
|
||||
} else {
|
||||
style.appendChild(document.createTextNode(CSS));
|
||||
@@ -38,7 +45,7 @@ export default class Grid {
|
||||
*/
|
||||
onKeyPress_(event) {
|
||||
if (event.which === Keys.ENTER) {
|
||||
document.body.toggleClass('baseline');
|
||||
document.body.classList.toggle('baseline');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -7,8 +7,8 @@ const slideRegex = /#slide=(\d+)/;
|
||||
*/
|
||||
export default class Hash {
|
||||
/**
|
||||
* Listens to the slide change event and the hash change events.
|
||||
* @param wsInstance
|
||||
* @param {WebSlides} wsInstance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
this.ws_ = wsInstance;
|
||||
@@ -29,6 +29,11 @@ export default class Hash {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handler for the slide change event which updates the slide on the hash.
|
||||
* @param {Event} event
|
||||
* @private
|
||||
*/
|
||||
static onSlideChange_(event) {
|
||||
Hash.setSlideNumber(event.detail.currentSlide);
|
||||
}
|
||||
@@ -40,7 +45,7 @@ export default class Hash {
|
||||
* @return {?number}
|
||||
*/
|
||||
static getSlideNumber() {
|
||||
let results = document.location.hash.match(slideRegex);
|
||||
const results = document.location.hash.match(slideRegex);
|
||||
let slide = 0;
|
||||
|
||||
if (Array.isArray(results)) {
|
||||
|
@@ -1,9 +1,13 @@
|
||||
import Keys from '../utils/keys';
|
||||
import DOM from '../utils/dom';
|
||||
|
||||
/**
|
||||
* Keyboard interaction plugin.
|
||||
*/
|
||||
export default class Keyboard {
|
||||
/**
|
||||
* Keyboard interaction plugin.
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
/**
|
||||
@@ -23,27 +27,44 @@ export default class Keyboard {
|
||||
*/
|
||||
onKeyPress_(event) {
|
||||
let method;
|
||||
let argument;
|
||||
|
||||
if (event.which === Keys.SPACE) {
|
||||
method = this.ws_.goNext;
|
||||
} else {
|
||||
if (this.ws_.isVertical) {
|
||||
if (event.which === Keys.DOWN) {
|
||||
method = this.ws_.goNext;
|
||||
} else if (event.which === Keys.UP) {
|
||||
method = this.ws_.goPrev;
|
||||
}
|
||||
} else {
|
||||
if (event.which === Keys.RIGHT) {
|
||||
method = this.ws_.goNext;
|
||||
} else if (event.which === Keys.LEFT) {
|
||||
method = this.ws_.goPrev;
|
||||
}
|
||||
}
|
||||
if (DOM.isFocusableElement()) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (event.which) {
|
||||
case Keys.AV_PAGE:
|
||||
case Keys.SPACE:
|
||||
method = this.ws_.goNext;
|
||||
break;
|
||||
case Keys.RE_PAGE:
|
||||
method = this.ws_.goPrev;
|
||||
break;
|
||||
case Keys.HOME:
|
||||
method = this.ws_.goToSlide;
|
||||
argument = 0;
|
||||
break;
|
||||
case Keys.END:
|
||||
method = this.ws_.goToSlide;
|
||||
argument = this.ws_.maxSlide_ - 1;
|
||||
break;
|
||||
case Keys.DOWN:
|
||||
method = this.ws_.isVertical ? this.ws_.goNext : null;
|
||||
break;
|
||||
case Keys.UP:
|
||||
method = this.ws_.isVertical ? this.ws_.goPrev : null;
|
||||
break;
|
||||
case Keys.LEFT:
|
||||
method = !this.ws_.isVertical ? this.ws_.goPrev : null;
|
||||
break;
|
||||
case Keys.RIGHT:
|
||||
method = !this.ws_.isVertical ? this.ws_.goNext : null;
|
||||
break;
|
||||
}
|
||||
|
||||
if (method) {
|
||||
method.call(this.ws_);
|
||||
method.call(this.ws_, argument);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -18,11 +18,13 @@ const LABELS = {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Navigation plugin.
|
||||
*/
|
||||
export default class Navigation {
|
||||
/**
|
||||
* The Navigation constructor. It'll create all the nodes needed for the
|
||||
* navigation such as the arrows and the counter.
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
const arrowLabels = wsInstance.isVertical ?
|
||||
|
@@ -1,3 +1,4 @@
|
||||
import AutoSlide from './autoslide';
|
||||
import ClickNav from './click-nav';
|
||||
import Grid from './grid';
|
||||
import Hash from './hash';
|
||||
@@ -5,13 +6,18 @@ import Keyboard from './keyboard';
|
||||
import Navigation from './navigation';
|
||||
import Scroll from './scroll';
|
||||
import Touch from './touch';
|
||||
import Video from './video';
|
||||
import YouTube from './youtube';
|
||||
|
||||
export default {
|
||||
AutoSlide,
|
||||
ClickNav,
|
||||
Grid,
|
||||
Hash,
|
||||
Keyboard,
|
||||
Navigation,
|
||||
Scroll,
|
||||
Touch
|
||||
Touch,
|
||||
Video,
|
||||
YouTube
|
||||
};
|
||||
|
@@ -1,11 +1,13 @@
|
||||
import MobileDetector from '../utils/mobile-detector';
|
||||
|
||||
const MIN_WHEEL_DELTA = 40;
|
||||
|
||||
/**
|
||||
* Scroll plugin.
|
||||
*/
|
||||
export default class Scroll {
|
||||
/**
|
||||
* Scroll handler for the WebSlides.
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
/**
|
||||
@@ -55,7 +57,11 @@ export default class Scroll {
|
||||
* @private
|
||||
*/
|
||||
onSlideChange_() {
|
||||
this.timeout_ = setTimeout(() => { this.timeout_ = null; }, 450);
|
||||
this.timeout_ = setTimeout(
|
||||
() => {
|
||||
this.timeout_ = null;
|
||||
},
|
||||
this.ws_.options.scrollWait);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -70,7 +76,7 @@ export default class Scroll {
|
||||
return;
|
||||
}
|
||||
|
||||
const { deltaY: wheelDeltaY, deltaX: wheelDeltaX } = event;
|
||||
const {deltaY: wheelDeltaY, deltaX: wheelDeltaX} = event;
|
||||
const isVertical = this.ws_.isVertical;
|
||||
const isHorizontalMovement = Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY);
|
||||
this.isGoingUp_ = wheelDeltaY < 0;
|
||||
@@ -88,8 +94,8 @@ export default class Scroll {
|
||||
}
|
||||
}
|
||||
|
||||
if (Math.abs(wheelDeltaY) >= MIN_WHEEL_DELTA ||
|
||||
Math.abs(wheelDeltaX) >= MIN_WHEEL_DELTA) {
|
||||
if (Math.abs(wheelDeltaY) >= this.ws_.options.minWheelDelta ||
|
||||
Math.abs(wheelDeltaX) >= this.ws_.options.minWheelDelta) {
|
||||
if ((isHorizontalMovement && this.isGoingLeft_) ||
|
||||
(!isHorizontalMovement && this.isGoingUp_)) {
|
||||
this.ws_.goPrev();
|
||||
@@ -100,4 +106,4 @@ export default class Scroll {
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@@ -13,11 +13,13 @@ const EVENTS = {
|
||||
}
|
||||
};
|
||||
|
||||
const SLIDE_OFFSET = 50;
|
||||
|
||||
/**
|
||||
* Touch plugin.
|
||||
*/
|
||||
export default class Touch {
|
||||
/**
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
/**
|
||||
@@ -27,14 +29,14 @@ export default class Touch {
|
||||
this.ws_ = wsInstance;
|
||||
|
||||
/**
|
||||
* Start position for the X coord.
|
||||
* Start position for the X coordinate.
|
||||
* @type {number}
|
||||
* @private
|
||||
*/
|
||||
this.startX_ = 0;
|
||||
|
||||
/**
|
||||
* Start position for the Y coord.
|
||||
* Start position for the Y coordinate.
|
||||
* @type {number}
|
||||
* @private
|
||||
*/
|
||||
@@ -75,14 +77,13 @@ export default class Touch {
|
||||
this.isEnabled = true;
|
||||
document.addEventListener(events.START, this.onStart_.bind(this), false);
|
||||
document.addEventListener(events.MOVE, this.onMove_.bind(this), false);
|
||||
document.addEventListener(events.MOVE, this.onMove_.bind(this), false);
|
||||
document.addEventListener(events.END, this.onStop_.bind(this), false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Start touch handler. Saves starting points.
|
||||
* @param event
|
||||
* @param {Event} event The Touch event.
|
||||
* @private
|
||||
*/
|
||||
onStart_(event) {
|
||||
@@ -96,7 +97,7 @@ export default class Touch {
|
||||
|
||||
/**
|
||||
* Move touch handler. Saves end points.
|
||||
* @param event
|
||||
* @param {Event} event The Touch event.
|
||||
* @private
|
||||
*/
|
||||
onMove_(event) {
|
||||
@@ -116,9 +117,9 @@ export default class Touch {
|
||||
|
||||
// It's an horizontal drag
|
||||
if (Math.abs(diffX) > Math.abs(diffY)) {
|
||||
if(diffX < -SLIDE_OFFSET) {
|
||||
if (diffX < -this.ws_.options.slideOffset) {
|
||||
this.ws_.goPrev();
|
||||
} else if(diffX > SLIDE_OFFSET) {
|
||||
} else if(diffX > this.ws_.options.slideOffset) {
|
||||
this.ws_.goNext();
|
||||
}
|
||||
}
|
||||
@@ -127,25 +128,22 @@ export default class Touch {
|
||||
/**
|
||||
* Normalizes an event to deal with differences between PointerEvent and
|
||||
* TouchEvent.
|
||||
* @param event
|
||||
* @return {*}
|
||||
* @param {Event} event
|
||||
* @return {Object} Normalised touch points.
|
||||
*/
|
||||
static normalizeEventInfo(event) {
|
||||
let x;
|
||||
let y;
|
||||
let touchEvent = { pageX : 0, pageY : 0};
|
||||
let touchEvent = {pageX: 0, pageY: 0};
|
||||
|
||||
if (typeof event.changedTouches !== 'undefined'){
|
||||
if (typeof event.changedTouches !== 'undefined') {
|
||||
touchEvent = event.changedTouches[0];
|
||||
}
|
||||
else if (typeof event.originalEvent !== 'undefined' &&
|
||||
typeof event.originalEvent.changedTouches !== 'undefined'){
|
||||
} else if (typeof event.originalEvent !== 'undefined' &&
|
||||
typeof event.originalEvent.changedTouches !== 'undefined') {
|
||||
touchEvent = event.originalEvent.changedTouches[0];
|
||||
}
|
||||
|
||||
x = event.offsetX || event.layerX || touchEvent.pageX;
|
||||
y = event.offsetY || event.layerY || touchEvent.pageY;
|
||||
const x = event.offsetX || event.layerX || touchEvent.pageX;
|
||||
const y = event.offsetY || event.layerY || touchEvent.pageY;
|
||||
|
||||
return { x, y };
|
||||
return {x, y};
|
||||
}
|
||||
};
|
||||
}
|
||||
|
57
src/js/plugins/video.js
Normal file
57
src/js/plugins/video.js
Normal file
@@ -0,0 +1,57 @@
|
||||
import DOM from '../utils/dom';
|
||||
import {default as Slide, Events as SlideEvents} from '../modules/slide';
|
||||
|
||||
/**
|
||||
* Video plugin. Video plugin that allows to autoplay videos once the slide gets
|
||||
* active.
|
||||
*/
|
||||
export default class Video {
|
||||
/**
|
||||
* @param {WebSlides} wsInstance The WebSlides instance.
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
/**
|
||||
* @type {WebSlides}
|
||||
* @private
|
||||
*/
|
||||
this.ws_ = wsInstance;
|
||||
|
||||
const videos = DOM.toArray(this.ws_.el.querySelectorAll('video'));
|
||||
|
||||
if (videos.length) {
|
||||
videos.forEach(video => {
|
||||
if (!video.hasAttribute('autoplay')) {
|
||||
return;
|
||||
}
|
||||
|
||||
video.removeAttribute('autoplay');
|
||||
video.pause();
|
||||
video.currentTime = 0;
|
||||
const {i} = Slide.getSectionFromEl(video);
|
||||
const slide = wsInstance.slides[i - 1];
|
||||
|
||||
slide.video = video;
|
||||
|
||||
slide.el.addEventListener(SlideEvents.ENABLE, Video.onSectionEnabled);
|
||||
slide.el.addEventListener(SlideEvents.DISABLE, Video.onSectionDisabled);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* On Section enable hook. Will play the video.
|
||||
* @param {CustomEvent} event
|
||||
*/
|
||||
static onSectionEnabled(event) {
|
||||
event.detail.slide.video.play();
|
||||
}
|
||||
|
||||
/**
|
||||
* On Section enable hook. Will pause the video.
|
||||
* @param {CustomEvent} event
|
||||
*/
|
||||
static onSectionDisabled(event) {
|
||||
event.detail.slide.video.pause();
|
||||
}
|
||||
}
|
270
src/js/plugins/youtube.js
Normal file
270
src/js/plugins/youtube.js
Normal file
@@ -0,0 +1,270 @@
|
||||
/* global YT */
|
||||
import DOM from '../utils/dom';
|
||||
import {default as Slide, Events as SlideEvents} from '../modules/slide';
|
||||
|
||||
/**
|
||||
* Player wrapper around the YT player. This is mostly to get around the event
|
||||
* in which we need to play a video which player isn't ready yet.
|
||||
*/
|
||||
class Player {
|
||||
/**
|
||||
* @param {Element} el
|
||||
*/
|
||||
constructor(el) {
|
||||
/**
|
||||
* Whether the Player is ready or not.
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.ready = false;
|
||||
/**
|
||||
* Ready callback.
|
||||
* @type {?function}
|
||||
*/
|
||||
this.onReadyCb = null;
|
||||
/**
|
||||
* Slide element in which the video is located.
|
||||
* @type {Node}
|
||||
*/
|
||||
this.slide = Slide.getSectionFromEl(el).section;
|
||||
/**
|
||||
* Whether it should autoplay on load or not.
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.autoplay = typeof el.dataset.autoplay !== 'undefined';
|
||||
/**
|
||||
* Whether the video should be muted or not.
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.isMuted = typeof el.dataset.mute !== 'undefined';
|
||||
|
||||
/**
|
||||
* Options with which the player is created.
|
||||
* @type {Object}
|
||||
*/
|
||||
this.options = {
|
||||
videoId: el.dataset.youtubeId,
|
||||
playerVars: this.getPlayerVars(el),
|
||||
events: {
|
||||
onReady: this.onPlayerReady.bind(this)
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* The iframe in which the video is loaded.
|
||||
* @type {Element}
|
||||
*/
|
||||
this.el = el;
|
||||
/**
|
||||
* Timeout id.
|
||||
* @type {?number}
|
||||
*/
|
||||
this.timeout = null;
|
||||
|
||||
this.create();
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroys the iframe. Saves the current time in case it gets restored.
|
||||
*/
|
||||
destroy() {
|
||||
this.currentTime = this.player.getCurrentTime();
|
||||
this.player.destroy();
|
||||
this.player = null;
|
||||
this.el = this.slide.querySelector('[data-youtube]');
|
||||
this.ready = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the player.
|
||||
*/
|
||||
create() {
|
||||
this.player = new YT.Player(this.el, this.options);
|
||||
this.el = this.player.getIframe();
|
||||
}
|
||||
|
||||
/**
|
||||
* Player ready callback. Will play the video if it was intended to be played
|
||||
* and will also call any pending callbacks.
|
||||
*/
|
||||
onPlayerReady() {
|
||||
this.ready = true;
|
||||
|
||||
// Restoring the current time if saved
|
||||
if (this.currentTime) {
|
||||
this.player.seekTo(this.currentTime, true);
|
||||
this.player.pauseVideo();
|
||||
this.currentTime = null;
|
||||
}
|
||||
|
||||
if (this.timeout && this.player.getPlayerState() !== 1) {
|
||||
this.play();
|
||||
}
|
||||
|
||||
if (this.onReadyCb) {
|
||||
this.onReadyCb();
|
||||
this.onReadyCb = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Plays the video.
|
||||
*/
|
||||
play() {
|
||||
if (this.ready) {
|
||||
this.timeout = setTimeout(() => {
|
||||
this.timeout = null;
|
||||
}, 1000);
|
||||
|
||||
if (this.isMuted) {
|
||||
this.player.mute();
|
||||
} else {
|
||||
this.player.unMute();
|
||||
}
|
||||
|
||||
this.player.playVideo();
|
||||
} else {
|
||||
this.onReadyCb = this.play;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Pause playing the video if it's already playing.
|
||||
*/
|
||||
pause() {
|
||||
if (this.player &&
|
||||
this.player.pauseVideo &&
|
||||
this.player.getPlayerState() === 1) {
|
||||
this.player.pauseVideo();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the element to have the proper variables.
|
||||
* @param {Element} element
|
||||
* @return {Object} Player variables.
|
||||
*/
|
||||
getPlayerVars(element) {
|
||||
const vars = {
|
||||
modestbranding: 1,
|
||||
rel: 0,
|
||||
origin: window.location.origin
|
||||
};
|
||||
|
||||
if (this.slide.classList.contains('fullscreen')) {
|
||||
// Disabling keyboard interaction for fullscreenvideos
|
||||
vars.disablekb = 1;
|
||||
}
|
||||
|
||||
if (typeof element.dataset.noControls !== 'undefined') {
|
||||
vars.controls = 0;
|
||||
vars.showinfo = 0;
|
||||
}
|
||||
|
||||
if (typeof element.dataset.loop !== 'undefined') {
|
||||
vars.loop = 1;
|
||||
vars.playlist = element.dataset.youtubeId;
|
||||
}
|
||||
|
||||
return vars;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Video plugin.
|
||||
*/
|
||||
export default class YouTube {
|
||||
/**
|
||||
* Grid plugin that shows a grid on top of the WebSlides for easy prototyping.
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
/**
|
||||
* @type {WebSlides}
|
||||
* @private
|
||||
*/
|
||||
this.ws_ = wsInstance;
|
||||
|
||||
this.videos = DOM.toArray(this.ws_.el.querySelectorAll('[data-youtube]'));
|
||||
|
||||
if (this.videos.length) {
|
||||
this.inject();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Once the YouTube API is ready this gets called so we can start the videos.
|
||||
*/
|
||||
onYTReady() {
|
||||
this.videos.forEach(video => {
|
||||
const player = new Player(video);
|
||||
|
||||
if (typeof video.dataset.autoplay !== 'undefined') {
|
||||
const {i} = Slide.getSectionFromEl(player.el);
|
||||
const slide = this.ws_.slides[i - 1];
|
||||
|
||||
slide.player = player;
|
||||
|
||||
slide.el.addEventListener(SlideEvents.ENABLE, YouTube.onSlideEvent);
|
||||
slide.el.addEventListener(SlideEvents.DISABLE, YouTube.onSlideEvent);
|
||||
slide.el.addEventListener(SlideEvents.ENTER, YouTube.onSlideEvent);
|
||||
slide.el.addEventListener(SlideEvents.LEAVE, YouTube.onSlideEvent);
|
||||
|
||||
if (this.ws_.currentSlide_ === slide) {
|
||||
YouTube.onSectionEnabled(slide);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Injects the YouTube iFrame API into the page.
|
||||
*/
|
||||
inject() {
|
||||
window.onYouTubeIframeAPIReady = this.onYTReady.bind(this);
|
||||
const tag = document.createElement('script');
|
||||
tag.src = `https://www.youtube.com/iframe_api`;
|
||||
const firstScriptTag = document.getElementsByTagName('script')[0];
|
||||
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reacts to any event on the slide.
|
||||
* @param {CustomEvent} event
|
||||
*/
|
||||
static onSlideEvent(event) {
|
||||
const slide = event.detail.slide;
|
||||
|
||||
switch (event.type) {
|
||||
case SlideEvents.ENABLE:
|
||||
YouTube.onSectionEnabled(slide);
|
||||
break;
|
||||
case SlideEvents.DISABLE:
|
||||
YouTube.onSectionDisabled(slide);
|
||||
break;
|
||||
case SlideEvents.LEAVE:
|
||||
slide.player.destroy();
|
||||
break;
|
||||
case SlideEvents.ENTER:
|
||||
slide.player.create();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* On Section enable hook. Will play the video.
|
||||
* @param {Slide} slide
|
||||
*/
|
||||
static onSectionEnabled(slide) {
|
||||
if (slide.player.autoplay) {
|
||||
slide.player.play();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* On Section enable hook. Will pause the video.
|
||||
* @param {Slide} slide
|
||||
*/
|
||||
static onSectionDisabled(slide) {
|
||||
slide.player.pause();
|
||||
}
|
||||
}
|
@@ -5,12 +5,16 @@ const NativeCustomEvent = window.CustomEvent;
|
||||
* completely on IE.
|
||||
* @return {boolean} Whether it can be used or not.
|
||||
*/
|
||||
function canIuseNativeCustom () {
|
||||
function canIuseNativeCustom() {
|
||||
try {
|
||||
const p = new NativeCustomEvent('t', { detail: { a: 'b' } });
|
||||
return 't' === p.type && 'b' === p.detail.a;
|
||||
} catch (e) {
|
||||
}
|
||||
const p = new NativeCustomEvent('t', {
|
||||
detail: {
|
||||
a: 'b'
|
||||
}
|
||||
});
|
||||
return 't' === p.type && 'b' === p.detail.a;
|
||||
} catch (e) { }
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,7 @@
|
||||
import WSCustomEvent from './custom-event';
|
||||
|
||||
let transitionEvent = '';
|
||||
let animationEvent = '';
|
||||
|
||||
/**
|
||||
* Static class for DOM helper.
|
||||
@@ -10,8 +12,8 @@ export default class DOM {
|
||||
* @param {string} tag The name of the tag of the needed element.
|
||||
* @param {string} id The desired id for the element. It defaults to an
|
||||
* empty string.
|
||||
* @param {string} text The desired text to go inside of the element. It defaults
|
||||
* to an empty string.
|
||||
* @param {string} text The desired text to go inside of the element. It
|
||||
* defaults to an empty string.
|
||||
* @return {Element}
|
||||
*/
|
||||
static createNode(tag, id = '', text = '') {
|
||||
@@ -25,6 +27,83 @@ export default class DOM {
|
||||
return node;
|
||||
}
|
||||
|
||||
/**
|
||||
* Listens for an event once.
|
||||
* @param {Element} el Element to listen to.
|
||||
* @param {string} event Event Type.
|
||||
* @param {Function} callback Function to execute once the event fires.
|
||||
*/
|
||||
static once(el, event, callback) {
|
||||
const cb = e => {
|
||||
if (e.target === el) {
|
||||
el.removeEventListener(event, cb);
|
||||
callback(e);
|
||||
}
|
||||
};
|
||||
|
||||
el.addEventListener(event, cb, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the prefixed transitionend event.
|
||||
* @return {string}
|
||||
*/
|
||||
static getTransitionEvent() {
|
||||
if (transitionEvent) {
|
||||
return transitionEvent;
|
||||
}
|
||||
|
||||
const el = document.createElement('ws');
|
||||
const transitions = {
|
||||
'transition': 'transitionend',
|
||||
'OTransition': 'oTransitionEnd',
|
||||
'MozTransition': 'transitionend',
|
||||
'WebkitTransition': 'webkitTransitionEnd'
|
||||
};
|
||||
const transitionNames = Object.keys(transitions);
|
||||
|
||||
for (let i = 0, length = transitionNames.length;
|
||||
i < length && !transitionEvent; i++) {
|
||||
const transitionName = transitionNames[i];
|
||||
|
||||
if (typeof el.style[transitionName] !== 'undefined') {
|
||||
transitionEvent = transitions[transitionName];
|
||||
}
|
||||
}
|
||||
|
||||
return transitionEvent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the prefixed animation end event.
|
||||
* @return {string}
|
||||
*/
|
||||
static getAnimationEvent() {
|
||||
if (animationEvent) {
|
||||
return animationEvent;
|
||||
}
|
||||
|
||||
const el = document.createElement('ws');
|
||||
const animations = {
|
||||
'animation': 'animationend',
|
||||
'OAnimation': 'oAnimationEnd',
|
||||
'MozAnimation': 'animationend',
|
||||
'WebkitAnimation': 'webkitAnimationEnd'
|
||||
};
|
||||
const animationNames = Object.keys(animations);
|
||||
|
||||
for (let i = 0, length = animationNames.length;
|
||||
i < length && !animationEvent; i++) {
|
||||
const animationName = animationNames[i];
|
||||
|
||||
if (typeof el.style[animationName] !== 'undefined') {
|
||||
animationEvent = animations[animationName];
|
||||
}
|
||||
}
|
||||
|
||||
return animationEvent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides an element setting the display to none.
|
||||
* @param {Element} el Element to be hidden.
|
||||
@@ -65,4 +144,25 @@ export default class DOM {
|
||||
static toArray(iterable) {
|
||||
return [].slice.call(iterable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the document has focus on an input or contenteditable
|
||||
* element.
|
||||
* @return {boolean} Whether the focused element is an input or content
|
||||
* editable.
|
||||
*/
|
||||
static isFocusableElement() {
|
||||
let result = false;
|
||||
|
||||
if (document.activeElement) {
|
||||
const isContentEditable = document.activeElement
|
||||
.contentEditable !== 'inherit';
|
||||
const isInput = ['INPUT', 'SELECT', 'OPTION', 'TEXTAREA']
|
||||
.indexOf(document.activeElement.tagName) > -1;
|
||||
|
||||
result = isInput || isContentEditable;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@@ -3,7 +3,7 @@
|
||||
* @param {number} p The percentage of time that has passed.
|
||||
* @return {number}
|
||||
*/
|
||||
function swing (p) {
|
||||
function swing(p) {
|
||||
return 0.5 - Math.cos(p * Math.PI) / 2;
|
||||
}
|
||||
|
||||
@@ -16,4 +16,4 @@ function linear(p) {
|
||||
return p;
|
||||
}
|
||||
|
||||
export default { swing, linear };
|
||||
export default {swing, linear};
|
||||
|
@@ -1,6 +1,10 @@
|
||||
const Keys = {
|
||||
ENTER: 13,
|
||||
SPACE: 32,
|
||||
RE_PAGE: 33,
|
||||
AV_PAGE: 34,
|
||||
END: 35,
|
||||
HOME: 36,
|
||||
LEFT: 37,
|
||||
UP: 38,
|
||||
RIGHT: 39,
|
||||
|
@@ -1,5 +1,9 @@
|
||||
const UA = window.navigator.userAgent;
|
||||
|
||||
/**
|
||||
* Mobile detector helper class. Tests the User Agent to see if we're, likely,
|
||||
* on a mobile device.
|
||||
*/
|
||||
export default class MobileDetector {
|
||||
/**
|
||||
* Whether the device is Android or not.
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import Easings from './easing';
|
||||
|
||||
let SCROLLABLE_CONTAINER = document.getElementById('webslides');
|
||||
const SCROLLABLE_CONTAINER = document.getElementById('webslides');
|
||||
|
||||
/**
|
||||
* Smoothly scrolls to a given Y position using Easing.Swing. It'll run a
|
||||
|
@@ -1,11 +1,11 @@
|
||||
/*---------------------------------------------------------------------------------
|
||||
|
||||
App: WebSlides
|
||||
Version: 1.0.0
|
||||
Date: 2017-02-11
|
||||
Version: 1.3.0
|
||||
Date: 2017-04-20
|
||||
Description: A simple and versatile framework for building HTML presentations, landings, and portfolios.
|
||||
Author: José Luis Antúnez
|
||||
Author URI: http://twitter.com/jlantunez
|
||||
Authors: @jlantunez, @belelros, and @luissacristan
|
||||
Author URI: http://twitter.com/webslides
|
||||
License: The MIT License (MIT)
|
||||
License URI: https://opensource.org/licenses/MIT
|
||||
|
||||
@@ -47,8 +47,9 @@
|
||||
12. Avatars
|
||||
13. Tables
|
||||
14. Forms
|
||||
15. Safari Bug (flex-wrap)
|
||||
16. Print
|
||||
15. Longform Elements
|
||||
16. Safari Bug (flex-wrap)
|
||||
17. Print
|
||||
|
||||
----------------------------------------------------------------------------------- */
|
||||
|
||||
@@ -302,10 +303,11 @@ dd {
|
||||
1. Base --> Baseline: 8px = .8rem
|
||||
=========================================== */
|
||||
|
||||
/* -- Disable elastic scrolling/bounce -- */
|
||||
/* -- Disable elastic scrolling/bounce:
|
||||
webslides.js will add .ws-ready automatically. Don't worry :) -- */
|
||||
|
||||
html,
|
||||
body {
|
||||
html.ws-ready,
|
||||
html.ws-ready body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
@@ -393,16 +395,22 @@ nav a[rel="external"] em,
|
||||
|
||||
.wrap,header nav, footer nav {
|
||||
position: relative;
|
||||
width: 1200px;
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
margin-right:auto;
|
||||
margin-left: auto;
|
||||
z-index: 2;
|
||||
}
|
||||
@media (min-width: 1024px) {
|
||||
.wrap,header nav, footer nav {
|
||||
width: 90%;
|
||||
}
|
||||
}
|
||||
|
||||
.frame,.shadow {
|
||||
padding: 2.4rem;
|
||||
}
|
||||
|
||||
.radius {border-radius: .4rem;}
|
||||
|
||||
.alignright {
|
||||
@@ -419,29 +427,28 @@ nav a[rel="external"] em,
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
img.aligncenter {
|
||||
img.aligncenter,figure.aligncenter {
|
||||
display: block;
|
||||
}
|
||||
|
||||
img.alignleft,
|
||||
img.alignright,
|
||||
img.aligncenter {
|
||||
margin-top: 2.4rem;
|
||||
margin-bottom: 2.4rem;
|
||||
img.alignleft,figure.alignleft,
|
||||
img.alignright,figure.alignright,
|
||||
img.aligncenter,figure.aligncenter {
|
||||
margin-top: 3.2rem;
|
||||
margin-bottom: 3.2rem;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
img.aligncenter {
|
||||
margin-top: .8rem;
|
||||
margin-bottom: .8rem;
|
||||
}
|
||||
img.alignright,svg.alignright {
|
||||
margin: .8rem 0 .8rem 4.8rem
|
||||
}
|
||||
img.alignleft,svg.alignright {
|
||||
margin: .8rem 4.8rem .8rem 0;
|
||||
}
|
||||
img.aligncenter,figure.aligncenter {
|
||||
margin-top: .8rem;
|
||||
margin-bottom: .8rem;
|
||||
}
|
||||
img.alignright,svg.alignright,figure.alignright {
|
||||
margin: .8rem 0 .8rem 2.4rem
|
||||
}
|
||||
img.alignleft,svg.alignleft,figure.alignleft {
|
||||
margin: .8rem 2.4rem .8rem 0;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
|
||||
/*=== div.size-60, img.size-50, h1.size-40, p.size-30... === */
|
||||
@@ -496,11 +503,13 @@ pre code {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
||||
/*=== 1.2 Animations ================
|
||||
Just 3 basic animations:
|
||||
.fadeIn, .fadeInUp, .zoomIn.
|
||||
Just 5 basic animations:
|
||||
.fadeIn, .fadeInUp, .zoomIn, .slideInLeft, slideInRight
|
||||
https://github.com/daneden/animate.css*/
|
||||
|
||||
/*-- fadeIn -- */
|
||||
@-webkit-keyframes fadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
@@ -532,6 +541,7 @@ https://github.com/daneden/animate.css*/
|
||||
animation: fadeIn 1s;
|
||||
}
|
||||
|
||||
/*-- fadeInUp -- */
|
||||
@-webkit-keyframes fadeInUp {
|
||||
from {
|
||||
opacity: 0;
|
||||
@@ -561,12 +571,11 @@ https://github.com/daneden/animate.css*/
|
||||
}
|
||||
|
||||
.fadeInUp {
|
||||
-webkit-animation-name: fadeInUp;
|
||||
animation-name: fadeInUp;
|
||||
-webkit-animation-duration: 1s;
|
||||
animation-duration: 1s;
|
||||
-webkit-animation: fadeInUp 1s;
|
||||
animation: fadeInUp 1s;
|
||||
}
|
||||
|
||||
/*-- zoomIn -- */
|
||||
@-webkit-keyframes zoomIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
@@ -596,6 +605,44 @@ https://github.com/daneden/animate.css*/
|
||||
animation: zoomIn 1s;
|
||||
}
|
||||
|
||||
/*-- slideInLeft -- */
|
||||
|
||||
@keyframes slideInLeft {
|
||||
from {
|
||||
transform: translate3d(-100%, 0, 0);
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
to {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
.slideInLeft {
|
||||
-webkit-animation: slideInLeft 1s;
|
||||
animation: slideInLeft 1s;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
|
||||
/*-- slideInRight -- */
|
||||
|
||||
@keyframes slideInRight {
|
||||
from {
|
||||
transform: translate3d(100%, 0, 0);
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
to {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
.slideInRight {
|
||||
-webkit-animation: slideInRight 1s;
|
||||
animation: slideInRight 1s;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
|
||||
/* Animated Background (Matrix) */
|
||||
@-webkit-keyframes anim {
|
||||
0% {
|
||||
@@ -628,7 +675,6 @@ https://github.com/daneden/animate.css*/
|
||||
animation-duration: 5s;
|
||||
}
|
||||
|
||||
|
||||
/* Transitions */
|
||||
|
||||
header,
|
||||
@@ -652,7 +698,7 @@ footer,
|
||||
|
||||
.embed iframe,
|
||||
.embed object,
|
||||
.embed embed {
|
||||
.embed embed,.embed video {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
@@ -660,6 +706,51 @@ footer,
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
/* -- Responsive background video
|
||||
https://fvsch.com/code/video-background/ -- */
|
||||
|
||||
.fullscreen > .embed {
|
||||
position: fixed;
|
||||
height: auto;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
/* 1. No object-fit support: */
|
||||
@media (min-aspect-ratio: 16/9) {
|
||||
.fullscreen > .embed > iframe,
|
||||
.fullscreen > .embed > object,
|
||||
.fullscreen > .embed > embed,
|
||||
.fullscreen > .embed > video {
|
||||
height: 300%;
|
||||
top: -100%;
|
||||
}
|
||||
}
|
||||
@media (max-aspect-ratio: 16/9) {
|
||||
.fullscreen > .embed > iframe,
|
||||
.fullscreen > .embed > object,
|
||||
.fullscreen > .embed > embed,
|
||||
.fullscreen > .embed > video {
|
||||
width: 300%;
|
||||
left: -100%;
|
||||
}
|
||||
}
|
||||
/* 2. If supporting object-fit, overriding (1): */
|
||||
@supports (object-fit: cover) {
|
||||
.fullscreen > .embed > iframe,
|
||||
.fullscreen > .embed > object,
|
||||
.fullscreen > .embed > embed,
|
||||
.fullscreen > .embed > video {
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
}
|
||||
|
||||
/*=== Browser (Screenshots) ================ */
|
||||
|
||||
@@ -702,15 +793,11 @@ li .browser {margin-bottom: 0;
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.browser img {
|
||||
width: 100%;
|
||||
margin-top: 3.2rem;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*=== 1.4. Basic Grid (Flexible blocks)
|
||||
Auto-fill & Equal height === */
|
||||
|
||||
@@ -805,6 +892,8 @@ textarea {
|
||||
|
||||
p,
|
||||
li,
|
||||
dt,
|
||||
dd,
|
||||
time,
|
||||
table,
|
||||
big,
|
||||
@@ -853,7 +942,7 @@ h1 svg,
|
||||
h2 svg, h3 svg, h4 svg {
|
||||
margin-top: -.8rem;
|
||||
}
|
||||
.text-intro svg,.wall p svg,.try svg {
|
||||
.text-intro svg,.text-quote p svg,.wall p svg,.try svg {
|
||||
margin-top: -.4rem;
|
||||
}
|
||||
.flexblock li h2 svg,.flexblock li h3 svg {margin-top: 0;
|
||||
@@ -991,10 +1080,23 @@ p.text-subtitle svg {vertical-align: text-top;}
|
||||
margin-top: 3.2rem;
|
||||
}
|
||||
|
||||
|
||||
.text-uppercase {text-transform: uppercase;}
|
||||
.text-lowercase {text-transform: lowercase;}
|
||||
|
||||
/* -- Emoji (you'll love this) -- */
|
||||
|
||||
.text-emoji {
|
||||
font-size: 6.8rem;
|
||||
line-height: 8.8rem;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.text-emoji {
|
||||
font-size: 12.8rem;
|
||||
line-height: 16rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* -- Numbers (results, sales... 23,478,289 iphones) -- */
|
||||
|
||||
.text-data {
|
||||
@@ -1100,6 +1202,7 @@ p.text-subtitle svg {vertical-align: text-top;}
|
||||
line-height: 4rem;
|
||||
font-weight: 400;
|
||||
margin-right: 2.4rem;
|
||||
margin-bottom: 3.2rem;
|
||||
margin-left: 2.4rem;
|
||||
}
|
||||
|
||||
@@ -1110,13 +1213,13 @@ p.text-subtitle svg {vertical-align: text-top;}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
[class*="text-pull"] {
|
||||
margin-right: -4rem;
|
||||
margin-left: -4rem;
|
||||
margin-right: -4.8rem;
|
||||
margin-left: -4.8rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 568px) {
|
||||
[class*="text-pull-"] {
|
||||
width: 32rem;
|
||||
max-width: 40%;
|
||||
}
|
||||
.text-pull-right {
|
||||
float: right;
|
||||
@@ -1129,12 +1232,38 @@ p.text-subtitle svg {vertical-align: text-top;}
|
||||
margin-right: 2.4rem;
|
||||
}
|
||||
}
|
||||
img[class*="text-pull-"],figure[class*="text-pull-"] {
|
||||
padding-top:0;
|
||||
margin-top: .8rem;
|
||||
}
|
||||
|
||||
/* -- Interviews (Questions & Answers) --- */
|
||||
/* -- <dl class="text-interview">
|
||||
<dt>name</dt>
|
||||
<dd><p>question or answer</p>
|
||||
</dd>
|
||||
--- */
|
||||
|
||||
.text-interview dt {
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.text-interview dt {
|
||||
margin-left: -34%;
|
||||
position: absolute;
|
||||
text-align: right;
|
||||
white-space: nowrap;
|
||||
width: 30%;
|
||||
}
|
||||
}
|
||||
|
||||
/* -- Info Messages (error, warning, success... -- */
|
||||
|
||||
.text-info {font-size: 1.6rem;line-height: 2.4rem;
|
||||
}
|
||||
|
||||
|
||||
/*=========================================
|
||||
2.1. San Francisco Font (Apple's new font)
|
||||
=========================================== */
|
||||
@@ -1143,7 +1272,6 @@ p.text-subtitle svg {vertical-align: text-top;}
|
||||
font-family: "San Francisco", helvetica, arial, sans-serif;
|
||||
}
|
||||
|
||||
|
||||
/* Ultra Light */
|
||||
|
||||
@font-face {
|
||||
@@ -1152,7 +1280,6 @@ p.text-subtitle svg {vertical-align: text-top;}
|
||||
src: url("https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-ultralight-webfont.woff2");
|
||||
}
|
||||
|
||||
|
||||
/* Thin */
|
||||
|
||||
@font-face {
|
||||
@@ -1170,7 +1297,6 @@ p.text-subtitle svg {vertical-align: text-top;}
|
||||
src: url("https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-regular-webfont.woff2");
|
||||
}
|
||||
|
||||
|
||||
/* Bold */
|
||||
|
||||
@font-face {
|
||||
@@ -1179,11 +1305,13 @@ p.text-subtitle svg {vertical-align: text-top;}
|
||||
src: url("https://applesocial.s3.amazonaws.com/assets/styles/fonts/sanfrancisco/sanfranciscodisplay-bold-webfont.woff2");
|
||||
}
|
||||
|
||||
|
||||
/*=========================================
|
||||
3. Header & Footer
|
||||
=========================================== */
|
||||
|
||||
/* -- If you want an unique, global header/footer,read this:
|
||||
https://github.com/webslides/webslides/issues/57 -- */
|
||||
|
||||
header,
|
||||
footer,
|
||||
#navigation {
|
||||
@@ -1202,24 +1330,27 @@ footer img {
|
||||
height: 4rem;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
header,
|
||||
section footer {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
footer {
|
||||
position: relative;
|
||||
}
|
||||
header, footer {
|
||||
/* hover/visibility */
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
section footer {
|
||||
header,.ws-ready footer {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.ws-ready footer {
|
||||
top: auto;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
/*=== Hide header[role=banner] === */
|
||||
|
||||
/*desktop only? Add @media (min-width: 1025px)*/
|
||||
/*Remove "opacity=0" if you want an unique, visible header on each slide*/
|
||||
header[role=banner] {
|
||||
opacity: 0;
|
||||
}
|
||||
@@ -1235,7 +1366,6 @@ header[role=banner]:hover {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*=== 3.1. Logo === */
|
||||
|
||||
.logo {
|
||||
@@ -1266,7 +1396,6 @@ header[role=banner]:hover {
|
||||
4. Navigation
|
||||
=========================================== */
|
||||
|
||||
|
||||
/*=== 4.1. Navbars === */
|
||||
|
||||
nav ul {
|
||||
@@ -1346,11 +1475,10 @@ Vertically and horizontally centered
|
||||
* = All HTML elements will have those styles.*/
|
||||
|
||||
section * {
|
||||
-webkit-animation: fadeIn 0.3s ease-in-out;
|
||||
animation: fadeIn 0.3s ease-in-out;
|
||||
-webkit-animation: fadeIn 0.6s ease-in-out;
|
||||
animation: fadeIn 0.6s ease-in-out;
|
||||
}
|
||||
section .background,section .background-video,
|
||||
[class*="background-"].light,[class*="background-"].dark {
|
||||
section .background,section .light,section .dark {
|
||||
-webkit-animation-duration:0s;
|
||||
animation-duration:0s;
|
||||
}
|
||||
@@ -1399,8 +1527,8 @@ section,.slide
|
||||
}
|
||||
|
||||
|
||||
/*== 5.1. Mini container width:50% (600px)
|
||||
.wrap:1200px; / Aligned items [class*="content-"]=== */
|
||||
/*== 5.1. Mini container width:50%
|
||||
Aligned items [class*="content-"]=== */
|
||||
|
||||
[class*="content-"] {
|
||||
position: relative;
|
||||
@@ -1412,7 +1540,9 @@ section,.slide
|
||||
[class*="content-"].frame, [class*="align"][class*="bg-"]{
|
||||
padding: 4.8rem;
|
||||
}
|
||||
|
||||
form[class*="bg-"] {
|
||||
padding: 2.4rem;
|
||||
}
|
||||
[class*="content-"] > [class*="content-"] p {
|
||||
font-size: 1.8rem;
|
||||
line-height: 3.2rem;
|
||||
@@ -1452,6 +1582,7 @@ section,.slide
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
/* === 5.2 Counter / Navigation Slides === */
|
||||
|
||||
#navigation {
|
||||
@@ -1463,11 +1594,11 @@ section,.slide
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
/* hover/visibility */
|
||||
z-index: 3;
|
||||
z-index: 4;
|
||||
}
|
||||
#navigation {
|
||||
-webkit-animation: fadeIn 16s;
|
||||
animation: fadeIn 16s;
|
||||
-webkit-animation: fadeIn 8s;
|
||||
animation: fadeIn 8s;
|
||||
opacity:0;
|
||||
}
|
||||
#navigation:hover {
|
||||
@@ -1490,12 +1621,14 @@ opacity: 1;
|
||||
text-align: center;
|
||||
line-height: 4.8rem;
|
||||
}
|
||||
|
||||
#counter a:hover {
|
||||
padding: .8rem;
|
||||
}
|
||||
#navigation p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
#navigation a {
|
||||
a#next,a#previous {
|
||||
position: absolute;
|
||||
width: 4rem;
|
||||
height: 4rem;
|
||||
@@ -1524,7 +1657,7 @@ a#previous {
|
||||
}
|
||||
}
|
||||
|
||||
/*=== 5.3 Slides - Background Images === */
|
||||
/*=== 5.3 Slides - Background Images/Videos === */
|
||||
|
||||
.background,
|
||||
[class*="background-"] {
|
||||
@@ -1533,9 +1666,11 @@ a#previous {
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
.background,
|
||||
[class*="background-"]{
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.background {
|
||||
background-position: center;
|
||||
background-size: cover
|
||||
@@ -1549,6 +1684,7 @@ a#previous {
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
|
||||
/*fullscreen video
|
||||
<video class="background-video">
|
||||
*/
|
||||
@@ -1596,19 +1732,18 @@ a#previous {
|
||||
}
|
||||
}
|
||||
|
||||
/*=== bg image/video overlay === */
|
||||
/*-- [class*="bg-"] .background.dark, [class*="bg-"] .embed.dark... -- */
|
||||
|
||||
|
||||
/*=== bg image light overlay === */
|
||||
|
||||
[class*="bg-"] .background.light,
|
||||
[class*="bg-"] [class*="background-"].light {
|
||||
[class*="bg-"] .light,
|
||||
[class*="bg-"] .light {
|
||||
filter: alpha(opacity=8000);
|
||||
opacity: 0.80;
|
||||
filter: alpha(opacity=8);
|
||||
}
|
||||
|
||||
[class*="bg-"] .background.dark,
|
||||
[class*="bg-"] [class*="background-"].dark {
|
||||
[class*="bg-"] .dark,
|
||||
[class*="bg-"] .dark {
|
||||
filter: alpha(opacity=2000);
|
||||
opacity: 0.20;
|
||||
filter: alpha(opacity=2);
|
||||
@@ -1639,6 +1774,13 @@ a#previous {
|
||||
animation: anim 80s linear infinite;
|
||||
|
||||
}
|
||||
/*=== Background with a frame === */
|
||||
/*<span class="background" style="background-image:url('image.jpg')"></span>
|
||||
<span class="background frame"></span>*/
|
||||
|
||||
[class*="background"].frame {
|
||||
margin: 2.4rem;
|
||||
}
|
||||
|
||||
/*===============================================================
|
||||
6. Magic blocks with flexbox (Auto-fill & Equal Height)
|
||||
@@ -1700,8 +1842,6 @@ Blocks Links li>a = .flexblock.blink (.blink required)
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@media (min-width:600px) {
|
||||
.flexblock li {
|
||||
width: 50%;
|
||||
@@ -1759,7 +1899,6 @@ div + ul, div + ol{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.features li h2 {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
@@ -1795,7 +1934,6 @@ div + ul, div + ol{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*=====================================================================
|
||||
6.2 Clients Logos <ul class="flexblock clients">
|
||||
======================================================================= */
|
||||
@@ -2000,7 +2138,10 @@ img size recommended:800x600px
|
||||
.flexblock.gallery li {
|
||||
margin-bottom: 4.8rem;
|
||||
}
|
||||
|
||||
.flexblock.gallery li:nth-child(n+4) {
|
||||
-webkit-flex:inherit;
|
||||
flex:inherit;
|
||||
}
|
||||
.flexblock.gallery li,
|
||||
.flexblock.gallery.blink li>a {
|
||||
padding: 0;
|
||||
@@ -2612,7 +2753,7 @@ p + .work {
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
[class*="card-"] figure img {
|
||||
[class*="card-"] figure img,[class*="card-"] figure iframe {
|
||||
margin: 0 auto;
|
||||
display: block;
|
||||
}
|
||||
@@ -2622,15 +2763,19 @@ p + .work {
|
||||
object-fit to re-frame images rather than just stretch and resize them === */
|
||||
|
||||
@media (min-width: 768px) {
|
||||
[class*="card-"][class*="bg-"] figure,
|
||||
.fullscreen [class*="card-"] figure {
|
||||
[class*="card"][class*="bg-"] figure,
|
||||
.fullscreen [class*="card"] figure {
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
min-width: 380px;
|
||||
max-height: 100%;
|
||||
}
|
||||
/* -- imgs/frames size recommended:800x600 -- */
|
||||
[class*="card-"][class*="bg-"] figure img,
|
||||
.fullscreen [class*="card-"] figure img {
|
||||
[class*="card-"][class*="bg-"] figure iframe,
|
||||
/* -- Make small images/iframes larger -- */
|
||||
.fullscreen [class*="card-"] figure img,
|
||||
.fullscreen [class*="card-"] figure iframe {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
top: 0;
|
||||
@@ -2642,14 +2787,17 @@ object-fit to re-frame images rather than just stretch and resize them === */
|
||||
}
|
||||
|
||||
.flex-content,
|
||||
[class*="card-"] blockquote {
|
||||
[class*="card"] blockquote {
|
||||
position: relative;
|
||||
padding: 2.4rem;
|
||||
}
|
||||
[class*="card-"] .flex-content,
|
||||
[class*="card-"] blockquote {
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
-webkit-flex-direction: column;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
padding: 2.4rem;
|
||||
}
|
||||
|
||||
.flex-content p {
|
||||
@@ -2683,18 +2831,18 @@ object-fit to re-frame images rather than just stretch and resize them === */
|
||||
.card-30 blockquote {
|
||||
width: 70%;
|
||||
}
|
||||
[class*="card-"]:nth-child(odd) figure {
|
||||
[class*="card"]:nth-child(odd) figure {
|
||||
order: 0
|
||||
}
|
||||
[class*="card-"]:nth-child(even) figure {
|
||||
[class*="card"]:nth-child(even) figure {
|
||||
order: 1;
|
||||
}
|
||||
.flex-content,
|
||||
[class*="card-"] blockquote {
|
||||
[class*="card"] blockquote {
|
||||
padding: 4.8rem;
|
||||
}
|
||||
.fullscreen [class*="card-"] .flex-content,
|
||||
.fullscreen [class*="card-"] blockquote {
|
||||
.fullscreen [class*="card"] .flex-content,
|
||||
.fullscreen [class*="card"] blockquote {
|
||||
padding: 6.4rem;
|
||||
}
|
||||
}
|
||||
@@ -2713,10 +2861,9 @@ object-fit to re-frame images rather than just stretch and resize them === */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*== Ficaption Cards === */
|
||||
|
||||
[class*="card-"] figure figcaption {
|
||||
[class*="card"] figure figcaption {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
@@ -2727,20 +2874,7 @@ object-fit to re-frame images rather than just stretch and resize them === */
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
[class*="card-"] figure figcaption.cover {
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
-webkit-flex-direction: column;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
[class*="card-"] figure figcaption svg {
|
||||
[class*="card"] figure figcaption svg {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
@@ -2758,7 +2892,13 @@ blockquote p {
|
||||
font-size: 2.4rem;
|
||||
line-height: 4rem;
|
||||
}
|
||||
|
||||
blockquote p:last-child {
|
||||
margin-bottom: 3.2rem;
|
||||
}
|
||||
/* -- Interviews dl.text-interview -- */
|
||||
dd blockquote p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.bg-apple blockquote p {
|
||||
font-family: "San Francisco", "Roboto", helvetica, arial, sans-serif;
|
||||
font-weight: 300;
|
||||
@@ -2777,29 +2917,35 @@ cite:before {
|
||||
content: "\2014 \2009";
|
||||
margin-right: 6px;
|
||||
}
|
||||
blockquote.wall:before {
|
||||
/* -- Big Blockquote -- */
|
||||
/* Info: .wall will be deprecated soon. Use .text-quote ;) */
|
||||
|
||||
.text-quote,.wall {
|
||||
position: relative; /* Versatility: blockquote, p, h2... */
|
||||
}
|
||||
.text-quote:before,.wall:before {
|
||||
position: absolute;
|
||||
top: -6.4rem;
|
||||
top: -4rem;
|
||||
left: -.8rem;
|
||||
content: "\201C";
|
||||
font-family: arial, sans-serif;
|
||||
width: 6.4rem;
|
||||
height: 6.4rem;
|
||||
font-size: 16rem;
|
||||
width: 5.6rem;
|
||||
height: 5.6rem;
|
||||
font-size: 12rem;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media (min-width:768px) {
|
||||
blockquote.wall {
|
||||
padding-left: 8rem;
|
||||
.text-quote,.wall {
|
||||
padding-left: 6.4rem;
|
||||
}
|
||||
blockquote.wall p {
|
||||
.text-quote p,.wall p {
|
||||
font-size: 3.2rem;
|
||||
line-height: 4.8rem;
|
||||
}
|
||||
blockquote.wall:before {
|
||||
top: -3.2rem;
|
||||
.text-quote:before,.wall:before {
|
||||
top: -1.6rem;
|
||||
left: .8rem;
|
||||
}
|
||||
}
|
||||
@@ -3090,7 +3236,60 @@ button:disabled:hover {
|
||||
}
|
||||
|
||||
/*=========================================
|
||||
15. SAFARI BUGS (flex-wrap)
|
||||
15. Longform
|
||||
=========================================== */
|
||||
|
||||
/* -- Posts = .wrap.longform -- */
|
||||
|
||||
.longform {
|
||||
width: 72rem;
|
||||
/* Why 72rem=720px?
|
||||
90-95 characters per line = better reading speed */
|
||||
}
|
||||
.longform .alignleft, .longform .alignright {
|
||||
max-width: 40%;
|
||||
}
|
||||
.longform img.aligncenter,.longform figure.aligncenter {
|
||||
margin-top: 3.2rem;
|
||||
margin-bottom: 3.2rem;
|
||||
}
|
||||
.longform ul,.longform ol {
|
||||
margin-bottom: 3.2rem;
|
||||
}
|
||||
.longform ul ol,.longform ol ul,.longform ul ul,.longform ol ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.longform figcaption p,.longform [class*="text-pull-"] p{
|
||||
line-height: 2.4rem;
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
/* Mobile: video full width */
|
||||
.text-pull.embed {
|
||||
padding-bottom: 60.6%; /*without black borders; */
|
||||
margin-right: -2.4rem;
|
||||
margin-left: -2.4rem;
|
||||
}
|
||||
@media (min-width:1280px) {
|
||||
.longform [class*="text-pull-"] {
|
||||
max-width: 32%;
|
||||
}
|
||||
.longform .text-pull-right {
|
||||
margin-right:-256px;
|
||||
}
|
||||
.longform .text-pull-left {
|
||||
margin-left:-256px;
|
||||
}
|
||||
}
|
||||
@media (min-width:1024px) {
|
||||
.longform .text-quote {
|
||||
margin-right: -4.8rem;
|
||||
margin-left: -4.8rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*=========================================
|
||||
16. SAFARI BUGS (flex-wrap)
|
||||
Solution: stackoverflow.com/questions/34250282/flexbox-safari-bug-flex-wrap
|
||||
=========================================== */
|
||||
|
||||
@@ -3100,17 +3299,42 @@ Solution: stackoverflow.com/questions/34250282/flexbox-safari-bug-flex-wrap
|
||||
}
|
||||
|
||||
/*=========================================
|
||||
16. PRINT
|
||||
17. PRINT
|
||||
=========================================== */
|
||||
|
||||
@media print {
|
||||
section,.slide {
|
||||
/* not static, just in case slide contents take advantage of positioning */
|
||||
position: relative;
|
||||
display: block !important;
|
||||
@page {
|
||||
size: A4 landscape;
|
||||
margin: 0.5cm;
|
||||
}
|
||||
#counter,
|
||||
#navigation {
|
||||
/* Black prints faster */
|
||||
* {
|
||||
background: transparent !important;
|
||||
color: black !important;
|
||||
text-shadow: none !important;
|
||||
filter: none !important;
|
||||
}
|
||||
html, body, #webslides {
|
||||
width: auto !important;
|
||||
height: auto !important;
|
||||
overflow: auto !important;
|
||||
}
|
||||
#webslides {
|
||||
overflow-x: auto !important;
|
||||
overflow-y: auto !important;
|
||||
}
|
||||
section, .slide {
|
||||
display: flex !important;
|
||||
height: auto !important;
|
||||
}
|
||||
section * {
|
||||
-webkit-animation: none;
|
||||
animation: none;
|
||||
}
|
||||
table, figure {
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
#counter, #navigation {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
@@ -81,27 +81,27 @@ hr:after {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
abbr,
|
||||
bbbr,
|
||||
acronym {
|
||||
border-bottom: 1px dotted #333;
|
||||
}
|
||||
|
||||
mark,
|
||||
ins {
|
||||
background-color: rgba(221,238,255, 0.8);
|
||||
color: inherit;
|
||||
background-color: rgba(221,238,255, 0.8);
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
::-moz-selection {
|
||||
background-color: rgba(221,238,255, 0.8);
|
||||
background-color: rgba(221,238,255, 0.8);
|
||||
}
|
||||
|
||||
::-webkit-selection {
|
||||
background-color: rgba(221,238,255, 0.8);
|
||||
background-color: rgba(221,238,255, 0.8);
|
||||
}
|
||||
|
||||
::selection {
|
||||
background-color: rgba(221,238,255, 0.8);
|
||||
background-color: rgba(221,238,255, 0.8);
|
||||
}
|
||||
|
||||
pre {
|
||||
@@ -119,7 +119,7 @@ code,[class*="bg-"] pre {
|
||||
}
|
||||
|
||||
.bg-white code{
|
||||
background: rgba(0, 20, 80, 0.03);
|
||||
background: rgba(0, 20, 80, 0.03);
|
||||
}
|
||||
/*================================================
|
||||
Slides - Backgrounds <section class="bg-primary">
|
||||
@@ -218,7 +218,7 @@ Slides - Backgrounds <section class="bg-primary">
|
||||
|
||||
/*Covers/Longforms...*/
|
||||
.bg-trans-gradient{
|
||||
background: linear-gradient(to top, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0) 100%);
|
||||
background: linear-gradient(to top, rgba(0,0,0,0.8) 0%,rgba(0,0,0,0) 100%);
|
||||
}
|
||||
|
||||
/*Horizontal Gradient*/
|
||||
@@ -250,18 +250,20 @@ Slides - Backgrounds <section class="bg-primary">
|
||||
|
||||
/*Gray Gradient (horizontal)*/
|
||||
.bg-gradient-gray{
|
||||
background: linear-gradient(90deg,#f7f9fb 0,#dee2e6 100%);
|
||||
color: #333;
|
||||
text-shadow: none;
|
||||
background: linear-gradient(90deg,#f7f9fb 0,#dee2e6 100%);
|
||||
color: #333;
|
||||
text-shadow: none;
|
||||
}
|
||||
/*Border/Frame*/
|
||||
.frame {
|
||||
border: .8rem solid #fff;
|
||||
}
|
||||
|
||||
[class*="background"].frame {
|
||||
border-width: .2rem;
|
||||
}
|
||||
/*Layer/Box Shadow*/
|
||||
.shadow,.pre {
|
||||
position: relative;
|
||||
position: relative;
|
||||
}
|
||||
.shadow:before,.shadow:after {
|
||||
box-shadow: 0 16px 24px rgba(0, 20, 80, 0.3);
|
||||
@@ -274,13 +276,16 @@ TYPOGRAPHY
|
||||
/* -- Horizontal separator -- */
|
||||
|
||||
.text-separator:before {
|
||||
background-color: rgba(170, 0, 0, 0.8);
|
||||
background-color: rgba(170, 0, 0, 0.8);
|
||||
}
|
||||
|
||||
/* -- Pull Quote (Right/Left) -- */
|
||||
|
||||
[class*="text-pull-"] {
|
||||
border-top: 4px solid rgba(0, 0, 0, 0.5);
|
||||
border-top: 4px solid rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
img[class*="text-pull-"],figure[class*="text-pull-"] {
|
||||
border-top: none;
|
||||
}
|
||||
/* -- Context -- */
|
||||
|
||||
@@ -374,7 +379,7 @@ nav li.email a:hover {
|
||||
}
|
||||
|
||||
/*=========================================
|
||||
Features & Clients List
|
||||
Features & Clients List
|
||||
=========================================== */
|
||||
|
||||
.features li,.clients li {
|
||||
@@ -387,7 +392,7 @@ Features & Clients List
|
||||
}
|
||||
|
||||
.features li:hover,.clients li:hover {
|
||||
box-shadow: 0 8px 16px rgba(0,20,80,.02),0 4px 16px rgba(0,0,0,.08);
|
||||
box-shadow: 0 8px 16px rgba(0,20,80,.02),0 4px 16px rgba(0,0,0,.08);
|
||||
}
|
||||
/*.features li span,.features li svg{color: #44d;}*/
|
||||
|
||||
@@ -410,7 +415,7 @@ Features & Clients List
|
||||
}
|
||||
|
||||
/*===========================================
|
||||
flexblock.steps
|
||||
flexblock.steps
|
||||
============================================= */
|
||||
|
||||
.steps li:nth-child(1) {
|
||||
@@ -519,7 +524,7 @@ Gallery li+.overlay+image
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 4px 8px rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
.gallery li footer {
|
||||
border-top:1px solid rgba(0,20,80,0.1);
|
||||
border-top:1px solid rgba(0,20,80,0.1);
|
||||
}
|
||||
|
||||
.gallery li a {
|
||||
@@ -684,13 +689,13 @@ Cards
|
||||
/*== Figure Background === */
|
||||
|
||||
[class*="card-"][class*="bg-"] figure {
|
||||
background-color: rgba(0, 20, 80, 0.06);
|
||||
background-color: rgba(0, 20, 80, 0.06);
|
||||
}
|
||||
|
||||
/*== Ficaption Cards === */
|
||||
|
||||
[class*="card-"] figcaption,
|
||||
[class*="card-"] figcaption a {
|
||||
[class*="card"] figcaption,
|
||||
[class*="card"] figcaption a {
|
||||
color: #fff;
|
||||
background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.2) 100%);
|
||||
}
|
||||
@@ -703,7 +708,7 @@ Cards
|
||||
border-image: linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.4) 50%, transparent) 1 100%;
|
||||
-webkit-border-image: -webkit-linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.4) 50%, transparent) 1 100%;
|
||||
-moz-border-image: -moz-linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.4) 50%, transparent) 1 100%;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -737,7 +742,7 @@ tr:nth-child(even)>td:hover {
|
||||
|
||||
|
||||
/*============================
|
||||
Browser (Screenshots)
|
||||
Browser (Screenshots)
|
||||
============================== */
|
||||
|
||||
.browser {
|
||||
@@ -783,10 +788,10 @@ input:focus::-moz-placeholder {
|
||||
input:focus::-webkit-input-placeholder {
|
||||
color: #ddd;
|
||||
}
|
||||
a.button,[class*="badge-"],
|
||||
a.button,[class*="badge-"]
|
||||
button[type="submit"],
|
||||
input {
|
||||
box-shadow: 0 10px 16px -8px rgba(0, 20, 80, 0.3);
|
||||
box-shadow: 0px 10px 16px -8px rgba(0, 20, 80, 0.3);
|
||||
}
|
||||
|
||||
button,
|
||||
@@ -797,7 +802,7 @@ button[type="submit"],
|
||||
input[type="submit"],
|
||||
.button,.button:hover,
|
||||
button[type="submit"]:hover,
|
||||
input[type="submit"]:hover
|
||||
input[type="submit"]:hover
|
||||
{
|
||||
border: 1px solid #44d;
|
||||
}
|
||||
@@ -810,7 +815,7 @@ input[type="submit"],
|
||||
text-shadow: 0 1px 0 #123;
|
||||
}
|
||||
.button:active,button[type="submit"]:active,input[type="submit"]:active {
|
||||
background-color: #17d;
|
||||
background-color: #17d;
|
||||
}
|
||||
.ghost,.ghost:hover {background: none;color: inherit;text-shadow: none;}
|
||||
.bg-primary select,
|
||||
@@ -818,7 +823,7 @@ input[type="submit"],
|
||||
.bg-primary .button,
|
||||
.bg-primary button,.bg-primary button:hover,
|
||||
.bg-primary input,
|
||||
[class*="bg-gradient-"] .button,[class*="bg-"] a.button.ghost
|
||||
[class*="bg-gradient-"] .button,[class*="bg-"] a.button.ghost
|
||||
{
|
||||
border-color: #fff;
|
||||
}
|
||||
@@ -902,7 +907,6 @@ Slides (Counter/Arrows)
|
||||
background-color: rgba(0, 0, 0, 0.9);
|
||||
}
|
||||
|
||||
|
||||
/*============================
|
||||
Footer
|
||||
============================== */
|
||||
@@ -914,4 +918,4 @@ footer[role=contentinfo] {
|
||||
/*footer:hover {
|
||||
background-color:rgba(255,255,255 , 0.3);
|
||||
}
|
||||
*/
|
||||
*/
|
Binary file not shown.
Before Width: | Height: | Size: 115 B |
File diff suppressed because it is too large
Load Diff
10
static/js/webslides.min.js
vendored
10
static/js/webslides.min.js
vendored
File diff suppressed because one or more lines are too long
40
test/dom.js
Normal file
40
test/dom.js
Normal file
@@ -0,0 +1,40 @@
|
||||
import test from 'ava';
|
||||
import DOM from '../src/js/utils/dom';
|
||||
|
||||
test('DOM.createNode', t => {
|
||||
const div = DOM.createNode('div', 'my-id');
|
||||
t.is(div.tagName, 'DIV');
|
||||
t.is(div.id, 'my-id');
|
||||
t.is(div.innerHTML, '');
|
||||
});
|
||||
|
||||
test('DOM.once', t => {
|
||||
const div = DOM.createNode('div');
|
||||
DOM.once(div, 'click', () => div.classList.toggle('ok'));
|
||||
div.click();
|
||||
t.is(div.className, 'ok');
|
||||
div.click();
|
||||
t.is(div.className, 'ok');
|
||||
});
|
||||
|
||||
test('DOM.hide', t => {
|
||||
const div = DOM.createNode('div');
|
||||
DOM.hide(div);
|
||||
t.is(div.style.display, 'none');
|
||||
});
|
||||
|
||||
test('DOM.show', t => {
|
||||
const div = DOM.createNode('div');
|
||||
DOM.hide(div);
|
||||
DOM.show(div);
|
||||
t.is(div.style.display, '');
|
||||
});
|
||||
|
||||
test('DOM.fireEvent', t => {
|
||||
const div = DOM.createNode('div');
|
||||
div.addEventListener('toggle-class', () => div.classList.toggle('ok'));
|
||||
DOM.fireEvent(div, 'toggle-class');
|
||||
t.is(div.className, 'ok');
|
||||
DOM.fireEvent(div, 'toggle-class');
|
||||
t.is(div.className, '');
|
||||
});
|
2
test/helpers/setup-browser-env.js
Normal file
2
test/helpers/setup-browser-env.js
Normal file
@@ -0,0 +1,2 @@
|
||||
import browserEnv from 'browser-env';
|
||||
browserEnv();
|
@@ -1,6 +1,8 @@
|
||||
const SmartBannerPlugin = require('smart-banner-webpack-plugin');
|
||||
const path = require('path');
|
||||
|
||||
const src = path.join(__dirname, 'src');
|
||||
const pkg = require('./package.json');
|
||||
|
||||
module.exports = {
|
||||
context: src,
|
||||
@@ -20,9 +22,19 @@ module.exports = {
|
||||
rules: [
|
||||
{
|
||||
test: /\.js$/,
|
||||
loader: 'babel-loader',
|
||||
use: [
|
||||
'babel-loader',
|
||||
'eslint-loader',
|
||||
],
|
||||
include: src
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
new SmartBannerPlugin({
|
||||
banner: `Name: WebSlides\nVersion: ${pkg.version}\nDate: ${new Date().toISOString().slice(0,10)}\nDescription: ${pkg.description}\nURL: ${pkg.homepage}\nCredits: @jlantunez, @LuisSacristan, @Belelros`,
|
||||
raw: false,
|
||||
entryOnly: true
|
||||
})
|
||||
],
|
||||
};
|
||||
|
Reference in New Issue
Block a user