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"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="2d244493-7af1-4307-a64a-32ac4c2ea0a0" name="Default Changelist" comment=""> <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$/.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$/config.ini" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/dashmachine/site.db" beforeDir="false" afterPath="$PROJECT_DIR$/dashmachine/site.db" afterDir="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/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/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/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> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -24,7 +48,9 @@
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component> </component>
<component name="ProjectId" id="1Vyp2sIL21mINKX6JBxGZr1SlH8" /> <component name="ProjectId" id="1Vyp2sIL21mINKX6JBxGZr1SlH8" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" /> <component name="ProjectLevelVcsManager" settingsEditedManually="true">
<ConfirmationsSetting value="2" id="Add" />
</component>
<component name="ProjectViewState"> <component name="ProjectViewState">
<option name="autoscrollFromSource" value="true" /> <option name="autoscrollFromSource" value="true" />
<option name="autoscrollToSource" value="true" /> <option name="autoscrollToSource" value="true" />
@ -33,6 +59,7 @@
<option name="showLibraryContents" value="true" /> <option name="showLibraryContents" value="true" />
</component> </component>
<component name="PropertiesComponent"> <component name="PropertiesComponent">
<property name="ASKED_ADD_EXTERNAL_FILES" value="true" />
<property name="NewWatcherDialog.advanced.open" value="true" /> <property name="NewWatcherDialog.advanced.open" value="true" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" /> <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" /> <property name="WebServerToolWindowFactoryState" value="false" />
@ -93,7 +120,8 @@
<updated>1578234985306</updated> <updated>1578234985306</updated>
<workItem from="1578234992218" duration="34772000" /> <workItem from="1578234992218" duration="34772000" />
<workItem from="1578313408670" duration="637000" /> <workItem from="1578313408670" duration="637000" />
<workItem from="1578359378893" duration="3688000" /> <workItem from="1578359378893" duration="4330000" />
<workItem from="1580169186784" duration="11024000" />
</task> </task>
<task id="LOCAL-00001" summary="1"> <task id="LOCAL-00001" summary="1">
<created>1578313443241</created> <created>1578313443241</created>
@ -102,13 +130,21 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1578313443242</updated> <updated>1578313443242</updated>
</task> </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 /> <servers />
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" /> <option name="version" value="1" />
</component> </component>
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
<MESSAGE value="1" /> <MESSAGE value="1" />
<option name="LAST_COMMIT_MESSAGE" value="1" /> <option name="LAST_COMMIT_MESSAGE" value="1" />
</component> </component>
@ -121,10 +157,10 @@
<screen x="0" y="28" width="1920" height="1052" /> <screen x="0" y="28" width="1920" height="1052" />
</state> </state>
<state x="418" y="212" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.28.1920.1052@0.28.1920.1052" timestamp="1578235072139" /> <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" /> <screen x="0" y="28" width="1920" height="1052" />
</state> </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"> <state x="554" y="321" width="810" height="703" key="EditFileWatcherDialog" timestamp="1578246021501">
<screen x="0" y="28" width="1920" height="1052" /> <screen x="0" y="28" width="1920" height="1052" />
</state> </state>
@ -133,40 +169,40 @@
<screen x="0" y="28" width="1920" height="1052" /> <screen x="0" y="28" width="1920" height="1052" />
</state> </state>
<state x="748" y="311" key="FileChooserDialogImpl/0.28.1920.1052@0.28.1920.1052" timestamp="1578235103537" /> <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" /> <screen x="0" y="28" width="1920" height="1052" />
</state> </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.bottom/0.28.1920.1052@0.28.1920.1052" timestamp="1580176048036" />
<state width="1870" height="117" key="GridCell.Tab.0.center" timestamp="1578364199120"> <state width="1870" height="117" key="GridCell.Tab.0.center" timestamp="1580176048036">
<screen x="0" y="28" width="1920" height="1052" /> <screen x="0" y="28" width="1920" height="1052" />
</state> </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.center/0.28.1920.1052@0.28.1920.1052" timestamp="1580176048036" />
<state width="1870" height="117" key="GridCell.Tab.0.left" timestamp="1578364199120"> <state width="1870" height="117" key="GridCell.Tab.0.left" timestamp="1580176048036">
<screen x="0" y="28" width="1920" height="1052" /> <screen x="0" y="28" width="1920" height="1052" />
</state> </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.left/0.28.1920.1052@0.28.1920.1052" timestamp="1580176048036" />
<state width="1870" height="117" key="GridCell.Tab.0.right" timestamp="1578364199120"> <state width="1870" height="117" key="GridCell.Tab.0.right" timestamp="1580176048036">
<screen x="0" y="28" width="1920" height="1052" /> <screen x="0" y="28" width="1920" height="1052" />
</state> </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"> <state x="446" y="188" key="SettingsEditor" timestamp="1578245994652">
<screen x="0" y="28" width="1920" height="1052" /> <screen x="0" y="28" width="1920" height="1052" />
</state> </state>
<state x="446" y="188" key="SettingsEditor/0.28.1920.1052@0.28.1920.1052" timestamp="1578245994652" /> <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" /> <screen x="0" y="28" width="1920" height="1052" />
</state> </state>
<state x="560" y="289" key="Vcs.Push.Dialog.v2/0.28.1920.1052@0.28.1920.1052" timestamp="1578313444881" /> <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="1578272445893"> <state x="525" y="224" width="869" height="660" key="find.popup" timestamp="1580178406392">
<screen x="0" y="28" width="1920" height="1052" /> <screen x="0" y="28" width="1920" height="1052" />
</state> </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="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="1578362044385"> <state x="623" y="260" width="672" height="678" key="search.everywhere.popup" timestamp="1580213161556">
<screen x="0" y="28" width="1920" height="1052" /> <screen x="0" y="28" width="1920" height="1052" />
</state> </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>
<component name="com.intellij.coverage.CoverageDataManagerImpl"> <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> </component>
</project> </project>

View File

@ -18,7 +18,7 @@ avatars = Avatars(app)
app.config["AVATARS_IDENTICON_BG"] = (255, 255, 255) app.config["AVATARS_IDENTICON_BG"] = (255, 255, 255)
app.config["SECRET_KEY"] = "66532a62c4048f976e22a39638b6f10e" 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 app.config["SEND_FILE_MAX_AGE_DEFAULT"] = 0
# scheduler config # scheduler config

View File

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

View File

@ -12,7 +12,7 @@ settings_system = Blueprint("settings_system", __name__)
@settings_system.route("/settings", methods=["GET"]) @settings_system.route("/settings", methods=["GET"])
def settings(): def settings():
config_form = ConfigForm() 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() config_form.config.data = config_file.read()
files_html = load_files_html() files_html = load_files_html()
return render_template( return render_template(
@ -22,7 +22,7 @@ def settings():
@settings_system.route("/settings/save_config", methods=["POST"]) @settings_system.route("/settings/save_config", methods=["POST"])
def save_config(): 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")) config_file.write(request.form.get("config"))
msg = read_config() msg = read_config()
return jsonify(data=msg) return jsonify(data=msg)

View File

@ -1,9 +1,10 @@
import os import os
import random
from jsmin import jsmin from jsmin import jsmin
from dashmachine import app from dashmachine import app
from dashmachine.main.models import Apps from dashmachine.main.models import Apps
from dashmachine.settings_system.models import Settings 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 from dashmachine.cssmin import cssmin
"""This file establishes bundles of js and css sources, minifies them using jsmin and """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(): def context_processor():
apps = Apps.query.all() apps = Apps.query.all()
settings = Settings.query.first() settings = Settings.query.first()
if settings.background == "random":
settings.background = (
f"static/images/backgrounds/"
f"{random.choice(os.listdir(backgrounds_images_folder))}"
)
return dict( return dict(
test_key="test", test_key="test",
process_js_sources=process_js_sources, process_js_sources=process_js_sources,

View File

@ -2,6 +2,7 @@
:root { :root {
--theme-background: #EBEEF0; --theme-background: #EBEEF0;
--theme-surface: #fff; --theme-surface: #fff;
--theme-surface-rgb: 255, 255, 255;
--theme-surface-1: #fcfcfc; --theme-surface-1: #fcfcfc;
--theme-surface-2: #e0e0e0; --theme-surface-2: #e0e0e0;
--theme-primary: #FF9966; --theme-primary: #FF9966;
@ -15,6 +16,7 @@
[data-theme="dark"] { [data-theme="dark"] {
--theme-background: #1c1c1c; --theme-background: #1c1c1c;
--theme-surface: #2f2f2f; --theme-surface: #2f2f2f;
--theme-surface-rgb: 47, 47, 47;
--theme-surface-1: #434343; --theme-surface-1: #434343;
--theme-surface-2: #575757; --theme-surface-2: #575757;
--theme-color-font: #fff; --theme-color-font: #fff;
@ -77,3 +79,9 @@
.theme-muted2-text { .theme-muted2-text {
color: var(--theme-color-font-muted2) !important; 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 */ /* ELEMENT STLYES */
body { body {
overflow: hidden !important; overflow: scroll;
overflow-x: hidden !important; overflow-x: hidden !important;
min-height: 100%; min-height: 100%;
color: var(--theme-color-font); color: var(--theme-color-font);
@ -614,6 +614,7 @@ input:disabled {
.sidenav { .sidenav {
background-color: var(--theme-surface); background-color: var(--theme-surface);
top: unset;
} }
.border-bottom-1 { .border-bottom-1 {

View File

@ -27,9 +27,6 @@ body
#main #main
{ {
min-height: -webkit-calc(100% - 116px);
min-height: -moz-calc(100% - 116px);
min-height: calc(100% - 116px);
padding-left: 0; padding-left: 0;
-webkit-transition: .3s ease all; -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 // Document ready function
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
@ -350,16 +364,16 @@ $(document).ready(function () {
init_copy_btn(); init_copy_btn();
init_select(); init_select();
if (localStorage.getItem('sidenav_hidden') === 'true'){
hide_sidenav();
}
$("#hide-sidenav").on('click', function(e) { $("#hide-sidenav").on('click', function(e) {
$("#main-sidenav").addClass('hide'); hide_sidenav();
$("#main.main-full").css('padding-left', 0);
$("#show-sidenav").removeClass('hide');
}); });
$("#show-sidenav .material-icons-outlined").on('click', function(e) { $("#show-sidenav .material-icons-outlined").on('click', function(e) {
$("#main-sidenav").removeClass('hide'); show_sidenav();
$("#main.main-full").css('padding-left', 64);
$("#show-sidenav").addClass('hide');
}); });
$( "#show-sidenav" ).draggable({ axis: "y" }); $( "#show-sidenav" ).draggable({ axis: "y" });

View File

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

View File

@ -12,27 +12,13 @@
</div> </div>
<!-- BEGIN: SideNav--> <!-- BEGIN: SideNav-->
<aside id="main-sidenav" class="sidenav-main nav-collapsed nav-collapsible sidenav-light sidenav-active-rounded z-depth-2"> <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;"> <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">
<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">
<li class="bold"><a id="dashboard-sidenav" class="waves-effect waves-cyan" href="{{ url_for('main.home') }}"> <li class="bold"><a id="dashboard-sidenav" class="waves-effect waves-cyan" href="{{ url_for('main.home') }}">
<i class="material-icons-outlined">dashboard</i> <i class="material-icons-outlined">dashboard</i>
<span class="menu-title" data-i18n="">Dashboard</span> <span class="menu-title" data-i18n="">Dashboard</span>
</a></li> </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') }}"> <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> <i class="material-icons-outlined">settings</i>
<span class="menu-title" data-i18n="">Settings</span> <span class="menu-title" data-i18n="">Settings</span>
@ -48,6 +34,20 @@
<span class="menu-title" data-i18n="">Hide Sidenav</span> <span class="menu-title" data-i18n="">Hide Sidenav</span>
</a></li> </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> </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>#} {# <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> </aside>

View File

@ -5,6 +5,11 @@
{% endblock page_vendor_css %} {% endblock page_vendor_css %}
{% block page_lvl_css %} {% block page_lvl_css %}
<style>
body {
overflow: hidden !important;
}
</style>
{% if settings.background %} {% if settings.background %}
<style> <style>
#main { #main {
@ -28,6 +33,14 @@
<h5>Config <h5>Config
<i class="material-icons-outlined theme-secondary-text icon-btn ml-2 toggle-config-help" style="position: relative; top: 4px;">info</i> <i class="material-icons-outlined theme-secondary-text icon-btn ml-2 toggle-config-help" style="position: relative; top: 4px;">info</i>
</h5> </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>
<div id="config-help-col" class="col s12 hide theme-surface-1 padding-2 border-radius-10"> <div id="config-help-col" class="col s12 hide theme-surface-1 padding-2 border-radius-10">
<h5>Settings Example</h5> <h5>Settings Example</h5>
@ -38,7 +51,7 @@
accent = static/images/backgrounds/background.png<br> accent = static/images/backgrounds/background.png<br>
</code> </code>
<table class="centered mt-4"> <table class="mt-4">
<thead> <thead>
<tr> <tr>
<th>Variable</th> <th>Variable</th>
@ -60,7 +73,7 @@
</tr> </tr>
<tr> <tr>
<td>background</td> <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> </tr>
</tbody> </tbody>
</table> </table>
@ -76,7 +89,7 @@
open_in = iframe<br> open_in = iframe<br>
</code> </code>
<table class="centered mt-4"> <table class="mt-4">
<thead> <thead>
<tr> <tr>
<th>Variable</th> <th>Variable</th>
@ -110,7 +123,7 @@
</tr> </tr>
<tr> <tr>
<td>open_in</td> <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> </tr>
</tbody> </tbody>
</table> </table>
@ -125,13 +138,6 @@
id="config-textarea" id="config-textarea"
) }} ) }}
</form> </form>
{{ button(
icon="save",
id="save-config-btn",
float="left",
data={'url': url_for('settings_system.save_config')},
text="save"
) }}
</div> </div>
</div> </div>
</div> </div>

View File

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