mirror of
https://github.com/webslides/WebSlides.git
synced 2025-09-18 08:52:03 +02:00
Compare commits
241 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
f6ac24007a | ||
|
d592006bfa | ||
|
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 | ||
|
09bdc31b64 | ||
|
5c4d2f8769 | ||
|
d03e0cad41 | ||
|
be0e498b2b | ||
|
12bac7afc5 | ||
|
78b6e74b82 | ||
|
91c00a2fe3 | ||
|
e65826dbb6 | ||
|
508cdafea5 | ||
|
50af5fe3df | ||
|
ebe42090ac | ||
|
14e1b5b7b8 | ||
|
2e6471e2ee | ||
|
bc64fcef7e | ||
|
e50193ebb1 | ||
|
b04f15f696 | ||
|
3d6fcef762 | ||
|
32ff8afa88 | ||
|
f082ff12ac | ||
|
62c6aba478 | ||
|
5a262f5460 | ||
|
4379122d1d | ||
|
83f1110947 | ||
|
b7503b1e9e | ||
|
521d708c22 | ||
|
33b1f3ad7a | ||
|
f6ccd39158 | ||
|
6674a4f203 | ||
|
f80106a4ab | ||
|
4fb151c886 | ||
|
b7a01c4319 | ||
|
28c08541e5 | ||
|
6bc8ab582d | ||
|
19cd5bdbc7 | ||
|
bb5ae82995 | ||
|
36c1f1997b | ||
|
5687d61a83 | ||
|
0d2c8c09d1 | ||
|
9e5a127590 | ||
|
7b86354ad4 | ||
|
a67f7d9d0b | ||
|
2234a02252 | ||
|
02834a3b4d | ||
|
3e13eb4025 | ||
|
28756b308f | ||
|
acd3eed1b7 | ||
|
8ac52b4936 | ||
|
130c5d2321 | ||
|
0055ecd7d8 | ||
|
4ba77ba3fc | ||
|
25be14fbd4 | ||
|
2c21b8f5d9 | ||
|
2ef3f986ed | ||
|
76ea07d8db | ||
|
9bfab33676 | ||
|
3251b1b7d8 | ||
|
3782a40a8a | ||
|
585ab60b43 | ||
|
62ffaf95d6 | ||
|
4ca297f8ae | ||
|
0ce1d02d8b | ||
|
c5133158ad | ||
|
ff3c2d066a | ||
|
8e47ffead4 | ||
|
2a46012a58 | ||
|
c1777f593f | ||
|
b99fdc8c47 | ||
|
0e02056ca7 | ||
|
72d057293e | ||
|
75de8a46ac | ||
|
ae36e15588 | ||
|
6e7ce46ebc | ||
|
ea164b6d69 | ||
|
7b495cccf1 | ||
|
049d083744 | ||
|
86cc1f494f | ||
|
d4e6662ab6 | ||
|
01fa93d50e | ||
|
70bde2f4ae | ||
|
2e93754ba1 | ||
|
4e562e2978 |
21
.editorconfig
Normal file
21
.editorconfig
Normal file
@@ -0,0 +1,21 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
max_line_length = 233
|
||||
end_of_line = lf
|
||||
|
||||
[*.json]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.yml]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
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"]
|
||||
}
|
||||
}
|
||||
|
||||
|
17
.gitignore
vendored
Normal file
17
.gitignore
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
# IDE files #
|
||||
#############
|
||||
.idea/
|
||||
|
||||
# Third Party #
|
||||
###############
|
||||
node_modules/
|
||||
|
||||
# OS generated files #
|
||||
######################
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
123
CHANGELOG.md
123
CHANGELOG.md
@@ -1,13 +1,124 @@
|
||||
## 0.2 (2017-02-22)
|
||||
# 1.3.0 (2017-04-20)
|
||||
|
||||
- Auto slide (Demo: why-webslides.html)
|
||||
## Misc
|
||||
|
||||
## 0.1.1 (2017-02-11)
|
||||
- 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/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/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
|
||||
|
||||
- Introduced a minor bug on iOS Safari which leads to the bottom part of the page not being visible on the first scroll. This is likely a browser bug but it has been unearthed in this version due to a much needed improvement on scrolling behaviour bugs. We're trying to investigate a bit more and will provide a fix ASAP.
|
||||
|
||||
# 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.
|
||||
|
||||
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.
|
||||
|
||||
**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.
|
||||
|
||||
All the technical specs live now in [this document](docs/technical.md).
|
||||
|
||||
## Bugfixes
|
||||
|
||||
- Fixed a bug with back/next buttons on the browser which lead the nav bar to not work.
|
||||
|
||||
## New Features
|
||||
|
||||
- Linking to slides without window open.
|
||||
- Added custom events to listen for. `ws:init` whenever webslides is ready and `ws:slide-change` whenever a slide changes.
|
||||
- Added play/stop methods.
|
||||
|
||||
## Breaking Changes
|
||||
|
||||
- This "stable" release drops the jQuery requirement and leans on ES2015 for the architecture. Hence, it's no longer possible
|
||||
to use the library as before.
|
||||
|
||||
# 0.2.0 (2017-02-22)
|
||||
|
||||
## New Features
|
||||
|
||||
- Adding autoslide option.
|
||||
|
||||
# 0.1.1 (2017-02-11)
|
||||
|
||||
- Transform the library into an object.
|
||||
- .tabs removed.
|
||||
- webslides-lite.js removed.
|
||||
- `.tabs` removed.
|
||||
- `webslides-lite.js` removed.
|
||||
|
||||
## 0.1 (2017-01-08)
|
||||
# 0.1.0 (2017-01-08)
|
||||
|
||||
- Initial release.
|
||||
|
109
README.md
109
README.md
@@ -1,71 +1,62 @@
|
||||
# WebSlides = Good Karma
|
||||
Finally, everything you need to make HTML presentations in a beautiful way. Just the essentials. You can create your own presentation instantly. Simply choose a demo and customize it in minutes — [https://webslides.tv/demos](https://webslides.tv/demos).
|
||||
# WebSlides = Create stories with Karma
|
||||
|
||||
A new release (at least) every 8th day of the month. Version 0.1: Jan 8, 2017.
|
||||
[](http://opensource.org/licenses/MIT)
|
||||
[](https://github.com/webslides/webslides/releases/latest)
|
||||
[](https://www.paypal.me/jlantunez/8)
|
||||
[](https://twitter.com/webslides)
|
||||
|
||||
### 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.
|
||||
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).
|
||||
|
||||
### Features
|
||||
* * *
|
||||
### Download
|
||||
Simply choose a demo and customize it in minutes. Latest version: [webslides.tv/webslides-latest.zip](https://webslides.tv/webslides-latest.zip).
|
||||
* * *
|
||||
|
||||
- Navigation (horizontal and vertical sliding): touchpad, keyboard shortcuts, and swipe.
|
||||
|
||||
### 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
|
||||
|
||||
- Navigation (horizontal and vertical sliding): remote presenters, touchpad, keyboard shortcuts, and swipe.
|
||||
- Slide counter.
|
||||
- Permalinks: go to a specific slide.
|
||||
- Autoslide
|
||||
- Autoslide.
|
||||
- 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.
|
||||
- Fonts: Roboto, Maitree (Serif), and San Francisco.
|
||||
- Vertical rhythm (use multiples of 8).
|
||||
|
||||
### Markup
|
||||
## Markup
|
||||
|
||||
- Code is clean and scalable. It uses intuitive markup with popular naming conventions. There's no need to overuse classes or nesting.
|
||||
- Each parent <code><section></code> in the #webslides element is an individual slide.
|
||||
- Each parent `<section>` in the `#webslides` element is an individual slide.
|
||||
|
||||
<pre><article id="webslides">
|
||||
<section>
|
||||
<h1>Slide 1</h1>
|
||||
</section>
|
||||
<section class="bg-black aligncenter">
|
||||
<span class="code-comment"><!-- .wrap = container 1200px --></span>
|
||||
<div class="wrap">
|
||||
<h1>Slide 2</h1>
|
||||
</div>
|
||||
</section>
|
||||
</article></pre>
|
||||
|
||||
#### Vertical Sliding
|
||||
|
||||
<pre><article id="webslides" class="vertical"></pre>
|
||||
|
||||
### How it works
|
||||
|
||||
You need to add the follow javascript to initialize the webslides object.
|
||||
|
||||
```javascript
|
||||
var slide = jQuery('#webslides').webslides();
|
||||
```html
|
||||
<article id="webslides">
|
||||
<section>
|
||||
<h1>Slide 1</h1>
|
||||
</section>
|
||||
<section class="bg-black aligncenter">
|
||||
<!-- .wrap = container 1200px -->
|
||||
<div class="wrap">
|
||||
<h1>Slide 2</h1>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
```
|
||||
|
||||
#### Auto slide
|
||||
### Vertical Sliding
|
||||
|
||||
```javascript
|
||||
var slide = jQuery('#webslides').webslides({interval: 5000});
|
||||
```
|
||||
Now you can use the slide with these functions:
|
||||
|
||||
```javascript
|
||||
// Moving to next slide
|
||||
slide.nextSlide();
|
||||
// Moving to previous slide
|
||||
slide.previousSlide();
|
||||
// Moving to a specific slide
|
||||
slide.goToSlide(n);
|
||||
```html
|
||||
<article id="webslides" class="vertical">
|
||||
```
|
||||
|
||||
### What's in the download?
|
||||
|
||||
The download includes demos and images (devices and logos).
|
||||
The download includes demos and images (devices and logos).
|
||||
All content is for demo purposes only. Images are property of their respective owners.
|
||||
|
||||
```
|
||||
@@ -84,28 +75,34 @@ webslides/
|
||||
|
||||
### CSS Syntax (classes)
|
||||
|
||||
- Typography: .text-landing, .text-data, .text-intro...
|
||||
- Background Colors: .bg-primary, .bg-apple, .bg-blue...
|
||||
- Background Images: .background,.background-center-bottom...
|
||||
- Cards: .card-50, .card-40...
|
||||
- Flexible Blocks: .flexblock.clients, .flexblock.metrics...
|
||||
|
||||
- Typography: `.text-landing`, `.text-data`, `.text-intro`...
|
||||
- Background Colors: `.bg-primary`, `.bg-apple`, `.bg-blue`...
|
||||
- Background Images: `.background`,`.background-center-bottom`...
|
||||
- Cards: `.card-50`, `.card-40`...
|
||||
- Flexible Blocks: `.flexblock.clients`, `.flexblock.metrics`...
|
||||
|
||||
### Extensions
|
||||
|
||||
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!
|
||||
|
||||
- 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
|
||||
|
||||
- WebSlides was created by [@jlantunez](https://twitter.com/jlantunez) using [Cactus](https://github.com/eudicots/Cactus).
|
||||
- Thanks [@LuisSacristan](https://twitter.com/luissacristan) for the javascript code :)
|
||||
- Javascript: [@Belelros](https://twitter.com/Belelros) and [@LuisSacristan](https://twitter.com/luissacristan).
|
||||
- Based on [SimpleSlides](https://github.com/jennschiffer/SimpleSlides), by [@JennSchiffer](https://twitter.com/jennschiffer).
|
||||
|
@@ -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,16 +1932,15 @@
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<!-- jQuery (required for slides to work) -->
|
||||
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var slide = jQuery('#webslides').webslides();
|
||||
<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>
|
||||
|
@@ -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,7 +318,6 @@
|
||||
<section>
|
||||
<div class="wrap">
|
||||
<h1>Navigation</h1>
|
||||
|
||||
<nav role="navigation">
|
||||
<ul>
|
||||
<li><a href="">About</a></li>
|
||||
@@ -368,8 +366,7 @@
|
||||
</ul>
|
||||
</nav>
|
||||
<p>nav.navbar</p>
|
||||
|
||||
<hr>
|
||||
<hr>
|
||||
<div class="grid">
|
||||
<div class="column">
|
||||
<h3>Company</h3>
|
||||
@@ -428,8 +425,8 @@
|
||||
</ul>
|
||||
</div>
|
||||
<!-- .end .column -->
|
||||
</div>
|
||||
<!-- .end .grid -->
|
||||
</div>
|
||||
<!-- end .tab-content -->
|
||||
</div>
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
@@ -1690,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>
|
||||
@@ -1721,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">
|
||||
@@ -1794,10 +1791,51 @@
|
||||
<!-- .end .wrap -->
|
||||
</section>
|
||||
<section class="aligncenter">
|
||||
<!--.wrap = container 1200px -->
|
||||
<!--.wrap = container (width: 90%) -->
|
||||
<div class="wrap">
|
||||
<h1 class="text-landing">Tell a Story</h1>
|
||||
<p class="text-intro"><strong>Hi, this is WebSlides</strong>. HTML presentations made simple. <br>I'm a cute solution with clean markup and <strong>lovely CSS</strong>.</p>
|
||||
<div id="tab-3" class="tab-content current">
|
||||
<h1 class="text-landing">Tell a Story</h1>
|
||||
<p class="text-intro"><strong>Hi, this is WebSlides</strong>. HTML presentations made simple. <br>I'm a cute solution with clean markup and <strong>lovely CSS</strong>.</p>
|
||||
</div>
|
||||
<div id="tab-4" class="tab-content">
|
||||
<ul class="flexblock features">
|
||||
<li>
|
||||
<div>
|
||||
<svg class="fa-heart-o">
|
||||
<use xlink:href="#fa-heart-o"></use>
|
||||
</svg>
|
||||
<h2>Indexed content</h2>
|
||||
Sharing is caring.
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<h2>
|
||||
<svg class="fa-magic">
|
||||
<use xlink:href="#fa-magic"></use>
|
||||
</svg>
|
||||
Just essential features
|
||||
</h2>
|
||||
Keyboard navigation...
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<svg class="fa-bolt">
|
||||
<use xlink:href="#fa-bolt"></use>
|
||||
</svg>
|
||||
<h2>
|
||||
Prototype faster
|
||||
</h2>
|
||||
with clean code
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<ul class="tabs">
|
||||
<li class="tab current" data-tab="tab-3">Purpose</li>
|
||||
<li class="tab" data-tab="tab-4">Benefits</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<section class="bg-black aligncenter">
|
||||
@@ -1900,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>
|
||||
@@ -1967,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>
|
||||
@@ -2104,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>
|
||||
@@ -2384,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">
|
||||
@@ -2398,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>
|
||||
@@ -2408,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>
|
||||
@@ -2496,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>
|
||||
@@ -2511,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">
|
||||
@@ -2585,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">
|
||||
@@ -2625,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">
|
||||
@@ -2644,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>
|
||||
@@ -2657,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>
|
||||
@@ -2730,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>
|
||||
@@ -2738,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>
|
||||
@@ -2767,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">
|
||||
@@ -2790,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>
|
||||
@@ -2826,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>
|
||||
@@ -2897,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>
|
||||
@@ -2967,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 -->
|
||||
@@ -2985,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>
|
||||
@@ -3022,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>
|
||||
@@ -3078,16 +3137,15 @@
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<!-- jQuery (required for slides to work) -->
|
||||
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var slide = jQuery('#webslides').webslides();
|
||||
<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>
|
||||
|
@@ -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,33 +86,33 @@
|
||||
<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>
|
||||
|
||||
<main role="main">
|
||||
<article id="webslides" class="vertical">
|
||||
<article> <!-- Slideshow? 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 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>
|
||||
40+ <a href="../demos/components.html" title="WebSlides Components">components</a> with a solid <a href="../demos/classes.html" title="WebSlides Classes">CSS architecture</a>.</p>
|
||||
<p>Share your slides using <a target="_blank" href="https://twitter.com/search?f=tweets&q=%23webslides&src=typd" title="#WebSlides on Twitter">#WebSlides</a>.</p>
|
||||
<p>Share your slides using <a href="https://twitter.com/search?q=%23webslides&src=typd" title="#WebSlides on Twitter">#WebSlides</a>.</p>
|
||||
</div>
|
||||
<!-- .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,16 +255,14 @@
|
||||
</main>
|
||||
<!-- end main -->
|
||||
|
||||
<!-- jQuery (required for slides to work) -->
|
||||
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var slide = jQuery('#webslides').webslides();
|
||||
<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>
|
||||
|
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,16 +847,15 @@
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<!-- jQuery (required for slides to work) -->
|
||||
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var slide = jQuery('#webslides').webslides();
|
||||
<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>
|
||||
|
@@ -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,16 +1922,15 @@
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<!-- jQuery (required for slides to work) -->
|
||||
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var slide = jQuery('#webslides').webslides();
|
||||
<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,16 +1863,15 @@
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<!-- jQuery (required for slides to work) -->
|
||||
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var slide = jQuery('#webslides').webslides();
|
||||
<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>
|
||||
|
@@ -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 -->
|
||||
@@ -66,7 +65,6 @@
|
||||
<!-- Android -->
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="theme-color" content="#333333">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<header role="banner">
|
||||
@@ -74,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>
|
||||
@@ -89,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>
|
||||
@@ -100,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">
|
||||
@@ -115,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>
|
||||
@@ -124,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
|
||||
@@ -137,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">
|
||||
@@ -151,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">
|
||||
@@ -169,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>
|
||||
@@ -182,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>
|
||||
@@ -303,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>
|
||||
@@ -339,13 +339,12 @@
|
||||
</main>
|
||||
<!--main-->
|
||||
|
||||
<!-- jQuery (required for slides to work) -->
|
||||
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="../static/js/webslides.js"></script>
|
||||
|
||||
<!-- Autoslide 5 seconds. If you don't want autoslide, remove: {interval: 5000} -->
|
||||
<script type="text/javascript">
|
||||
var slide = jQuery('#webslides').webslides({interval: 5000});
|
||||
|
||||
<!-- Autoslide 5 seconds. If you don't want autoslide, remove: {autoslide: 5000} -->
|
||||
<script>
|
||||
window.ws = new WebSlides({ autoslide: 5000 });
|
||||
</script>
|
||||
|
||||
<!-- OPTIONAL - svg-icons.js (fontastic.me - Font Awesome as svg icons) -->
|
||||
|
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>
|
||||
|
62
index.html
62
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,30 +87,29 @@
|
||||
<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>
|
||||
|
||||
<main role="main">
|
||||
<article id="webslides" class="vertical">
|
||||
|
||||
<!-- 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>
|
||||
@@ -121,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>
|
||||
@@ -142,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">
|
||||
@@ -160,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>
|
||||
@@ -182,7 +181,7 @@
|
||||
<span>→</span>
|
||||
Simple Navigation
|
||||
</h2>
|
||||
with arrow keys and swipe.
|
||||
with arrow keys, presenter...
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
@@ -242,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?">
|
||||
@@ -298,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>
|
||||
@@ -314,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>
|
||||
@@ -325,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>
|
||||
@@ -359,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>
|
||||
@@ -376,25 +373,22 @@
|
||||
</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> -->
|
||||
|
||||
<!-- jQuery (required for slides to work) -->
|
||||
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
|
||||
<!-- Required -->
|
||||
<script src="static/js/webslides.js"></script>
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
var slide = jQuery('#webslides').webslides();
|
||||
<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>
|
||||
|
80
package.json
Normal file
80
package.json
Normal file
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"name": "webslides",
|
||||
"version": "1.3.1",
|
||||
"description": "Making HTML presentations easy",
|
||||
"main": "index.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/webslides/webslides.git"
|
||||
},
|
||||
"keywords": [
|
||||
"webslides",
|
||||
"presentation",
|
||||
"css"
|
||||
],
|
||||
"author": "Jose Luís Antúnez <jlantunez@gmail.com>",
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Luís Sacristán"
|
||||
},
|
||||
{
|
||||
"name": "Antonio Laguna",
|
||||
"email": "a.laguna@funcion13.com"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/webslides/webslides/issues"
|
||||
},
|
||||
"homepage": "https://github.com/webslides/webslides#readme",
|
||||
"devDependencies": {
|
||||
"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.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",
|
||||
"test": "ava test/*.js"
|
||||
},
|
||||
"babel": {
|
||||
"presets": [
|
||||
[
|
||||
"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"
|
||||
]
|
||||
}
|
||||
}
|
3
src/js/full.js
Normal file
3
src/js/full.js
Normal file
@@ -0,0 +1,3 @@
|
||||
import WebSlides from './modules/webslides';
|
||||
|
||||
window.WebSlides = WebSlides;
|
153
src/js/modules/slide.js
Normal file
153
src/js/modules/slide.js
Normal file
@@ -0,0 +1,153 @@
|
||||
import DOM from '../utils/dom';
|
||||
|
||||
const CLASSES = {
|
||||
SLIDE: 'slide',
|
||||
CURRENT: 'current'
|
||||
};
|
||||
|
||||
const Events = {
|
||||
ENTER: 'dom:enter',
|
||||
LEAVE: 'dom:leave',
|
||||
ENABLE: 'slide:enable',
|
||||
DISABLE: 'slide:disable'
|
||||
};
|
||||
|
||||
/**
|
||||
* Wrapper for the Slide section.
|
||||
*/
|
||||
class Slide {
|
||||
/**
|
||||
* Bootstraps the slide by saving some data, adding a class and hiding it.
|
||||
* @param {Element} el Section element.
|
||||
* @param {number} i Zero based index of the slide.
|
||||
*/
|
||||
constructor(el, i) {
|
||||
/**
|
||||
* @type {Element}
|
||||
*/
|
||||
this.el = el;
|
||||
/**
|
||||
* The section's parent.
|
||||
* @type {Node}
|
||||
*/
|
||||
this.parent = el.parentNode;
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
this.i = i;
|
||||
|
||||
this.el.id = `section-${(i + 1)}`;
|
||||
this.el.classList.add(CLASSES.SLIDE);
|
||||
|
||||
// Hide slides by default
|
||||
this.hide();
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides the node and removes the class that makes it "active".
|
||||
*/
|
||||
hide() {
|
||||
DOM.hide(this.el);
|
||||
this.el.classList.remove(CLASSES.CURRENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows the node and adds the class that makes it "active".
|
||||
*/
|
||||
show() {
|
||||
DOM.show(this.el);
|
||||
this.el.classList.add(CLASSES.CURRENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether an element is a valid candidate to be a slide by ensuring
|
||||
* it's a "section" element.
|
||||
* @param {Element} el Element to be checked.
|
||||
* @return {boolean} Whether is candidate or not.
|
||||
*/
|
||||
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
|
||||
};
|
395
src/js/modules/webslides.js
Normal file
395
src/js/modules/webslides.js
Normal file
@@ -0,0 +1,395 @@
|
||||
import Plugins from '../plugins/plugins';
|
||||
import Slide from './slide';
|
||||
import DOM from '../utils/dom';
|
||||
import scrollTo from '../utils/scroll-to';
|
||||
|
||||
const CLASSES = {
|
||||
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,
|
||||
'video': Plugins.Video,
|
||||
'youtube': Plugins.YouTube
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* WebSlides module.
|
||||
*/
|
||||
export default class WebSlides {
|
||||
/**
|
||||
* Options for WebSlides
|
||||
* @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,
|
||||
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}
|
||||
*/
|
||||
this.isMoving = false;
|
||||
/**
|
||||
* Slide's array.
|
||||
* @type {?Array<Slide>}
|
||||
*/
|
||||
this.slides = null;
|
||||
/**
|
||||
* Current slide's index.
|
||||
* @type {number}
|
||||
* @private
|
||||
*/
|
||||
this.currentSlideI_ = -1;
|
||||
/**
|
||||
* Current slide reference.
|
||||
* @type {?Slide}
|
||||
* @private
|
||||
*/
|
||||
this.currentSlide_ = null;
|
||||
/**
|
||||
* Max slide index.
|
||||
* @type {number}
|
||||
* @private
|
||||
*/
|
||||
this.maxSlide_ = 0;
|
||||
/**
|
||||
* Whether the layout is going to be vertical or horizontal.
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.isVertical = this.el.classList.contains(CLASSES.VERTICAL);
|
||||
/**
|
||||
* Plugin's dictionary.
|
||||
* @type {Object}
|
||||
*/
|
||||
this.plugins = {};
|
||||
/**
|
||||
* Options dictionary.
|
||||
* @type {Object}
|
||||
*/
|
||||
this.options = {
|
||||
autoslide,
|
||||
changeOnClick,
|
||||
loop,
|
||||
minWheelDelta,
|
||||
scrollWait,
|
||||
slideOffset
|
||||
};
|
||||
/**
|
||||
* Initialisation flag.
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.initialised = false;
|
||||
|
||||
// Bootstrapping
|
||||
this.removeChildren_();
|
||||
this.grabSlides_();
|
||||
this.createPlugins_();
|
||||
this.initSlides_();
|
||||
// Finished
|
||||
this.onInit_();
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all children elements inside of the main container that are not
|
||||
* eligible to be a Slide Element.
|
||||
* @private
|
||||
*/
|
||||
removeChildren_() {
|
||||
const nodes = this.el.childNodes;
|
||||
let i = nodes.length;
|
||||
|
||||
while (i--) {
|
||||
const node = nodes[i];
|
||||
|
||||
if (!Slide.isCandidate(node)) {
|
||||
this.el.removeChild(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates all the registered plugins and store the instances inside of the
|
||||
* the webslide instance.
|
||||
* @private
|
||||
*/
|
||||
createPlugins_() {
|
||||
Object.keys(PLUGINS).forEach(pluginName => {
|
||||
const PluginCto = PLUGINS[pluginName];
|
||||
this.plugins[pluginName] = new PluginCto(this);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Called once the WebSlide instance has finished initialising.
|
||||
* @private
|
||||
* @fires WebSlide#ws:init
|
||||
*/
|
||||
onInit_() {
|
||||
this.initialised = true;
|
||||
DOM.fireEvent(this.el, 'ws:init');
|
||||
document.documentElement.classList.add(CLASSES.READY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Grabs the slides from the DOM and creates all the Slides modules.
|
||||
* @private
|
||||
*/
|
||||
grabSlides_() {
|
||||
this.slides = DOM.toArray(this.el.childNodes)
|
||||
.map((slide, i) => new Slide(slide, i));
|
||||
|
||||
this.maxSlide_ = this.slides.length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Goes to a given slide.
|
||||
* @param {!number} slideI The slide index.
|
||||
* @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 &&
|
||||
this.currentSlideI_ !== slideI) {
|
||||
this.isMoving = true;
|
||||
let isMovingForward = false;
|
||||
|
||||
if (forward !== null) {
|
||||
isMovingForward = forward;
|
||||
} else {
|
||||
if (this.currentSlideI_ >= 0) {
|
||||
isMovingForward = slideI > this.currentSlideI_;
|
||||
}
|
||||
}
|
||||
const nextSlide = this.slides[slideI];
|
||||
|
||||
if (this.currentSlide_ !== null && this.isVertical &&
|
||||
(!this.plugins.touch || !this.plugins.touch.isEnabled)) {
|
||||
this.scrollTransitionToSlide_(
|
||||
isMovingForward, nextSlide, this.onSlideChange_);
|
||||
} else {
|
||||
this.transitionToSlide_(
|
||||
isMovingForward, nextSlide, this.onSlideChange_);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Transitions to a slide, doing the scroll 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 an
|
||||
* async function so it'll happen once the scroll animation finishes.
|
||||
* @private
|
||||
* @see scrollTo
|
||||
*/
|
||||
scrollTransitionToSlide_(isMovingForward, nextSlide, callback) {
|
||||
this.el.style.overflow = 'hidden';
|
||||
|
||||
if (!isMovingForward) {
|
||||
nextSlide.moveBeforeFirst();
|
||||
nextSlide.show();
|
||||
scrollTo(this.currentSlide_.el.offsetTop, 0);
|
||||
} else {
|
||||
nextSlide.show();
|
||||
}
|
||||
|
||||
scrollTo(nextSlide.el.offsetTop, 500, () => {
|
||||
this.currentSlide_.hide();
|
||||
|
||||
if (isMovingForward) {
|
||||
this.currentSlide_.moveAfterLast();
|
||||
}
|
||||
|
||||
this.el.style.overflow = 'auto';
|
||||
setTimeout(() => {
|
||||
callback.call(this, nextSlide);
|
||||
}, 150);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
* sync function so it'll happen on run time.
|
||||
* @private
|
||||
*/
|
||||
transitionToSlide_(isMovingForward, nextSlide, callback) {
|
||||
scrollTo(0, 0);
|
||||
let className = 'slideInRight';
|
||||
|
||||
if (!isMovingForward) {
|
||||
nextSlide.moveBeforeFirst();
|
||||
className = 'slideInLeft';
|
||||
}
|
||||
|
||||
if (this.currentSlide_) {
|
||||
if (isMovingForward) {
|
||||
this.currentSlide_.moveAfterLast();
|
||||
}
|
||||
|
||||
this.currentSlide_.hide();
|
||||
}
|
||||
|
||||
nextSlide.show();
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Whenever a slide is changed, this function gets called. It updates the
|
||||
* references to the current slide, disables the moving flag and fires
|
||||
* a custom event.
|
||||
* @param {Slide} slide The slide we're transitioning to.
|
||||
* @fires WebSlide#ws:slide-change
|
||||
* @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', {
|
||||
slides: this.maxSlide_,
|
||||
currentSlide0: this.currentSlideI_,
|
||||
currentSlide: this.currentSlideI_ + 1
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Goes to the next slide.
|
||||
*/
|
||||
goNext() {
|
||||
let nextIndex = this.currentSlideI_ + 1;
|
||||
|
||||
if (nextIndex >= this.maxSlide_) {
|
||||
if (!this.options.loop) {
|
||||
return;
|
||||
}
|
||||
|
||||
nextIndex = 0;
|
||||
}
|
||||
|
||||
this.goToSlide(nextIndex, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Goes to the previous slide.
|
||||
*/
|
||||
goPrev() {
|
||||
let prevIndex = this.currentSlideI_ - 1;
|
||||
|
||||
if (prevIndex < 0) {
|
||||
if (!this.options.loop) {
|
||||
return;
|
||||
}
|
||||
|
||||
prevIndex = this.maxSlide_ - 1;
|
||||
}
|
||||
|
||||
this.goToSlide(prevIndex, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the given number is a valid index to go to.
|
||||
* @param {number} i The index to check.
|
||||
* @return {boolean} Whether you can move to that slide or not.
|
||||
* @private
|
||||
*/
|
||||
isValidIndexSlide_(i) {
|
||||
return i >= 0 && i < this.maxSlide_;
|
||||
}
|
||||
|
||||
/**
|
||||
* Init the shown slide on load. It'll fetch it from the Hash if present
|
||||
* and, otherwise, it'll default to the first one.
|
||||
* @private
|
||||
* @see Hash.getSlideNumber
|
||||
*/
|
||||
initSlides_() {
|
||||
let slideNumber = this.plugins.hash.constructor.getSlideNumber();
|
||||
|
||||
// Not valid
|
||||
if (slideNumber === null ||
|
||||
slideNumber >= this.maxSlide_) {
|
||||
slideNumber = 0;
|
||||
}
|
||||
|
||||
// Keeping the order
|
||||
if (slideNumber !== 0) {
|
||||
let i = 0;
|
||||
while(i < slideNumber) {
|
||||
this.slides[i].moveAfterLast();
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
this.goToSlide(slideNumber);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a plugin to be loaded when the instance is created. It allows
|
||||
* (on purpose) to replace default plugins.
|
||||
* @param {!string} key They key under which it'll be stored inside of the
|
||||
* instance, inside the plugins dict.
|
||||
* @param {!Function} cto Plugin constructor.
|
||||
*/
|
||||
static registerPlugin(key, cto) {
|
||||
PLUGINS[key] = cto;
|
||||
}
|
||||
}
|
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;
|
||||
}
|
||||
}
|
||||
}
|
42
src/js/plugins/click-nav.js
Normal file
42
src/js/plugins/click-nav.js
Normal file
@@ -0,0 +1,42 @@
|
||||
const CLICKABLE_ELS = [
|
||||
'INPUT',
|
||||
'SELECT',
|
||||
'OPTION',
|
||||
'BUTTON',
|
||||
'A',
|
||||
'TEXTAREA'
|
||||
];
|
||||
|
||||
/**
|
||||
* ClickNav plugin that allows to click on the page to get to the next slide.
|
||||
*/
|
||||
export default class ClickNav {
|
||||
/**
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
/**
|
||||
* @type {WebSlides}
|
||||
* @private
|
||||
*/
|
||||
this.ws_ = wsInstance;
|
||||
|
||||
if (wsInstance.options.changeOnClick) {
|
||||
this.ws_.el.addEventListener('click', this.onClick_.bind(this));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reacts to the click event. It will go to the next slide unless the element
|
||||
* has a data-prevent-nav attribute or is on the list of CLICKABLE_ELS.
|
||||
* @param {MouseEvent} event The click event.
|
||||
* @private
|
||||
*/
|
||||
onClick_(event) {
|
||||
if (CLICKABLE_ELS.indexOf(event.target.tagName) < 0 &&
|
||||
typeof event.target.dataset.preventNav === 'undefined') {
|
||||
this.ws_.goNext();
|
||||
}
|
||||
}
|
||||
}
|
51
src/js/plugins/grid.js
Normal file
51
src/js/plugins/grid.js
Normal file
@@ -0,0 +1,51 @@
|
||||
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 {
|
||||
/**
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
/**
|
||||
* @type {WebSlides}
|
||||
* @private
|
||||
*/
|
||||
this.ws_ = wsInstance;
|
||||
|
||||
const CSS = `body.baseline {
|
||||
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) {
|
||||
style.styleSheet.cssText = CSS;
|
||||
} else {
|
||||
style.appendChild(document.createTextNode(CSS));
|
||||
}
|
||||
|
||||
head.appendChild(style);
|
||||
|
||||
document.addEventListener('keydown', this.onKeyPress_.bind(this), false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reacts to the keydown event. It reacts to ENTER key to toggle the class.
|
||||
* @param {KeyboardEvent} event The key event.
|
||||
* @private
|
||||
*/
|
||||
onKeyPress_(event) {
|
||||
if (event.which === Keys.ENTER) {
|
||||
document.body.classList.toggle('baseline');
|
||||
}
|
||||
}
|
||||
}
|
76
src/js/plugins/hash.js
Normal file
76
src/js/plugins/hash.js
Normal file
@@ -0,0 +1,76 @@
|
||||
const HASH = '#slide';
|
||||
const slideRegex = /#slide=(\d+)/;
|
||||
|
||||
/**
|
||||
* Static class with methods to manipulate and extract info from the hash of
|
||||
* the URL.
|
||||
*/
|
||||
export default class Hash {
|
||||
/**
|
||||
* @param {WebSlides} wsInstance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
this.ws_ = wsInstance;
|
||||
|
||||
wsInstance.el.addEventListener('ws:slide-change', Hash.onSlideChange_);
|
||||
window.addEventListener('hashchange', this.onHashChange_.bind(this), false);
|
||||
}
|
||||
|
||||
/**
|
||||
* hashchange event handler, makes the WebSlide instance navigate to the
|
||||
* needed slide.
|
||||
*/
|
||||
onHashChange_() {
|
||||
const newSlideIndex = Hash.getSlideNumber();
|
||||
|
||||
if (newSlideIndex !== null) {
|
||||
this.ws_.goToSlide(newSlideIndex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the slide number from the hash by a regex matching `#slide=` and gets
|
||||
* the number after it. If the number is invalid or less than 0, it will
|
||||
* return null as an invalid value.
|
||||
* @return {?number}
|
||||
*/
|
||||
static getSlideNumber() {
|
||||
const results = document.location.hash.match(slideRegex);
|
||||
let slide = 0;
|
||||
|
||||
if (Array.isArray(results)) {
|
||||
slide = parseInt(results[1], 10);
|
||||
}
|
||||
|
||||
if (typeof slide !== 'number' || slide < 0 || !Array.isArray(results)) {
|
||||
slide = null;
|
||||
} else {
|
||||
slide--; // Convert to 0 index
|
||||
}
|
||||
|
||||
return slide;
|
||||
}
|
||||
|
||||
/**
|
||||
* It will update the hash (if it's different) so it reflects the slide
|
||||
* number being visible.
|
||||
* @param {number} number The number of the slide we're transitioning to.
|
||||
*/
|
||||
static setSlideNumber(number) {
|
||||
if (Hash.getSlideNumber() !== (number - 1)) {
|
||||
history.pushState({
|
||||
slideI: number - 1
|
||||
}, `Slide ${number}`, `${HASH}=${number}`);
|
||||
}
|
||||
}
|
||||
}
|
70
src/js/plugins/keyboard.js
Normal file
70
src/js/plugins/keyboard.js
Normal file
@@ -0,0 +1,70 @@
|
||||
import Keys from '../utils/keys';
|
||||
import DOM from '../utils/dom';
|
||||
|
||||
/**
|
||||
* Keyboard interaction plugin.
|
||||
*/
|
||||
export default class Keyboard {
|
||||
/**
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
/**
|
||||
* @type {WebSlides}
|
||||
* @private
|
||||
*/
|
||||
this.ws_ = wsInstance;
|
||||
|
||||
document.addEventListener('keydown', this.onKeyPress_.bind(this), false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reacts to the keydown event. It reacts to the arrows and space key
|
||||
* depending on the layout of the page.
|
||||
* @param {KeyboardEvent} event The key event.
|
||||
* @private
|
||||
*/
|
||||
onKeyPress_(event) {
|
||||
let method;
|
||||
let argument;
|
||||
|
||||
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_, argument);
|
||||
}
|
||||
}
|
||||
}
|
122
src/js/plugins/navigation.js
Normal file
122
src/js/plugins/navigation.js
Normal file
@@ -0,0 +1,122 @@
|
||||
import DOM from '../utils/dom';
|
||||
|
||||
const ELEMENT_ID = {
|
||||
NAV: 'navigation',
|
||||
NEXT: 'next',
|
||||
PREV: 'previous',
|
||||
COUNTER: 'counter'
|
||||
};
|
||||
|
||||
const LABELS = {
|
||||
VERTICAL: {
|
||||
NEXT: '↓',
|
||||
PREV: '↑'
|
||||
},
|
||||
HORIZONTAL: {
|
||||
NEXT: '→',
|
||||
PREV: '←'
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Navigation plugin.
|
||||
*/
|
||||
export default class Navigation {
|
||||
/**
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
const arrowLabels = wsInstance.isVertical ?
|
||||
LABELS.VERTICAL : LABELS.HORIZONTAL;
|
||||
/**
|
||||
* Navigation element.
|
||||
* @type {Element}
|
||||
*/
|
||||
this.el = DOM.createNode('div', 'navigation');
|
||||
/**
|
||||
* Next button.
|
||||
* @type {Element}
|
||||
*/
|
||||
this.next = Navigation.createArrow(ELEMENT_ID.NEXT, arrowLabels.NEXT);
|
||||
/**
|
||||
* Prev button.
|
||||
* @type {Element}
|
||||
*/
|
||||
this.prev = Navigation.createArrow(ELEMENT_ID.PREV, arrowLabels.PREV);
|
||||
/**
|
||||
* Counter Element.
|
||||
* @type {Element}
|
||||
*/
|
||||
this.counter = DOM.createNode('span', ELEMENT_ID.COUNTER);
|
||||
/**
|
||||
* @type {WebSlides}
|
||||
* @private
|
||||
*/
|
||||
this.ws_ = wsInstance;
|
||||
|
||||
this.el.appendChild(this.next);
|
||||
this.el.appendChild(this.prev);
|
||||
this.el.appendChild(this.counter);
|
||||
|
||||
this.ws_.el.appendChild(this.el);
|
||||
this.bindEvents_();
|
||||
}
|
||||
|
||||
/**
|
||||
* Bind all events for the navigation.
|
||||
* @private
|
||||
*/
|
||||
bindEvents_() {
|
||||
this.ws_.el.addEventListener(
|
||||
'ws:slide-change', this.onSlideChanged_.bind(this));
|
||||
this.next.addEventListener('click', this.onButtonClicked_.bind(this));
|
||||
this.prev.addEventListener('click', this.onButtonClicked_.bind(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the counter inside the navigation.
|
||||
* @param {string|number} current Current slide number.
|
||||
* @param {string|number} max Max slide number.
|
||||
*/
|
||||
updateCounter(current, max) {
|
||||
this.counter.textContent = `${current} / ${max}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an arrow to navigate.
|
||||
* @param {!String} id Desired ID for the arrow.
|
||||
* @param {!String} text Desired text for the arrow.
|
||||
* @return {Element} The arrow element.
|
||||
*/
|
||||
static createArrow(id, text) {
|
||||
const arrow = DOM.createNode('a', id, text);
|
||||
arrow.href = '#';
|
||||
arrow.title = 'Arrow Keys';
|
||||
|
||||
return arrow;
|
||||
}
|
||||
|
||||
/**
|
||||
* Slide Change event handler. Will update the text on the navigation.
|
||||
* @param {CustomEvent} event
|
||||
* @private
|
||||
*/
|
||||
onSlideChanged_(event) {
|
||||
this.updateCounter(event.detail.currentSlide, event.detail.slides);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles clicks on the next/prev buttons.
|
||||
* @param {MouseEvent} event
|
||||
* @private
|
||||
*/
|
||||
onButtonClicked_(event) {
|
||||
event.preventDefault();
|
||||
if (event.target === this.next) {
|
||||
this.ws_.goNext();
|
||||
} else {
|
||||
this.ws_.goPrev();
|
||||
}
|
||||
}
|
||||
}
|
23
src/js/plugins/plugins.js
Normal file
23
src/js/plugins/plugins.js
Normal file
@@ -0,0 +1,23 @@
|
||||
import AutoSlide from './autoslide';
|
||||
import ClickNav from './click-nav';
|
||||
import Grid from './grid';
|
||||
import Hash from './hash';
|
||||
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,
|
||||
Video,
|
||||
YouTube
|
||||
};
|
109
src/js/plugins/scroll.js
Normal file
109
src/js/plugins/scroll.js
Normal file
@@ -0,0 +1,109 @@
|
||||
import MobileDetector from '../utils/mobile-detector';
|
||||
|
||||
|
||||
/**
|
||||
* Scroll plugin.
|
||||
*/
|
||||
export default class Scroll {
|
||||
/**
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
/**
|
||||
* @type {WebSlides}
|
||||
* @private
|
||||
*/
|
||||
this.ws_ = wsInstance;
|
||||
/**
|
||||
* Where the scroll is going to happen. The WebSlides element.
|
||||
* @type {Element}
|
||||
* @private
|
||||
*/
|
||||
this.scrollContainer_ = wsInstance.el;
|
||||
/**
|
||||
* Whether movement is happening up or down.
|
||||
* @type {boolean}
|
||||
* @private
|
||||
*/
|
||||
this.isGoingUp_ = false;
|
||||
/**
|
||||
* Whether movement is happening left or right.
|
||||
* @type {boolean}
|
||||
* @private
|
||||
*/
|
||||
this.isGoingLeft_ = false;
|
||||
/**
|
||||
* Timeout id holder.
|
||||
* @type {?number}
|
||||
* @private
|
||||
*/
|
||||
this.timeout_ = null;
|
||||
|
||||
if (!MobileDetector.isAny()) {
|
||||
this.scrollContainer_.addEventListener(
|
||||
'wheel', this.onMouseWheel_.bind(this));
|
||||
|
||||
if (!wsInstance.isVertical) {
|
||||
wsInstance.el.addEventListener(
|
||||
'ws:slide-change', this.onSlideChange_.bind(this));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* When the slides change, set an inner timeout to avoid prematurely
|
||||
* changing to the next slide again.
|
||||
* @private
|
||||
*/
|
||||
onSlideChange_() {
|
||||
this.timeout_ = setTimeout(
|
||||
() => {
|
||||
this.timeout_ = null;
|
||||
},
|
||||
this.ws_.options.scrollWait);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reacts to the wheel event. Detects whether is going up or down and decides
|
||||
* if it needs to move the slide based on the amount of delta.
|
||||
* @param {WheelEvent} event The Wheel Event.
|
||||
* @private
|
||||
*/
|
||||
onMouseWheel_(event) {
|
||||
if (this.ws_.isMoving || this.timeout_) {
|
||||
event.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
const {deltaY: wheelDeltaY, deltaX: wheelDeltaX} = event;
|
||||
const isVertical = this.ws_.isVertical;
|
||||
const isHorizontalMovement = Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY);
|
||||
this.isGoingUp_ = wheelDeltaY < 0;
|
||||
this.isGoingLeft_ = wheelDeltaX < 0;
|
||||
|
||||
|
||||
// If we're mainly moving horizontally, prevent default
|
||||
if (isHorizontalMovement) {
|
||||
if (!isVertical) {
|
||||
event.preventDefault();
|
||||
} else {
|
||||
// If we're moving horizontally but this is vertical, return to avoid
|
||||
// unwanted navigation.
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
} else {
|
||||
this.ws_.goNext();
|
||||
}
|
||||
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
}
|
149
src/js/plugins/touch.js
Normal file
149
src/js/plugins/touch.js
Normal file
@@ -0,0 +1,149 @@
|
||||
import MobileDetector from '../utils/mobile-detector';
|
||||
|
||||
const EVENTS = {
|
||||
touch: {
|
||||
START: 'touchstart',
|
||||
MOVE: 'touchmove',
|
||||
END: 'touchend'
|
||||
},
|
||||
pointer: {
|
||||
START: 'pointerdown',
|
||||
MOVE: 'pointermove',
|
||||
END: 'pointerup'
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Touch plugin.
|
||||
*/
|
||||
export default class Touch {
|
||||
/**
|
||||
* @param {WebSlides} wsInstance The WebSlides instance
|
||||
* @constructor
|
||||
*/
|
||||
constructor(wsInstance) {
|
||||
/**
|
||||
* @type {WebSlides}
|
||||
* @private
|
||||
*/
|
||||
this.ws_ = wsInstance;
|
||||
|
||||
/**
|
||||
* Start position for the X coordinate.
|
||||
* @type {number}
|
||||
* @private
|
||||
*/
|
||||
this.startX_ = 0;
|
||||
|
||||
/**
|
||||
* Start position for the Y coordinate.
|
||||
* @type {number}
|
||||
* @private
|
||||
*/
|
||||
this.startY_ = 0;
|
||||
|
||||
/**
|
||||
* Start position for the X coord.
|
||||
* @type {number}
|
||||
* @private
|
||||
*/
|
||||
this.endX_ = 0;
|
||||
|
||||
/**
|
||||
* Start position for the Y coord.
|
||||
* @type {number}
|
||||
* @private
|
||||
*/
|
||||
this.endY_ = 0;
|
||||
|
||||
/**
|
||||
* Whether is enabled or not. Only enabled for touch devices.
|
||||
* @type {boolean}
|
||||
* @private
|
||||
*/
|
||||
this.isEnabled = false;
|
||||
|
||||
let events;
|
||||
|
||||
if (MobileDetector.isAny()) {
|
||||
// Likely IE
|
||||
if (window.PointerEvent && (
|
||||
MobileDetector.isWindows() || MobileDetector.isWindowsPhone())) {
|
||||
events = EVENTS.pointer;
|
||||
} else {
|
||||
events = EVENTS.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.END, this.onStop_.bind(this), false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Start touch handler. Saves starting points.
|
||||
* @param {Event} event The Touch event.
|
||||
* @private
|
||||
*/
|
||||
onStart_(event) {
|
||||
const info = Touch.normalizeEventInfo(event);
|
||||
|
||||
this.startX_ = info.x;
|
||||
this.startY_ = info.y;
|
||||
this.endX_ = info.x;
|
||||
this.endY_ = info.y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Move touch handler. Saves end points.
|
||||
* @param {Event} event The Touch event.
|
||||
* @private
|
||||
*/
|
||||
onMove_(event) {
|
||||
const info = Touch.normalizeEventInfo(event);
|
||||
|
||||
this.endX_ = info.x;
|
||||
this.endY_ = info.y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop touch handler. Checks if it needs to make any actions.
|
||||
* @private
|
||||
*/
|
||||
onStop_() {
|
||||
const diffX = this.startX_ - this.endX_;
|
||||
const diffY = this.startY_ - this.endY_;
|
||||
|
||||
// It's an horizontal drag
|
||||
if (Math.abs(diffX) > Math.abs(diffY)) {
|
||||
if (diffX < -this.ws_.options.slideOffset) {
|
||||
this.ws_.goPrev();
|
||||
} else if(diffX > this.ws_.options.slideOffset) {
|
||||
this.ws_.goNext();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes an event to deal with differences between PointerEvent and
|
||||
* TouchEvent.
|
||||
* @param {Event} event
|
||||
* @return {Object} Normalised touch points.
|
||||
*/
|
||||
static normalizeEventInfo(event) {
|
||||
let touchEvent = {pageX: 0, pageY: 0};
|
||||
|
||||
if (typeof event.changedTouches !== 'undefined') {
|
||||
touchEvent = event.changedTouches[0];
|
||||
} else if (typeof event.originalEvent !== 'undefined' &&
|
||||
typeof event.originalEvent.changedTouches !== 'undefined') {
|
||||
touchEvent = event.originalEvent.changedTouches[0];
|
||||
}
|
||||
|
||||
const x = event.offsetX || event.layerX || touchEvent.pageX;
|
||||
const y = event.offsetY || event.layerY || touchEvent.pageY;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
42
src/js/utils/custom-event.js
Normal file
42
src/js/utils/custom-event.js
Normal file
@@ -0,0 +1,42 @@
|
||||
const NativeCustomEvent = window.CustomEvent;
|
||||
|
||||
/**
|
||||
* Check for the usage of native support for CustomEvents which is lacking
|
||||
* completely on IE.
|
||||
* @return {boolean} Whether it can be used or not.
|
||||
*/
|
||||
function canIuseNativeCustom() {
|
||||
try {
|
||||
const p = new NativeCustomEvent('t', {
|
||||
detail: {
|
||||
a: 'b'
|
||||
}
|
||||
});
|
||||
return 't' === p.type && 'b' === p.detail.a;
|
||||
} catch (e) { }
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Lousy polyfill for the Custom Event constructor for IE.
|
||||
* @param {!string} type The type of the event.
|
||||
* @param {?Object} params Additional information for the event.
|
||||
* @return {Event}
|
||||
* @constructor
|
||||
*/
|
||||
const IECustomEvent = function CustomEvent(type, params) {
|
||||
const e = document.createEvent('CustomEvent');
|
||||
|
||||
if (params) {
|
||||
e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);
|
||||
} else {
|
||||
e.initCustomEvent(type, false, false, undefined);
|
||||
}
|
||||
|
||||
return e;
|
||||
};
|
||||
|
||||
const WSCustomEvent = canIuseNativeCustom() ? NativeCustomEvent : IECustomEvent;
|
||||
|
||||
export default WSCustomEvent;
|
168
src/js/utils/dom.js
Normal file
168
src/js/utils/dom.js
Normal file
@@ -0,0 +1,168 @@
|
||||
import WSCustomEvent from './custom-event';
|
||||
|
||||
let transitionEvent = '';
|
||||
let animationEvent = '';
|
||||
|
||||
/**
|
||||
* Static class for DOM helper.
|
||||
*/
|
||||
export default class DOM {
|
||||
/**
|
||||
* Creates a node with optional parameters.
|
||||
* @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.
|
||||
* @return {Element}
|
||||
*/
|
||||
static createNode(tag, id = '', text = '') {
|
||||
const node = document.createElement(tag);
|
||||
node.id = id;
|
||||
|
||||
if (text) {
|
||||
node.textContent = text;
|
||||
}
|
||||
|
||||
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.
|
||||
*/
|
||||
static hide(el) {
|
||||
el.style.display = 'none';
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows an element by removing the display property. This is only intended
|
||||
* to be used in conjunction with DOM.hide.
|
||||
* @param {Element} el Element to be shown.
|
||||
*/
|
||||
static show(el) {
|
||||
el.style.display = '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Fires a custom event on the given target.
|
||||
* @param {Element} target The target of the event.
|
||||
* @param {string} eventType The event type.
|
||||
* @param {Object} eventInfo Optional parameter to provide additional data
|
||||
* to the event.
|
||||
*/
|
||||
static fireEvent(target, eventType, eventInfo = {}) {
|
||||
const event = new WSCustomEvent(eventType, {
|
||||
detail: eventInfo
|
||||
});
|
||||
|
||||
target.dispatchEvent(event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts an iterable to an array.
|
||||
* @param {*} iterable Element to convert to array
|
||||
* @return {Array} the element casted to an array.
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
19
src/js/utils/easing.js
Normal file
19
src/js/utils/easing.js
Normal file
@@ -0,0 +1,19 @@
|
||||
/**
|
||||
* Swing easing function.
|
||||
* @param {number} p The percentage of time that has passed.
|
||||
* @return {number}
|
||||
*/
|
||||
function swing(p) {
|
||||
return 0.5 - Math.cos(p * Math.PI) / 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Linear easing function.
|
||||
* @param {number} p The percentage of time that has passed.
|
||||
* @return {number}
|
||||
*/
|
||||
function linear(p) {
|
||||
return p;
|
||||
}
|
||||
|
||||
export default {swing, linear};
|
14
src/js/utils/keys.js
Normal file
14
src/js/utils/keys.js
Normal file
@@ -0,0 +1,14 @@
|
||||
const Keys = {
|
||||
ENTER: 13,
|
||||
SPACE: 32,
|
||||
RE_PAGE: 33,
|
||||
AV_PAGE: 34,
|
||||
END: 35,
|
||||
HOME: 36,
|
||||
LEFT: 37,
|
||||
UP: 38,
|
||||
RIGHT: 39,
|
||||
DOWN: 40
|
||||
};
|
||||
|
||||
export default Keys;
|
68
src/js/utils/mobile-detector.js
Normal file
68
src/js/utils/mobile-detector.js
Normal file
@@ -0,0 +1,68 @@
|
||||
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.
|
||||
* @return {Boolean}
|
||||
*/
|
||||
static isAndroid() {
|
||||
return !!UA.match(/Android/i);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the device is BlackBerry or not.
|
||||
* @return {Boolean}
|
||||
*/
|
||||
static isBlackBerry() {
|
||||
return !!UA.match(/BlackBerry/i);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the device is iOS or not.
|
||||
* @return {Boolean}
|
||||
*/
|
||||
static isiOS() {
|
||||
return !!UA.match(/iPad|iPhone|iPod/i);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the device is Opera or not.
|
||||
* @return {Boolean}
|
||||
*/
|
||||
static isOpera() {
|
||||
return !!UA.match(/Opera Mini/i);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the device is Windows or not.
|
||||
* @return {Boolean}
|
||||
*/
|
||||
static isWindows() {
|
||||
return !!UA.match(/IEMobile/i);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the device is Windows Phone or not.
|
||||
* @return {Boolean}
|
||||
*/
|
||||
static isWindowsPhone() {
|
||||
return !!UA.match(/Windows Phone/i);
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the device is any mobile device or not.
|
||||
* @return {Boolean}
|
||||
*/
|
||||
static isAny() {
|
||||
return MobileDetector.isAndroid() ||
|
||||
MobileDetector.isBlackBerry() ||
|
||||
MobileDetector.isiOS() ||
|
||||
MobileDetector.isOpera() ||
|
||||
MobileDetector.isWindows() ||
|
||||
MobileDetector.isWindowsPhone();
|
||||
}
|
||||
}
|
44
src/js/utils/scroll-to.js
Normal file
44
src/js/utils/scroll-to.js
Normal file
@@ -0,0 +1,44 @@
|
||||
import Easings from './easing';
|
||||
|
||||
const SCROLLABLE_CONTAINER = document.getElementById('webslides');
|
||||
|
||||
/**
|
||||
* Smoothly scrolls to a given Y position using Easing.Swing. It'll run a
|
||||
* callback upon finishing.
|
||||
* @param {number} y Offset of the page to scroll to.
|
||||
* @param {number} duration Duration of the animation. 500ms by default.
|
||||
* @param {function} cb Callback function to call upon completion.
|
||||
*/
|
||||
export default function scrollTo(y, duration = 500, cb = () => {}) {
|
||||
const delta = y - SCROLLABLE_CONTAINER.scrollTop;
|
||||
const startLocation = SCROLLABLE_CONTAINER.scrollTop;
|
||||
const increment = 16;
|
||||
|
||||
if (!duration) {
|
||||
SCROLLABLE_CONTAINER.scrollTop = y;
|
||||
cb();
|
||||
return;
|
||||
}
|
||||
|
||||
const animateScroll = elapsedTime => {
|
||||
elapsedTime += increment;
|
||||
const percent = Math.min(1, elapsedTime / duration);
|
||||
const easingP = Easings.swing(
|
||||
percent,
|
||||
elapsedTime * percent,
|
||||
y,
|
||||
delta,
|
||||
duration);
|
||||
|
||||
SCROLLABLE_CONTAINER.scrollTop = Math.floor(startLocation +
|
||||
(easingP * delta));
|
||||
|
||||
if (elapsedTime < duration) {
|
||||
setTimeout(() => animateScroll(elapsedTime), increment);
|
||||
} else {
|
||||
cb();
|
||||
}
|
||||
};
|
||||
|
||||
animateScroll(0);
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@@ -258,7 +258,9 @@ text-shadow: none;
|
||||
.frame {
|
||||
border: .8rem solid #fff;
|
||||
}
|
||||
|
||||
[class*="background"].frame {
|
||||
border-width: .2rem;
|
||||
}
|
||||
/*Layer/Box Shadow*/
|
||||
.shadow,.pre {
|
||||
position: relative;
|
||||
@@ -282,6 +284,9 @@ TYPOGRAPHY
|
||||
[class*="text-pull-"] {
|
||||
border-top: 4px solid rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
img[class*="text-pull-"],figure[class*="text-pull-"] {
|
||||
border-top: none;
|
||||
}
|
||||
/* -- Context -- */
|
||||
|
||||
[class*="bg-"] .text-context:before {
|
||||
@@ -689,8 +694,8 @@ 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%);
|
||||
}
|
||||
@@ -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
9
static/js/webslides.min.js
vendored
Normal file
9
static/js/webslides.min.js
vendored
Normal file
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();
|
40
webpack.config.babel.js
Normal file
40
webpack.config.babel.js
Normal file
@@ -0,0 +1,40 @@
|
||||
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,
|
||||
entry: {
|
||||
webslides: './js/full.js'
|
||||
},
|
||||
output: {
|
||||
filename: '[name].js',
|
||||
path: path.join(__dirname, 'static/js'),
|
||||
publicPath: '/static/js/'
|
||||
},
|
||||
devServer: {
|
||||
contentBase: __dirname,
|
||||
host: '0.0.0.0'
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.js$/,
|
||||
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