mirror of
https://github.com/tubearchivist/tubearchivist-frontend.git
synced 2024-11-22 11:50:14 +00:00
framework to switch between grid and list view
This commit is contained in:
parent
21ad1fd832
commit
7c34ceb9f8
@ -6,6 +6,11 @@
|
|||||||
"show_subed_only": false,
|
"show_subed_only": false,
|
||||||
"page_size": 12
|
"page_size": 12
|
||||||
},
|
},
|
||||||
|
"default_view": {
|
||||||
|
"home": "grid",
|
||||||
|
"channel": "grid",
|
||||||
|
"downloads": "list"
|
||||||
|
},
|
||||||
"subscriptions": {
|
"subscriptions": {
|
||||||
"auto_search": false,
|
"auto_search": false,
|
||||||
"auto_download": false,
|
"auto_download": false,
|
||||||
|
@ -31,6 +31,10 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="view-icons">
|
||||||
|
<img src="{% static 'img/icon-gridview.svg' %}" onclick="changeView(this)" data-origin="home" data-value="grid" alt="grid view">
|
||||||
|
<img src="{% static 'img/icon-listview.svg' %}" onclick="changeView(this)" data-origin="home" data-value="list" alt="list view">
|
||||||
|
</div>
|
||||||
<div id="player" class="video-player"></div>
|
<div id="player" class="video-player"></div>
|
||||||
<div class="video-list">
|
<div class="video-list">
|
||||||
{% if videos %}
|
{% if videos %}
|
||||||
|
@ -39,7 +39,7 @@ class HomeView(View):
|
|||||||
|
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
"""return home search results"""
|
"""return home search results"""
|
||||||
colors, sort_order, hide_watched = self.read_config()
|
colors, view_style, sort_order, hide_watched = self.read_config()
|
||||||
# handle search
|
# handle search
|
||||||
search_get = request.GET.get("search", False)
|
search_get = request.GET.get("search", False)
|
||||||
if search_get:
|
if search_get:
|
||||||
@ -66,6 +66,7 @@ class HomeView(View):
|
|||||||
"sortorder": sort_order,
|
"sortorder": sort_order,
|
||||||
"hide_watched": hide_watched,
|
"hide_watched": hide_watched,
|
||||||
"colors": colors,
|
"colors": colors,
|
||||||
|
"view_style": view_style,
|
||||||
}
|
}
|
||||||
return render(request, "home/home.html", context)
|
return render(request, "home/home.html", context)
|
||||||
|
|
||||||
@ -108,9 +109,10 @@ class HomeView(View):
|
|||||||
"""read needed values from redis"""
|
"""read needed values from redis"""
|
||||||
config_handler = AppConfig().config
|
config_handler = AppConfig().config
|
||||||
colors = config_handler["application"]["colors"]
|
colors = config_handler["application"]["colors"]
|
||||||
|
view_style = config_handler["default_view"]["home"]
|
||||||
sort_order = RedisArchivist().get_message("sort_order")
|
sort_order = RedisArchivist().get_message("sort_order")
|
||||||
hide_watched = RedisArchivist().get_message("hide_watched")
|
hide_watched = RedisArchivist().get_message("hide_watched")
|
||||||
return colors, sort_order, hide_watched
|
return colors, view_style, sort_order, hide_watched
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def post(request):
|
def post(request):
|
||||||
@ -474,6 +476,7 @@ class PostData:
|
|||||||
"""map dict key and return function to execute"""
|
"""map dict key and return function to execute"""
|
||||||
exec_map = {
|
exec_map = {
|
||||||
"watched": self.watched,
|
"watched": self.watched,
|
||||||
|
"change_view": self.change_view,
|
||||||
"rescan_pending": self.rescan_pending,
|
"rescan_pending": self.rescan_pending,
|
||||||
"ignore": self.ignore,
|
"ignore": self.ignore,
|
||||||
"dl_pending": self.dl_pending,
|
"dl_pending": self.dl_pending,
|
||||||
@ -499,6 +502,14 @@ class PostData:
|
|||||||
WatchState(self.exec_val).mark_as_watched()
|
WatchState(self.exec_val).mark_as_watched()
|
||||||
return {"success": True}
|
return {"success": True}
|
||||||
|
|
||||||
|
def change_view(self):
|
||||||
|
"""process view changes in home, channel, and downloads"""
|
||||||
|
origin, new_view = self.exec_val.split(":")
|
||||||
|
print(f"change view on page {origin} to {new_view}")
|
||||||
|
update_dict = {f"default_view.{origin}": [new_view]}
|
||||||
|
AppConfig().update_config(update_dict)
|
||||||
|
return {"success": True}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def rescan_pending():
|
def rescan_pending():
|
||||||
"""look for new items in subscribed channels"""
|
"""look for new items in subscribed channels"""
|
||||||
|
@ -211,6 +211,19 @@ button:hover {
|
|||||||
filter: var(--img-filter);
|
filter: var(--img-filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.view-icons {
|
||||||
|
display: flex;
|
||||||
|
justify-content: end;
|
||||||
|
margin-top: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.view-icons img {
|
||||||
|
width: 30px;
|
||||||
|
margin: 5px 10px;
|
||||||
|
cursor: pointer;
|
||||||
|
filter: var(--img-filter);
|
||||||
|
}
|
||||||
|
|
||||||
#search-box {
|
#search-box {
|
||||||
display: none;
|
display: none;
|
||||||
flex: auto;
|
flex: auto;
|
||||||
|
122
tubearchivist/static/img/icon-gridview.svg
Normal file
122
tubearchivist/static/img/icon-gridview.svg
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="2000"
|
||||||
|
height="2000"
|
||||||
|
viewBox="0 0 529.16666 529.16735"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||||
|
sodipodi:docname="Gridview.svg">
|
||||||
|
<defs
|
||||||
|
id="defs2" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.35729063"
|
||||||
|
inkscape:cx="901.7564"
|
||||||
|
inkscape:cy="1021.9111"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1017"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="247.25932,291.92959"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide853"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="337.22901,167.98535"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide855"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="266.76325,305.4565"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide857"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="257.79774,279.50371"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide861"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,232.16736)">
|
||||||
|
<g
|
||||||
|
id="g873"
|
||||||
|
transform="matrix(1.3431799,0,0,1.3431799,-84.854433,26.13855)"
|
||||||
|
style="stroke:none">
|
||||||
|
<rect
|
||||||
|
ry="7.445024"
|
||||||
|
rx="7.445024"
|
||||||
|
y="-121.39048"
|
||||||
|
x="79.903137"
|
||||||
|
height="113.24854"
|
||||||
|
width="167.35619"
|
||||||
|
id="rect815"
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.56300002;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:1.12600005, 0.56300002999999998;stroke-dashoffset:0;stroke-opacity:0.22508042;paint-order:markers fill stroke" />
|
||||||
|
<rect
|
||||||
|
ry="7.445024"
|
||||||
|
rx="7.445024"
|
||||||
|
y="-121.7837"
|
||||||
|
x="273.05484"
|
||||||
|
height="113.24854"
|
||||||
|
width="167.35619"
|
||||||
|
id="rect815-4"
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.56300002;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:1.12600006, 0.56300004000000003;stroke-dashoffset:0;stroke-opacity:0.22508042;paint-order:markers fill stroke" />
|
||||||
|
<rect
|
||||||
|
ry="7.445024"
|
||||||
|
rx="7.445024"
|
||||||
|
y="17.882772"
|
||||||
|
x="79.903137"
|
||||||
|
height="113.24854"
|
||||||
|
width="167.35619"
|
||||||
|
id="rect815-2"
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.56300002;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:1.12600006, 0.56300004000000003;stroke-dashoffset:0;stroke-opacity:0.22508042;paint-order:markers fill stroke" />
|
||||||
|
<rect
|
||||||
|
ry="7.445024"
|
||||||
|
rx="7.445024"
|
||||||
|
y="17.453594"
|
||||||
|
x="273.05484"
|
||||||
|
height="113.24854"
|
||||||
|
width="167.35619"
|
||||||
|
id="rect815-7"
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.56300002;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:1.12600006, 0.56300004000000003;stroke-dashoffset:0;stroke-opacity:0.22508042;paint-order:markers fill stroke" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.2 KiB |
122
tubearchivist/static/img/icon-listview.svg
Normal file
122
tubearchivist/static/img/icon-listview.svg
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="2000"
|
||||||
|
height="2000"
|
||||||
|
viewBox="0 0 529.16666 529.16735"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||||
|
sodipodi:docname="Listview.svg">
|
||||||
|
<defs
|
||||||
|
id="defs2" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.42053519"
|
||||||
|
inkscape:cx="851.82064"
|
||||||
|
inkscape:cy="1105.7974"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="g873"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:guide-bbox="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1017"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1">
|
||||||
|
<sodipodi:guide
|
||||||
|
position="247.25932,291.92959"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide853"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="337.22901,167.98535"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide855"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="266.76325,305.4565"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide857"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="257.79774,279.50371"
|
||||||
|
orientation="0,1"
|
||||||
|
id="guide861"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="22.413775,336.67894"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide926"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
<sodipodi:guide
|
||||||
|
position="503.71355,217.50031"
|
||||||
|
orientation="1,0"
|
||||||
|
id="guide928"
|
||||||
|
inkscape:locked="false" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,232.16736)">
|
||||||
|
<g
|
||||||
|
id="g873"
|
||||||
|
transform="matrix(1.3431799,0,0,1.3431799,-84.854433,26.13855)">
|
||||||
|
<rect
|
||||||
|
ry="7.445024"
|
||||||
|
rx="7.445024"
|
||||||
|
y="-121.34892"
|
||||||
|
x="79.944702"
|
||||||
|
height="70.107315"
|
||||||
|
width="358.24551"
|
||||||
|
id="rect815"
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.64810181;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:1.29620369, 0.64810185;stroke-dashoffset:0;stroke-opacity:0.22508042;paint-order:markers fill stroke" />
|
||||||
|
<rect
|
||||||
|
ry="7.4450235"
|
||||||
|
rx="7.4450235"
|
||||||
|
y="-31.167784"
|
||||||
|
x="79.861153"
|
||||||
|
height="70.107315"
|
||||||
|
width="358.32907"
|
||||||
|
id="rect815-20"
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.64817739;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:1.29635485, 0.64817743;stroke-dashoffset:0;stroke-opacity:0.22508042;paint-order:markers fill stroke" />
|
||||||
|
<rect
|
||||||
|
ry="7.4450235"
|
||||||
|
rx="7.4450231"
|
||||||
|
y="60.024326"
|
||||||
|
x="79.908524"
|
||||||
|
height="70.106117"
|
||||||
|
width="358.28171"
|
||||||
|
id="rect815-8"
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.64812905;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:1.29625813, 0.64812907;stroke-dashoffset:0;stroke-opacity:0.22508042;paint-order:markers fill stroke" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.0 KiB |
@ -43,6 +43,18 @@ function unsubscribe(channel_id) {
|
|||||||
document.getElementById(channel_id).remove();
|
document.getElementById(channel_id).remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function changeView(image) {
|
||||||
|
var sourcePage = image.getAttribute("data-origin");
|
||||||
|
var newView = image.getAttribute("data-value");
|
||||||
|
var payload = JSON.stringify({'change_view': sourcePage + ":" + newView});
|
||||||
|
console.log(payload);
|
||||||
|
sendPost(payload);
|
||||||
|
setTimeout(function(){
|
||||||
|
location.reload();
|
||||||
|
return false;
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
|
||||||
// download page buttons
|
// download page buttons
|
||||||
function rescanPending() {
|
function rescanPending() {
|
||||||
var payload = JSON.stringify({'rescan_pending': true});
|
var payload = JSON.stringify({'rescan_pending': true});
|
||||||
|
Loading…
Reference in New Issue
Block a user