1
0
mirror of https://github.com/webslides/WebSlides.git synced 2025-09-18 08:52:03 +02:00

Compare commits

..

241 Commits
0.2 ... 1.3.1

Author SHA1 Message Date
Antonio Laguna
f6ac24007a 1.3.1 2017-04-26 20:08:04 +02:00
Antonio Laguna
d592006bfa Ensuring the navigation works on any iOS device
Fixes #79
2017-04-26 20:07:15 +02:00
Antonio Laguna
5024cca7d9 1.3.0 2017-04-20 12:25:51 +02:00
Antonio Laguna
2f64994409 Merge pull request #75 from webslides/dev
1.3.0
2017-04-20 12:23:40 +02:00
Antonio Laguna
53fbbfe76d Adding Paypal badge 2017-04-20 12:01:40 +02:00
José Luis Antúnez
8cc71eb804 bg with a frame=[class*="background"].frame 2017-04-20 11:49:10 +02:00
José Luis Antúnez
34d8ca3cdb built to expand section: links recommended 2017-04-20 11:48:04 +02:00
José Luis Antúnez
d0ec93d7e4 longform elements, bg with a frame
[class*="background"].frame
2017-04-20 11:46:18 +02:00
Antonio Laguna
0db6e051de Nitpick 2017-04-20 09:41:53 +02:00
Antonio Laguna
b0954cf0db Today is the day 2017-04-20 09:33:34 +02:00
José Luis Antúnez
a79cda7fab tech docs (plugin dev, API...), longform info 2017-04-19 21:49:13 +02:00
Antonio Laguna
db1e3109d7 Updating links 2017-04-19 18:32:01 +02:00
Antonio Laguna
0ce47ea35d Removing docs entirely 2017-04-19 18:30:48 +02:00
Antonio Laguna
aaf1a21c8b Removing technical docs 2017-04-19 18:28:46 +02:00
Antonio Laguna
3ff7053105 Normalising docs 2017-04-19 18:28:46 +02:00
José Luis Antúnez
bc1639cd97 Grouping video features: Youtube API (first) 2017-04-19 17:34:54 +02:00
José Luis Antúnez
28c6c938c2 Grouping video features 2017-04-19 17:30:35 +02:00
Antonio Laguna
d8a5dedf83 Updating CHANGELOG 2017-04-19 17:19:10 +02:00
Antonio Laguna
de951d5186 Disting 2017-04-19 16:34:31 +02:00
Antonio Laguna
54b03963da Pausing after seek 2017-04-19 16:34:13 +02:00
Antonio Laguna
8e723b2854 Updating compiled 2017-04-19 10:39:11 +02:00
Antonio Laguna
81e749b77c Pausing autoplaying videos
#54
2017-04-19 10:37:59 +02:00
Antonio Laguna
510d59e4fd Fixing selector
#74
2017-04-19 10:32:54 +02:00
Antonio Laguna
05379d1783 Fixing lousy comparison
#51
2017-04-19 10:29:32 +02:00
Antonio Laguna
b78b791865 Fixing demo 2017-04-19 10:23:48 +02:00
Antonio Laguna
c3100f5d44 Switching YouTube to events and fixing behaviour 2017-04-19 10:23:48 +02:00
Luis
129fc0064c Merge branch 'dev' of https://github.com/webslides/WebSlides into dev 2017-04-18 20:12:13 +02:00
Luis
0e03674df7 Remove zoom from dev 2017-04-18 20:08:39 +02:00
Luis
54e83e3a20 Testing setup and first DOM tests 2017-04-18 20:06:38 +02:00
Antonio Laguna
ead4193525 Making Slides Event based instead of Callback based 2017-04-18 16:20:54 +02:00
José Luis Antúnez
728e665fc9 4 demos and gallery li:nth-child(n+4): equal width 2017-04-17 12:21:32 +02:00
Antonio Laguna
0832388ead Removing duplicate binding 2017-04-16 12:21:42 +02:00
Antonio Laguna
2c4e84915a Updating deps 2017-04-16 12:18:39 +02:00
José Luis Antúnez
bbebd84792 counter: z-index: 4, a#next, a#previous 2017-04-11 19:41:32 +02:00
José Luis Antúnez
c8603a1830 new demo: netflix culture, more video examples... 2017-04-11 19:39:17 +02:00
José Luis Antúnez
38a061d6d1 Introducing .text-emoji. 2017-04-05 17:57:44 +02:00
José Luis Antúnez
4cd60540c0 adding .text-emoji (final slide) 2017-04-05 17:54:53 +02:00
José Luis Antúnez
b65727b30c adding .text-emoji and cleaning fullscreen .embed 2017-04-05 17:53:42 +02:00
José Luis Antúnez
d318b3ad87 .gallery li:nth-child(n+4): removing auto-fill 2017-04-05 11:32:03 +02:00
José Luis Antúnez
c6e954e791 3 new demos: removing ga-track 2017-04-04 23:10:42 +02:00
José Luis Antúnez
5694444c5e updating demos: youtube api examples, bg video... 2017-04-04 16:45:34 +02:00
José Luis Antúnez
99ddf85cc0 overlay (.dark, .light): animation-duration:0 2017-04-04 12:16:55 +02:00
José Luis Antúnez
ae273d05fc updating demos
autoplay feature, background video with overlay...
2017-04-04 11:58:43 +02:00
José Luis Antúnez
33c409eb61 updating landing 2017-04-03 20:12:23 +02:00
José Luis Antúnez
19b60c7487 updating demos 2017-04-03 20:11:52 +02:00
José Luis Antúnez
159386b557 updating home 2017-04-03 19:52:08 +02:00
José Luis Antúnez
da783659d7 updating demos 2017-04-03 19:51:33 +02:00
José Luis Antúnez
c8e2e02830 Responsive background videos 2017-03-31 22:58:53 +02:00
José Luis Antúnez
d2bb7fa254 Responsive background video 2017-03-31 20:38:10 +02:00
José Luis Antúnez
2c96d440e3 Overlaying a transp. bg on an embedded YT video
.fullscreen.bg-blue > .embed.dark
2017-03-30 15:13:44 +02:00
José Luis Antúnez
d7767a7381 bg images/videos: better overlays .light and .dark 2017-03-30 14:08:26 +02:00
Antonio Laguna
c4e5e8d335 Loop with playlist 2017-03-30 12:33:31 +02:00
Antonio Laguna
956f1b041a Building 2017-03-30 12:22:42 +02:00
Antonio Laguna
419fdad5a3 Minor fixes on YouTube 2017-03-30 12:22:04 +02:00
Antonio Laguna
3bd5502443 Building 2017-03-30 09:22:33 +02:00
Antonio Laguna
2e1b39d088 Adding loop 2017-03-30 09:22:03 +02:00
Antonio Laguna
b03fa122bd Updating docs 2017-03-30 09:19:47 +02:00
Antonio Laguna
2384a57254 Updating deps 2017-03-30 09:18:53 +02:00
Antonio Laguna
14aaa18c57 Finishing youtube feature 2017-03-30 09:18:44 +02:00
José Luis Antúnez
e53ed53ab1 new demos and longform elements 2017-03-28 17:39:40 +02:00
José Luis Antúnez
adfe0e98bc 2 new demos: longform and interviews 2017-03-28 17:31:16 +02:00
José Luis Antúnez
e12bb58d10 interviews: dd blockquote p - margin-bottom: 0 2017-03-28 16:57:41 +02:00
José Luis Antúnez
7c736dd6a0 longform: updating .text-quote and .flex-content 2017-03-28 16:51:09 +02:00
José Luis Antúnez
0467c21ec7 longform .text-pull.embed: without black borders 2017-03-28 15:56:45 +02:00
José Luis Antúnez
daf4914b28 longform element: mobile: video full width
.text-pull.embed
2017-03-28 15:31:05 +02:00
José Luis Antúnez
fc724175bb longform pulls: negative margins 2017-03-28 12:33:48 +02:00
José Luis Antúnez
7376b636ae longform pulls: fixing margins 2017-03-28 12:12:33 +02:00
José Luis Antúnez
02823113f9 longform: pull elements 2017-03-28 12:02:40 +02:00
José Luis Antúnez
d82aa792e7 .wall will be deprecated soon. Use .text-quote ;) 2017-03-27 17:17:01 +02:00
José Luis Antúnez
b9454480b0 footers for landings, portfolios, longforms... 2017-03-27 15:58:39 +02:00
José Luis Antúnez
4096c85f83 removing border img/figure: [class*="text-pull-"] 2017-03-26 18:00:50 +02:00
José Luis Antúnez
b2e6e032d4 longform elements: container, lists, alignments... 2017-03-26 17:59:32 +02:00
José Luis Antúnez
f4d52e36e2 introducing .text-quote 2017-03-25 21:39:12 +01:00
Antonio Laguna
66d80f0b5d Merge branch 'dev' of github.com:webslides/webslides into dev 2017-03-25 19:53:09 +01:00
Antonio Laguna
0a9bdd0b46 Adding common EOL 2017-03-25 19:53:03 +01:00
José Luis Antúnez
a9e8788024 2 new animations: .slideInLeft and .slideInRight 2017-03-25 08:34:21 +01:00
José Luis Antúnez
ce9f1c7531 GitHub links updated 2017-03-24 11:27:57 +01:00
José Luis Antúnez
5f04b2e441 css changes 2017-03-24 10:54:18 +01:00
Antonio Laguna
8bb245fced Attempted changelog 2017-03-23 22:49:37 +01:00
Antonio Laguna
0c1a7ca55f Adding more docs 2017-03-23 22:36:43 +01:00
Antonio Laguna
f21b207fee Recompiling code 2017-03-22 18:59:52 +01:00
Antonio Laguna
4fb309c7c4 Updating demo markup 2017-03-22 18:58:26 +01:00
Antonio Laguna
df9ff3d272 Pointing to new repo 2017-03-22 17:58:56 +01:00
José Luis Antúnez
f8a0c4e937 css print: removing .ws-ready 2017-03-22 13:47:22 +01:00
José Luis Antúnez
35acefa8c7 credits: authors and URL 2017-03-22 13:00:44 +01:00
José Luis Antúnez
373327b091 a better CSS print 2017-03-22 12:37:09 +01:00
José Luis Antúnez
e88dab3b7a .text-quote: position relative
versatility: blockquote, p, h2, h3..
2017-03-21 16:14:47 +01:00
José Luis Antúnez
a5b36cc002 Quotes: changing .wall. Now: .text-quote 2017-03-21 13:33:47 +01:00
José Luis Antúnez
3b0ae3b97f new github username, new comments... 2017-03-21 13:31:31 +01:00
José Luis Antúnez
1869cdc9e3 new github username, .text-quote, new comments... 2017-03-21 13:30:53 +01:00
José Luis Antúnez
a4f232453c img setup.png, centered 2017-03-20 17:54:28 +01:00
José Luis Antúnez
87786525f5 img setup.png, centered 2017-03-20 17:54:22 +01:00
José Luis Antúnez
2db8b49ec8 img setup.png, centered 2017-03-20 17:54:15 +01:00
José Luis Antúnez
84d8d7c80e img setup.png, centered 2017-03-20 17:51:12 +01:00
José Luis Antúnez
cd9356796c fluid layout: .wrap (90%) 2017-03-20 17:42:31 +01:00
José Luis Antúnez
6c5a31af85 .ws-ready 2017-03-20 16:30:38 +01:00
José Luis Antúnez
47b714d60b key navigation 2017-03-20 15:15:57 +01:00
José Luis Antúnez
94efbda6be removing .tabs 2017-03-20 10:00:23 +01:00
Antonio Laguna
6437695ef2 Adding dist to test 2017-03-20 09:17:34 +01:00
Antonio Laguna
70feb2c7c4 Odd workaround 2017-03-20 09:16:53 +01:00
Antonio Laguna
c9ad5306ea Youtube first punch
Defeated by postMessage
2017-03-20 07:57:49 +01:00
Antonio Laguna
2d86be6aac Minor doc changes 2017-03-19 23:09:33 +01:00
Antonio Laguna
3d549d7b97 Adding grid as data image 2017-03-19 22:35:53 +01:00
Antonio Laguna
dff7b2b771 Adding class once webslides is ready 2017-03-19 22:30:56 +01:00
Antonio Laguna
aa54207108 Merge branch 'master' into dev 2017-03-19 22:28:48 +01:00
Antonio Laguna
f155092537 Merge pull request #60 from jerolba/patch-1
document.body.toggleClass is not a function
2017-03-18 21:53:32 +01:00
Jeronimo López
5edd685cc5 document.body.toggleClass is not a function
toggleClass is not a function and throws an exception
2017-03-18 20:16:51 +01:00
José Luis Antúnez
e208bbb530 .gallery li (no autofill: equal width)
flex: inherit
2017-03-18 15:13:52 +01:00
José Luis Antúnez
629066feeb padding: forms with backgrounds form[class*="bg-"] 2017-03-17 13:16:15 +01:00
José Luis Antúnez
4018ced8a3 removed: figcaption.cover 2017-03-16 17:28:38 +01:00
José Luis Antúnez
a9370ee5ce typography: dt/dd tags
line-height and margin-bottom
2017-03-16 13:53:32 +01:00
José Luis Antúnez
aaa99ce584 adding longform/posts elements
interviews and blockquote margin-bottom.
2017-03-16 13:46:29 +01:00
José Luis Antúnez
9723aedc32 better cards: .card (width: 100%) 2017-03-16 13:41:09 +01:00
José Luis Antúnez
1cb0f7a15b tip: how to make an unique, global header/footer 2017-03-14 11:10:31 +01:00
Antonio Laguna
b904c4da0f Moving error to be more meaningful 2017-03-13 16:26:34 +01:00
José Luis Antúnez
13bccdfa88 broken links 2017-03-13 15:54:36 +01:00
José Luis Antúnez
4467297545 fixing broken links 2017-03-13 15:49:39 +01:00
José Luis Antúnez
81d6b27fe0 svg-icons.js duplicated 2017-03-13 15:32:25 +01:00
José Luis Antúnez
ab444db877 adding #webslides.vertical 2017-03-13 15:30:49 +01:00
José Luis Antúnez
695a100558 adding #webslides.vertical 2017-03-13 15:27:15 +01:00
José Luis Antúnez
d995f973f2 svg-icons duplicated
comment tag (required webslides.js)
2017-03-13 15:22:25 +01:00
José Luis Antúnez
6d1cafd09a svg-icons.js duplicated
Comment tag (required webslides.js)
2017-03-13 15:21:00 +01:00
José Luis Antúnez
5c489e623c svg-icons duplicated
Comment tag (required webslides.js)
2017-03-13 15:13:56 +01:00
José Luis Antúnez
d81775d1c6 svg-icons duplicated
Comment tag (Required .webslides.js)
2017-03-13 14:09:50 +01:00
José Luis Antúnez
40fdcf7e86 WebSlides Demo: Media (videos, images, maps...) 2017-03-13 14:09:31 +01:00
José Luis Antúnez
56114d1464 new youtube video (fullscreen)
Apple made a video private
2017-03-13 09:51:53 +01:00
Antonio Laguna
e4a962ba9b Allowing to stop/play if focused element is interactive
#51
2017-03-12 23:01:54 +01:00
Antonio Laguna
f8340bd821 Minor refactor 2017-03-12 23:01:41 +01:00
Antonio Laguna
94f21e7232 Removing inline 2017-03-12 22:47:43 +01:00
Antonio Laguna
d2e1ee0559 Extracting autoslide to plugin
#51
2017-03-12 22:47:28 +01:00
Antonio Laguna
a5cfa93eaa More linting 2017-03-12 22:33:58 +01:00
Antonio Laguna
a8031db1f2 Option to disable looping
#56
2017-03-12 22:30:59 +01:00
Antonio Laguna
a8734a57d3 Adding video plugin
#54
2017-03-12 22:01:36 +01:00
Antonio Laguna
8139c1aa79 Adding new badge 2017-03-12 00:45:48 +01:00
Antonio Laguna
46cfbf9e3a Adding eslintrc and add linting 2017-03-12 00:44:11 +01:00
Antonio Laguna
2a9279585c Animation for mobile
#46
2017-03-12 00:05:42 +01:00
Antonio Laguna
bfe1cdddc7 Updating deps 2017-03-12 00:05:18 +01:00
Antonio Laguna
46a7ef4f80 Merge branch 'master' into dev 2017-03-11 22:27:15 +01:00
José Luis Antúnez
886b01de7b a footer for all slides 2017-03-10 21:12:54 +01:00
Luis
85db8868a1 CHANGELOG updated 2017-03-02 15:57:41 +01:00
Luis
5d2a24962a Fix: scroll bar showing in Firefox 2017-03-02 15:49:42 +01:00
Luis
8b0f11ea3b Merge branch 'master' of https://github.com/jlantunez/webslides 2017-03-02 15:39:05 +01:00
Luis
2d8fb02f48 Fix: scroll bar showing in Firefox 2017-03-02 15:35:55 +01:00
José Luis Antúnez
504ad61dce remote presenters 2017-03-02 15:17:44 +01:00
José Luis Antúnez
2723006399 download latest.zip 2017-03-02 11:00:27 +01:00
José Luis Antúnez
ebb390f3e4 download latest.zip 2017-03-02 10:59:26 +01:00
José Luis Antúnez
07e0c42871 download latest.zip 2017-03-02 10:59:21 +01:00
José Luis Antúnez
b833a94c0b download latest.zip 2017-03-02 10:59:16 +01:00
José Luis Antúnez
c6c263b63e download latest.zip 2017-03-02 10:59:11 +01:00
José Luis Antúnez
c58e108184 download latest.zip 2017-03-02 10:58:57 +01:00
José Luis Antúnez
7f53462d46 download latest.zip 2017-03-02 10:54:01 +01:00
Antonio Laguna
8f7707b996 Adding missing key 2017-03-02 10:45:01 +01:00
Antonio Laguna
dc0386cb49 1.2.0 2017-03-02 10:43:57 +01:00
Antonio Laguna
21f7ba37ca Updating the docs 2017-03-02 10:35:14 +01:00
Antonio Laguna
9bbbd7362b Merge branch 'dev' of github.com:jlantunez/webslides into dev 2017-03-02 09:45:25 +01:00
Antonio Laguna
6818e4c99c Allowing options to be configured
Fixes #47 #44
2017-03-02 09:45:21 +01:00
Antonio Laguna
23ad0338cb Preventing navigation with keys if user using inputs
Fixes #50
2017-03-02 09:43:08 +01:00
Antonio Laguna
440e1bf37e Allowing navigation with Home and End keys
Fixes #49
2017-03-02 09:41:59 +01:00
José Luis Antúnez
f086aefe71 2 new animations: .slideInLeft and .slideInRight
Mobile transitions between the slides
2017-03-01 20:09:43 +01:00
Antonio Laguna
8ae6954e5f Allowing to navigate with re/av page
Fixes #48
2017-03-01 13:56:11 +01:00
Antonio Laguna
09bdc31b64 Updating README 2017-02-28 11:13:04 +01:00
Antonio Laguna
5c4d2f8769 Updating the dist 2017-02-28 11:12:54 +01:00
Antonio Laguna
d03e0cad41 Update package.json 2017-02-28 11:11:03 +01:00
Antonio Laguna
be0e498b2b Update CHANGELOG.md 2017-02-28 11:10:37 +01:00
Antonio Laguna
12bac7afc5 Merge pull request #45 from jlantunez/scroll-fix
Adding a few changes
2017-02-28 11:09:08 +01:00
Antonio Laguna
78b6e74b82 Adding contributors 2017-02-28 08:16:06 +01:00
Antonio Laguna
91c00a2fe3 Linking to issues 2017-02-27 22:28:30 +01:00
Antonio Laguna
e65826dbb6 Updating the CHANGELOG 2017-02-27 22:26:49 +01:00
Antonio Laguna
508cdafea5 Fixing scroll bug 2017-02-27 22:15:33 +01:00
José Luis Antúnez
50af5fe3df Disable elastic scrolling/bounce, hide scrollbar 2017-02-27 20:40:39 +01:00
Antonio Laguna
ebe42090ac Fixing issue with scrolling 2017-02-27 20:24:56 +01:00
Antonio Laguna
14e1b5b7b8 Disting 2017-02-27 20:16:37 +01:00
Antonio Laguna
2e6471e2ee Increasing timeout 2017-02-27 20:16:26 +01:00
Antonio Laguna
bc64fcef7e Adding more docs 2017-02-27 20:14:41 +01:00
Antonio Laguna
e50193ebb1 Normalising var 2017-02-27 20:14:35 +01:00
Antonio Laguna
b04f15f696 Adding more docs 2017-02-27 20:14:24 +01:00
Antonio Laguna
3d6fcef762 Adding option 2017-02-27 20:14:18 +01:00
Antonio Laguna
32ff8afa88 Disting 2017-02-27 20:10:26 +01:00
Antonio Laguna
f082ff12ac Adding new features 2017-02-27 19:58:42 +01:00
Antonio Laguna
62c6aba478 Disting 2017-02-27 12:50:30 +01:00
Antonio Laguna
5a262f5460 Avoiding scroll transition on mobile 2017-02-27 12:50:19 +01:00
Antonio Laguna
4379122d1d Updating references 2017-02-27 12:45:26 +01:00
Antonio Laguna
83f1110947 Preventing default if moving to avoid stutter 2017-02-27 12:45:14 +01:00
Antonio Laguna
b7503b1e9e Using the scrollable container 2017-02-27 12:44:47 +01:00
Antonio Laguna
521d708c22 No need for this anymore 2017-02-27 12:44:29 +01:00
Antonio Laguna
33b1f3ad7a Scrollable container is now defined 2017-02-27 12:44:16 +01:00
Antonio Laguna
f6ccd39158 Changing scrollable container
To avoid elastic scroll on OSX
2017-02-27 12:43:59 +01:00
Antonio Laguna
6674a4f203 Linting CSS 2017-02-27 12:43:38 +01:00
José Luis Antúnez
f80106a4ab 1.0
Download latest version
2017-02-23 17:19:09 +01:00
José Luis Antúnez
4fb151c886 1.0
download latest version
2017-02-23 17:13:41 +01:00
José Luis Antúnez
b7a01c4319 1.0
download latest version (zip)
2017-02-23 17:12:35 +01:00
José Luis Antúnez
28c08541e5 1.0
Download latest version (zip)
2017-02-23 17:11:16 +01:00
Antonio Laguna
6bc8ab582d Ensuring dev server is reachable over the network 2017-02-23 16:18:19 +01:00
Antonio Laguna
19cd5bdbc7 Avoid usage of isInteger
#29
2017-02-23 16:18:19 +01:00
Antonio Laguna
bb5ae82995 Avoiding to use Array.from 2017-02-23 16:18:19 +01:00
José Luis Antúnez
36c1f1997b 1.0
Download release
2017-02-23 15:36:59 +01:00
Antonio Laguna
5687d61a83 Adding generated source 2017-02-23 15:30:50 +01:00
José Luis Antúnez
0d2c8c09d1 1.0 2017-02-23 14:55:47 +01:00
José Luis Antúnez
9e5a127590 1.0 2017-02-23 13:51:36 +01:00
José Luis Antúnez
7b86354ad4 1.0
download zip
2017-02-23 13:51:00 +01:00
José Luis Antúnez
a67f7d9d0b 1.0
Download zip
2017-02-23 13:50:00 +01:00
José Luis Antúnez
2234a02252 1.0 2017-02-23 13:48:53 +01:00
José Luis Antúnez
02834a3b4d 1.0
download zip
2017-02-23 13:47:46 +01:00
José Luis Antúnez
3e13eb4025 1.0
Credits
2017-02-23 13:43:33 +01:00
José Luis Antúnez
28756b308f 1.0
Download zip
2017-02-23 13:39:33 +01:00
Antonio Laguna
acd3eed1b7 Fixing leftover for changes 2017-02-23 13:10:49 +01:00
José Luis Antúnez
8ac52b4936 Merge pull request #41 from Belelros/master
WebSlides 1.0 - Architecture change
2017-02-23 12:53:46 +01:00
Antonio Laguna
130c5d2321 Merge remote-tracking branch 'webslides/master'
# Conflicts:
#	CHANGELOG.md
#	README.md
#	demos/classes.html
#	demos/components.html
#	demos/index.html
#	demos/keynote.html
#	demos/landings.html
#	demos/portfolios.html
#	demos/why-webslides.html
#	index.html
#	static/css/base.css
#	static/js/webslides.js
2017-02-23 12:47:46 +01:00
Antonio Laguna
0055ecd7d8 Updating the README too 2017-02-23 12:36:10 +01:00
Antonio Laguna
4ba77ba3fc JavaScript highlighting 2017-02-23 10:22:57 +01:00
Antonio Laguna
25be14fbd4 Final touches 2017-02-23 10:20:56 +01:00
Antonio Laguna
2c21b8f5d9 More updates 2017-02-23 08:34:18 +01:00
Antonio Laguna
2ef3f986ed Updating CSS to catch up with Master 2017-02-23 08:30:57 +01:00
Antonio Laguna
76ea07d8db Adding autoslide feature 2017-02-23 08:25:24 +01:00
Antonio Laguna
9bfab33676 Final push 2017-02-22 11:50:15 +01:00
Antonio Laguna
3251b1b7d8 Re-updating docs 2017-01-31 08:39:21 +01:00
Antonio Laguna
3782a40a8a Updating README 2017-01-30 20:52:12 +01:00
Antonio Laguna
585ab60b43 Updating templates and releasing the dist 2017-01-30 15:59:20 +01:00
Antonio Laguna
62ffaf95d6 Removing webslides 2017-01-30 15:57:31 +01:00
Antonio Laguna
4ca297f8ae Moving stuff around 2017-01-30 15:56:47 +01:00
Antonio Laguna
0ce1d02d8b Baseline to plugin 2017-01-30 15:55:30 +01:00
Antonio Laguna
c5133158ad Adding scroll to plugin 2017-01-30 15:47:17 +01:00
Antonio Laguna
ff3c2d066a Adding touch plugin 2017-01-29 11:06:22 +01:00
Antonio Laguna
8e47ffead4 Fixing issue with normal transition 2017-01-29 11:06:04 +01:00
Antonio Laguna
2a46012a58 Fix build script 2017-01-29 11:05:30 +01:00
Antonio Laguna
c1777f593f Finishing docs 2017-01-28 18:06:13 +01:00
Antonio Laguna
b99fdc8c47 Moving plugins, adding Keyboard integration 2017-01-28 17:17:10 +01:00
Antonio Laguna
0e02056ca7 Hash to plugin 2017-01-28 16:40:30 +01:00
Antonio Laguna
72d057293e Adding to detail instead of needing to add a full object 2017-01-28 16:27:38 +01:00
Antonio Laguna
75de8a46ac Reworking the plugins 2017-01-28 16:27:15 +01:00
Antonio Laguna
ae36e15588 Finishing navigation 2017-01-28 16:26:55 +01:00
Antonio Laguna
6e7ce46ebc Fixing the scroll function and adding docs 2017-01-28 15:38:49 +01:00
Antonio Laguna
ea164b6d69 Adding custom event support 2017-01-28 15:38:33 +01:00
Antonio Laguna
7b495cccf1 Navigation to plugins 2017-01-28 15:38:21 +01:00
Antonio Laguna
049d083744 Easing’s JSDoc 2017-01-27 15:34:34 +01:00
Antonio Laguna
86cc1f494f More JSDocs for the slides 2017-01-27 15:32:50 +01:00
Antonio Laguna
d4e6662ab6 Starting to add comments and JSDoc 2017-01-27 15:28:40 +01:00
Antonio Laguna
01fa93d50e Finishing the core bits 2017-01-27 12:28:45 +01:00
Antonio Laguna
70bde2f4ae Entry point 2017-01-25 22:48:35 +01:00
Antonio Laguna
2e93754ba1 Adding package.json 2017-01-24 15:04:15 +01:00
Antonio Laguna
4e562e2978 Common gitignore file 2017-01-24 15:04:05 +01:00
48 changed files with 8371 additions and 1271 deletions

3
.babelrc Normal file
View File

@@ -0,0 +1,3 @@
{
"presets": ["es2015"]
}

21
.editorconfig Normal file
View 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
View 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
View 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

View File

@@ -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
View File

@@ -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.
[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](http://opensource.org/licenses/MIT)
[![Release](https://img.shields.io/github/release/webslides/webslides.svg)](https://github.com/webslides/webslides/releases/latest)
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/jlantunez/8)
[![Twitter](https://img.shields.io/twitter/url/https/github.com/webslides/webslides.svg?style=social)](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>&lt;section&gt;</code> in the #webslides element is an individual slide.
- Each parent `<section>` in the `#webslides` element is an individual slide.
<pre>&lt;article id="webslides"&gt;
&lt;section&gt;
&lt;h1&gt;Slide 1&lt;/h1&gt;
&lt;/section&gt;
&lt;section class="bg-black aligncenter"&gt;
<span class="code-comment">&lt;!-- .wrap = container 1200px --&gt;</span>
&lt;div class="wrap"&gt;
&lt;h1&gt;Slide 2&lt;/h1&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/article&gt;</pre>
#### Vertical Sliding
<pre>&lt;article id="webslides" class="vertical"&gt;</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).

View File

@@ -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">&lt;!-- Slide 2 --&gt;</span>
&lt;section class="bg-primary"&gt;
&lt;div class="wrap"&gt;
&lt;h2&gt;.wrap = container 1200px with fadein&lt;/h2&gt;
&lt;h2&gt;.wrap = container (width: 90%) with fadein&lt;/h2&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/article&gt;
@@ -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>&lt;section&gt;
&lt;span class="background" style="background-image:url('https://source.unsplash.com/UJbHNoVPZW0/')"&gt;&lt;/span&gt;
&lt;section&gt;
&lt;h1&gt;Slide&lt;/h1&gt;
&lt;/section&gt;
&lt;span <strong>class="background"</strong> style="background-image:url('https://source.unsplash.com/UJbHNoVPZW0/')"&gt;&lt;/span&gt;
&lt;div class="wrap"&gt;
&lt;h1&gt;Slide&lt;/h1&gt;
&lt;/div&gt;
&lt;/section&gt;</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>

View File

@@ -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">&lt;!-- Slide 2 --&gt;</span>
&lt;section class="bg-primary"&gt;
&lt;div class="wrap"&gt;
&lt;h2&gt;.wrap = container 1200px with fadein&lt;/h2&gt;
&lt;h2&gt;.wrap = container (width: 90%) with fadein&lt;/h2&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/article&gt;
@@ -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> &middot; <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> &middot; <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? &rarr;</a></p>
<pre>&lt;section&gt;
&lt;span class="background" style="background-image:url('https://source.unsplash.com/LcDPAqX8dt8/')"&gt;&lt;/span&gt;
&lt;div class="wrap"&gt;
&lt;h1&gt;Slide&lt;/h1&gt;
&lt;/div&gt;
&lt;span class="background" style="background-image:url('https://source.unsplash.com/LcDPAqX8dt8/')"&gt;&lt;/span&gt;
&lt;div class="wrap"&gt;
&lt;h1&gt;Slide&lt;/h1&gt;
&lt;/div&gt;
&lt;/section&gt;</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>&lt;section class="bg-black"&gt;
&lt;span class="background light" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso/')"&gt;&lt;/span&gt;
&lt;div class="wrap"&gt;
&lt;h1&gt;Slide&lt;/h1&gt;
&lt;/div&gt;
<pre>&lt;section&gt;
&lt;span class="background light" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso/')"&gt;&lt;/span&gt;
&lt;div class="wrap"&gt;
&lt;h1&gt;Slide&lt;/h1&gt;
&lt;/div&gt;
&lt;/section&gt;</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>&lt;section class="bg-black"&gt;
&lt;span class="background dark" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso/')"&gt;&lt;/span&gt;
&lt;div class="wrap"&gt;
&lt;h1&gt;Slide&lt;/h1&gt;
&lt;/div&gt;
<pre>&lt;section&gt;
&lt;span class="background dark" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso/')"&gt;&lt;/span&gt;
&lt;div class="wrap"&gt;
&lt;h1&gt;Slide&lt;/h1&gt;
&lt;/div&gt;
&lt;/section&gt;</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>&lt;video class="background-video" autoplay muted loop poster="image.jpg"&gt;
&lt;source src="video.mp4" type="video/mp4"&gt;
&lt;/video&gt;</pre>
<p><code>.background-video</code></p>
<h3>Background videos</h3>
<pre><strong>&lt;section class="fullscreen"&gt;</strong>
&lt;div class="embed"&gt;
&lt;video autoplay loop poster="image.jpg"&gt;
&lt;source src="video.mp4" type="video/mp4"&gt;
&lt;/video&gt;
&lt;/div&gt;
<strong>&lt;/section&gt;</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>&lt;div class="embed"&gt;
&lt;iframe src="https://www.youtube.com/embed/XjJQBjWYDTs"&gt;
&lt;/iframe&gt;
&lt;/div&gt;</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 &middot; 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>&lt;figure class="browser"&gt;
&lt;img alt="Screenshot" src="image.png"&gt;
&lt;img alt="Screenshot" src="image.png"&gt;
&lt;/figure&gt;</pre>
</div>
<!-- .end .content-left -->
@@ -2985,7 +3071,7 @@
&lt;/div&gt;
&lt;/section&gt;
&lt;/article&gt;</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>

View File

@@ -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&amp;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> &middot; <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> &middot; <a href="../demos/classes.html" title="WebSlides Classes">Classes</a> &middot; <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
View 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&amp;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. Im 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&amp;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 its 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 dont 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 doesnt protect domain names, that doesnt 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 doesnt mean that they are completely free of legal issues. For example, imagine youre 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 &rsaquo;</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 &amp; 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>

View File

@@ -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 @@
&lt;/div&gt;
&lt;/section&gt;
&lt;/article&gt;</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>&lt;div class="embed"&gt;
&lt;iframe src="https://www.youtube.com/embed/XjJQBjWYDTs"&gt;
&lt;/iframe&gt;
&lt;div data-youtube data-youtube-id=&quot;CQY3KUR3VzM&quot; data-autoplay &gt;&lt;/div&gt;
&lt;/div&gt;</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>

View File

@@ -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">&lt;!-- Slide 2 --&gt;</span>
&lt;section class="bg-primary"&gt;
&lt;div class="wrap"&gt;
&lt;h2&gt;.wrap = container 1200px&lt;/h2&gt;
&lt;h2&gt;.wrap = container (width: 90%)&lt;/h2&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/article&gt;
@@ -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> &middot; <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> &middot; <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 @@
&lt;/div&gt;
&lt;/section&gt;
&lt;/article&gt;</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>&lt;div class="embed"&gt;
&lt;iframe src="https://www.youtube.com/embed/XjJQBjWYDTs"&gt;
&lt;/iframe&gt;
&lt;/div&gt;</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
View 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&amp;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." &mdash; <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 Womens 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 &rsaquo;</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 &amp; 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
View 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&amp;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? &rarr;</a></p>
<pre>&lt;section&gt;
&lt;span class="background" style="background-image:url('https://source.unsplash.com/nwfuaYecNUs/')"&gt;&lt;/span&gt;
&lt;div class="wrap"&gt;
&lt;h1&gt;Slide&lt;/h1&gt;
&lt;/div&gt;
&lt;/section&gt;</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>&lt;section class="bg-black"&gt;
&lt;span class="background light" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso/')"&gt;&lt;/span&gt;
&lt;div class="wrap"&gt;
&lt;h1&gt;Slide&lt;/h1&gt;
&lt;/div&gt;
&lt;/section&gt;</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>&lt;section class="bg-black"&gt;
&lt;span class="background dark" style="background-image:url('https://source.unsplash.com/1_CMoFsPfso/')"&gt;&lt;/span&gt;
&lt;div class="wrap"&gt;
&lt;h1&gt;Slide&lt;/h1&gt;
&lt;/div&gt;
&lt;/section&gt;</pre>
</div>
</section>
<section>
<div class="wrap size-50">
<p class="text-subtitle">Optional &middot; 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>&lt;svg class="fa-flag"&gt;
&lt;use xlink:href="#fa-flag"&gt;&lt;/use&gt;
&lt;/svg&gt;</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>&lt;figure class="browser"&gt;
&lt;img alt="Screenshot" src="image.jpg"&gt;
&lt;/figure&gt;</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>&lt;section class="fullscreen"&gt;</strong>
&lt;div class="embed"&gt;
&lt;video autoplay loop poster="image.jpg"&gt;
&lt;source src="video.mp4" type="video/mp4"&gt;
&lt;/video&gt;
&lt;/div&gt;
<strong>&lt;/section&gt;</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>&lt;section class="fullscreen bg-blue"&gt;</strong>
&lt;div class="embed <strong>dark</strong>"&gt;
&lt;video autoplay muted loop poster="image.jpg"&gt;
&lt;source src="video.mp4" type="video/mp4"&gt;
&lt;/video&gt;
&lt;/div&gt;
<strong>&lt;/section&gt;</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>&lt;div class="embed"&gt;
<strong>&lt;iframe src="https://www.youtube.com/embed/XjJQBjWYDTs"&gt;
&lt;/iframe&gt;</strong>
&lt;/div&gt;</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>&lt;section class="fullscreen"&gt;</strong>
&lt;div class="embed"&gt;
&lt;iframe src="https://www.youtube.com/embed/iY05U7GaU5I"&gt;
&lt;/iframe&gt;
&lt;/div&gt;
<strong>&lt;/section&gt;</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>&lt;div class="embed"&gt;
<strong>&lt;div data-youtube data-youtube-id=&quot;CQY3KUR3VzM&quot; data-autoplay data-loop&gt;
&lt;/div&gt;</strong>
&lt;/div&gt;</pre>
<p>autoplay + loop</p>
</div>
<!-- .end .column -->
<div class="column">
<pre>&lt;div class="embed"&gt;
<strong>&lt;div data-youtube data-youtube-id=&quot;CQY3KUR3VzM&quot; data-autoplay data-mute data-no-controls&gt;
&lt;/div&gt;</strong>
&lt;/div&gt;</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>&lt;div class="embed"&gt;
&lt;div data-youtube data-youtube-id=&quot;_m67JbGjWnc&quot; <strong>data-autoplay data-loop</strong>&gt;
&lt;/div&gt;
&lt;/div&gt;</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>&lt;section class="fullscreen"&gt;</strong>
&lt;div class="embed"&gt;
&lt;div data-youtube data-youtube-id=&quot;dmkwb2KfLW8&quot; <strong>data-autoplay data-loop data-no-controls</strong>&lt;/div&gt;
&lt;/div&gt;
<strong>&lt;/section&gt;</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>&lt;section class="fullscreen bg-black"&gt;</strong>
&lt;div class="embed dark"&gt;
&lt;div data-youtube data-youtube-id=&quot;c9psfOxJysw&quot; <strong>data-autoplay data-loop data-mute data-no-controls</strong>&lt;/div&gt;
&lt;/div&gt;
<strong>&lt;/section&gt;</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
View 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 &middot; 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&amp;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&amp;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>

View File

@@ -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">&lt;!-- Slide 2 --&gt;</span>
&lt;section class="bg-primary"&gt;
&lt;div class="wrap"&gt;
&lt;h2&gt;.wrap = container 1200px&lt;/h2&gt;
&lt;h2&gt;.wrap = container (width: 90%)&lt;/h2&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/article&gt;
@@ -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 @@
&lt;/div&gt;
&lt;/section&gt;
&lt;/article&gt;</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>&lt;div class="embed"&gt;
&lt;iframe src="https://www.youtube.com/embed/XjJQBjWYDTs"&gt;
&lt;/iframe&gt;
&lt;/div&gt;</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>

View File

@@ -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">&lt;!-- Slide 2 --&gt;</span>
&lt;section class="bg-primary"&gt;
&lt;div class="wrap"&gt;
&lt;h2&gt;.wrap = container 1200px&lt;/h2&gt;
&lt;h2&gt;.wrap = container (width: 90%)&lt;/h2&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/article&gt;
@@ -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) -->

View File

@@ -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&amp;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>

View File

@@ -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">&lt;!-- Slide 2 --&gt;</span>
&lt;section class="bg-primary"&gt;
&lt;div class="wrap"&gt;
&lt;h2&gt;.wrap = container 1200px&lt;/h2&gt;
&lt;h2&gt;.wrap = container (width: 90%)&lt;/h2&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;/article&gt;
@@ -182,7 +181,7 @@
<span>&rarr;</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 &rsaquo;</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 &rsaquo;</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
View 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
View File

@@ -0,0 +1,3 @@
import WebSlides from './modules/webslides';
window.WebSlides = WebSlides;

153
src/js/modules/slide.js Normal file
View 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
View 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;
}
}

View 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;
}
}
}

View 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
View 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
View 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}`);
}
}
}

View 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);
}
}
}

View 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
View 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
View 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
View 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
View 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
View 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();
}
}

View 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
View 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
View 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
View 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;

View 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
View 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

View File

@@ -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

File diff suppressed because one or more lines are too long

40
test/dom.js Normal file
View 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, '');
});

View File

@@ -0,0 +1,2 @@
import browserEnv from 'browser-env';
browserEnv();

40
webpack.config.babel.js Normal file
View 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
})
],
};