Adding Video Blogging and Video Playlist Functionalities
<!--templates/index.html-->
{% extends "base.html" %}
{% block head %}
{{ super() }}
<script src="/static/scripts/index.js"></script>
<link href="/static/styles/index.css" rel="stylesheet">
{% endblock %}
{% block panel %}
{% if 'cat' in data %}
<script>
index.label = '{{ data["cat"] }}';
</script>
{% endif %}
<div id="panel" class="panel region"></div>
<div class="navigation region">
<img onclick="index.navPrevious()" src="/static/images/left.png" />
<img id="nav-home" onclick="index.navHome()" src="/static/images/home.png" />
<img onclick="index.navNext()" src="/static/images/right.png" />
</div>
{% endblock %}
{% block ad %}
<div class="ad region">
<img src="/static/images/ad.jpg" />
</div>
<div style="clear: both;"></div>
{% endblock %}
{% block content %}
<div id='content'>
<div id="channel">
<div id="screen">
<div id='kvid-screen' width="100%"></div>
</div>
<div id="kdownloadButton"></div>
<div id="kplaylistPanel"></div>
<div id="next-page">
<a class="new-vid" onclick="index.previousPageKD()"><< ៥០ កំរងវីដេអូ</a>
<a class="new-vid" onclick="index.home()">កំរងវីដេអូដើម</a>
<a class="new-vid" onclick="index.nextPageKD()"> កំរងវីដេអូ ៥០ >></a>
</div>
</div>
</div>
{% endblock %}
// static/scripts/post.js
class Post{
constructor(){
this.blogId = '3212243556817590089';
}
toKhDate(date){
var dt = new Date(date);
var d = dt.getDate();
var m = dt.getMonth()+1;
var y = dt.getFullYear();
var khDate = d+'/'+m+'/'+y;
return khDate;
}
setPostVid(eleId){
var playlist = document.createElement( 'div' );
var description = document.createElement( 'div');
description.className = 'description';
var post = document.getElementById(eleId);
var kbplayer = document.getElementById("KBPlayer");
var str = post.getElementsByClassName("__video-id__")[0].getAttribute("data-id");
playlist.innerHTML = post.getElementsByClassName("__playlist__")[0].getAttribute("data-pl");
description.innerHTML = post.getElementsByClassName("__description__")[0].innerHTML;
kbplayer.parentElement.insertBefore(description, kbplayer.nextSibling);
var startIndex = str.indexOf('{');
var endIndex = str.indexOf('}');
var vidId = str.slice(startIndex+1,endIndex);
if(str.indexOf('googledrive') != -1)
var iframeSrc = 'https://docs.google.com/file/d/'+vidId+'/preview';
else if(str.indexOf('youtube') != -1)
var iframeSrc = '//www.youtube.com/embed/'+vidId;
else if(str.indexOf('facebookvid') != -1)
var iframeSrc = 'https://www.facebook.com/watch/?v='+vidId;
else if(str.indexOf('dailymotion') != -1)
var iframeSrc = '//www.dailymotion.com/embed/video/'+vidId+'?logo=0&info=0';
else if(str.indexOf('vimeo') != -1)
var iframeSrc = '//player.vimeo.com/video/'+vidId;
else if(str.indexOf('ok') != -1)
var iframeSrc = '//ok.ru/videoembed/'+vidId;
if(str.indexOf('facebookvid') != -1){
var postContent = '<p width="100%" id="fb-outer">';
postContent += '<div class="fb-video" data-width="auto" data-autoplay="false" data-allowfullscreen="true" data-href="'+iframeSrc+'"></div>';
postContent += '</p>';
}
else{
var postContent = '<div id="player-outer"><iframe id="player" src="'+iframeSrc+'" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen scrolling=NO ></iframe></div';
}
post.innerHTML = postContent;
var Player = post.getElementsByTagName('iframe');
if(str.indexOf('facebookvid') == -1){
var vidWidth = Player[0].clientWidth;
Player[0].height = vidWidth / 16 * 9;
}
str = playlist.innerHTML;
if(str.indexOf('pl') != -1){
var startIndex = str.indexOf('[');
var endIndex = str.indexOf(']');
this.pl = str.slice(startIndex+1,endIndex);
var relatedPostUrl = 'https://www.blogger.com/feeds/'+this.blogId+'/posts/default/-/'+this.pl+'?alt=json-in-script&callback=post.getPlaylist&max-results=150&start-index=1';
$.getScript(relatedPostUrl);
}
}
getPlaylist(json){
this.getPost(json);
var html = '';
var focusPart = '';
html = ('<div id="relatedPosts" >');
for(var i=0;i<this.postList.length; i++){
html += ('<div class="div-part" id="Part'+i+'" >');
html += ('<a class="thumb" href="/post/'+this.postId[i]+'/">');
html += ('<img src="'+this.postThumb[i]+'" />');
html += ('</a>');
html += ('<a class="vid-title" href="/post/'+this.postId[i]+'/">'+this.postTitle[i]+'</a>');
html += ('</div>');
if(this.postId[i] == POSTID){
focusPart = 'Part'+i;
}
}
html += ('</div>');
$('#KBPlayer').append(html);
$('#'+focusPart).css('background-color', '#282828');
$('#'+focusPart+' .vid-title').css('color', 'orange');
var container = $('#relatedPosts');
var element = $('#'+focusPart);
container.animate({
scrollTop: container.scrollTop = container.scrollTop() + element.offset().top - container.offset().top
}, {
duration: 1000,
specialEasing: {
width: 'linear',
height: 'easeOutBounce'
},
complete: function (e) {
//console.log("animation completed");
}
});
}
getPost(json){
this.postUrl = [];
this.postTitle = [];
this.postThumb = [];
this.postDate = [];
this.postContentSum = [];
this.postId = [];
this.postIframeSrc = [];
this.postData = [];
var postList = json.feed.entry;
this.totalPost = json.feed.openSearch$totalResults.$t;
this.postList = postList;
for(var i =0; i<postList.length; i++){
for (var j = 0; j < postList[i].link.length; j++) {
if (postList[i].link[j].rel == 'alternate') {
this.postUrl.push(postList[i].link[j].href);
break;
}
}
var postContent = postList[i].content.$t;
this.postData.push(postContent);
var index = (this.postList[i].id.$t).indexOf("post");
var postId = (this.postList[i].id.$t).slice(index+5);
this.postId.push(postId);
this.postContentSum.push(this.removeHtmlTag(postContent));
this.postTitle.push(postList[i].title.$t);
this.postThumb.push(this.createThumb(postContent));
this.postIframeSrc.push(this.iframeSrc);
this.postDate.push(postList[i].published.$t);
}
}
createThumb(postContent){
var div = document.createElement( 'div' );
div.innerHTML = postContent;
var img = div.getElementsByTagName("img");
if(img.length>=1) {
return img[0].src;
}
else{
return ("/static/images/no-image.png");
}
}
removeHtmlTag(strx){
var div = document.createElement( 'div' );
div.innerHTML = strx;
var tempDiv = div.getElementsByTagName("div");
for(var i=0; i<tempDiv.length; i++){
if(tempDiv[i].id=="__video-id__"){
tempDiv[i].innerHTML = "";
}
if(tempDiv[i].id=="__playlist__"){
tempDiv[i].innerHTML = "";
}
}
strx = div.innerHTML;
var chop = this.postSum;
if(strx.indexOf("<")!=-1){
var s = strx.split("<");
for(var i=0;i<s.length;i++){
if(s[i].indexOf(">")!=-1){
s[i] = s[i].substring(s[i].indexOf(">")+1,s[i].length);
}
}
strx = s.join("");
}
chop = (chop < strx.length-1) ? chop : strx.length-1;
while(strx.charAt(chop-1)!=' ' && strx.indexOf(' ',chop)!=-1)
chop++;
strx = strx.substring(0,chop-1);
return strx+'...';
}
}//end class
const post = new Post();
GitHub: "https://github.com/Sokhavuth/newspaper
Heroku: https://khmerweb-newspaper.herokuapp.com/

Comments
Post a Comment