mirror of
https://github.com/KevinMidboe/zoff.git
synced 2025-10-29 18:00:23 +00:00
Add advanced title filter
- Timeout filter-requests based on computer instead of api
This commit is contained in:
@@ -390,6 +390,10 @@ li.disabled span {
|
|||||||
margin: auto;
|
margin: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.category-advanced {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
.bottom-filter-container {
|
.bottom-filter-container {
|
||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,6 +153,8 @@ var Channel = {
|
|||||||
document.getElementById("filtersearch_input").focus();
|
document.getElementById("filtersearch_input").focus();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
M.FormSelect.init(document.querySelector('.category-advanced-select'));
|
||||||
M.Modal.init(document.getElementById("help"));
|
M.Modal.init(document.getElementById("help"));
|
||||||
M.Modal.init(document.getElementById("contact"));
|
M.Modal.init(document.getElementById("contact"));
|
||||||
M.Modal.init(document.getElementById("channel-share-modal"));
|
M.Modal.init(document.getElementById("channel-share-modal"));
|
||||||
|
|||||||
@@ -23,6 +23,11 @@ function removeAllListeners() {
|
|||||||
|
|
||||||
function filterPlaylistElements(page) {
|
function filterPlaylistElements(page) {
|
||||||
var value = document.getElementById("filtersearch_input").value;
|
var value = document.getElementById("filtersearch_input").value;
|
||||||
|
var search_type = document.querySelector(".category-advanced-select").value;
|
||||||
|
if(search_type != "category" && search_type != "title") {
|
||||||
|
document.querySelector(".filter-results").innerHTML = "Something went wrong with fetching data..";
|
||||||
|
return;
|
||||||
|
}
|
||||||
if(value == "") return;
|
if(value == "") return;
|
||||||
Helper.ajax({
|
Helper.ajax({
|
||||||
type: "POST",
|
type: "POST",
|
||||||
@@ -32,8 +37,8 @@ function filterPlaylistElements(page) {
|
|||||||
url: "/api/search/" + chan.toLowerCase(),
|
url: "/api/search/" + chan.toLowerCase(),
|
||||||
data: {
|
data: {
|
||||||
searchQuery: value,
|
searchQuery: value,
|
||||||
token: zoff_api_token,
|
page: page,
|
||||||
page: page
|
type: search_type
|
||||||
},
|
},
|
||||||
success: function(data){
|
success: function(data){
|
||||||
var json = JSON.parse(data);
|
var json = JSON.parse(data);
|
||||||
@@ -49,10 +54,14 @@ function filterPlaylistElements(page) {
|
|||||||
document.querySelector(".filter-results").innerHTML = "Couldn't find any items with those tags..";
|
document.querySelector(".filter-results").innerHTML = "Couldn't find any items with those tags..";
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
error: function() {
|
error: function(e) {
|
||||||
toast("Couldn't find any items with those tags..", "red");
|
if(e.status != 429) {
|
||||||
|
toast("Couldn't find any items with those tags..", "red");
|
||||||
|
|
||||||
document.querySelector(".filter-results").innerHTML = "Couldn't find any items with those tags..";
|
document.querySelector(".filter-results").innerHTML = "Couldn't find any items with those tags..";
|
||||||
|
} else {
|
||||||
|
toast("You are doing that too much..", "red");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,43 +1,43 @@
|
|||||||
{{#unless client}}
|
{{#unless client}}
|
||||||
<div id="embed" class="modal">
|
<div id="embed" class="modal">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<h4>Embed</h4>
|
<h4>Embed</h4>
|
||||||
<p>Copy the code in the textarea, and paste on your website.</p>
|
<p>Copy the code in the textarea, and paste on your website.</p>
|
||||||
<p>
|
<p>
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" id="autoplay" checked="checked" />
|
<input type="checkbox" id="autoplay" checked="checked" />
|
||||||
<span for="autoplay" class="padding_right_26">Autoplay</span>
|
<span for="autoplay" class="padding_right_26">Autoplay</span>
|
||||||
</label>
|
</label>
|
||||||
<label for="width_embed" class="embed-label">Width</label>
|
<label for="width_embed" class="embed-label">Width</label>
|
||||||
<input type="number" value="600" id="width_embed" class="settings_embed" min="1" />
|
<input type="number" value="600" id="width_embed" class="settings_embed" min="1" />
|
||||||
<label for="height_embed" class="padding_left_6 embed-label">Height</label>
|
<label for="height_embed" class="padding_left_6 embed-label">Height</label>
|
||||||
<input type="number" value="400" id="height_embed" class="settings_embed" min="1" />
|
<input type="number" value="400" id="height_embed" class="settings_embed" min="1" />
|
||||||
<label for="color_embed" class="padding_left_6 embed-label">Color</label>
|
<label for="color_embed" class="padding_left_6 embed-label">Color</label>
|
||||||
<input type="color" id="color_embed" class="settings_embed" value="#2d2d2d" />
|
<input type="color" id="color_embed" class="settings_embed" value="#2d2d2d" />
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" id="videoonly" class="checkbox" />
|
<input type="checkbox" id="videoonly" class="checkbox" />
|
||||||
<span for="videoonly" class="padding_right_26">Video-only</span>
|
<span for="videoonly" class="padding_right_26">Video-only</span>
|
||||||
</label>
|
</label>
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" id="localmode" class="checkbox" />
|
<input type="checkbox" id="localmode" class="checkbox" />
|
||||||
<span for="localmode" class="padding_right_26">Local-mode</span>
|
<span for="localmode" class="padding_right_26">Local-mode</span>
|
||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
<textarea id="embed-area"></textarea>
|
<textarea id="embed-area"></textarea>
|
||||||
<div class="embed-preview"></div>
|
<div class="embed-preview"></div>
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<a href="#!" class="waves-effect waves-green btn-flat preview-embed">Preview</a>
|
|
||||||
<a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">Close</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div id="channel-share-modal" class="modal">
|
<div class="modal-footer">
|
||||||
<div class="modal-content">
|
<a href="#!" class="waves-effect waves-green btn-flat preview-embed">Preview</a>
|
||||||
<p>To join this channel, go to</p>
|
<a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">Close</a>
|
||||||
<p><span id="channel-name-join"></span></p>
|
|
||||||
<img id="share-join-qr" alt="QR code for joining" title="Link to join this Zoff channel" src="https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L%7C1&chl=http://zoff.me" />
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="channel-share-modal" class="modal">
|
||||||
|
<div class="modal-content">
|
||||||
|
<p>To join this channel, go to</p>
|
||||||
|
<p><span id="channel-name-join"></span></p>
|
||||||
|
<img id="share-join-qr" alt="QR code for joining" title="Link to join this Zoff channel" src="https://chart.googleapis.com/chart?chs=221x221&cht=qr&choe=UTF-8&chld=L%7C1&chl=http://zoff.me" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
<div id="advanced_filter" class="modal modal-fixed-footer">
|
<div id="advanced_filter" class="modal modal-fixed-footer">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
@@ -45,8 +45,16 @@
|
|||||||
<p>Here you can search by category. Keep in mind, this uses the category/genre/tags defined by the uploader of the video on YouTube or the song on SoundCloud</p>
|
<p>Here you can search by category. Keep in mind, this uses the category/genre/tags defined by the uploader of the video on YouTube or the song on SoundCloud</p>
|
||||||
<div class="row container">
|
<div class="row container">
|
||||||
<form id="filter-form">
|
<form id="filter-form">
|
||||||
<input type="text" class="col s8 m9" name="filtersearch_value" placeholder="Find.." id="filtersearch_input" autocomplete="off" />
|
<input type="text" class="col s4 m5" name="filtersearch_value" placeholder="Find.." id="filtersearch_input" autocomplete="off" />
|
||||||
<a href="#" class="waves-effect waves-light btn col s4 m2 orange submit-filter-search">Search</a>
|
<div class="input-field col s4 m3 category-advanced">
|
||||||
|
<select class="category-advanced-select">
|
||||||
|
<option value="" disabled>Type</option>
|
||||||
|
<option value="category" selected>Category</option>
|
||||||
|
<option value="title">Title</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<input type="submit" class="hide" />
|
||||||
|
<a href="#" class="waves-effect waves-light btn col s4 m3 orange submit-filter-search">Search</a>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-results">
|
<div class="filter-results">
|
||||||
|
|||||||
@@ -754,6 +754,10 @@ router.route('/api/search/:channel_name/').post(function(req, res) {
|
|||||||
page = req.body.page;
|
page = req.body.page;
|
||||||
}
|
}
|
||||||
var searchQuery = "";
|
var searchQuery = "";
|
||||||
|
var searchByCategory = true;
|
||||||
|
if(req.body.hasOwnProperty("type")) {
|
||||||
|
searchByCategory = req.body.type == "category";
|
||||||
|
}
|
||||||
if(req.body.searchQuery == undefined || req.body.searchQuery == "") {
|
if(req.body.searchQuery == undefined || req.body.searchQuery == "") {
|
||||||
var to_send = error.formatting;
|
var to_send = error.formatting;
|
||||||
to_send.results = [result];
|
to_send.results = [result];
|
||||||
@@ -805,9 +809,19 @@ router.route('/api/search/:channel_name/').post(function(req, res) {
|
|||||||
res.status(403).send(error.not_authenticated);
|
res.status(403).send(error.not_authenticated);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var query = db.collection(channel_name).find({tags: {
|
|
||||||
|
var querySubObject = {
|
||||||
$regex : ".*" + searchQuery + ".*"
|
$regex : ".*" + searchQuery + ".*"
|
||||||
}});
|
};
|
||||||
|
var queryObject = {};
|
||||||
|
if(searchByCategory) {
|
||||||
|
queryObject.tags = querySubObject;
|
||||||
|
} else {
|
||||||
|
queryObject.title = querySubObject;
|
||||||
|
queryObject.title.$regex = searchQuery;
|
||||||
|
queryObject.title.$options = 'i';
|
||||||
|
}
|
||||||
|
var query = db.collection(channel_name).find(queryObject);
|
||||||
paginate(query, { limit : 30, page : page }, function(err, result) {
|
paginate(query, { limit : 30, page : page }, function(err, result) {
|
||||||
if(result.items.length == 0) {
|
if(result.items.length == 0) {
|
||||||
res.status(404).send(error.not_found.local);
|
res.status(404).send(error.not_found.local);
|
||||||
|
|||||||
Reference in New Issue
Block a user