some more ui work
@@ -24,9 +24,6 @@
|
|||||||
|
|
||||||
<div class="columns" width="100%">
|
<div class="columns" width="100%">
|
||||||
<div class="column"><p> Current layout: </p></div>
|
<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>
|
</div>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ from applets.disks import bp
|
|||||||
from flask import Flask, request, session, redirect, \
|
from flask import Flask, request, session, redirect, \
|
||||||
url_for, render_template, flash, Blueprint
|
url_for, render_template, flash, Blueprint
|
||||||
import dmm.lsblk as lsblk
|
import dmm.lsblk as lsblk
|
||||||
|
from flask import current_app
|
||||||
|
|
||||||
@bp.route('/disks')
|
@bp.route('/disks')
|
||||||
def disks():
|
def disks():
|
||||||
@@ -10,7 +11,23 @@ def disks():
|
|||||||
"""
|
"""
|
||||||
blockdevs = lsblk.list_block_devices()
|
blockdevs = lsblk.list_block_devices()
|
||||||
print(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>')
|
@bp.route('/disks/partition/<part>')
|
||||||
@@ -18,6 +35,16 @@ def disks_partition(part):
|
|||||||
"""
|
"""
|
||||||
Partition modal for the webui partition screen.
|
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 applets.software import bp
|
||||||
from flask import Flask, request, session, redirect, \
|
from flask import Flask, request, session, redirect, \
|
||||||
url_for, render_template, flash, Blueprint
|
url_for, render_template, flash, Blueprint
|
||||||
|
from flask import current_app
|
||||||
|
|
||||||
@bp.route('/software')
|
@bp.route('/software')
|
||||||
def webui_software():
|
def webui_software():
|
||||||
"""
|
"""
|
||||||
Software screen for the webui.
|
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>
|
<br>
|
||||||
|
|
||||||
<ul>
|
<div style="background-color: gray; padding: 4px 6px 7px 6px; border-radius: 10px; margin-bottom: 20px;">
|
||||||
<li>Would you like to participate in popcon?</li>
|
<p> <span style="width: 100%; border-radius: 8px 8px 0 0;" class="tag is-black">
|
||||||
<li>Desktop environment</li>
|
Popularity Contest</span>
|
||||||
<li>Server software</li>
|
<div style="padding-left: 15px; padding-right: 15px; background-color: #fff; color: #000;">
|
||||||
<li>Sources.list configuration (include install media?)</li>
|
<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>
|
||||||
</ul>
|
</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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from applets.summary import bp
|
from applets.summary import bp
|
||||||
from flask import Flask, request, session, redirect, \
|
from flask import Flask, request, session, redirect, \
|
||||||
url_for, render_template, flash, Blueprint
|
url_for, render_template, flash, Blueprint
|
||||||
|
from flask import current_app
|
||||||
|
|
||||||
@bp.route('/summary',methods=['GET', 'POST', 'PUT'])
|
@bp.route('/summary',methods=['GET', 'POST', 'PUT'])
|
||||||
def summary_index():
|
def summary_index():
|
||||||
@@ -8,6 +9,28 @@ def summary_index():
|
|||||||
The page you'd get if you access the root of
|
The page you'd get if you access the root of
|
||||||
this app in a browser.
|
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><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>
|
</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'])
|
set_language(current_app.config['CONFIG']['settings']['language'])
|
||||||
string_dict = build_stringlist()
|
string_dict = build_stringlist()
|
||||||
build_menu()
|
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():
|
def build_stringlist():
|
||||||
@@ -47,6 +65,7 @@ def build_stringlist():
|
|||||||
string_dict['password_tooshort'] = _("This password is too short")
|
string_dict['password_tooshort'] = _("This password is too short")
|
||||||
return string_dict
|
return string_dict
|
||||||
|
|
||||||
|
|
||||||
def build_menu():
|
def build_menu():
|
||||||
"""
|
"""
|
||||||
Define menu items and paths.
|
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)
|
current_app.config['CONFIG']['settings']['menu']['users'] = (build_stringlist()['menu_item'], "/users", 20)
|
||||||
print(current_app.config['CONFIG']['settings']['menu'])
|
print(current_app.config['CONFIG']['settings']['menu'])
|
||||||
|
|
||||||
|
build_menu()
|
||||||
|
|||||||
@@ -37,7 +37,29 @@ def welcome_index():
|
|||||||
blkid = lsblk.list_scsi_devices()
|
blkid = lsblk.list_scsi_devices()
|
||||||
string_dict = build_stringlist()
|
string_dict = build_stringlist()
|
||||||
build_menu()
|
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():
|
def build_stringlist():
|
||||||
@@ -64,8 +86,11 @@ def build_menu():
|
|||||||
"""
|
"""
|
||||||
Define menu items and paths.
|
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)
|
current_app.config['CONFIG']['settings']['menu']['welcome'] = (build_stringlist()['menu_item'], "/welcome", 10)
|
||||||
|
|
||||||
set_language(current_app.config['CONFIG']['settings']['language'])
|
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" />
|
<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><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">
|
<form action="/welcome" method="POST">
|
||||||
<img src="/static/icons/keyboard.svg" /> {{ string_dict['language_text'] }}
|
<img src="/static/icons/keyboard.svg" /> {{ string_dict['language_text'] }}
|
||||||
@@ -43,10 +45,10 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</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 {
|
body {
|
||||||
display: flex;
|
display: flex;
|
||||||
font-family: Noto Sans;
|
font-family: Sans; Roboto; Lato; Noto Sans;
|
||||||
color: white;
|
color: white;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
min-width: 1050px;
|
min-width: 1050px;
|
||||||
@@ -31,7 +31,7 @@ html, body {margin: 0; height: 100%; overflow: hidden;}
|
|||||||
|
|
||||||
.applet {
|
.applet {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 410px;
|
height: 442px;
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
import webview
|
import webview
|
||||||
|
|
||||||
LOCATION = "http://10.10.99.22:8080/welcome"
|
|
||||||
LOCATION = "http://localhost:8080/welcome"
|
LOCATION = "http://localhost:8080/welcome"
|
||||||
|
|
||||||
def on_closed():
|
def on_closed():
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ settings:
|
|||||||
language: en
|
language: en
|
||||||
devmode: True
|
devmode: True
|
||||||
apt_depends: util-linux adduser parted e2fsprogs debootstrap
|
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:
|
recipe:
|
||||||
Install some packages:
|
Install some packages:
|
||||||
|
|||||||
@@ -1,12 +1,29 @@
|
|||||||
<!-- Buttons on the left -->
|
<!-- Buttons on the left -->
|
||||||
<div style="position: absolute; bottom: 15px; left: 15px;">
|
<div style="position: absolute; bottom: 15px; left: 15px;">
|
||||||
<button class="button is-light">Back</button>
|
|
||||||
<button class="button is-light">Connect Active Directory</button>
|
{% if previous_step %}
|
||||||
<button class="button is-light">Connect LDAP</button>
|
<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>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- Buttons on the right -->
|
<!-- Buttons on the right -->
|
||||||
<div style="position: absolute; bottom: 15px; right: 15px;">
|
<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>
|
</div>
|
||||||
|
|||||||
@@ -4,12 +4,12 @@
|
|||||||
<!-- drag region class: -->
|
<!-- drag region class: -->
|
||||||
<!-- <div id="titlebar" class="pywebview-drag-region" style="padding: 15px; margin: -15px; padding-bottom: 30px;"> -->
|
<!-- <div id="titlebar" class="pywebview-drag-region" style="padding: 15px; margin: -15px; padding-bottom: 30px;"> -->
|
||||||
|
|
||||||
<button class="button is-link"> ☰ </button>
|
<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>
|
{% for item in menu_order %}
|
||||||
<a href="/disks"><button class="button is-{% if request.path == "/disks" %}info{% else %}dark{% endif %}">Disks</button></a>
|
<a href="{{ menu[item][1]}}"> <button class="button is-{% if request.path == menu[item][1] %}info{% else %}dark{% endif %}"> {{ menu[item][0]}} </button></a>
|
||||||
<a href="/software"><button class="button is-{% if request.path == "/software" %}info{% else %}dark{% endif %}">Software</button></a>
|
{% endfor %}
|
||||||
<a href="/summary"><button class="button is-{% if request.path == "/summary" %}info{% else %}dark{% endif %}">Summary</button></a>
|
|
||||||
|
|
||||||
<div style="position: absolute; top: 15px; right: 15px;">
|
<div style="position: absolute; top: 15px; right: 15px;">
|
||||||
<a href="/help"> <button class="button is-light"> <b> ? </b> </button></a>
|
<a href="/help"> <button class="button is-light"> <b> ? </b> </button></a>
|
||||||
|
|||||||