Docs/demo refresh

This commit is contained in:
Sam Potts 2017-10-25 23:59:53 +11:00
parent 57517a9dcc
commit 378aa159b8
39 changed files with 618 additions and 575 deletions

5
.gitignore vendored
View File

@ -1,12 +1,7 @@
node_modules
*.sublime-project
*.sublime-workspace
.DS_Store
aws.json
*.mp4
!dist/blank.mp4
index-*.html
notes.txt
.idea
.DS_Store
npm-debug.log

View File

@ -1,22 +1,23 @@
{
"plyr": {
"less": {
"plyr.css": ["src/less/plyr.less"]
"plyr.css": "src/less/plyr.less"
},
"scss": {
"plyr.css": ["src/scss/plyr.scss"]
"plyr.css": "src/scss/plyr.scss"
},
"js": {
"plyr.js": ["src/js/plyr.js"]
"plyr.js": "src/js/plyr.js"
}
},
"demo": {
"less": {
"demo.css": ["demo/src/less/demo.less"]
"demo.css": "demo/src/less/bundle.less"
},
"js": {
"demo.js": [
"demo/src/js/lib/classlist.js",
"demo/src/js/lib/tab-focus.js",
"demo/src/js/lib/sprite.js",
"demo/src/js/main.js"
]

2
demo/dist/demo.css vendored

File diff suppressed because one or more lines are too long

2
demo/dist/demo.js vendored

File diff suppressed because one or more lines are too long

View File

@ -17,126 +17,92 @@
<!-- Preload -->
<link rel="preload" as="font" crossorigin type="font/woff2" href="https://cdn.plyr.io/static/fonts/avenir-medium.woff2">
<link rel="preload" as="font" crossorigin type="font/woff2" href="https://cdn.plyr.io/static/fonts/avenir-bold.woff2">
<link rel="preload" as="font" crossorigin type="font/woff2" href="https://cdn.plyr.io/static/fonts/avenir-black.woff2?v=3">
</head>
<body>
<header>
<h1>Plyr</h1>
<p>A simple, accessible HTML5 media player by
<a href="https://twitter.com/sam_potts" target="_blank">@sam_potts</a>
</p>
<nav>
<div class="grid">
<header>
<h1>Plyr</h1>
<p>A simple, accessible HTML5
<button type="button" class="faux-link" data-source="video">Video</button>,
<button type="button" class="faux-link" data-source="audio">Audio</button>,
<button type="button" class="faux-link" data-source="youtube">YouTube</button> and
<button type="button" class="faux-link" data-source="vimeo">Vimeo</button> media player.
</p>
<a href="https://github.com/sampotts/plyr" target="_blank" class="button" data-shr-network="github">
<svg class="icon">
<use xlink:href="#icon-github"></use>
</svg>Download on GitHub
</a>
</header>
<main>
<video controls crossorigin playsinline loop poster="https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg"
id="player">
<!-- Video files -->
<source src="https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4" type="video/mp4">
<!-- Text track file -->
<track kind="captions" label="English" srclang="en" src="webvtt/View_From_A_Blue_Moon_Trailer-HD.en.vtt" default>
<track kind="captions" label="Français" srclang="fr" src="webvtt/View_From_A_Blue_Moon_Trailer-HD.fr.vtt">
<!-- Fallback for browsers that don't support the <video> element -->
<a href="https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4" download>Download</a>
</video>
<ul>
<li>
<a href="https://github.com/sampotts/plyr" target="_blank" class="btn btn--large btn--primary" data-shr-network="github">
<svg class="icon">
<use xlink:href="#icon-github"></use>
</svg>Download on GitHub
</a>
<li class="plyr__cite plyr__cite--video" hidden>
<small>
<a href="http://viewfromabluemoon.com/" target="_blank">View From A Blue Moon</a> &copy; Brainfarm
</small>
</li>
<li>
<a href="https://twitter.com/intent/tweet?text=A+simple+HTML5+media+player+with+custom+controls+and+WebVTT+captions.&url=http%3A%2F%2Fplyr.io&via=Sam_Potts"
target="_blank" class="btn btn--large btn--twitter" data-shr-network="twitter">
<svg class="icon">
<use xlink:href="#icon-twitter"></use>
</svg>Tweet
</a>
<li class="plyr__cite plyr__cite--audio" hidden>
<small>
<a href="http://www.kishibashi.com/" target="_blank">Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;</a> &copy; Kishi Bashi
</small>
</li>
<li class="plyr__cite plyr__cite--youtube" hidden>
<small>
<a href="https://www.youtube.com/watch?v=bTqVqk7FSmY" target="_blank">View From A Blue Moon</a> on
<span class="color--youtube">
<svg class="icon">
<use xlink:href="#icon-youtube"></use>
</svg> YouTube
</span>
</small>
</li>
<li class="plyr__cite plyr__cite--vimeo" hidden>
<small>
<a href="https://vimeo.com/ondemand/viewfromabluemoon4k" target="_blank">View From A Blue Moon</a> on
<span class="color--vimeo">
<svg class="icon">
<use xlink:href="#icon-vimeo"></use>
</svg> Vimeo
</span>
</small>
</li>
</ul>
</nav>
</header>
</main>
</div>
<main role="main" id="main">
<nav class="btn__bar">
<ul>
<li class="active">
<button type="button" class="btn" data-source="video">Video</button>
</li>
<li>
<button type="button" class="btn" data-source="audio">Audio</button>
</li>
<li>
<button type="button" class="btn btn--youtube" data-source="youtube">
<svg class="icon">
<use xlink:href="#icon-youtube"></use>
</svg>YouTube</button>
</li>
<li>
<button type="button" class="btn btn--vimeo" data-source="vimeo">
<svg class="icon">
<use xlink:href="#icon-vimeo"></use>
</svg>Vimeo</button>
</li>
</ul>
</nav>
<video controls crossorigin playsinline loop poster="https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg"
id="player">
<!-- Video files -->
<source src="https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4" type="video/mp4">
<!-- Text track file -->
<track kind="captions" label="English" srclang="en" src="webvtt/View_From_A_Blue_Moon_Trailer-HD.en.vtt" default>
<track kind="captions" label="Français" srclang="fr" src="webvtt/View_From_A_Blue_Moon_Trailer-HD.fr.vtt">
<!-- Fallback for browsers that don't support the <video> element -->
<a href="https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4" download>Download</a>
</video>
<ul>
<li class="plyr__cite plyr__cite--video" hidden>
<small>
<a href="http://viewfromabluemoon.com/" target="_blank">View From A Blue Moon</a> &copy; Brainfarm
</small>
</li>
<li class="plyr__cite plyr__cite--audio" hidden>
<small>
<a href="http://www.kishibashi.com/" target="_blank">Kishi Bashi &ndash; &ldquo;It All Began With A Burst&rdquo;</a> &copy; Kishi Bashi
</small>
</li>
<li class="plyr__cite plyr__cite--youtube" hidden>
<small>
<a href="https://www.youtube.com/watch?v=bTqVqk7FSmY" target="_blank">View From A Blue Moon</a> on
<span class="color--youtube">
<svg class="icon">
<use xlink:href="#icon-youtube"></use>
</svg> YouTube
</span>
</small>
</li>
<li class="plyr__cite plyr__cite--vimeo" hidden>
<small>
<a href="https://vimeo.com/ondemand/viewfromabluemoon4k" target="_blank">View From A Blue Moon</a> on
<span class="color--vimeo">
<svg class="icon">
<use xlink:href="#icon-vimeo"></use>
</svg> Vimeo
</span>
</small>
</li>
</ul>
</main>
<aside>If you like Plyr, get the word out and
<a href="https://twitter.com/intent/tweet?text=A+simple+HTML5+media+player+with+custom+controls+and+WebVTT+captions.&url=http%3A%2F%2Fplyr.io&via=Sam_Potts"
target="_blank" data-shr-network="twitter">tweet it</a>
</aside>
<!-- Plyr core script -->
<script src="../src/js/plyr.js"></script>
<!-- Docs script -->
<script src="dist/demo.js"></script>
<!-- Sharing libary (https://shr.one) -->
<script src="https://cdn.shr.one/1.0.1/shr.js"></script>
<!-- Rangetouch to fix <input type="range"> on touch devices (see https://rangetouch.com) -->
<script src="https://cdn.rangetouch.com/1.0.1/rangetouch.js" async></script>
<!-- Sharing libary (https://shr.one) -->
<script src="https://cdn.shr.one/1.0.1/shr.js"></script>
<script>
if (window.shr) {
window.shr.setup({
count: {
classname: 'btn__count'
}
});
}
</script>
<!-- Docs script -->
<script src="dist/demo.js"></script>
</body>
</html>

View File

@ -0,0 +1,26 @@
// ==========================================================================
// tab-focus.js
// Detect keyboard tabbing
// ==========================================================================
(function() {
var className = 'tab-focus';
// Remove class on blur
document.addEventListener('focusout', function(event) {
event.target.classList.remove(className);
});
// Add classname to tabbed elements
document.addEventListener('keydown', function(event) {
if (event.keyCode !== 9) {
return;
}
// Delay the adding of classname until the focus has changed
// This event fires before the focusin event
window.setTimeout(function() {
document.activeElement.classList.add(className);
}, 0);
});
})();

View File

@ -7,6 +7,14 @@
/*global Plyr*/
(function() {
if (window.shr) {
window.shr.setup({
count: {
classname: 'button__count',
},
});
}
/*document.body.addEventListener('ready', function(event) {
console.log(event);
});*/
@ -17,10 +25,10 @@
title: 'View From A Blue Moon',
iconUrl: '../dist/plyr.svg',
tooltips: {
controls: true
controls: true,
},
captions: {
defaultActive: true
defaultActive: true,
},
controls: [
'play-large',
@ -33,8 +41,8 @@
'settings',
'fullscreen',
'pip',
'airplay'
]
'airplay',
],
});
// Expose for testing
@ -49,7 +57,7 @@
video: 'video',
audio: 'audio',
youtube: 'youtube',
vimeo: 'vimeo'
vimeo: 'vimeo',
};
var currentType = window.location.hash.replace('#', '');
var historySupport = window.history && window.history.pushState;
@ -64,7 +72,7 @@
if (historySupport) {
history.pushState(
{
type: type
type: type,
},
'',
'#' + type
@ -93,7 +101,7 @@
if (currentType in types) {
history.replaceState(
{
type: currentType
type: currentType,
},
'',
video ? '' : '#' + currentType
@ -109,12 +117,7 @@
// Toggle class on an element
function toggleClass(element, className, state) {
if (element) {
if (element.classList) {
element.classList[state ? 'add' : 'remove'](className);
} else {
var name = (' ' + element.className + ' ').replace(/\s+/g, ' ').replace(' ' + className + ' ', '');
element.className = name + (state ? ' ' + className : '');
}
element.classList[state ? 'add' : 'remove'](className);
}
}
@ -133,8 +136,8 @@
sources: [
{
src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',
type: 'video/mp4'
}
type: 'video/mp4',
},
],
poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',
tracks: [
@ -143,15 +146,15 @@
label: 'English',
srclang: 'en',
src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',
default: true
default: true,
},
{
kind: 'captions',
label: 'French',
srclang: 'fr',
src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt'
}
]
src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',
},
],
});
break;
@ -162,13 +165,13 @@
sources: [
{
src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',
type: 'audio/mp3'
type: 'audio/mp3',
},
{
src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',
type: 'audio/ogg'
}
]
type: 'audio/ogg',
},
],
});
break;
@ -179,9 +182,9 @@
sources: [
{
src: 'https://www.youtube.com/watch?v=bTqVqk7FSmY',
type: 'youtube'
}
]
type: 'youtube',
},
],
});
break;
@ -192,9 +195,9 @@
sources: [
{
src: 'https://vimeo.com/76979871',
type: 'vimeo'
}
]
type: 'vimeo',
},
],
});
break;
}
@ -208,7 +211,7 @@
}
// Set active on parent
toggleClass(document.querySelector('[data-source="' + type + '"]').parentElement, 'active', true);
toggleClass(document.querySelector('[data-source="' + type + '"]'), 'active', true);
// Show cite
[].forEach.call(document.querySelectorAll('.plyr__cite'), function(cite) {

35
demo/src/less/bundle.less Normal file
View File

@ -0,0 +1,35 @@
// ==========================================================================
// Plyr.io Demo Page
// ==========================================================================
// Libs
@import 'lib/animation';
@import 'lib/fontface';
@import 'lib/mixins';
@import 'lib/normalize';
// Settings
@import 'settings/breakpoints';
@import 'settings/colors';
@import 'settings/cosmetic';
@import 'settings/icons';
@import 'settings/layout';
@import 'settings/spacing';
@import 'settings/type';
// Layout
@import 'layout/core';
@import 'layout/grid';
// Type
@import 'type/base';
@import 'type/headings';
// Components
@import 'components/buttons';
@import 'components/header';
@import 'components/icons';
@import 'components/links';
@import 'components/lists';
@import 'components/navigation';
@import 'components/players';

View File

@ -1,43 +0,0 @@
// ==========================================================================
// Base layout
// ==========================================================================
// BORDER-BOX ALL THE THINGS!
// http://paulirish.com/2012/box-sizing-border-box-ftw/
*, *::after, *::before {
box-sizing: border-box;
}
// Hidden
[hidden] {
display: none;
}
// Base
html {
height: 100%;
background: @body-background fixed;
}
body {
margin: 0 auto @padding-base;
padding: (@padding-base / 2);
max-width: @example-width-video;
@media (min-width: @screen-sm) {
margin-bottom: (@padding-base * 2);
}
}
// Header
header {
padding: @padding-base;
margin-bottom: @padding-base;
p {
.font-size(18);
}
@media (min-width: @screen-sm) {
padding-top: (@padding-base * 3);
padding-bottom: (@padding-base * 3);
}
}

View File

@ -2,171 +2,65 @@
// Buttons
// ==========================================================================
nav {
ul {
list-style: none;
margin: 0;
padding: 0;
font-size: 0;
}
li {
display: inline-block;
margin-top: (@padding-base / 2);
.font-size();
white-space: nowrap;
}
li + li {
margin-left: @padding-base;
}
}
// Tabs
.btn__bar {
position: relative;
margin: 0 auto @padding-base;
max-width: @example-width-video;
white-space: nowrap;
&::before {
content: "";
position: absolute;
top: 50%;
left: 0;
right: 0;
height: 1px;
background: @gray-lighter;
}
ul {
position: relative;
z-index: 1;
display: inline-block;
user-select: none;
}
li {
margin: 0;
&:first-child .btn {
border-radius: 4px 0 0 4px;
}
&:last-child .btn {
border-radius: 0 4px 4px 0;
}
& + li .btn {
margin-left: -1px;
}
&.active .btn {
&:extend(.btn--primary);
box-shadow: inset 0 1px 1px rgba(0,0,0, .2);
position: relative;
z-index: 1;
.icon {
color: inherit;
}
}
&.active + li .btn:hover {
z-index: 0;
}
}
.btn {
position: relative;
display: block;
border-radius: 0;
&:hover,
&:focus {
z-index: 1;
}
}
@media (min-width: 560px) {
margin-bottom: (@padding-base * 2);
}
}
// Shared
.btn,
.btn__count {
display: inline-block;
vertical-align: middle;
border-radius: @border-radius-base;
user-select: none;
font-weight: @font-weight-bold;
.button,
.button__count {
position: relative;
display: inline-flex;
vertical-align: middle;
align-items: center;
padding: (@spacing-base * 0.75);
border-radius: @border-radius-base;
box-shadow: 0 1px 1px fade(#000, 10%);
background: #fff;
border: 0;
color: @gray;
user-select: none;
font-weight: @font-weight-bold;
text-shadow: none;
}
// Buttons
.btn {
padding: (@padding-base / 2) ((@padding-base / 2) + 2);
background: linear-gradient(lighten(@off-white, 2%), darken(@off-white, 3%));
border: 1px solid @gray-light;
box-shadow: 0 1px 1px rgba(0,0,0, .05);
text-shadow: 0 1px 1px #fff;
color: @gray;
transition: background .1s ease, color .1s ease;
.font-size(@font-size-small);
.button {
padding-left: @spacing-base;
padding-right: @spacing-base;
transition: all 0.2s ease;
&:hover,
&:focus {
border-color: darken(@gray-light, 8%);
color: @gray;
outline: 0;
}
}
&:hover,
&:focus {
color: @gray-dark;
outline: 0;
// Sizes
.btn--large {
padding: (@padding-base / 2) @padding-base;
.font-size();
}
&::after {
display: none;
}
}
// Styles
.btn--primary {
background-image: linear-gradient(@link-color, darken(@link-color, 5%));
background-color: @link-color;
border-color: darken(@link-color, 10%);
box-shadow: 0 1px 1px rgba(0,0,0, .15);
text-shadow: 0 1px 1px rgba(0,0,0, .1);
color: #fff;
&:hover,
&:focus {
color: #fff;
border-color: darken(@link-color, 20%);
}
}
.btn--youtube .icon {
color: @color-youtube;
}
.btn--vimeo .icon {
color: @color-vimeo;
}
.btn--twitter .icon {
color: @color-twitter;
&.tab-focus {
.tab-focus();
}
}
// Count bubble
.btn__count {
position: relative;
margin-left: (@padding-base / 2);
padding: (@padding-base / 2) (@padding-base * .75);
background: #fff;
border: 1px solid @gray-light;
.button__count {
margin-left: (@spacing-base / 2);
animation: fadein 0.2s ease;
&::before {
content: "";
position: absolute;
display: block;
width: @arrow-size;
height: @arrow-size;
left: 1px;
top: 50%;
margin-top: -(@arrow-size / 2);
&::before {
content: '';
position: absolute;
display: block;
width: @arrow-size;
height: @arrow-size;
left: 1px;
top: 50%;
margin-top: -(@arrow-size / 2);
background: inherit;
border: inherit;
border-width: 1px 0 0 1px;
transform: rotate(-45deg) translate(-50%, -50%);
}
background: inherit;
border: inherit;
border-width: 1px 0 0 1px;
transform: rotate(-45deg) translate(-50%, -50%);
}
}

View File

@ -0,0 +1,24 @@
// ==========================================================================
// Header
// ==========================================================================
header {
padding: @spacing-base;
text-align: center;
p {
.font-size(18);
margin-bottom: @spacing-base * 1.5;
}
@media @mq-sm {
padding-top: (@spacing-base * 3);
padding-bottom: (@spacing-base * 3);
}
@media @mq-md {
max-width: 400px;
margin-right: (@spacing-base * 2);
text-align: left;
}
}

View File

@ -4,23 +4,19 @@
// Base size icon styles
.icon {
fill: currentColor;
width: @icon-size;
height: @icon-size;
vertical-align: -3px;
fill: currentColor;
width: @icon-size;
height: @icon-size;
}
// Within elements
a svg,
button svg,
label svg {
pointer-events: none;
pointer-events: none;
}
a .icon,
.btn .icon {
margin-right: (@padding-base / 2);
}
.btn:not(.btn-large) .icon {
width: (@icon-size - 2);
height: (@icon-size - 2);
margin-right: (@spacing-base / 2);
}

View File

@ -0,0 +1,46 @@
// ==========================================================================
// Links
// ==========================================================================
// Make a <button> look like an <a>
button.faux-link {
.cancel-button-styles();
&:extend(a all);
}
// Links
a {
position: relative;
border-bottom: 1px dotted currentColor;
transition: all 0.2s ease;
text-decoration: none;
color: @color-link;
font-weight: @font-weight-bold;
&::after {
content: '';
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%);
width: 0;
height: 1px;
transition: width 0.2s ease;
background: currentColor;
}
&:hover,
&:focus {
border-bottom-color: transparent;
outline: 0;
&::after {
width: 100%;
}
}
&.tab-focus {
.tab-focus();
}
}

View File

@ -0,0 +1,11 @@
// ==========================================================================
// Lists
// ==========================================================================
// Lists
ul,
li {
list-style: none;
margin: 0;
padding: 0;
}

View File

@ -0,0 +1,9 @@
// ==========================================================================
// Navigation
// ==========================================================================
nav {
display: flex;
justify-content: center;
margin-bottom: @spacing-base;
}

View File

@ -11,13 +11,11 @@ video {
// Example players
.plyr {
margin: 0 auto;
border-radius: @border-radius-large;
}
.plyr--audio {
max-width: @example-width-audio;
border-radius: @border-radius-base;
box-shadow: 0 2px 5px fade(#000, 20%);
}
.plyr__video-wrapper::after {
content: "";
content: '';
pointer-events: none;
position: absolute;
top: 0;
@ -31,10 +29,10 @@ video {
// Style full supported player
.plyr__cite {
display: none;
margin-top: @padding-base;
margin-top: @spacing-base;
.icon {
margin-right: (@padding-base / 4);
margin-right: (@spacing-base / 4);
}
}

View File

@ -1,75 +0,0 @@
// ==========================================================================
// Typography
// ==========================================================================
// Base
html {
font-size: 100%;
}
body {
font-family: "Avenir", "Helvetica Neue", Helvetica, Arial, sans-serif;
line-height: 1.5;
text-align: center;
color: @gray;
font-weight: @font-weight-base;
.font-smoothing();
}
// Headings
h1,
h2 {
letter-spacing: -.025em;
color: @brand-primary;
margin: 0 0 (@padding-base / 2);
line-height: 1.2;
font-weight: @font-weight-bold;
}
h1 {
.font-size(@font-size-h1);
}
// Paragraph and small
p,
small {
margin: 0 0 @padding-base;
}
small {
display: block;
padding: 0 (@padding-base / 2);
.font-size(@font-size-small);
}
// Lists
ul,
li {
list-style: none;
margin: 0;
padding: 0;
}
// Links
a {
text-decoration: none;
color: @link-color;
border-bottom: 1px dotted currentColor;
transition: background 0.3s ease, color 0.3s ease, border 0.3s ease;
&:hover,
&:focus {
color: @gray-dark;
border-bottom-color: rgba(0, 0, 0, 0);
}
&:focus {
.tab-focus();
}
&.logo {
border: 0;
}
}
.color--vimeo {
color: @color-vimeo;
}
.color--youtube {
color: @color-youtube;
}

View File

@ -1,26 +0,0 @@
// ==========================================================================
// Plyr.io Demo Page
// ==========================================================================
// CSS Reset
@import "lib/normalize.less";
// Mixins
@import "lib/mixins.less";
// Variables
@import "variables.less";
// Animation
@import "lib/animation.less";
// Type
@import "lib/fontface.less";
@import "components/type.less";
// Components
@import "components/base.less";
@import "components/icons.less";
@import "components/buttons.less";
@import "components/error.less";
@import "components/examples.less";

View File

@ -0,0 +1,44 @@
// ==========================================================================
// Core
// ==========================================================================
html {
background: @page-background;
background-attachment: fixed;
}
html,
body {
height: 100%;
}
body {
display: flex;
align-items: center;
flex-direction: column;
}
main {
text-align: center;
}
.grid {
flex: 1;
}
aside {
width: 100%;
padding: (@spacing-base * 0.75);
background: #fff;
text-align: center;
color: @gray;
text-shadow: none;
a {
color: @color-twitter;
&.tab-focus {
.tab-focus(@color-twitter);
}
}
}

View File

@ -7,11 +7,13 @@ html.error,
.error body {
height: 100%;
}
.error body {
width: 100%;
display: table;
table-layout: fixed;
}
.error main {
display: table-cell;
width: 100%;

View File

@ -0,0 +1,19 @@
// ==========================================================================
// Super basic grid
// ==========================================================================
.grid {
margin: 0 auto;
padding: @spacing-base;
@media @mq-md {
display: flex;
align-items: center;
width: 100%;
max-width: @container-max-width;
> * {
flex: 1;
}
}
}

View File

@ -3,7 +3,11 @@
// ==========================================================================
// Fade
@keyframes fade-in {
0% { opacity: 0 }
100% { opacity: 1 }
@keyframes fadein {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}

View File

@ -19,3 +19,12 @@
font-weight: @font-weight-bold;
font-display: swap;
}
@font-face {
font-family: "Avenir";
src: url("https://cdn.plyr.io/static/fonts/avenir-black.woff2?v=3") format("woff2"),
url("https://cdn.plyr.io/static/fonts/avenir-black.woff?v=3") format("woff");
font-style: normal;
font-weight: @font-weight-heavy;
font-display: swap;
}

View File

@ -2,31 +2,39 @@
// Mixins
// ==========================================================================
// Contain floats: nicolasgallagher.com/micro-clearfix-hack/
// Convert a <button> into an <a>
// ---------------------------------------
.clearfix() {
zoom: 1;
&:before,
&:after { content: ""; display: table; }
&:after { clear: both; }
.cancel-button-styles() {
position: relative;
margin: 0;
padding: 0;
width: auto;
border: 0;
background: transparent;
vertical-align: baseline;
text-align: inherit;
font: inherit;
line-height: @line-height-base;
cursor: pointer;
-moz-user-select: text;
text-shadow: inherit;
border-radius: 0;
}
// Webkit-style focus
// Nicer focus styles
// ---------------------------------------
.tab-focus() {
// Default
outline: thin dotted @gray-dark;
// Webkit
outline-offset: 1px;
.tab-focus(@color: @tab-focus-default-color) {
outline: 0;
box-shadow: 0 0 0 3px fade(@color, 35%);
}
// Use rems for font sizing
// Leave <body> at 100%/16px
// ---------------------------------------
.font-size(@font-size: 16){
.font-size(@font-size: 16) {
@rem: round((@font-size / 16), 3);
font-size: (@font-size * 1px);
font-size: ~"@{rem}rem";
font-size: ~'@{rem}rem';
}
// Font smoothing

View File

@ -0,0 +1,11 @@
// ==========================================================================
// Resets
// ==========================================================================
// BORDER-BOX ALL THE THINGS!
// http://paulirish.com/2012/box-sizing-border-box-ftw/
*,
*::after,
*::before {
box-sizing: border-box;
}

View File

@ -0,0 +1,9 @@
// ==========================================================================
// Breakpoints
// ==========================================================================
@screen-sm: 480px;
@screen-md: 768px;
@mq-sm: ~"only screen and (min-width: @{screen-sm}) ";
@mq-md: ~"only screen and (min-width: @{screen-md}) ";

View File

@ -0,0 +1,27 @@
// ==========================================================================
// Colors
// ==========================================================================
// Greyscale
@gray-dark: #343f4a;
@gray: #55646b;
@gray-light: #cbd0d3;
@gray-lighter: #dbe3e8;
@off-white: #f2f5f7;
// Text
@color-text: #fff;
// Plyr
@color-brand-primary: #1aafff;
// Brands
@color-twitter: #4baaf4;
@color-youtube: #cc181e;
@color-vimeo: #19b7ed;
// Elements
@color-link: #fff;
// Focus
@tab-focus-default-color: #fff;

View File

@ -0,0 +1,12 @@
// ==========================================================================
// Misc cosmetic
// ==========================================================================
// Button count arrow size
@arrow-size: 8px;
// Radii
@border-radius-base: 4px;
// Background
@page-background: linear-gradient(to left top, lighten(@color-brand-primary, 15%), darken(@color-brand-primary, 15%));

View File

@ -0,0 +1,5 @@
// ==========================================================================
// Icons
// ==========================================================================
@icon-size: 18px;

View File

@ -0,0 +1,5 @@
// ==========================================================================
// Layout
// ==========================================================================
@container-max-width: 1280px;

View File

@ -0,0 +1,5 @@
// ==========================================================================
// Colors
// ==========================================================================
@spacing-base: 20px;

View File

@ -0,0 +1,17 @@
// ==========================================================================
// Typography
// ==========================================================================
@font-sans-serif: 'Avenir', 'Helvetica Neue', sans-serif;
@font-size-base: 16;
@font-size-small: 14;
@font-size-h1: 64;
@font-weight-base: 500;
@font-weight-bold: 700;
@font-weight-heavy: 900;
@line-height-base: 1.5;
@letter-spacing-headings: -0.025em;

View File

@ -0,0 +1,33 @@
// ==========================================================================
// Base
// ==========================================================================
// Set to 100% for rem sizing
html {
font-size: 100%;
}
body {
font-family: @font-sans-serif;
line-height: @line-height-base;
color: @color-text;
font-weight: @font-weight-base;
.font-smoothing();
text-shadow: 0 1px 1px fade(#000, 15%);
}
button,
input,
select,
textarea {
font: inherit;
}
p,
small {
margin: 0 0 @spacing-base;
}
small {
display: block;
.font-size(@font-size-small);
}

View File

@ -0,0 +1,10 @@
// ==========================================================================
// Headings
// ==========================================================================
h1 {
margin: 0 0 (@spacing-base / 2);
.font-size(@font-size-h1);
font-weight: @font-weight-heavy;
letter-spacing: @letter-spacing-headings;
}

View File

@ -0,0 +1,10 @@
// ==========================================================================
// Color
// ==========================================================================
.color--vimeo {
color: @color-vimeo;
}
.color--youtube {
color: @color-youtube;
}

View File

@ -0,0 +1,7 @@
// ==========================================================================
// Hidden
// ==========================================================================
[hidden] {
display: none;
}

View File

@ -1,48 +0,0 @@
// ==========================================================================
// Variables
// ==========================================================================
// Colors
@gray-dark: #343f4a;
@gray: #55646b;
@gray-light: #cbd0d3;
@gray-lighter: #dbe3e8;
@off-white: #f2f5f7;
@brand-primary: #3498db;
@brand-secondary: #02bd9b;
// Brands
@color-twitter: #4baaf4;
@color-youtube: #cc181e;
@color-vimeo: #19b7ed;
// Base
@body-background: @off-white; //linear-gradient(to left top, @brand-secondary, @brand-primary);
// Type
@font-size-base: 16;
@font-size-small: 14;
@font-size-h1: 64;
@font-weight-base: 500;
@font-weight-bold: 700;
// Elements
@link-color: @brand-primary;
@padding-base: 20px;
@arrow-size: 8px;
// Icons
@icon-size: 18px;
// Breakpoints
@screen-sm: 480px;
@screen-md: 768px;
// Radii
@border-radius-base: 4px;
@border-radius-large: 6px;
// Examples
@example-width-audio: 520px;
@example-width-video: 1200px;

View File

@ -77,58 +77,52 @@ function loadJSON(path) {
var build = {
js: function(files, bundle) {
for (var key in files) {
(function(key) {
var name = 'js-' + key;
tasks.js.push(name);
Object.keys(files).forEach(function(key) {
var name = 'js-' + key;
tasks.js.push(name);
gulp.task(name, function() {
return gulp
.src(bundles[bundle].js[key])
.pipe(concat(key))
.pipe(uglify())
.pipe(gulp.dest(paths[bundle].output));
});
})(key);
}
gulp.task(name, function() {
return gulp
.src(bundles[bundle].js[key])
.pipe(concat(key))
.pipe(uglify())
.pipe(gulp.dest(paths[bundle].output));
});
});
},
less: function(files, bundle) {
for (var key in files) {
(function(key) {
var name = 'less-' + key;
tasks.less.push(name);
Object.keys(files).forEach(function(key) {
var name = 'less-' + key;
tasks.less.push(name);
gulp.task(name, function() {
return gulp
.src(bundles[bundle].less[key])
.pipe(less())
.on('error', gutil.log)
.pipe(concat(key))
.pipe(prefix(['last 2 versions'], { cascade: false }))
.pipe(cleanCSS())
.pipe(gulp.dest(paths[bundle].output));
});
})(key);
}
gulp.task(name, function() {
return gulp
.src(bundles[bundle].less[key])
.pipe(less())
.on('error', gutil.log)
.pipe(concat(key))
.pipe(prefix(['last 2 versions'], { cascade: false }))
.pipe(cleanCSS())
.pipe(gulp.dest(paths[bundle].output));
});
});
},
scss: function(files, bundle) {
for (var key in files) {
(function(key) {
var name = 'scss-' + key;
tasks.scss.push(name);
Object.keys(files).forEach(function(key) {
var name = 'scss-' + key;
tasks.scss.push(name);
gulp.task(name, function() {
return gulp
.src(bundles[bundle].scss[key])
.pipe(sass())
.on('error', gutil.log)
.pipe(concat(key))
.pipe(prefix(['last 2 versions'], { cascade: false }))
.pipe(cleanCSS())
.pipe(gulp.dest(paths[bundle].output));
});
})(key);
}
gulp.task(name, function() {
return gulp
.src(bundles[bundle].scss[key])
.pipe(sass())
.on('error', gutil.log)
.pipe(concat(key))
.pipe(prefix(['last 2 versions'], { cascade: false }))
.pipe(cleanCSS())
.pipe(gulp.dest(paths[bundle].output));
});
});
},
sprite: function(bundle) {
var name = 'sprite-' + bundle;

View File

@ -19,7 +19,7 @@
}
}.call(this, 'Plyr', this, function() {
'use strict';
/* global jQuery, console */
/* global jQuery */
// Globals
var scroll = {