Skip to content

Instantly share code, notes, and snippets.

@poteto
Last active August 29, 2015 14:11
Show Gist options
  • Save poteto/f50f7adfbe612ddf7c9e to your computer and use it in GitHub Desktop.
Save poteto/f50f7adfbe612ddf7c9e to your computer and use it in GitHub Desktop.
lazy-video component
{{#if isDisplayed}}
<iframe {{bind-attr src=videoSrc}} width="100%" height="100%" frameBorder="0" allowFullScreen></iframe>
{{else}}
{{#if template}}
{{yield}}
{{else}}
<div class="lazyLoad-play">
<svg>
<path fill-rule="evenodd" clip-rule="evenodd" d="M84.15,26.4v6.35c0,2.833-0.15,5.967-0.45,9.4c-0.133,1.7-0.267,3.117-0.4,4.25l-0.15,0.95c-0.167,0.767-0.367,1.517-0.6,2.25c-0.667,2.367-1.533,4.083-2.6,5.15c-1.367,1.4-2.967,2.383-4.8,2.95c-0.633,0.2-1.316,0.333-2.05,0.4c-0.767,0.1-1.3,0.167-1.6,0.2c-4.9,0.367-11.283,0.617-19.15,0.75c-2.434,0.034-4.883,0.067-7.35,0.1h-2.95C38.417,59.117,34.5,59.067,30.3,59c-8.433-0.167-14.05-0.383-16.85-0.65c-0.067-0.033-0.667-0.117-1.8-0.25c-0.9-0.133-1.683-0.283-2.35-0.45c-2.066-0.533-3.783-1.5-5.15-2.9c-1.033-1.067-1.9-2.783-2.6-5.15C1.317,48.867,1.133,48.117,1,47.35L0.8,46.4c-0.133-1.133-0.267-2.55-0.4-4.25C0.133,38.717,0,35.583,0,32.75V26.4c0-2.833,0.133-5.95,0.4-9.35l0.4-4.25c0.167-0.966,0.417-2.05,0.75-3.25c0.7-2.333,1.567-4.033,2.6-5.1c1.367-1.434,2.967-2.434,4.8-3c0.633-0.167,1.333-0.3,2.1-0.4c0.4-0.066,0.917-0.133,1.55-0.2c4.9-0.333,11.283-0.567,19.15-0.7C35.65,0.05,39.083,0,42.05,0L45,0.05c2.467,0,4.933,0.034,7.4,0.1c7.833,0.133,14.2,0.367,19.1,0.7c0.3,0.033,0.833,0.1,1.6,0.2c0.733,0.1,1.417,0.233,2.05,0.4c1.833,0.566,3.434,1.566,4.8,3c1.066,1.066,1.933,2.767,2.6,5.1c0.367,1.2,0.617,2.284,0.75,3.25l0.4,4.25C84,20.45,84.15,23.567,84.15,26.4z M33.3,41.4L56,29.6L33.3,17.75V41.4z"></path>
<polygon fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" points="33.3,41.4 33.3,17.75 56,29.6"></polygon>
</svg>
</div>
{{/if}}
{{/if}}
import Ember from 'ember';
export default Ember.Component.extend({
provider : null,
isDisplayed : false,
videoTitle : null,
videoId : null,
classNames : [ 'lazyLoad-container' ],
attributeBindings : [ 'style' ],
videoThumbnail : null,
click: function() {
this.set('isDisplayed', true);
},
videoSrc: Ember.computed('provider', 'videoId', function() {
var providers = this.get('providers');
var provider = this.get('provider');
var videoId = this.get('videoId');
return providers.getUrl(provider, 'embedUrl', videoId, { autoplay: 1 });
}),
_getVideoThumbnail: (function() {
var providers = this.get('providers');
var provider = this.get('provider');
var videoId = this.get('videoId');
providers.get(provider).thumbnailUrl(videoId).then(function(res) {
this.set('videoThumbnail', res);
}.bind(this));
}).on('didInsertElement'),
style: Ember.computed('videoThumbnail', function() {
var thumbnail = this.get('videoThumbnail');
return 'background-image: url(' + thumbnail + ') center center no-repeat';
})
});
.lazyLoad-container {
cursor: pointer;
width: 100%;
height: 100%;
background: black;
background-size: cover;
background-position: center center;
background-repeat: no-repeat;
&:hover {
.lazyLoad-play SVG {
fill: rgb(206, 19, 18);
}
}
}
.lazyLoad-play {
$width: 85px;
$height: 60px;
$marginLeft: $width / -2;
$marginTop: $height / -2;
width: $width;
height: $height;
margin-left: $marginLeft;
margin-top: $marginTop;
cursor: pointer;
outline: 0;
position: absolute;
top: 50%;
left: 50%;
z-index: 1000;
svg {
height: 100%;
width: 100%;
fill: rgb(31,31,31);
@include opacity(0.9);
cursor: pointer;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment