Backend Vlog Functionality
#main.py import config from flask import Flask from controllers.index import Index from controllers.login import Login from controllers.dashboard.dashboard import Dashboard app = Flask(__name__) app.secret_key = config.vdict['secret_key'] Index.register(app, route_base='/') Login.register(app, route_base='/login') Dashboard.register(app, route_base='/dashboard') if __name__ == '__main__': app.run(debug=True)
//static/scripts/dashboard.js
class Lib{
load_items(url){
$('#load-more img').attr('src', '/static/images/loading.gif');
$.get(url, function(data, status){
if(status == "success"){
listing_items(data);
}else{
alert('Fail to connect to server.');
}
});
}
getVideoForm(event){
event.preventDefault();
var json = {};
var vidType = $("input:radio[name=vid-type]:checked").val();
var videoId = $("input:text[name=video-id]").val();
if($('#playlist').is(":checked")){
var playlist = $("input:text[name=vid-title]").val();
}
json.vidType = vidType;
json.videoId = videoId;
json.playlist = playlist;
const viewFragment = myEditor.data.processor.toView( ''+JSON.stringify(json)+'' );
const modelFragment = myEditor.data.toModel( viewFragment );
myEditor.model.insertContent( modelFragment, myEditor.model.document.selection );
}
enable(){
if($('#playlist').is(":checked")){
$("input:text[name=vid-title]").attr('disabled', false);
}else{
$("input:text[name=vid-title]").attr('disabled', true);
}
}
}//End class
const lib = new Lib();
<!--templates/dashboard/dashboard.html-->
<!DOCTYPE html>
<html>
<head>
{% block head %}
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta name="description" content="This blog engine is built for e-learning">
<meta name="robots" content="index, follow">
<meta name='keywords' content='e-learning, learning, school, math, programming'>
<title>{{data['blog_title']}}</title>
<script src="/static/scripts/jQuery.js"></script>
<script src="/static/scripts/ckeditor/ckeditor.js"></script>
<script src='/static/scripts/base.js'></script>
<script src='/static/scripts/dashboard.js'></script>
<link href="/static/styles/base.css" rel="stylesheet" >
<link href="/static/styles/dashboard.css" rel="stylesheet">
<link href="/static/fonts/setup.css" rel='stylesheet'>
<link href="/static/images/site_logo.png" rel="shortcut icon">
{% endblock %}
</head>
<body>
<div id="header">
{% block header %}
<header id="inner" class="inner region">
<div id="title">
<a href="/"><img src="/static/images/site_logo.png" /></a>
<a >{{data['blog_title']}}</a>
</div>
<div id="blog-search">
<form class="search" action="/search/backend/" method="post">
<input type="text" placeholder="Search.." name="fquery" required>
<button type="submit">ស្វែងរក</button>
</form>
</div>
<div id="logout"><a href="/login/logout/">ចេញក្រៅ</a></div>
</header>
{% endblock %}
</div>
<div id="main" class="main region">
{% block main %}
<div id="sidebar">
{% block sidebar %}
<div><a href="/dashboard/"><img src="/static/images/posting.png" /></a><a href="/dashboard/">ចុះផ្សាយមេរៀន</a></div>
<div><a href="/category/"><img src="/static/images/categorizing.png" /></a><a href="/dashboard/category/">បង្កើតប្រភេទមេរៀន</a></div>
<div><a href="/paging"><img src="/static/images/paging.png" /></a><a href="/paging">បង្កើតទំព័រមាតិកា</a></div>
<div><a href="/uploading"><img src="/static/images/multimedia.png" /></a><a href="/uploading">ចំលងឯកសារ</a></div>
<div><a href="/addinguser"><img src="/static/images/user.png" /></a><a href="/addinguser">បន្ថែមសមាជិក</a></div>
<div><a href="/setting"><img src="/static/images/setting.png" /></a><a href="/setting">កំណត់ទំរង់លក្ខណៈ</a></div>
{% endblock %}
</div>
<div id="content">
{% block content %}
<form id='post' action='/dashboard/' method="POST" >
{% if 'post' in data %}
<input id='post-title' value="{{ data['post'][1] }}" name="fpost-title" type="text" placeholder="ប្រភេទមេរៀន" required />
<textarea name="fcontent" id="editor" >{{ data['post'][3] }}</textarea>
{% else: %}
<input id='post-title' value="" name="fpost-title" type="text" placeholder="ប្រភេទមេរៀន" required />
<textarea name="fcontent" id="editor" ></textarea>
{% endif %}
<div id="bottombar">
<input id="submit" class="bottom-widget" type="submit" value="ចុះផ្សាយ">
<select id='category' name="fcategory">
{% if 'categories' in data %}
{% for category in data['categories'] %}
<option>{{ category[1] }}</option>
{% endfor %}
{% endif %}
</select>
<input id="post-date" value="{{ data['datetime'][0] }}" class="post-time" type="text" name="fpost-date" required />
<input id="post-time" value="{{ data['datetime'][1] }}" class="post-time" type="text" name="fpost-time" required />
<input disabled type='text' value="{{ session['logged-in'] }}" id="post-author" class="post-time" name="fpost-author" required />
</div>
</form>
<div id="message">{{ data['message'] }}</div>
<script src="/static/scripts/ckeditor/config.js"></script>
<form id="video" onsubmit="return lib.getVideoForm(event);">
<section class="left-part">
<input type="radio" name="vid-type" value="youtube" checked> <span>YouTube</span>
<input type="radio" name="vid-type" value="fbvid"> <span>Facebook</span>
<input type="radio" name="vid-type" value="googledrive"> <span>Goolge Drive</span>
<input type="radio" name="vid-type" value="dailymotion"> <span>Dailymotion</span>
<input type="radio" name="vid-type" value="vimeo"> <span>Vimeo</span>
<input type="radio" name="vid-type" value="okvid"> <span>OK</span>
</section>
<section class="right-part">
<span>Video ID: </span><input type="text" name="video-id" required>
<span>Playlist: <input type="checkbox" id="playlist" name="fplaylist" onclick="lib.enable()"></span>
<input disabled type="text" name="vid-title" >
<span></span><input type="submit" value="បន្ថែមវីដេអូ" />
</section>
</form>
{% endblock %}
</div>
{% endblock %}
</div>
{% block item_listing %}
<ul id="item-listing" class="item-listing region">
{% for v in range(data['posts']|length) %}
<li class="post">
<a class="thumbnail" href="/post/{{ data['posts'][v][0] }}"><img src="{{data['thumbs'][v]}}" /></a>
<div class='title'>
<a href="/post/{{ data['posts'][v][0] }}">{{ data['posts'][v][1] }}</a>
<a href="/category/{{ data['posts'][v][2] }}" class="category">{{ data['posts'][v][2] }}</a>
<span>{{ data['posts'][v][4].strftime('%d/%m/%Y') }}</span>
</div>
<div class="crud">
<a class="user">{{ data['posts'][v][6] }}</a>
<a href='/dashboard/post/delete/{{ data["posts"][v][0] }}'><img src="/static/images/delete.png" /></a>
<a href='/dashboard/post/edit/{{ data["posts"][v][0] }}'><img src="/static/images/edit.png" /></a>
</div>
</li>
{% endfor %}
</ul>
<div id="load-more" class="load-more region">
<img onclick="lib.load_items('/dashboard/post/load/')" src="/static/images/load-more.png" />
<script>
function listing_items(data){
var html = '';
for(var v=0; v<data['categories'].length; v++){
html += '<li class="category">';
html += `<a class="thumbnail" href="/category/${ data['categories'][v][1] }"><img src="${data['thumbs'][v]}" /></a>`;
html += `<div class='title'>`;
html += `<a href="/category/${ data['categories'][v][1] }">${ data['categories'][v][1] }</a>`;
html += `<span>${ data['categories'][v][3] }</span>`;
html += `</div>`;
html += `<div class="crud">`;
html += `<a class="user">${ data['categories'][v][5] }</a>`;
html += `<a href='/dashboard/category/delete/${ data["categories"][v][1] }'><img src="/static/images/delete.png" /></a>`;
html += `<a href='/dashboard/category/edit/${ data["categories"][v][1] }'><img src="/static/images/edit.png" /></a>`;
html += `</div>`;
html += `</li>`;
}
$('#item-listing').append(html);
$('#load-more img').attr('src', '/static/images/load-more.png')
}
</script>
</div>
<script>
$(document).ready(function(){
var width = $('.post .thumbnail').css('width');
var height = parseInt(width)*9/16;
$('.post .thumbail').css('height', height);
});
</script>
{% endblock %}
<div id="footer" class="footer region">
{% block footer %}
© Copyright 2020 by <a href="https://www.khmerweb.app/">Khmer Web</a>.
<script>var base = new Base();</script>
{% endblock %}
</div>
</body>
</html>
GitHub: "https://github.com/Sokhavuth/E-Learning
Heroku: https://khmerweb-elearning.herokuapp.com/

Comments
Post a Comment