This commit is contained in:
Ross Mountjoy 2020-01-28 07:36:49 -05:00
parent 1435c10962
commit e65f345bae
29 changed files with 204 additions and 93 deletions

82
.idea/workspace.xml generated
View File

@ -2,13 +2,37 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="2d244493-7af1-4307-a64a-32ac4c2ea0a0" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/apps/bitwarden.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/apps/jackett.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/apps/radarr.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/apps/sonarr.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/backgrounds/Boy4aow.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/backgrounds/Hk1KgQS.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/backgrounds/ZtkPKMg.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/backgrounds/aodvrziifxcjmgvqhbsg.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/backgrounds/avbtqymfykwfcjylgqql.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/backgrounds/fns7rzzwluh11.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/backgrounds/glWla8v.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/backgrounds/mKkaVVc.gif" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/backgrounds/wallpaper-hd-of-pixel-art-and-background-powerpoint-inspirations-picture-pics-desktop.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/backgrounds/xdWDtvx.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/static/images/backgrounds/xsxgvgayvfvekklkvwvf.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/user_data/config.ini" afterDir="false" />
<change afterPath="$PROJECT_DIR$/dashmachine/user_data/site.db" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/config.ini" beforeDir="false" afterPath="$PROJECT_DIR$/config.ini" afterDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/site.db" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/site.db" afterDir="false" />
<change beforePath="$PROJECT_DIR$/config.ini" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/__init__.py" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/__init__.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/main/utils.py" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/main/utils.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/settings_system/routes.py" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/settings_system/routes.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/site.db" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/sources.py" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/sources.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/static/css/global/dashmachine-theme.css" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/static/css/global/dashmachine-theme.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/static/css/global/dashmachine.css" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/static/css/global/dashmachine.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/static/css/global/style.css" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/static/css/global/style.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/static/js/global/dashmachine.js" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/static/js/global/dashmachine.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/templates/main/base.html" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/templates/main/base.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/templates/main/home.html" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/templates/main/home.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/templates/main/layout.html" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/templates/main/layout.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/templates/settings_system/settings.html" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/templates/settings_system/settings.html" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -24,7 +48,9 @@
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectId" id="1Vyp2sIL21mINKX6JBxGZr1SlH8" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
<ConfirmationsSetting value="2" id="Add" />
</component>
<component name="ProjectViewState">
<option name="autoscrollFromSource" value="true" />
<option name="autoscrollToSource" value="true" />
@ -33,6 +59,7 @@
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="ASKED_ADD_EXTERNAL_FILES" value="true" />
<property name="NewWatcherDialog.advanced.open" value="true" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
@ -93,7 +120,8 @@
<updated>1578234985306</updated>
<workItem from="1578234992218" duration="34772000" />
<workItem from="1578313408670" duration="637000" />
<workItem from="1578359378893" duration="3688000" />
<workItem from="1578359378893" duration="4330000" />
<workItem from="1580169186784" duration="11024000" />
</task>
<task id="LOCAL-00001" summary="1">
<created>1578313443241</created>
@ -102,13 +130,21 @@
<option name="project" value="LOCAL" />
<updated>1578313443242</updated>
</task>
<option name="localTasksCounter" value="2" />
<task id="LOCAL-00002" summary="1">
<created>1578364236996</created>
<option name="number" value="00002" />
<option name="presentableId" value="LOCAL-00002" />
<option name="project" value="LOCAL" />
<updated>1578364236996</updated>
</task>
<option name="localTasksCounter" value="3" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" />
</component>
<component name="VcsManagerConfiguration">
<option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
<MESSAGE value="1" />
<option name="LAST_COMMIT_MESSAGE" value="1" />
</component>
@ -121,10 +157,10 @@
<screen x="0" y="28" width="1920" height="1052" />
</state>
<state x="418" y="212" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.28.1920.1052@0.28.1920.1052" timestamp="1578235072139" />
<state x="515" y="145" width="879" height="818" key="CommitChangelistDialog2" timestamp="1578313442792">
<state x="515" y="145" width="879" height="818" key="CommitChangelistDialog2" timestamp="1578364236672">
<screen x="0" y="28" width="1920" height="1052" />
</state>
<state x="515" y="145" width="879" height="818" key="CommitChangelistDialog2/0.28.1920.1052@0.28.1920.1052" timestamp="1578313442792" />
<state x="515" y="145" width="879" height="818" key="CommitChangelistDialog2/0.28.1920.1052@0.28.1920.1052" timestamp="1578364236672" />
<state x="554" y="321" width="810" height="703" key="EditFileWatcherDialog" timestamp="1578246021501">
<screen x="0" y="28" width="1920" height="1052" />
</state>
@ -133,40 +169,40 @@
<screen x="0" y="28" width="1920" height="1052" />
</state>
<state x="748" y="311" key="FileChooserDialogImpl/0.28.1920.1052@0.28.1920.1052" timestamp="1578235103537" />
<state width="1870" height="117" key="GridCell.Tab.0.bottom" timestamp="1578364199120">
<state width="1870" height="117" key="GridCell.Tab.0.bottom" timestamp="1580176048036">
<screen x="0" y="28" width="1920" height="1052" />
</state>
<state width="1870" height="117" key="GridCell.Tab.0.bottom/0.28.1920.1052@0.28.1920.1052" timestamp="1578364199120" />
<state width="1870" height="117" key="GridCell.Tab.0.center" timestamp="1578364199120">
<state width="1870" height="117" key="GridCell.Tab.0.bottom/0.28.1920.1052@0.28.1920.1052" timestamp="1580176048036" />
<state width="1870" height="117" key="GridCell.Tab.0.center" timestamp="1580176048036">
<screen x="0" y="28" width="1920" height="1052" />
</state>
<state width="1870" height="117" key="GridCell.Tab.0.center/0.28.1920.1052@0.28.1920.1052" timestamp="1578364199120" />
<state width="1870" height="117" key="GridCell.Tab.0.left" timestamp="1578364199120">
<state width="1870" height="117" key="GridCell.Tab.0.center/0.28.1920.1052@0.28.1920.1052" timestamp="1580176048036" />
<state width="1870" height="117" key="GridCell.Tab.0.left" timestamp="1580176048036">
<screen x="0" y="28" width="1920" height="1052" />
</state>
<state width="1870" height="117" key="GridCell.Tab.0.left/0.28.1920.1052@0.28.1920.1052" timestamp="1578364199120" />
<state width="1870" height="117" key="GridCell.Tab.0.right" timestamp="1578364199120">
<state width="1870" height="117" key="GridCell.Tab.0.left/0.28.1920.1052@0.28.1920.1052" timestamp="1580176048036" />
<state width="1870" height="117" key="GridCell.Tab.0.right" timestamp="1580176048036">
<screen x="0" y="28" width="1920" height="1052" />
</state>
<state width="1870" height="117" key="GridCell.Tab.0.right/0.28.1920.1052@0.28.1920.1052" timestamp="1578364199120" />
<state width="1870" height="117" key="GridCell.Tab.0.right/0.28.1920.1052@0.28.1920.1052" timestamp="1580176048036" />
<state x="446" y="188" key="SettingsEditor" timestamp="1578245994652">
<screen x="0" y="28" width="1920" height="1052" />
</state>
<state x="446" y="188" key="SettingsEditor/0.28.1920.1052@0.28.1920.1052" timestamp="1578245994652" />
<state x="560" y="289" key="Vcs.Push.Dialog.v2" timestamp="1578313444881">
<state x="560" y="289" key="Vcs.Push.Dialog.v2" timestamp="1578364242204">
<screen x="0" y="28" width="1920" height="1052" />
</state>
<state x="560" y="289" key="Vcs.Push.Dialog.v2/0.28.1920.1052@0.28.1920.1052" timestamp="1578313444881" />
<state x="525" y="224" width="869" height="660" key="find.popup" timestamp="1578272445893">
<state x="560" y="289" key="Vcs.Push.Dialog.v2/0.28.1920.1052@0.28.1920.1052" timestamp="1578364242204" />
<state x="525" y="224" width="869" height="660" key="find.popup" timestamp="1580178406392">
<screen x="0" y="28" width="1920" height="1052" />
</state>
<state x="525" y="224" width="869" height="660" key="find.popup/0.28.1920.1052@0.28.1920.1052" timestamp="1578272445893" />
<state x="623" y="260" width="672" height="678" key="search.everywhere.popup" timestamp="1578362044385">
<state x="525" y="224" width="869" height="660" key="find.popup/0.28.1920.1052@0.28.1920.1052" timestamp="1580178406392" />
<state x="623" y="260" width="672" height="678" key="search.everywhere.popup" timestamp="1580213161556">
<screen x="0" y="28" width="1920" height="1052" />
</state>
<state x="623" y="260" width="672" height="678" key="search.everywhere.popup/0.28.1920.1052@0.28.1920.1052" timestamp="1578362044385" />
<state x="623" y="260" width="672" height="678" key="search.everywhere.popup/0.28.1920.1052@0.28.1920.1052" timestamp="1580213161556" />
</component>
<component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/DashMachine$DashMachine.coverage" NAME="DashMachine Coverage Results" MODIFIED="1578359407820" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/DashMachine$DashMachine.coverage" NAME="DashMachine Coverage Results" MODIFIED="1580169229147" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
</component>
</project>

View File

@ -18,7 +18,7 @@ avatars = Avatars(app)
app.config["AVATARS_IDENTICON_BG"] = (255, 255, 255)
app.config["SECRET_KEY"] = "66532a62c4048f976e22a39638b6f10e"
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///site.db"
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///user_data/site.db"
app.config["SEND_FILE_MAX_AGE_DEFAULT"] = 0
# scheduler config

View File

@ -15,7 +15,7 @@ def row2dict(row):
def read_config():
config = ConfigParser()
try:
config.read("config.ini")
config.read("dashmachine/user_data/config.ini")
except Exception as e:
return {"msg": f"Invalid Config: {e}."}
@ -35,20 +35,40 @@ def read_config():
for section in config.sections():
if section != "Settings":
try:
app = Apps(
name=section,
prefix=config[section]["prefix"],
url=config[section]["url"],
icon=config[section]["icon"],
sidebar_icon=config[section]["sidebar_icon"],
description=config[section]["description"],
open_in=config[section]["open_in"],
)
db.session.add(app)
db.session.commit()
except KeyError as e:
return {"msg": f"Invalid Config: {section} does not contain {e}."}
app = Apps()
app.name = section
if "prefix" in config[section]:
app.prefix = config[section]["prefix"]
else:
return {"msg": f"Invalid Config: {section} does not contain prefix."}
if "url" in config[section]:
app.url = config[section]["url"]
else:
return {"msg": f"Invalid Config: {section} does not contain url."}
if "icon" in config[section]:
app.icon = config[section]["icon"]
else:
app.icon = None
if "sidebar_icon" in config[section]:
app.sidebar_icon = config[section]["sidebar_icon"]
else:
app.sidebar_icon = app.icon
if "description" in config[section]:
app.description = config[section]["description"]
else:
app.description = None
if "open_in" in config[section]:
app.open_in = config[section]["open_in"]
else:
app.open_in = "this_tab"
db.session.add(app)
db.session.commit()
return {"msg": "success", "settings": row2dict(settings)}

View File

@ -12,7 +12,7 @@ settings_system = Blueprint("settings_system", __name__)
@settings_system.route("/settings", methods=["GET"])
def settings():
config_form = ConfigForm()
with open("config.ini", "r") as config_file:
with open("dashmachine/user_data/config.ini", "r") as config_file:
config_form.config.data = config_file.read()
files_html = load_files_html()
return render_template(
@ -22,7 +22,7 @@ def settings():
@settings_system.route("/settings/save_config", methods=["POST"])
def save_config():
with open("config.ini", "w") as config_file:
with open("dashmachine/user_data/config.ini", "w") as config_file:
config_file.write(request.form.get("config"))
msg = read_config()
return jsonify(data=msg)

View File

@ -1,9 +1,10 @@
import os
import random
from jsmin import jsmin
from dashmachine import app
from dashmachine.main.models import Apps
from dashmachine.settings_system.models import Settings
from dashmachine.paths import static_folder
from dashmachine.paths import static_folder, backgrounds_images_folder
from dashmachine.cssmin import cssmin
"""This file establishes bundles of js and css sources, minifies them using jsmin and
@ -73,6 +74,11 @@ def process_css_sources(process_bundle=None, src=None, app_global=False):
def context_processor():
apps = Apps.query.all()
settings = Settings.query.first()
if settings.background == "random":
settings.background = (
f"static/images/backgrounds/"
f"{random.choice(os.listdir(backgrounds_images_folder))}"
)
return dict(
test_key="test",
process_js_sources=process_js_sources,

View File

@ -2,6 +2,7 @@
:root {
--theme-background: #EBEEF0;
--theme-surface: #fff;
--theme-surface-rgb: 255, 255, 255;
--theme-surface-1: #fcfcfc;
--theme-surface-2: #e0e0e0;
--theme-primary: #FF9966;
@ -15,6 +16,7 @@
[data-theme="dark"] {
--theme-background: #1c1c1c;
--theme-surface: #2f2f2f;
--theme-surface-rgb: 47, 47, 47;
--theme-surface-1: #434343;
--theme-surface-2: #575757;
--theme-color-font: #fff;
@ -77,3 +79,9 @@
.theme-muted2-text {
color: var(--theme-color-font-muted2) !important;
}
.theme-surface-transparent {
background: rgba(var(--theme-surface-rgb), 0.8) !important;
}
.theme-surface-transparent1 {
background: rgba(var(--theme-surface-rgb), 0.9) !important;
}

View File

@ -36,7 +36,7 @@
/* ELEMENT STLYES */
body {
overflow: hidden !important;
overflow: scroll;
overflow-x: hidden !important;
min-height: 100%;
color: var(--theme-color-font);
@ -614,6 +614,7 @@ input:disabled {
.sidenav {
background-color: var(--theme-surface);
top: unset;
}
.border-bottom-1 {

View File

@ -27,9 +27,6 @@ body
#main
{
min-height: -webkit-calc(100% - 116px);
min-height: -moz-calc(100% - 116px);
min-height: calc(100% - 116px);
padding-left: 0;
-webkit-transition: .3s ease all;

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 892 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 638 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -336,6 +336,20 @@ function initTinyMCE(el){
}
}
function hide_sidenav() {
$("#main-sidenav").addClass('hide');
$("#main.main-full").css('padding-left', 0);
$("#show-sidenav").removeClass('hide');
localStorage.setItem('sidenav_hidden', 'true');
}
function show_sidenav(){
$("#main-sidenav").removeClass('hide');
$("#main.main-full").css('padding-left', 64);
$("#show-sidenav").addClass('hide');
localStorage.setItem('sidenav_hidden', null);
}
//--------------------------------------------------------------------------------------
// Document ready function
//--------------------------------------------------------------------------------------
@ -350,16 +364,16 @@ $(document).ready(function () {
init_copy_btn();
init_select();
if (localStorage.getItem('sidenav_hidden') === 'true'){
hide_sidenav();
}
$("#hide-sidenav").on('click', function(e) {
$("#main-sidenav").addClass('hide');
$("#main.main-full").css('padding-left', 0);
$("#show-sidenav").removeClass('hide');
hide_sidenav();
});
$("#show-sidenav .material-icons-outlined").on('click', function(e) {
$("#main-sidenav").removeClass('hide');
$("#main.main-full").css('padding-left', 64);
$("#show-sidenav").addClass('hide');
show_sidenav();
});
$( "#show-sidenav" ).draggable({ axis: "y" });

View File

@ -8,7 +8,8 @@
#main {
background-image: url("{{ settings.background }}");
background-size: cover;
height: 100vh;
background-attachment: fixed;
min-height: 100vh;
}
</style>
{% endif %}
@ -21,7 +22,7 @@
<div class="col s12 l4 input-field">
<span>
<i class="material-icons prefix card-search-icon">search</i>
<input type="text" id="apps-filter" class="card-filter theme-surface" placeholder="Search apps">
<input type="text" id="apps-filter" class="card-filter theme-surface-transparent" placeholder="Search apps">
</span>
</div>
</div>
@ -29,11 +30,13 @@
{% for app in apps %}
{% if app.open_in == 'iframe' %}
<a href="{{ url_for('main.app_view', url=app.url) }}" class="app-a" data-name="{{ app.name }}" data-description="{{ app.description }}">
{% elif app.open_in == 'this_tab' %}
<a href="{{ app.prefix }}{{ app.url }}" class="app-a" data-name="{{ app.name }}" data-description="{{ app.description }}">
{% elif app.open_in == "new_tab" %}
<a href="{{ app.prefix }}{{ app.url }}" target="_blank" class="app-a" data-name="{{ app.name }}" data-description="{{ app.description }}">
{% endif %}
<div class="col s12 m6 l3">
<div class="card">
<div class="card theme-surface-transparent">
<div class="card-content center-align">
<img src="{{ app.icon }}" height="64px">
</div>

View File

@ -12,27 +12,13 @@
</div>
<!-- BEGIN: SideNav-->
<aside id="main-sidenav" class="sidenav-main nav-collapsed nav-collapsible sidenav-light sidenav-active-rounded z-depth-2">
<div class="brand-sidebar noselect" style="overflow: hidden;">
<h1 class="logo-wrapper hide-on-med-and-down"><a class="brand-logo darken-1" href="{{ url_for('main.home') }}"><img id="TCM-nav-logo" src="static/images/logo/logo.svg" alt="DashMachine logo"/><span class="logo-text theme-secondary-text"> </span></a></h1>
</div>
<ul class="sidenav sidenav-collapsible leftside-navigation collapsible sidenav-fixed menu-shadow" id="slide-out" data-menu="menu-navigation" data-collapsible="accordion">
<ul class="sidenav sidenav-collapsible leftside-navigation collapsible sidenav-fixed menu-shadow pt-2 theme-surface-transparent1" id="slide-out" data-menu="menu-navigation" data-collapsible="accordion">
<li class="bold"><a id="dashboard-sidenav" class="waves-effect waves-cyan" href="{{ url_for('main.home') }}">
<i class="material-icons-outlined">dashboard</i>
<span class="menu-title" data-i18n="">Dashboard</span>
</a></li>
{% for app in apps %}
<li class="bold">
{% if app.open_in == 'iframe' %}
<a id="dashboard-sidenav" class="waves-effect waves-cyan" href="{{ url_for('main.app_view', url=app.url) }}">
{% elif app.open_in == "new_tab" %}
<a id="dashboard-sidenav" class="waves-effect waves-cyan" href="{{ app.prefix }}{{ app.url }}" target="_blank">
{% endif %}
<img src="{{ app.sidebar_icon }}" style="position: relative; top: 5px; left: 2px; margin-right: 18px; height: 24px">
<span class="menu-title" data-i18n="">{{ app.name }}</span>
</a></li>
{% endfor %}
<li class="bold"><a id="settings-sidenav" class="waves-effect waves-cyan" href="{{ url_for('settings_system.settings') }}">
<i class="material-icons-outlined">settings</i>
<span class="menu-title" data-i18n="">Settings</span>
@ -48,6 +34,20 @@
<span class="menu-title" data-i18n="">Hide Sidenav</span>
</a></li>
{% for app in apps %}
<li class="bold">
{% if app.open_in == 'iframe' %}
<a id="dashboard-sidenav" class="waves-effect waves-cyan" href="{{ url_for('main.app_view', url=app.url) }}">
{% elif app.open_in == "this_tab" %}
<a id="dashboard-sidenav" class="waves-effect waves-cyan" href="{{ app.prefix }}{{ app.url }}">
{% elif app.open_in == "new_tab" %}
<a id="dashboard-sidenav" class="waves-effect waves-cyan" href="{{ app.prefix }}{{ app.url }}" target="_blank">
{% endif %}
<img src="{{ app.sidebar_icon }}" style="position: relative; top: 5px; left: 2px; margin-right: 18px; height: 24px">
<span class="menu-title" data-i18n="">{{ app.name }}</span>
</a></li>
{% endfor %}
</ul>
{# <div class="navigation-background"></div><a class="sidenav-trigger btn-sidenav-toggle btn-floating btn-medium waves-effect waves-light hide-on-large-only theme-primary" href="#" data-target="slide-out"><i class="material-icons-outlined">menu</i></a>#}
</aside>

View File

@ -5,6 +5,11 @@
{% endblock page_vendor_css %}
{% block page_lvl_css %}
<style>
body {
overflow: hidden !important;
}
</style>
{% if settings.background %}
<style>
#main {
@ -28,6 +33,14 @@
<h5>Config
<i class="material-icons-outlined theme-secondary-text icon-btn ml-2 toggle-config-help" style="position: relative; top: 4px;">info</i>
</h5>
{{ button(
icon="save",
id="save-config-btn",
float="left",
class="ml-0 mt-1 mb-1",
data={'url': url_for('settings_system.save_config')},
text="save"
) }}
</div>
<div id="config-help-col" class="col s12 hide theme-surface-1 padding-2 border-radius-10">
<h5>Settings Example</h5>
@ -38,7 +51,7 @@
accent = static/images/backgrounds/background.png<br>
</code>
<table class="centered mt-4">
<table class="mt-4">
<thead>
<tr>
<th>Variable</th>
@ -60,7 +73,7 @@
</tr>
<tr>
<td>background</td>
<td>Background image. can be either a local link (prefixed by /static/images/backgrounds/), or an external link</td>
<td>Background image. can be either a local link (prefixed by /static/images/backgrounds/) or an external link. Can also be set to random. If not set defaults to blank.</td>
</tr>
</tbody>
</table>
@ -76,7 +89,7 @@
open_in = iframe<br>
</code>
<table class="centered mt-4">
<table class="mt-4">
<thead>
<tr>
<th>Variable</th>
@ -110,7 +123,7 @@
</tr>
<tr>
<td>open_in</td>
<td>open the app in an embedded iframe or a new tab, options are iframe, new_tab</td>
<td>open the app in the current tab, an iframe or a new tab, options are iframe, new_tab, or this_tab</td>
</tr>
</tbody>
</table>
@ -125,13 +138,6 @@
id="config-textarea"
) }}
</form>
{{ button(
icon="save",
id="save-config-btn",
float="left",
data={'url': url_for('settings_system.save_config')},
text="save"
) }}
</div>
</div>
</div>

View File

@ -1,13 +1,12 @@
[Settings]
theme = dark
accent=orange
background=static/images/backgrounds/background.png
background=random
[Home Assistant]
prefix = https://
url = hass.wolf-house.net
icon =static/images/apps/home-assistant.png
sidebar_icon = static/images/apps/home-assistant.png
description = Home automation software.
open_in = iframe
@ -15,7 +14,6 @@ open_in = iframe
prefix = https://
url = cloud.wolf-house.net
icon = static/images/apps/nextcloud.png
sidebar_icon = static/images/apps/nextcloud.png
description = File server and sync software.
open_in = new_tab
@ -23,23 +21,27 @@ open_in = new_tab
prefix = https://
url = wolflix.wolf-house.net
icon = static/images/apps/emby.png
sidebar_icon = static/images/apps/emby.png
description = Movies and TV.
open_in = iframe
[Bitwarden]
prefix = https://
url = passwords.wolf-house.net
icon = static/images/apps/bitwarden.png
description = Password server.
open_in = this_tab
[Gitea]
prefix = https://
url = git.wolf-house.net
icon = static/images/apps/gitea.png
sidebar_icon = static/images/apps/gitea.png
description = Self hosted git repo.
open_in = new_tab
open_in = this_tab
[Black Pearl]
prefix = https://
url = blackpearl.wolf-house.net
icon = static/images/apps/deluge.png
sidebar_icon = static/images/apps/deluge.png
description = Containerized torrent server with vpn.
open_in = iframe
@ -47,7 +49,6 @@ open_in = iframe
prefix = https://
url = ssh.wolf-house.net
icon = static/images/apps/terminal.png
sidebar_icon = static/images/apps/terminal.png
description = Terminal access for WolfPrime.
open_in = iframe
@ -55,7 +56,6 @@ open_in = iframe
prefix = https://
url = port.wolf-house.net
icon = static/images/apps/portainer.png
sidebar_icon = static/images/apps/portainer.png
description = Manage docker containers.
open_in = iframe
@ -63,6 +63,26 @@ open_in = iframe
prefix = https://
url = proxies.wolf-house.net
icon = static/images/apps/nginxproxymanager.png
sidebar_icon = static/images/apps/nginxproxymanager.png
description = Manage the nginx reverse proxy.
open_in = new_tab
[Sonarr]
prefix = https://
url = sonarr.wolf-house.net
icon = static/images/apps/sonarr.png
description = TV Shows.
open_in = iframe
[Radarr]
prefix = https://
url = radarr.wolf-house.net
icon = static/images/apps/radarr.png
description = Movies.
open_in = iframe
[Jackett]
prefix = http://
url = 192.168.39.175:9117
icon = static/images/apps/jackett.png
description = Torrent indexer.
open_in = this_tab