some more ui work
@@ -24,9 +24,6 @@
|
||||
|
||||
<div class="columns" width="100%">
|
||||
<div class="column"><p> Current layout: </p></div>
|
||||
<div style="position: static; right: 15px;">
|
||||
<div class="column is-link"><button class="button iis-info"> <img src="/static/icons/tab-new-symbolic.svg"> Add Disk or Filesystem </button></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
|
||||
@@ -2,6 +2,7 @@ from applets.disks import bp
|
||||
from flask import Flask, request, session, redirect, \
|
||||
url_for, render_template, flash, Blueprint
|
||||
import dmm.lsblk as lsblk
|
||||
from flask import current_app
|
||||
|
||||
@bp.route('/disks')
|
||||
def disks():
|
||||
@@ -10,7 +11,23 @@ def disks():
|
||||
"""
|
||||
blockdevs = lsblk.list_block_devices()
|
||||
print(lsblk.list_block_devices())
|
||||
return render_template('disks.html', blockdevs=blockdevs)
|
||||
menu = current_app.config['CONFIG']['settings']['menu_order'].split(" ")
|
||||
next_step_url = menu[menu.index("disks")+1]
|
||||
if menu[menu.index("disks")] == 1:
|
||||
previous_step_url = False
|
||||
else:
|
||||
previous_step_url = menu[menu.index("disks")-1]
|
||||
|
||||
add_disks_button = ' <button class="button iis-info"> <img src="/static/icons/tab-new-symbolic.svg"> Add Disk or Filesystem </button>'
|
||||
add_swap_button = ' <button class="button iis-info"> <img src="/static/icons/tab-new-symbolic.svg"> Swap Configuration </button>'
|
||||
bottom_menu = add_disks_button + add_swap_button
|
||||
|
||||
return render_template('disks.html', blockdevs=blockdevs,
|
||||
menu=current_app.config['CONFIG']['settings']['menu'],
|
||||
menu_order=current_app.config['CONFIG']['settings']['menu_order'].split(),
|
||||
previous_step = previous_step_url,
|
||||
next_step = next_step_url,
|
||||
bottom_menu = bottom_menu)
|
||||
|
||||
|
||||
@bp.route('/disks/partition/<part>')
|
||||
@@ -18,6 +35,16 @@ def disks_partition(part):
|
||||
"""
|
||||
Partition modal for the webui partition screen.
|
||||
"""
|
||||
return render_template('disks_partition.html')
|
||||
return render_template('disks_partition.html',
|
||||
menu=current_app.config['CONFIG']['settings']['menu'])
|
||||
|
||||
|
||||
def build_menu():
|
||||
"""
|
||||
Define menu items and paths.
|
||||
"""
|
||||
# proper one once translations are done:
|
||||
#current_app.config['CONFIG']['settings']['menu']['welcome'] = (build_stringlist()['menu_item'], "/welcome", 10)
|
||||
current_app.config['CONFIG']['settings']['menu']['disks'] = ("Disks", "/disks", 30)
|
||||
|
||||
build_menu()
|
||||
|
||||
7
src/applets/install/__init__.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from flask import Blueprint
|
||||
|
||||
bp = Blueprint('install', __name__,
|
||||
template_folder='')
|
||||
|
||||
from applets.install import routes
|
||||
|
||||
BIN
src/applets/install/__pycache__/__init__.cpython-312.pyc
Normal file
BIN
src/applets/install/__pycache__/__init__.cpython-313.pyc
Normal file
BIN
src/applets/install/__pycache__/routes.cpython-312.pyc
Normal file
BIN
src/applets/install/__pycache__/routes.cpython-313.pyc
Normal file
12
src/applets/install/install.html
Normal file
@@ -0,0 +1,12 @@
|
||||
{% extends "layout.html" %}
|
||||
{% block body %}
|
||||
|
||||
<p><b> Installing...</b></p>
|
||||
|
||||
<p> Or are we... </p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
14
src/applets/install/routes.py
Normal file
@@ -0,0 +1,14 @@
|
||||
from applets.install import bp
|
||||
from flask import Flask, request, session, redirect, \
|
||||
url_for, render_template, flash, Blueprint
|
||||
from flask import current_app
|
||||
|
||||
@bp.route('/install',methods=['GET', 'POST', 'PUT'])
|
||||
def install_index():
|
||||
"""
|
||||
The page you'd get if you access the root of
|
||||
this app in a browser.
|
||||
"""
|
||||
return render_template('install.html')
|
||||
|
||||
|
||||
@@ -1,11 +1,40 @@
|
||||
from applets.software import bp
|
||||
from flask import Flask, request, session, redirect, \
|
||||
url_for, render_template, flash, Blueprint
|
||||
|
||||
from flask import current_app
|
||||
|
||||
@bp.route('/software')
|
||||
def webui_software():
|
||||
"""
|
||||
Software screen for the webui.
|
||||
"""
|
||||
return render_template('software.html')
|
||||
menu = current_app.config['CONFIG']['settings']['menu_order'].split(" ")
|
||||
next_step_url = menu[menu.index("software")+1]
|
||||
if menu[menu.index("software")] == 1:
|
||||
previous_step_url = False
|
||||
else:
|
||||
previous_step_url = menu[menu.index("software")-1]
|
||||
|
||||
sources_button = ' <button class="button iis-info"> <img src="/static/icons/tab-new-symbolic.svg"> Edit Sources </button>'
|
||||
blends_button = ' <button class="button iis-info"> <img src="/static/icons/tab-new-symbolic.svg"> Install a Blend </button>'
|
||||
bottom_menu = sources_button + blends_button
|
||||
|
||||
|
||||
return render_template('software.html',
|
||||
menu=current_app.config['CONFIG']['settings']['menu'],
|
||||
menu_order=current_app.config['CONFIG']['settings']['menu_order'].split(),
|
||||
previous_step = previous_step_url,
|
||||
next_step = next_step_url,
|
||||
bottom_menu = bottom_menu)
|
||||
|
||||
|
||||
def build_menu():
|
||||
"""
|
||||
Define menu items and paths.
|
||||
"""
|
||||
# proper one once translations are done:
|
||||
#current_app.config['CONFIG']['settings']['menu']['welcome'] = (build_stringlist()['menu_item'], "/welcome", 10)
|
||||
current_app.config['CONFIG']['settings']['menu']['software'] = ("Software", "/software", 40)
|
||||
|
||||
build_menu()
|
||||
|
||||
|
||||
@@ -5,13 +5,43 @@
|
||||
|
||||
<br>
|
||||
|
||||
<ul>
|
||||
<li>Would you like to participate in popcon?</li>
|
||||
<li>Desktop environment</li>
|
||||
<li>Server software</li>
|
||||
<li>Sources.list configuration (include install media?)</li>
|
||||
</ul>
|
||||
<div style="background-color: gray; padding: 4px 6px 7px 6px; border-radius: 10px; margin-bottom: 20px;">
|
||||
<p> <span style="width: 100%; border-radius: 8px 8px 0 0;" class="tag is-black">
|
||||
Popularity Contest</span>
|
||||
<div style="padding-left: 15px; padding-right: 15px; background-color: #fff; color: #000;">
|
||||
<p>The Popularity Contest (popcon) is a programme where anonymous data is sent back to Debian, tracking the number of packages installed. More information can be obtained at https://popcon.debian.org. <br/><br/> <b>Would you like to participate in popcon?</b><p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="background-color: gray; padding: 4px 6px 7px 6px; border-radius: 10px;">
|
||||
<p> <span style="width: 100%; border-radius: 8px 8px 0 0;" class="tag is-black">
|
||||
Desktop Environment</span>
|
||||
<div style="padding: 15px; padding-top: 10px; padding-bottom: 5px; background-color: #fff; color: #000;">
|
||||
<p>
|
||||
<img src="/static/icons/console.png" width="48px" alt="" style="padding-right: 10px;" />
|
||||
<img src="/static/icons/gnome.jpeg" width="48px" alt="" style="padding-right: 10px;" />
|
||||
<img src="/static/icons/kde.jpeg" width="48px" alt="" style="padding-right: 10px;" />
|
||||
<img src="/static/icons/xfce.jpeg" width="48px" alt="" style="padding-right: 10px;" />
|
||||
<img src="/static/icons/mate.jpeg" width="48px" alt="" style="padding-right: 10px;" />
|
||||
<img src="/static/icons/lxde.jpeg" width="48px" alt="" style="padding-right: 10px;" />
|
||||
<p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
|
||||
<div style="background-color: gray; padding: 4px 6px 7px 6px; border-radius: 10px; margin-bottom: 20px;">
|
||||
<p> <span style="width: 100%; border-radius: 8px 8px 0 0;" class="tag is-black">
|
||||
Select software from Debian archives</span>
|
||||
<div style="padding-left: 15px; padding-right: 15px; padding-bottom: 5px; background-color: #fff; color: #000;">
|
||||
<p><b>Select packages or selections of packages from the Debian archives.</b></p>
|
||||
<button class="button is-dark">Games</button>
|
||||
<button class="button is-dark">Productivity</button>
|
||||
<button class="button is-dark">Creativity</button>
|
||||
<button class="button is-dark">Server</button>
|
||||
<button class="button is-dark">Development</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from applets.summary import bp
|
||||
from flask import Flask, request, session, redirect, \
|
||||
url_for, render_template, flash, Blueprint
|
||||
from flask import current_app
|
||||
|
||||
@bp.route('/summary',methods=['GET', 'POST', 'PUT'])
|
||||
def summary_index():
|
||||
@@ -8,6 +9,28 @@ def summary_index():
|
||||
The page you'd get if you access the root of
|
||||
this app in a browser.
|
||||
"""
|
||||
return render_template('summary.html')
|
||||
build_menu()
|
||||
menu = current_app.config['CONFIG']['settings']['menu_order'].split(" ")
|
||||
previous_step_url = menu[menu.index("summary")-1]
|
||||
next_step_url = "install"
|
||||
|
||||
print("previous step url: ", previous_step_url)
|
||||
|
||||
return render_template('summary.html',
|
||||
menu=current_app.config['CONFIG']['settings']['menu'],
|
||||
menu_order=current_app.config['CONFIG']['settings']['menu_order'].split(),
|
||||
previous_step=previous_step_url,
|
||||
next_step=next_step_url)
|
||||
|
||||
|
||||
def build_menu():
|
||||
"""
|
||||
Define menu items and paths.
|
||||
"""
|
||||
# proper one once translations are done:
|
||||
#current_app.config['CONFIG']['settings']['menu']['welcome'] = (build_stringlist()['menu_item'], "/welcome", 10)
|
||||
current_app.config['CONFIG']['settings']['menu']['summary'] = ("Summary", "/summary", 60)
|
||||
|
||||
|
||||
build_menu()
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
<p><b> Ready to install! Please review all changes.</b></p>
|
||||
|
||||
<p> This is the last chance to back out before committing to instal, please ensure all the details are correct. </p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
BIN
src/applets/users/locales/af/LC_MESSAGES/users.mo
Normal file
65
src/applets/users/locales/af/LC_MESSAGES/users.po
Normal file
@@ -0,0 +1,65 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-06-20 15:48+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: routes.py:33
|
||||
msgid "Let's set up an initial user."
|
||||
msgstr "Kom on stel 'n gebruiker op."
|
||||
|
||||
msgid "Users"
|
||||
msgstr "Gebruikers"
|
||||
|
||||
#: routes.py:34
|
||||
msgid "Full Name"
|
||||
msgstr "Volle Naam"
|
||||
|
||||
#: routes.py:35
|
||||
msgid "Username"
|
||||
msgstr "Gebruikersnaam"
|
||||
|
||||
#: routes.py:36
|
||||
msgid "This username is available"
|
||||
msgstr "Hierdie gebruikersnaam is nie beskikbaar nie."
|
||||
|
||||
#: routes.py:37
|
||||
msgid "This username is not available"
|
||||
msgstr "Hierdie gebruikersnaam is nie beskikbaar nie."
|
||||
|
||||
#: routes.py:38
|
||||
msgid "This username is reserved by the system"
|
||||
msgstr "Hierdie gebruikersnaam is reserveerd deur vir die sisteem."
|
||||
|
||||
#: routes.py:39
|
||||
msgid "The username must be one word, lowercase, with no special characters"
|
||||
msgstr "Die gebruikersnaam moet een woord wees, kleinletters, met geen spesiale karakters."
|
||||
|
||||
#: routes.py:40
|
||||
msgid "Password"
|
||||
msgstr "Wagwoord"
|
||||
|
||||
#: routes.py:41
|
||||
msgid "Password (confirm)"
|
||||
msgstr "Wagwoord (bevestig)"
|
||||
|
||||
#: routes.py:42
|
||||
msgid "These passwords do now match"
|
||||
msgstr "Hierdie wagwoorde is nie dieselfde nie"
|
||||
|
||||
#: routes.py:43
|
||||
msgid "This password is too short"
|
||||
msgstr "Hierdie wagwoord is te kort"
|
||||
62
src/applets/users/locales/users.pot
Normal file
@@ -0,0 +1,62 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-06-20 15:48+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: routes.py:33
|
||||
msgid "Let's set up an initial user."
|
||||
msgstr ""
|
||||
|
||||
#: routes.py:34
|
||||
msgid "Full Name"
|
||||
msgstr ""
|
||||
|
||||
#: routes.py:35
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: routes.py:36
|
||||
msgid "This username is available"
|
||||
msgstr ""
|
||||
|
||||
#: routes.py:37
|
||||
msgid "This username is not available"
|
||||
msgstr ""
|
||||
|
||||
#: routes.py:38
|
||||
msgid "This username is reserved by the system"
|
||||
msgstr ""
|
||||
|
||||
#: routes.py:39
|
||||
msgid "The username must be one word, lowercase, with no special characters"
|
||||
msgstr ""
|
||||
|
||||
#: routes.py:40
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: routes.py:41
|
||||
msgid "Password (confirm)"
|
||||
msgstr ""
|
||||
|
||||
#: routes.py:42
|
||||
msgid "These passwords do now match"
|
||||
msgstr ""
|
||||
|
||||
#: routes.py:43
|
||||
msgid "This password is too short"
|
||||
msgstr ""
|
||||
@@ -25,7 +25,25 @@ def users_root():
|
||||
set_language(current_app.config['CONFIG']['settings']['language'])
|
||||
string_dict = build_stringlist()
|
||||
build_menu()
|
||||
return render_template('users.html', string_dict=string_dict)
|
||||
menu = current_app.config['CONFIG']['settings']['menu_order'].split(" ")
|
||||
next_step_url = menu[menu.index("users")+1]
|
||||
if menu[menu.index("users")] == 1:
|
||||
previous_step_url = False
|
||||
else:
|
||||
previous_step_url = menu[menu.index("users")-1]
|
||||
|
||||
root_button = ' <button class="button is-light"> <img width="16px;" src="/static/icons/emblem-default-symbolic.svg"> Setup root user </button>'
|
||||
ldap_button = ' <button class="button is-light"> <img width="16px;" src="/static/icons/emblem-default-symbolic.svg"> Connect LDAP </button>'
|
||||
ad_button = ' <button class="button is-light"> <img width="16px;" src="/static/icons/emblem-default-symbolic.svg"> Connect AD </button>'
|
||||
csv_button = ' <button class="button is-light"> <img width="16px;" src="/static/icons/emblem-default-symbolic.svg"> Import CSV </button>'
|
||||
bottom_menu = root_button + ldap_button + ad_button + csv_button
|
||||
|
||||
return render_template('users.html', string_dict=string_dict,
|
||||
menu=current_app.config['CONFIG']['settings']['menu'],
|
||||
menu_order=current_app.config['CONFIG']['settings']['menu_order'].split(),
|
||||
previous_step=previous_step_url,
|
||||
next_step=next_step_url,
|
||||
bottom_menu=bottom_menu)
|
||||
|
||||
|
||||
def build_stringlist():
|
||||
@@ -47,6 +65,7 @@ def build_stringlist():
|
||||
string_dict['password_tooshort'] = _("This password is too short")
|
||||
return string_dict
|
||||
|
||||
|
||||
def build_menu():
|
||||
"""
|
||||
Define menu items and paths.
|
||||
@@ -54,3 +73,4 @@ def build_menu():
|
||||
current_app.config['CONFIG']['settings']['menu']['users'] = (build_stringlist()['menu_item'], "/users", 20)
|
||||
print(current_app.config['CONFIG']['settings']['menu'])
|
||||
|
||||
build_menu()
|
||||
|
||||
@@ -37,7 +37,29 @@ def welcome_index():
|
||||
blkid = lsblk.list_scsi_devices()
|
||||
string_dict = build_stringlist()
|
||||
build_menu()
|
||||
return render_template('welcome.html', string_dict=string_dict, selected_lang=lang)
|
||||
menu = current_app.config['CONFIG']['settings']['menu_order'].split(" ")
|
||||
next_step_url = menu[menu.index("welcome")+1]
|
||||
previous_step_url = menu[menu.index("welcome")-1]
|
||||
|
||||
print("index is: " , menu.index("welcome"))
|
||||
if menu.index("welcome") == 0:
|
||||
previous_step_url = False
|
||||
else:
|
||||
previous_step_url = menu[menu.index("users")-1]
|
||||
|
||||
print("next is: " + next_step_url)
|
||||
print("previous is: " , previous_step_url)
|
||||
power_button = '<button class="button is-dark"> <img width="16px;" src="/static/icons/greencheck.png"> Power: AC </button>'
|
||||
internet_button = ' <button class="button is-dark"> <img width="16px;" src="/static/icons/greencheck.png"> Internet </button>'
|
||||
bottom_menu = power_button + internet_button
|
||||
|
||||
return render_template('welcome.html',
|
||||
string_dict=string_dict, selected_lang=lang,
|
||||
menu=current_app.config['CONFIG']['settings']['menu'],
|
||||
menu_order=current_app.config['CONFIG']['settings']['menu_order'].split(),
|
||||
previous_step=previous_step_url,
|
||||
next_step=next_step_url,
|
||||
bottom_menu=bottom_menu)
|
||||
|
||||
|
||||
def build_stringlist():
|
||||
@@ -64,8 +86,11 @@ def build_menu():
|
||||
"""
|
||||
Define menu items and paths.
|
||||
"""
|
||||
print(current_app.config['CONFIG']['settings']['menu'])
|
||||
print(build_stringlist()['menu_item'])
|
||||
current_app.config['CONFIG']['settings']['menu']['welcome'] = (build_stringlist()['menu_item'], "/welcome", 10)
|
||||
|
||||
set_language(current_app.config['CONFIG']['settings']['language'])
|
||||
build_menu
|
||||
|
||||
#for app in current_app.config['CONFIG']['settings']['apps'].split():
|
||||
#print(app)
|
||||
#current_app.config['CONFIG']['settings']['menu'][app] = (globals[app].build_stringlist()['menu_item'], "/" + app, 10)
|
||||
|
||||
@@ -4,7 +4,9 @@
|
||||
<img style="width: 100%; border-radius: 8px;" src="/static/applets/welcome/img/banner.png" alt="Debian Image banner" />
|
||||
|
||||
<p><b> {{ string_dict['welcome_text'] }} </b></p>
|
||||
<p>{{ string_dict['confirm_text'] }} </p>
|
||||
<p>{{ string_dict['confirm_text'] }} </p> <br />
|
||||
|
||||
<div style="padding-left: 15px;">
|
||||
|
||||
<form action="/welcome" method="POST">
|
||||
<img src="/static/icons/keyboard.svg" /> {{ string_dict['language_text'] }}
|
||||
@@ -43,10 +45,10 @@
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
BIN
src/static/icons/console.jpeg
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
src/static/icons/console.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
src/static/icons/gnome.jpeg
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
src/static/icons/greencheck.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
src/static/icons/kde.jpeg
Normal file
|
After Width: | Height: | Size: 24 KiB |
@@ -1 +1,53 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g font-weight="400" fill="#474747"><path d="M3.702 1C2.17 1 .984 2.32.984 3.844v8.344c0 1.524 1.185 2.843 2.718 2.843h8.58c1.532 0 2.75-1.32 2.75-2.844V3.845c0-1.525-1.218-2.844-2.75-2.844zm.782 1.031c3.526.256 5.317.134 7.047 0 .754-.058 1.532.616 1.532 1.438v7.375c0 .665-.532 1.095-1.188 1.187-2.836.397-4.753.44-7.673 0-.655-.099-1.187-.522-1.187-1.187V3.5c0-.822.714-1.524 1.469-1.469z" style="line-height:normal;-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration-line:none;text-transform:none;marker:none" color="#bebebe" font-family="Bitstream Vera Sans" overflow="visible"/><path d="M10.564 5.977l-2.939.044.016 1 2.879-.043c.2.018.33.076.396.135.067.06.105.121.105.293l-.008.604H8.517l.037.002a1.457 1.457 0 00-1.164.43 1.558 1.558 0 00-.416 1.023c-.013.367.092.75.352 1.053.26.303.687.496 1.162.482h3.482l.051-3.59v-.004c0-.402-.16-.786-.435-1.035-.276-.249-.63-.364-.998-.393zM8.48 9.01h2.519l-.014.99H8.457c-.22.007-.302-.051-.371-.133a.553.553 0 01-.112-.367.587.587 0 01.141-.371c.079-.083.163-.134.363-.12zm2.862-5.985l-3 1 .316.95 3-1z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal;marker:none" color="#000" font-family="sans-serif" overflow="visible"/></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="16"
|
||||
height="16"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="keyboard.svg"
|
||||
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="namedview2"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="52.375"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:window-width="1236"
|
||||
inkscape:window-height="1041"
|
||||
inkscape:window-x="662"
|
||||
inkscape:window-y="199"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg2" />
|
||||
<g
|
||||
font-weight="400"
|
||||
fill="#474747"
|
||||
id="g2"
|
||||
style="fill:#c0bfbc">
|
||||
<path
|
||||
d="M3.702 1C2.17 1 .984 2.32.984 3.844v8.344c0 1.524 1.185 2.843 2.718 2.843h8.58c1.532 0 2.75-1.32 2.75-2.844V3.845c0-1.525-1.218-2.844-2.75-2.844zm.782 1.031c3.526.256 5.317.134 7.047 0 .754-.058 1.532.616 1.532 1.438v7.375c0 .665-.532 1.095-1.188 1.187-2.836.397-4.753.44-7.673 0-.655-.099-1.187-.522-1.187-1.187V3.5c0-.822.714-1.524 1.469-1.469z"
|
||||
style="line-height:normal;-inkscape-font-specification:'Bitstream Vera Sans';text-indent:0;text-align:start;text-decoration-line:none;text-transform:none;marker:none;fill:#c0bfbc"
|
||||
color="#bebebe"
|
||||
font-family="Bitstream Vera Sans"
|
||||
overflow="visible"
|
||||
id="path1" />
|
||||
<path
|
||||
d="M10.564 5.977l-2.939.044.016 1 2.879-.043c.2.018.33.076.396.135.067.06.105.121.105.293l-.008.604H8.517l.037.002a1.457 1.457 0 00-1.164.43 1.558 1.558 0 00-.416 1.023c-.013.367.092.75.352 1.053.26.303.687.496 1.162.482h3.482l.051-3.59v-.004c0-.402-.16-.786-.435-1.035-.276-.249-.63-.364-.998-.393zM8.48 9.01h2.519l-.014.99H8.457c-.22.007-.302-.051-.371-.133a.553.553 0 01-.112-.367.587.587 0 01.141-.371c.079-.083.163-.134.363-.12zm2.862-5.985l-3 1 .316.95 3-1z"
|
||||
style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal;marker:none;fill:#c0bfbc"
|
||||
color="#000"
|
||||
font-family="sans-serif"
|
||||
overflow="visible"
|
||||
id="path2" />
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 2.7 KiB |
BIN
src/static/icons/lxde.jpeg
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
src/static/icons/mate.jpeg
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
src/static/icons/xfce.jpeg
Normal file
|
After Width: | Height: | Size: 20 KiB |
@@ -5,7 +5,7 @@ html {
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
font-family: Noto Sans;
|
||||
font-family: Sans; Roboto; Lato; Noto Sans;
|
||||
color: white;
|
||||
overflow: hidden;
|
||||
min-width: 1050px;
|
||||
@@ -31,7 +31,7 @@ html, body {margin: 0; height: 100%; overflow: hidden;}
|
||||
|
||||
.applet {
|
||||
width: 100%;
|
||||
height: 410px;
|
||||
height: 442px;
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
import webview
|
||||
|
||||
LOCATION = "http://10.10.99.22:8080/welcome"
|
||||
LOCATION = "http://localhost:8080/welcome"
|
||||
|
||||
def on_closed():
|
||||
|
||||
@@ -7,7 +7,8 @@ settings:
|
||||
language: en
|
||||
devmode: True
|
||||
apt_depends: util-linux adduser parted e2fsprogs debootstrap
|
||||
apps: main welcome users disks software summary
|
||||
apps: main welcome users disks software summary install
|
||||
menu_order: welcome users disks software summary
|
||||
|
||||
recipe:
|
||||
Install some packages:
|
||||
|
||||
@@ -1,12 +1,29 @@
|
||||
<!-- Buttons on the left -->
|
||||
<div style="position: absolute; bottom: 15px; left: 15px;">
|
||||
<button class="button is-light">Back</button>
|
||||
<button class="button is-light">Connect Active Directory</button>
|
||||
<button class="button is-light">Connect LDAP</button>
|
||||
|
||||
{% if previous_step %}
|
||||
<a href="/{{ previous_step }}"><button class="button is-light">Back</button></a>
|
||||
{% endif %}
|
||||
|
||||
{% if bottom_menu %}
|
||||
{{ bottom_menu | safe }}
|
||||
{% endif %}
|
||||
|
||||
{% if connect %}
|
||||
<button class="button is-light">Connect Active Directory</button>
|
||||
<button class="button is-light">Connect LDAP</button>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Buttons on the right -->
|
||||
<div style="position: absolute; bottom: 15px; right: 15px;">
|
||||
<a href="./disks"><button class="button is-link">Next</button></a>
|
||||
{% if next_step %}
|
||||
{% if next_step == "install" %}
|
||||
<a href="/{{ next_step }}"><button class="button is-link">Install</button></a>
|
||||
{% else %}
|
||||
<a href="/{{ next_step }}"><button class="button is-link">Next</button></a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
<!-- drag region class: -->
|
||||
<!-- <div id="titlebar" class="pywebview-drag-region" style="padding: 15px; margin: -15px; padding-bottom: 30px;"> -->
|
||||
|
||||
<button class="button is-link"> ☰ </button>
|
||||
<a href="/welcome"><button class="button is-{% if request.path == "/welcome" %}info{% else %}dark{% endif %}">Welcome</button></a>
|
||||
<a href="/users"><button class="button is-{% if request.path == "/users" %}info{% else %}dark{% endif %}">Users</button></a>
|
||||
<a href="/disks"><button class="button is-{% if request.path == "/disks" %}info{% else %}dark{% endif %}">Disks</button></a>
|
||||
<a href="/software"><button class="button is-{% if request.path == "/software" %}info{% else %}dark{% endif %}">Software</button></a>
|
||||
<a href="/summary"><button class="button is-{% if request.path == "/summary" %}info{% else %}dark{% endif %}">Summary</button></a>
|
||||
<button class="button is-link"> ☰ </button>
|
||||
|
||||
{% for item in menu_order %}
|
||||
<a href="{{ menu[item][1]}}"> <button class="button is-{% if request.path == menu[item][1] %}info{% else %}dark{% endif %}"> {{ menu[item][0]}} </button></a>
|
||||
{% endfor %}
|
||||
|
||||
|
||||
<div style="position: absolute; top: 15px; right: 15px;">
|
||||
<a href="/help"> <button class="button is-light"> <b> ? </b> </button></a>
|
||||
|
||||