Adding Posts To Frontpage

#controllers/index.py
import config, copy, json
from flask import render_template, redirect, session, request
from flask_classful import FlaskView, route
from controllers.post import Post

class Index(FlaskView):
    def __init__(self):
        self.post = Post()

    @route('/')
    def index(self):
        session['page'] = 0
        vdict = self.post.get_post()
        return render_template('index.html', data=vdict)

    @route('/panel')
    def get_post(self):
        nav = request.args.get('nav', 0, type=str)

        if nav == 'previous':
            session['page'] += 1
        elif nav == 'next':
            if session['page'] > 0:
                session['page'] -= 1
        else:
            session['page'] = 0

        vdict = self.post.get_post(session['page'])
        
        if not vdict['posts']:
            session['page'] -= 1

        return json.dumps(vdict)

    @route('/favicon.ico')
    def favicon():
        redirect('/static/images/site_logo.png')
#controllers/post.py
import config, copy
from flask import render_template, redirect
from lib import Lib
from models.dashboard.postdb import Postdb

class Post():
  def __init__(self):
    self.postdb = Postdb()
    self.lib = Lib()

  def get_post(self, page=0):
    vdict = copy.deepcopy(config.vdict)
    vdict['posts'] = self.postdb.select(5, page=page)
    vdict['thumbs'] = self.lib.get_thumbs(vdict['posts'], 3)
    vdict['videos'] = self.lib.get_video_data(vdict['posts'], 7)

    new_post_list = []
    for post in vdict['posts']:
      new_post = list(post)
      new_post[4] = post[4].strftime('%d/%m/%Y') 
      new_post[5] = post[5].strftime('%H:%M:%S') 
      new_post_list.append(new_post)

    vdict['posts'] = new_post_list

    return vdict
//static/scripts/index.js
class Index{
  navigate(nav){
    $('#front-nav .home').attr('src', '/static/images/loading.gif')
    $.get("/panel",
    {nav:nav},
    function(data, status){
      if(status == "success"){
        var html = '';
        var data = JSON.parse(data);
        
        if((data.posts).length !== 0){
          for(var v in data.posts){
            if(v == 0){
              html += '<div class="wrapper1">';
              html += '<div  style="position:relative;padding-top:57.30%;">';
            }else{
              html += '<div class="wrapper">';
              html += '<div  style="position:relative;padding-top:56.25%;">';
            }

            html += `<a href="/post/${ data['posts'][v][0] }"><img src="${ data['thumbs'][v] }" style="position:absolute;top:0;left:0;width:100%;min-height:100%;" /></a>`;
            html += `<a href="/post/${ data['posts'][v][0] }"><p class="title" >${ data['posts'][v][1] }</p></a>`;

            if (data['videos'][v].length){
              html += '<img class="play-icon" src="/static/images/play.png" />';
            }

            html += `<p class="date-news" >${(data['posts'][v][4]) }</p>`;
            html += '</div>';
            html += '</div>';
          }

          $('#front-panel').html(html);
        }

        $('#front-nav .home').attr('src', '/static/images/home.png')
        
      }else
        alert('Fail to connect to server.');
    });
  }
}//End of class

const index = new Index();

GitHub: "https://github.com/Sokhavuth/E-Learning
Heroku: https://khmerweb-elearning.herokuapp.com/

Comments

Popular posts from this blog

Boilerplate Code

Adding Frontend Single Movie Template