{>header}
|
|
|
|
<script src="https://code.jquery.com/jquery-3.3.1.min.js"
|
|
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
|
|
crossorigin="anonymous">
|
|
</script>
|
|
|
|
<script>
|
|
|
|
var postsToLoad= [];
|
|
|
|
/**
|
|
* Runs a get request using ajax
|
|
*/
|
|
function runAjax(url, successCallBack, errorCallBack)
|
|
{
|
|
console.log(url);
|
|
$.ajax({
|
|
type:'GET',
|
|
url: url,
|
|
crossDomain: true,
|
|
dataType: "json",
|
|
success: successCallBack,
|
|
error:errorCallBack,
|
|
timeout: 3000
|
|
});
|
|
}
|
|
|
|
/** Lazy loads youtube videos on the page
|
|
*/
|
|
function lazyLoad()
|
|
{
|
|
var youtube = document.querySelectorAll( ".youtube" );
|
|
|
|
for (var i = 0; i < youtube.length; i++) {
|
|
|
|
var source = "https://img.youtube.com/vi/"+ youtube[i].dataset.embed +"/sddefault.jpg";
|
|
|
|
var image = new Image();
|
|
image.src = source;
|
|
image.addEventListener( "load", function() {
|
|
youtube[ i ].appendChild( image );
|
|
}( i ) );
|
|
|
|
youtube[i].addEventListener( "click", function() {
|
|
|
|
var iframe = document.createElement( "iframe" );
|
|
|
|
iframe.setAttribute( "frameborder", "0" );
|
|
iframe.setAttribute( "allowfullscreen", "" );
|
|
iframe.setAttribute( "src", "https://www.youtube.com/embed/"+ this.dataset.embed +"?rel=0&showinfo=0&autoplay=1" );
|
|
|
|
this.innerHTML = "";
|
|
this.appendChild( iframe );
|
|
} );
|
|
};
|
|
}
|
|
|
|
function buildPostHTML(post)
|
|
{
|
|
var pic = '';
|
|
if(post.hasPicture)
|
|
{
|
|
pic = '<img src="/content/headerImages/' + post.picture_url + '" style="width:100%;">';
|
|
}
|
|
return '<div class="blogPost">' + pic + '<div class="p-4"><b><h3>' + post.name + '</h3></b><h5>' + post.published + '</span></h5><div>' + post.blogBody + '<p class="text-center"><a class="btn btn-secondary btn-lg text-white" href="https://jrtechs.net/' + post.categoryURL + '/' + post.url + '"><b>Read More »</b></a></p></div></div></div><br><br>';
|
|
}
|
|
|
|
function addPosts(id)
|
|
{
|
|
return new Promise(function(resolve, reject)
|
|
{
|
|
runAjax("/api/preview/" + id,
|
|
(html)=>
|
|
{
|
|
var content = buildPostHTML(html)
|
|
|
|
$("#newPosts").append(content);
|
|
//lazy loads youtube videos
|
|
//lazyLoad();
|
|
|
|
//highlights code
|
|
Prism.highlightAll();
|
|
|
|
//renders latex math
|
|
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
|
|
resolve();
|
|
},
|
|
(err)=>
|
|
{
|
|
console.log(err);
|
|
reject();
|
|
});
|
|
})
|
|
}
|
|
|
|
async function loadMore()
|
|
{
|
|
for(var i = 0; i < 3; i++)
|
|
{
|
|
if(postsToLoad.length == 0)
|
|
{
|
|
$('#morePostsBtn').html('');
|
|
break;
|
|
}
|
|
|
|
await addPosts(postsToLoad.shift());
|
|
}
|
|
lazyLoad();
|
|
}
|
|
|
|
$(document).ready(function()
|
|
{
|
|
runAjax("/api/getPostsIds/{categoryID}",
|
|
(idsList)=>
|
|
{
|
|
postsToLoad=idsList;
|
|
},
|
|
(err)=>
|
|
{
|
|
console.log(err);
|
|
reject();
|
|
});
|
|
});
|
|
|
|
|
|
</script>
|
|
|
|
<br><br><br><br><br>
|
|
<div class="container">
|
|
|
|
<div class="row">
|
|
<div class="col-md-8 col-12">
|
|
{for post in posts}
|
|
<div class="blogPost">
|
|
{if post.hasPicture}
|
|
<img src="/content/headerImages/{post.picture_url}" style="width:100%;">
|
|
{/if}
|
|
|
|
<div class="p-4">
|
|
<h3><b>{post.name}</b></h3>
|
|
<h5>
|
|
<span class="w3-opacity">{post.published}</span>
|
|
</h5>
|
|
|
|
{post.blogBody}
|
|
|
|
{if preview}
|
|
<p class="text-center">
|
|
<a class="btn btn-secondary btn-lg text-white"
|
|
href="https://jrtechs.net/{post.categoryURL}/{post.url}"><b>Read More »</b></a>
|
|
</p>
|
|
{/if}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
<br>
|
|
<br>
|
|
{else}
|
|
<div class="row p-lg-0">
|
|
<h1 class="align-content-center">Page Not Found</h1>
|
|
<div class="align-content-center">
|
|
<img src="/includes/img/404.jpg" alt="Page not found" width="70%" />
|
|
</div>
|
|
</div>
|
|
<br><br>
|
|
{/for}
|
|
|
|
<div id="newPosts"></div>
|
|
|
|
{if preview}
|
|
<div class="justify-content-center w-100 blogPost" id="morePostsBtn">
|
|
<a class="btn btn-secondary btn-lg btn-block text-white w-100 text-center" id="readMore"
|
|
onclick="loadMore()"><b>More Posts »</b></a>
|
|
|
|
|
|
</div>
|
|
{/if}
|
|
<br>
|
|
</div>
|
|
<div class="col-md-4 col-12">
|
|
{>sideBar}
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
{footer}
|