mirror of
https://github.com/KevinMidboe/zoff.git
synced 2025-10-29 18:00:23 +00:00
More instant frontpage-loading, and sorting frontpages on the backend for consistency
This commit is contained in:
@@ -19,6 +19,68 @@ function frontpage_lists(msg, socket) {
|
||||
});
|
||||
}
|
||||
|
||||
function get_frontpage_lists(callback) {
|
||||
var project_object = {
|
||||
"_id": 1,
|
||||
"count": 1,
|
||||
"frontpage": 1,
|
||||
"id": 1,
|
||||
"title": 1,
|
||||
"viewers": 1,
|
||||
"pinned": 1,
|
||||
"description": {
|
||||
$ifNull: [ {$cond: {
|
||||
"if": {
|
||||
"$or": [
|
||||
{ "$eq": [ "$description", ""] },
|
||||
{ "$eq": [ "$description", null] },
|
||||
{ "$eq": [ "$description", undefined] }
|
||||
]
|
||||
},
|
||||
then: "This list has no description",
|
||||
else: "$description"
|
||||
}}, "This list has no description"]
|
||||
|
||||
},
|
||||
"thumbnail": {
|
||||
$ifNull: [ {$cond: {
|
||||
"if": {
|
||||
"$or": [
|
||||
{ "$eq": [ "$thumbnail", ""] },
|
||||
{ "$eq": [ "$thumbnail", null] },
|
||||
{ "$eq": [ "$thumbnail", undefined] }
|
||||
]
|
||||
},
|
||||
then: {
|
||||
$concat : [ "https://img.youtube.com/vi/", "$id", "/mqdefault.jpg"]
|
||||
},
|
||||
else: "$thumbnail"
|
||||
}}, { $concat : [ "https://img.youtube.com/vi/", "$id", "/mqdefault.jpg"]}]
|
||||
|
||||
}
|
||||
};
|
||||
db.collection("frontpage_lists").aggregate([
|
||||
{
|
||||
"$match": {
|
||||
frontpage: true,
|
||||
count: {$gt: 0},
|
||||
}
|
||||
},
|
||||
{
|
||||
"$project": project_object
|
||||
},
|
||||
{
|
||||
"$sort" : {
|
||||
"pinned": -1,
|
||||
"viewers": -1,
|
||||
"count": -1,
|
||||
"accessed": -1,
|
||||
"title": 1
|
||||
}
|
||||
},
|
||||
], callback);
|
||||
}
|
||||
|
||||
function update_frontpage(coll, id, title, thumbnail, source, callback) {
|
||||
//coll = coll.replace(/ /g,'');
|
||||
db.collection("frontpage_lists").find({_id: coll}, function(e, doc) {
|
||||
@@ -38,5 +100,6 @@ if(doc.length > 0 && ((doc[0].thumbnail != "" && doc[0].thumbnail != undefined &
|
||||
});
|
||||
}
|
||||
|
||||
module.exports.get_frontpage_lists = get_frontpage_lists;
|
||||
module.exports.frontpage_lists = frontpage_lists;
|
||||
module.exports.update_frontpage = update_frontpage;
|
||||
|
||||
@@ -899,6 +899,19 @@ nav .zbrand{
|
||||
height: 120px;
|
||||
}
|
||||
|
||||
.no-jump-select {
|
||||
height: calc(3rem + 1px) !important;
|
||||
margin: 0 0 8px 0;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
border-bottom: 1px solid #9e9e9e;
|
||||
align-items: center;
|
||||
font-size: 16px;
|
||||
|
||||
line-height: 3rem;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.description_text {
|
||||
color: #2d2d2d;
|
||||
text-align: left;
|
||||
|
||||
@@ -677,6 +677,12 @@ var Channel = {
|
||||
|
||||
var response = document.createElement("div");
|
||||
response.innerHTML = e;
|
||||
|
||||
var newList = response.querySelector("#lists-script").innerHTML;
|
||||
newList = newList.trim().replace("window.lists = ", "");
|
||||
newList = newList.substring(0, newList.length);
|
||||
window.lists = JSON.parse(newList);
|
||||
response.querySelector("#lists-script").remove();
|
||||
Helper.removeElement("#sidenav-overlay");
|
||||
document.getElementsByTagName("main")[0].className = "center-align container";
|
||||
Helper.removeClass("#main-container", "channelpage");
|
||||
|
||||
@@ -20,16 +20,16 @@ var Frontpage = {
|
||||
"Frontpage fetch",
|
||||
msg
|
||||
]);
|
||||
Frontpage.all_channels = lists;
|
||||
var msg = lists;
|
||||
delete lists;
|
||||
lists = undefined;
|
||||
document.querySelector("#lists-script").remove();
|
||||
|
||||
Frontpage.all_channels = window.lists;
|
||||
var msg = window.lists;
|
||||
delete window.lists;
|
||||
window.lists = undefined;
|
||||
//document.querySelector("#lists-script").remove();
|
||||
if(msg.length == 0) {
|
||||
Helper.css("#preloader", "display", "none");
|
||||
document.getElementById("channel-list-container").insertAdjacentHTML("beforeend", "<p>No channels yet</p>");
|
||||
} else {
|
||||
console.log(msg);
|
||||
Frontpage.populate_channels(msg, true, false);
|
||||
}
|
||||
//Frontpage.set_viewers(msg.viewers);
|
||||
@@ -79,7 +79,6 @@ var Frontpage = {
|
||||
]);
|
||||
|
||||
for(var x in lists) {
|
||||
//console.log(lists[x]._id);
|
||||
var chan = Helper.decodeChannelName(lists[x]._id);
|
||||
if(num<12 || !popular) {
|
||||
var id = lists[x].id;
|
||||
@@ -160,7 +159,7 @@ var Frontpage = {
|
||||
document.getElementById("channels").style.display = "block";
|
||||
//Materialize.fadeInImage('#channels');
|
||||
//$("#channels").fadeIn(800);
|
||||
document.getElementById("autocomplete-input").focus();
|
||||
//document.getElementById("autocomplete-input").focus();
|
||||
num = 0;
|
||||
},
|
||||
|
||||
@@ -264,7 +263,7 @@ var Frontpage = {
|
||||
if(Frontpage.times_rotated == 50 && frontpage){
|
||||
Frontpage.times_rotated = 0;
|
||||
i = 0;
|
||||
Frontpage.get_frontpage_lists();
|
||||
//Frontpage.get_frontpage_lists();
|
||||
}else if(frontpage){
|
||||
Frontpage.times_rotated += 1;
|
||||
Frontpage.add_backdrop(list, i+1);
|
||||
@@ -440,12 +439,11 @@ var Frontpage = {
|
||||
}
|
||||
|
||||
channel_list = document.querySelector(".hidden-channel-list").cloneNode(true).innerHTML;
|
||||
console.log(channel_list);
|
||||
try {
|
||||
document.querySelector(".hidden-channel-list").remove();
|
||||
}catch(e){}
|
||||
|
||||
if(window.location.hostname != "fb.zoff.me") Frontpage.share_link_modifier();
|
||||
Frontpage.share_link_modifier();
|
||||
|
||||
if(window.location.hostname == "zoff.me" || window.location.hostname == "fb.zoff.me") add = "https://zoff.me";
|
||||
else add = window.location.hostname;
|
||||
@@ -464,10 +462,11 @@ var Frontpage = {
|
||||
setup_playlist_listener();
|
||||
}
|
||||
|
||||
M.Modal.init(document.getElementById("about"));
|
||||
/*M.Modal.init(document.getElementById("about"));
|
||||
M.Modal.init(document.getElementById("help"));
|
||||
M.Modal.init(document.getElementById("contact"));
|
||||
M.Modal.init(document.getElementById("contact"));*/
|
||||
var elem = document.querySelector('select');
|
||||
document.querySelector(".no-jump-select").remove();
|
||||
M.FormSelect.init(elem);
|
||||
|
||||
Helper.log([
|
||||
@@ -516,7 +515,7 @@ var Frontpage = {
|
||||
|
||||
if(!localStorage.ok_cookie){
|
||||
before_toast();
|
||||
M.toast({html: "We're using cookies to enhance your experience! <a class='waves-effect waves-light btn light-green' href='#' id='cookieok' style='cursor:pointer;pointer-events:all;margin-left:10px;'> ok</a>", displayLength: 10000});
|
||||
//M.toast({html: "We're using cookies to enhance your experience! <a class='waves-effect waves-light btn light-green' href='#' id='cookieok' style='cursor:pointer;pointer-events:all;margin-left:10px;'> ok</a>", displayLength: 10000});
|
||||
}
|
||||
|
||||
//var pad = 0;
|
||||
|
||||
@@ -941,11 +941,11 @@ addListener("click", ".first_page", function(event){
|
||||
|
||||
addListener("click", ".donate-button", function(event) {
|
||||
this.preventDefault();
|
||||
M.Modal.init(document.getElementById("donate"));
|
||||
ga('send', 'event', "button-click", "donate");
|
||||
M.Modal.getInstance(document.getElementById("donate")).open();
|
||||
});
|
||||
|
||||
|
||||
addListener("click", '#toast-container', function(){
|
||||
before_toast();
|
||||
});
|
||||
@@ -1223,14 +1223,32 @@ addListener("click", "#twitter-code-link", function() {
|
||||
});
|
||||
|
||||
addListener("click", ".help-button-footer", function() {
|
||||
this.preventDefault();
|
||||
M.Modal.init(document.getElementById("help"));
|
||||
ga('send', 'event', "button-click", "help-footer");
|
||||
M.Modal.getInstance(document.getElementById("help")).open();
|
||||
});
|
||||
|
||||
addListener("click", "#embed-button", function() {
|
||||
this.preventDefault();
|
||||
M.Modal.init(document.getElementById("embed"));
|
||||
ga('send', 'event', "button-click", "embed-channel", "channel-name", chan.toLowerCase());
|
||||
})
|
||||
M.Modal.getInstance(document.getElementById("embed")).open();
|
||||
});
|
||||
|
||||
addListener("click", "#contact-button", function() {
|
||||
this.preventDefault();
|
||||
M.Modal.init(document.getElementById("contact"));
|
||||
ga('send', 'event', "button-click", "contact-footer");
|
||||
M.Modal.getInstance(document.getElementById("contact")).open();
|
||||
});
|
||||
|
||||
addListener("click", ".about-button", function() {
|
||||
this.preventDefault();
|
||||
M.Modal.init(document.getElementById("about"));
|
||||
ga('send', 'event', "button-click", "contact-footer");
|
||||
M.Modal.getInstance(document.getElementById("about")).open();
|
||||
});
|
||||
|
||||
addListener("click", ".playlist-link", function(event){
|
||||
chat_active = false;
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
<div class="col s12">
|
||||
<div class="row">
|
||||
<div class="input-field col s12">
|
||||
<div class="no-jump-select">
|
||||
Most Popular
|
||||
<svg class="caret" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M7 10l5 5 5-5z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg>
|
||||
</div>
|
||||
<select id="view_channels_select">
|
||||
<option value="" disabled>Channels to show</option>
|
||||
<option value="1" selected>Most Popular</option>
|
||||
@@ -18,9 +22,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div id="preloader" class="progress frontpage-preloader orange lighten-3">
|
||||
<div class="indeterminate"></div>
|
||||
</div>-->
|
||||
{{> frontpage/channels}}
|
||||
</div>
|
||||
</main>
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
<a class="chan-link" href="{{_id}}/">
|
||||
<div class="chan-bg card-image cardbg" style="background-image:url({{thumbnail}});"></div>
|
||||
<div class="card-content">
|
||||
{{#if pinned}}
|
||||
<i class="material-icons pin">star_rate</i>
|
||||
{{/if}}
|
||||
|
||||
<i class="material-icons pin" style="{{#if pinned}}display:block;{{/if}}{{#unless pinned}}display:none;{{/unless}}">star_rate</i>
|
||||
|
||||
<p class="left-align">
|
||||
<span class="chan-name flow-text truncate">{{_id}}</span>
|
||||
<br>
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
<div id="channel-list-container">
|
||||
<ul class="row" id="channels">
|
||||
{{#each channels}}
|
||||
{{#if frontpage}}
|
||||
{{> frontpage/channel}}
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
{{#if channels_exist}}
|
||||
{{#each channels}}
|
||||
{{#if frontpage}}
|
||||
{{> frontpage/channel}}
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
{{/if}}
|
||||
{{#unless channels_exist}}
|
||||
No channels yet
|
||||
{{/unless}}
|
||||
</ul>
|
||||
<div class="hidden-channel-list hide">
|
||||
<ul class="row" id="channels">
|
||||
@@ -12,6 +17,6 @@
|
||||
</ul>
|
||||
</div>
|
||||
<script id="lists-script">
|
||||
var lists = {{{channel_list}}}
|
||||
window.lists = {{{channel_list}}}
|
||||
</script>
|
||||
</div>
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
{{/if}}
|
||||
<li class="hide-on-small-only"><a class="header-buttons waves-effect waves-cyan" id="offline-mode" title="Local mode" href="#">Local</a></li>
|
||||
<li class="hide-on-small-only"><a class="header-buttons waves-effect waves-green" title="Remote control a Zoff player" href="https://remote.zoff.me">Remote</a></li>
|
||||
<li class="hide-on-small-only"><a class="header-buttons modal-trigger waves-effect waves-orange" data-target="about">About</a></li>
|
||||
<li class="hide-on-small-only"><a class="header-buttons modal-trigger waves-effect waves-orange about-button" data-target="about">About</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
@@ -117,7 +117,8 @@ router.route('/api/frontpages').get(function(req, res) {
|
||||
res.header("Access-Control-Allow-Origin", "*");
|
||||
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
|
||||
res.header({"Content-Type": "application/json"});
|
||||
db.collection("frontpage_lists").find({frontpage: true, count: {$gt: 0}}, function(err, docs) {
|
||||
Frontpage.get_frontpage_lists(function(err, docs) {
|
||||
//db.collection("frontpage_lists").find({frontpage: true, count: {$gt: 0}}, function(err, docs) {
|
||||
db.collection("connected_users").find({"_id": "total_users"}, function(err, tot) {
|
||||
var to_return = error.no_error;
|
||||
to_return.results = {channels: docs, viewers: tot[0].total_users.length};
|
||||
|
||||
@@ -7,6 +7,7 @@ var analytics = "xx";
|
||||
var mongojs = require('mongojs');
|
||||
var token_db = mongojs("tokens");
|
||||
var Functions = require(pathThumbnails + '/handlers/functions.js');
|
||||
var Frontpage = require(pathThumbnails + '/handlers/frontpage.js');
|
||||
|
||||
var db = require(pathThumbnails + '/handlers/db.js');
|
||||
//var db = require(pathThumbnails + '/handlers/db.js');
|
||||
@@ -149,67 +150,17 @@ function root(req, res, next) {
|
||||
if(subdomain[0] == "client") {
|
||||
data.client = true;
|
||||
}
|
||||
var project_object = {
|
||||
"_id": 1,
|
||||
"count": 1,
|
||||
"frontpage": 1,
|
||||
"id": 1,
|
||||
"title": 1,
|
||||
"viewers": 1,
|
||||
"pinned": 1,
|
||||
"description": {
|
||||
$ifNull: [ {$cond: {
|
||||
"if": {
|
||||
"$or": [
|
||||
{ "$eq": [ "$description", ""] },
|
||||
{ "$eq": [ "$description", null] },
|
||||
{ "$eq": [ "$description", undefined] }
|
||||
]
|
||||
},
|
||||
then: "This list has no description",
|
||||
else: "$description"
|
||||
}}, "This list has no description"]
|
||||
|
||||
},
|
||||
"thumbnail": {
|
||||
$ifNull: [ {$cond: {
|
||||
"if": {
|
||||
"$or": [
|
||||
{ "$eq": [ "$thumbnail", ""] },
|
||||
{ "$eq": [ "$thumbnail", null] },
|
||||
{ "$eq": [ "$thumbnail", undefined] }
|
||||
]
|
||||
},
|
||||
then: {
|
||||
$concat : [ "https://img.youtube.com/vi/", "$id", "/mqdefault.jpg"]
|
||||
},
|
||||
else: "$thumbnail"
|
||||
}}, { $concat : [ "https://img.youtube.com/vi/", "$id", "/mqdefault.jpg"]}]
|
||||
|
||||
}
|
||||
};
|
||||
db.collection("frontpage_lists").aggregate([
|
||||
{
|
||||
"$match": {
|
||||
frontpage: true,
|
||||
count: {$gt: 0},
|
||||
}
|
||||
},
|
||||
{
|
||||
"$project": project_object
|
||||
},
|
||||
{
|
||||
"$sort" : {
|
||||
"pinned": -1,
|
||||
"count": -1,
|
||||
"accessed": -1,
|
||||
"title": 1
|
||||
}
|
||||
},
|
||||
], function(err, docs) {
|
||||
Frontpage.get_frontpage_lists(function(err, docs){
|
||||
db.collection("connected_users").find({"_id": "total_users"}, function(err, tot) {
|
||||
data.channels = docs.slice(0, 12);
|
||||
data.channel_list = JSON.stringify(docs);
|
||||
if(docs.length > 0) {
|
||||
data.channels_exist = true;
|
||||
data.channels = docs.slice(0, 12);
|
||||
data.channel_list = JSON.stringify(docs);
|
||||
} else {
|
||||
data.channels_exist = false;
|
||||
data.channels = [];
|
||||
data.channel_list = [];
|
||||
}
|
||||
data.viewers = tot[0].total_users.length;
|
||||
res.render('layouts/client/frontpage', data);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user