WIP: macproblemsolver #6
BIN
Client/.DS_Store
vendored
Normal file
BIN
Client/Resources/.DS_Store
vendored
Normal file
@ -2,7 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<Version>1.0.0</Version>
|
||||
<Version>1.0.12</Version>
|
||||
<Authors>SZUAbsolventenverein</Authors>
|
||||
<Company>SZUAbsolventenverein</Company>
|
||||
<Description>[Description]</Description>
|
||||
@ -19,8 +19,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Oqtane.Client"><HintPath>..\..\oqtane.framework-dev\Oqtane.Server\bin\Debug\net9.0\Oqtane.Client.dll</HintPath></Reference>
|
||||
<Reference Include="Oqtane.Shared"><HintPath>..\..\oqtane.framework-dev\Oqtane.Server\bin\Debug\net9.0\Oqtane.Shared.dll</HintPath></Reference>
|
||||
<Reference Include="Oqtane.Client"><HintPath>..\..\oqtane.framework\Oqtane.Server\bin\Debug\net9.0\Oqtane.Client.dll</HintPath></Reference>
|
||||
<Reference Include="Oqtane.Shared"><HintPath>..\..\oqtane.framework\Oqtane.Server\bin\Debug\net9.0\Oqtane.Shared.dll</HintPath></Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
|
||||
@ -10,7 +10,7 @@ namespace SZUAbsolventenverein.Theme.Website
|
||||
public Oqtane.Models.Theme Theme => new Oqtane.Models.Theme
|
||||
{
|
||||
Name = "SZUAbsolventenverein Website",
|
||||
Version = "1.0.0",
|
||||
Version = "1.0.12",
|
||||
PackageName = "SZUAbsolventenverein.Theme.Website",
|
||||
ThemeSettingsType = "SZUAbsolventenverein.Theme.Website.ThemeSettings, SZUAbsolventenverein.Theme.Website.Client.Oqtane",
|
||||
ContainerSettingsType = "SZUAbsolventenverein.Theme.Website.ContainerSettings, SZUAbsolventenverein.Theme.Website.Client.Oqtane",
|
||||
|
||||
@ -1,30 +1,87 @@
|
||||
@namespace SZUAbsolventenverein.Theme.Website
|
||||
@namespace SZUAbsolventenverein.Theme.Website
|
||||
@inherits ThemeBase
|
||||
@inject NavigationManager NavigationManager
|
||||
@inject ISettingService SettingService
|
||||
@implements IDisposable
|
||||
|
||||
<div class="wrapper d-flex flex-column min-vh-100">
|
||||
<main role="main" class="flex-fill">
|
||||
<main role="main">
|
||||
<nav class="navbar navbar-dark bg-primary fixed-top app-navbar">
|
||||
<!-- Logo links -->
|
||||
<div class="d-flex align-items-center gap-2 app-navbar-left">
|
||||
<Logo />
|
||||
</div>
|
||||
|
||||
<nav class="navigation">
|
||||
<div class="container d-flex justify-content-between align-items-center">
|
||||
<a class="navbar-brand" href="https://www.szu-home.at/">
|
||||
<img src="Images/szu-Logo.png" alt="Logo" class="img-fluid" style="max-height: 60px;" />
|
||||
<!-- Versteckte Checkbox zum Steuern des Menüs (nur HTML, kein Blazor) -->
|
||||
<input type="checkbox" id="nav-toggle" class="nav-toggle" @bind="_navOpen" />
|
||||
|
||||
<!-- Burger-Icon, das die Checkbox toggelt -->
|
||||
<label for="nav-toggle" class="nav-toggle-label">
|
||||
<span></span>
|
||||
<span></span>
|
||||
<span></span>
|
||||
</label>
|
||||
|
||||
<!-- Menü-Container, der per :checked ein-/ausgeblendet wird -->
|
||||
<div class="app-menu">
|
||||
<div class="app-menu-items">
|
||||
@if (PageState?.Pages != null)
|
||||
{
|
||||
// Diese Seitennamen sollen NICHT im Menü erscheinen
|
||||
var hiddenNames = new[]
|
||||
{
|
||||
"Login", "Register", "Reset", "Profile",
|
||||
"Search", "Privacy", "Terms", "Not Found", "NotFound"
|
||||
};
|
||||
|
||||
@foreach (var page in PageState.Pages
|
||||
.Where(p => p.ParentId == null
|
||||
&& p.IsNavigation
|
||||
&& !p.IsDeleted
|
||||
&& !hiddenNames.Contains(p.Name)))
|
||||
{
|
||||
<div class="nav-item">
|
||||
<a class="nav-link text-white" href="@(@page.Path)">
|
||||
@(@page.Name)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<Menu Orientation="Horizontal" />
|
||||
var children = PageState.Pages
|
||||
.Where(c => c.ParentId == page.PageId
|
||||
&& c.IsNavigation
|
||||
&& !c.IsDeleted
|
||||
&& !hiddenNames.Contains(c.Name));
|
||||
|
||||
<div class="controls ms-auto">
|
||||
<div class="controls-group">
|
||||
if (children.Any())
|
||||
{
|
||||
<div class="app-submenu">
|
||||
@foreach (var child in children)
|
||||
{
|
||||
<div class="nav-item">
|
||||
<a class="nav-link text-white" href="@child.Path">
|
||||
@child.Name
|
||||
</a>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
}
|
||||
}
|
||||
</div>
|
||||
|
||||
<!-- WICHTIG: Footer jetzt AUßERHALB von app-menu-items -->
|
||||
<div class="app-menu-footer ">
|
||||
<UserProfile ShowRegister="@_register" />
|
||||
<Login ShowLogin="@_login" />
|
||||
<ControlPanel LanguageDropdownAlignment="right" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Rechts: ControlPanel + User + Login -->
|
||||
<div class="d-flex align-items-center gap-2 app-navbar-left">
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<ControlPanel/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
</nav>
|
||||
<div class="content">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
@ -108,15 +165,9 @@
|
||||
</div>
|
||||
<Pane Name="Bottom Full Width" />
|
||||
</div>
|
||||
|
||||
<footer class="footer">
|
||||
<div class="text text-center">
|
||||
<p>Impressum | Datenschutz | AGB</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<CookieConsent />
|
||||
</main>
|
||||
</div>
|
||||
|
||||
|
||||
@code {
|
||||
public override string Name => "Theme1";
|
||||
@ -126,6 +177,12 @@
|
||||
private bool _showDropdown = false;
|
||||
private bool _login = true;
|
||||
private bool _register = true;
|
||||
private bool _navOpen = false;
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
NavigationManager.LocationChanged += LocationChanged;
|
||||
}
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
@ -141,8 +198,14 @@
|
||||
}
|
||||
}
|
||||
|
||||
private void ToggleDropdown()
|
||||
private void LocationChanged(object sender, LocationChangedEventArgs args)
|
||||
{
|
||||
_showDropdown = !_showDropdown;
|
||||
_navOpen = false;
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
NavigationManager.LocationChanged -= LocationChanged;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,87 +1,35 @@
|
||||
/* Oqtane Styles */
|
||||
html, body {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
/* ===========================
|
||||
Standard Layout
|
||||
=========================== */
|
||||
|
||||
body {}
|
||||
|
||||
/* Login-Button (Mobile + Desktop) */
|
||||
.app-menu-footer .btn-login,
|
||||
.app-menu-footer .login-btn,
|
||||
.app-menu-footer button,
|
||||
.app-menu-footer a {
|
||||
background-color: #ffffff !important;
|
||||
border: 1px solid #ccc !important;
|
||||
color: #555 !important;
|
||||
padding: 6px 14px !important;
|
||||
border-radius: 6px !important;
|
||||
font-weight: 500 !important;
|
||||
}
|
||||
|
||||
.navigation {
|
||||
max-width: 80vw; /* oder max-width: 100%; */
|
||||
margin: 0 auto;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
z-index: 1000;
|
||||
background-color: #bbb;
|
||||
padding: 1rem 0;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||
width: 80vw; /* Wichtig! */
|
||||
left: 50%; /* horizontale Zentrierung mit transform */
|
||||
transform: translateX(-50%);
|
||||
border: 3px solid #75767B;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
body {
|
||||
padding-top: 100px; /* H<>he der fixierten Navigation kompensieren */
|
||||
}
|
||||
|
||||
.navigation .app-logo .img-fluid {
|
||||
max-height: 60px;
|
||||
}
|
||||
|
||||
.navigation .app-menu {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.navigation .nav-item a {
|
||||
color: black;
|
||||
font-weight: normal;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.navigation .nav-item a.active {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
.footer {
|
||||
background-color: #bbb;
|
||||
padding: 1rem 0;
|
||||
text-align: center;
|
||||
border: 3px solid #75767B;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
margin-top: auto;
|
||||
}
|
||||
|
||||
|
||||
.wrapper {
|
||||
max-width: 80vw; /* max. 80% der Viewport-Breite */
|
||||
margin: 0 auto; /* horizontal zentrieren */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
main.flex-fill {
|
||||
flex: 1 0 auto; /* Flex-grow 1, flex-shrink 0, flex-basis auto */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 0; /* Wichtig f<>r flexbox overflow */
|
||||
/* Hover-Effekt */
|
||||
.app-menu-footer .btn-login:hover,
|
||||
.app-menu-footer .login-btn:hover,
|
||||
.app-menu-footer button:hover,
|
||||
.app-menu-footer a:hover {
|
||||
background-color: #f2f2f2 !important;
|
||||
border-color: #bbb !important;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
.content {
|
||||
width: 80vw; /* Fixe Breite 80% Viewport */
|
||||
margin: 0 auto;
|
||||
flex-grow: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border: 3px solid #75767B;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
background-color: white;
|
||||
padding: 1rem;
|
||||
margin-top: 60px;
|
||||
/* ungefähr Höhe der Navbar */
|
||||
}
|
||||
|
||||
/* App Logo */
|
||||
@ -90,7 +38,7 @@ main.flex-fill {
|
||||
padding: 0 5px 0 5px;
|
||||
}
|
||||
|
||||
.table > :not(caption) > * > * {
|
||||
.table> :not(caption)>*>* {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
@ -98,12 +46,18 @@ main.flex-fill {
|
||||
background-color: #ffffff !important;
|
||||
border-width: 0.5px !important;
|
||||
border-bottom-color: #ccc !important;
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.table .form-select {
|
||||
background-color: #ffffff !important;
|
||||
border-width: 0.5px !important;
|
||||
border-bottom-color: #ccc !important;
|
||||
color: #000 !important;
|
||||
}
|
||||
|
||||
.bg-primary {
|
||||
background-color: #b1b0b0 !important;
|
||||
}
|
||||
|
||||
.table .btn-primary {
|
||||
@ -118,6 +72,10 @@ main.flex-fill {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
background-color: grey;
|
||||
}
|
||||
|
||||
.controls {
|
||||
z-index: 2000;
|
||||
padding-top: 15px;
|
||||
@ -125,60 +83,249 @@ main.flex-fill {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.app-menu .nav-item {
|
||||
font-size: 0.9rem;
|
||||
padding-bottom: 0.5rem;
|
||||
white-space: nowrap;
|
||||
.footer {
|
||||
padding-top: 15px;
|
||||
min-height: 40px;
|
||||
text-align: center;
|
||||
color: #ffffff;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
|
||||
/* ===================================================
|
||||
NAVBAR / BURGER / SIDEBAR
|
||||
=================================================== */
|
||||
|
||||
/* Navbar als durchgehende Flex-Zeile */
|
||||
.app-navbar {
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
/* NICHT umbrechen auf Desktop */
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.app-navbar-left,
|
||||
.app-navbar-right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* etwas Luft zwischen Logo und Menü */
|
||||
.app-navbar-left {
|
||||
margin-right: 1rem;
|
||||
}
|
||||
|
||||
/* Versteckte Checkbox steuert die Sidebar */
|
||||
.nav-toggle {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Burger-Icon (wird nur auf Mobil eingeblendet) */
|
||||
.nav-toggle-label {
|
||||
display: none;
|
||||
/* nur auf Mobil sichtbar */
|
||||
cursor: pointer;
|
||||
padding: 0.25rem 0.5rem;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.nav-toggle-label span {
|
||||
display: block;
|
||||
width: 22px;
|
||||
height: 2px;
|
||||
margin: 4px 0;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
/* Menü-Container */
|
||||
.app-menu {
|
||||
display: flex;
|
||||
background-color: #b1b0b0;
|
||||
}
|
||||
|
||||
/* Bereich für die Seitenlinks – Basis: horizontales Flex */
|
||||
.app-menu-items {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.75rem;
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
/* Bereich für Login/Register */
|
||||
.app-menu-footer {
|
||||
display: flex;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
/* Untermenü (Kinder-Seiten) etwas eingerückt */
|
||||
.app-submenu {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.app-menu .nav-item a {
|
||||
border-radius: 4px;
|
||||
height: 3rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
line-height: 3rem;
|
||||
padding-left: 1rem;
|
||||
/* Nav-Items */
|
||||
.app-menu .nav-item {
|
||||
padding-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
.app-menu .nav-item a.active {
|
||||
background-color: rgba(255,255,255,0.25);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.app-menu .nav-item a:hover {
|
||||
background-color: rgba(255,255,255,0.1);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.app-menu .nav-link .oi {
|
||||
width: 1.5rem;
|
||||
font-size: 1.1rem;
|
||||
vertical-align: text-top;
|
||||
top: -2px;
|
||||
}
|
||||
|
||||
.navbar-toggler {
|
||||
background-color: #fff;
|
||||
border: 2px solid #75767B;
|
||||
/* Hover-/Active-Style für Links */
|
||||
.app-menu .nav-link {
|
||||
padding: 6px 12px;
|
||||
border-radius: 6px;
|
||||
padding: 0.5rem 0.75rem;
|
||||
margin: .5rem;
|
||||
box-shadow: 0 2px 6px rgba(0,0,0,0.08);
|
||||
transition: background 0.2s, box-shadow 0.2s, border-color 0.2s;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: background-color 0.2s ease, color 0.2s ease;
|
||||
}
|
||||
|
||||
.navbar-toggler:hover, .navbar-toggler:focus {
|
||||
background-color: #f0f0f0;
|
||||
border-color: #444;
|
||||
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
|
||||
outline: none;
|
||||
.app-menu .nav-link:hover {
|
||||
background-color: #4a4a4a;
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
.app-menu .nav-link.active {
|
||||
background-color: #3b3b3b;
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
|
||||
/* ===========================
|
||||
DESKTOP (ab 768px)
|
||||
=========================== */
|
||||
@media (min-width: 1000px) {
|
||||
|
||||
/* Navbar ist Referenz für die absolute Zentrierung */
|
||||
.app-navbar {
|
||||
display: flex !important;
|
||||
flex-wrap: nowrap !important;
|
||||
align-items: center !important;
|
||||
justify-content: flex-start !important;
|
||||
position: relative !important;
|
||||
min-height: 60px;
|
||||
/* optional: fixe Höhe */
|
||||
}
|
||||
|
||||
/* Menü nur als Container für den Footer */
|
||||
.app-menu {
|
||||
display: flex !important;
|
||||
flex-direction: row !important;
|
||||
align-items: center !important;
|
||||
flex: 1 1 auto !important;
|
||||
gap: 0.75rem !important;
|
||||
position: static !important;
|
||||
width: auto !important;
|
||||
}
|
||||
|
||||
/* NAV-LINKS: exakt in der Mitte der ganzen Navbar / Seite */
|
||||
.app-menu-items {
|
||||
position: absolute !important;
|
||||
left: 50% !important;
|
||||
top: 50% !important;
|
||||
transform: translate(-50%, -50%) !important;
|
||||
display: flex !important;
|
||||
flex-direction: row !important;
|
||||
flex-wrap: nowrap !important;
|
||||
gap: 0.75rem !important;
|
||||
width: auto !important;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* Login/User bleiben im Menü, aber rechts */
|
||||
.app-menu-footer {
|
||||
display: flex !important;
|
||||
gap: 0.75rem !important;
|
||||
margin-left: auto !important;
|
||||
/* schiebt Footer nach rechts */
|
||||
padding: 0 !important;
|
||||
border: none !important;
|
||||
background: none !important;
|
||||
width: auto !important;
|
||||
}
|
||||
|
||||
.app-menu .nav-item {
|
||||
display: inline-block !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* ===========================
|
||||
MOBILE (unter 768px)
|
||||
=========================== */
|
||||
|
||||
@media (max-width: 1000px) {
|
||||
|
||||
.navbar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
/* Platz unter der Navbar */
|
||||
.content {
|
||||
position: relative;
|
||||
top: 150px;
|
||||
}
|
||||
|
||||
/* Burger sichtbar machen */
|
||||
.nav-toggle-label {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* Sidebar-Wrapper rechts */
|
||||
.app-menu {
|
||||
position: fixed;
|
||||
top: 80px;
|
||||
/* Abstand von oben (über der Navbar + Burger) */
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
width: 70%;
|
||||
max-width: 280px;
|
||||
/* Höhe an das neue top anpassen */
|
||||
background-color: #b1b0b0;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
padding: 1rem;
|
||||
gap: 0.5rem;
|
||||
transform: translateX(100%);
|
||||
transition: transform 0.3s ease;
|
||||
z-index: 1500;
|
||||
}
|
||||
|
||||
/* Seitenlinks vertikal + scrollbar + zentriert */
|
||||
.app-menu-items {
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
/* Footer (Login/Register) fixiert unten */
|
||||
.app-menu-footer {
|
||||
width: 100%;
|
||||
padding-top: 0.5rem;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.25);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
/* untereinander statt nebeneinander */
|
||||
gap: 0.5rem;
|
||||
/* Abstand zwischen Host und Logout */
|
||||
justify-content: right;
|
||||
}
|
||||
|
||||
|
||||
/* Sidebar öffnen/schließen über Checkbox */
|
||||
.nav-toggle:checked~.app-menu {
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
.app-menu .nav-link {
|
||||
width: 100%;
|
||||
display: block;
|
||||
font-size: clamp(12px, 3.5vw, 15px);
|
||||
}
|
||||
|
||||
}
|
||||
@ -4,6 +4,8 @@
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
|
||||
<AccelerateBuildsInVisualStudio>false</AccelerateBuildsInVisualStudio>
|
||||
<PackageId>SZUAbsolventenverein.Theme.Website</PackageId>
|
||||
<Version>1.0.12</Version>
|
||||
|
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||
<metadata>
|
||||
<id>$projectname$</id>
|
||||
<version>1.0.0</version>
|
||||
<id>SZUAbsolventenverein.Theme.Website</id>
|
||||
<version>1.0.12</version>
|
||||
|
Kocoder
commented
Dieser Change müsste mit dem korrekten Build Skript nicht gemacht werden Dieser Change müsste mit dem korrekten Build Skript nicht gemacht werden
Gaisi
commented
Hab das halt auch geändert weil version dort steht dachte wäre schöner wenn es einheitlich bleibt. Hab das halt auch geändert weil version dort steht dachte wäre schöner wenn es einheitlich bleibt.
|
||||
<authors>SZUAbsolventenverein</authors>
|
||||
<owners>SZUAbsolventenverein</owners>
|
||||
<title>Website</title>
|
||||
@ -20,9 +20,9 @@
|
||||
</dependencies>
|
||||
</metadata>
|
||||
<files>
|
||||
<file src="..\Client\bin\Release\$targetframework$\$projectname$.Client.Oqtane.dll" target="lib\$targetframework$" />
|
||||
<file src="..\Client\bin\Release\$targetframework$\$projectname$.Client.Oqtane.pdb" target="lib\$targetframework$" />
|
||||
<file src="..\Client\wwwroot\**\*.*" target="wwwroot" />
|
||||
<file src="../Client/bin/Release/$targetframework$/SZUAbsolventenverein.Theme.Website.Client.Oqtane.dll" target="lib/$targetframework$" />
|
||||
<file src="../Client/bin/Release/$targetframework$/SZUAbsolventenverein.Theme.Website.Client.Oqtane.pdb" target="lib/$targetframework$" />
|
||||
<file src="../Client/wwwroot/**/*.*" target="wwwroot" />
|
||||
|
Kocoder
commented
Dieser Change müsste mit dem korrekten Build Skript nicht gemacht werden Dieser Change müsste mit dem korrekten Build Skript nicht gemacht werden
Gaisi
commented
Hab das halt auch geändert weil version dort steht dachte wäre schöner wenn es einheitlich bleibt. Hab das halt auch geändert weil version dort steht dachte wäre schöner wenn es einheitlich bleibt.
|
||||
<file src="icon.png" target="" />
|
||||
</files>
|
||||
</package>
|
||||
@ -2,6 +2,6 @@
|
||||
set TargetFramework=%1
|
||||
set ProjectName=%2
|
||||
|
||||
XCOPY "..\Client\bin\Debug\%TargetFramework%\%ProjectName%.Client.Oqtane.dll" "..\..\oqtane.framework-dev\Oqtane.Server\bin\Debug\%TargetFramework%\" /Y
|
||||
XCOPY "..\Client\bin\Debug\%TargetFramework%\%ProjectName%.Client.Oqtane.pdb" "..\..\oqtane.framework-dev\Oqtane.Server\bin\Debug\%TargetFramework%\" /Y
|
||||
XCOPY "..\Client\wwwroot\*" "..\..\oqtane.framework-dev\Oqtane.Server\wwwroot\" /Y /S /I
|
||||
XCOPY "..\Client\bin\Debug\%TargetFramework%\%ProjectName%.Client.Oqtane.dll" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\%TargetFramework%\" /Y
|
||||
XCOPY "..\Client\bin\Debug\%TargetFramework%\%ProjectName%.Client.Oqtane.pdb" "..\..\oqtane.framework\Oqtane.Server\bin\Debug\%TargetFramework%\" /Y
|
||||
XCOPY "..\Client\wwwroot\*" "..\..\oqtane.framework\Oqtane.Server\wwwroot\" /Y /S /I
|
||||
@ -3,6 +3,6 @@
|
||||
TargetFramework=$1
|
||||
ProjectName=$2
|
||||
|
||||
cp -f "../Client/bin/Debug/$TargetFramework/$ProjectName$.Client.Oqtane.dll" "../../oqtane.framework-dev/Oqtane.Server/bin/Debug/$TargetFramework/"
|
||||
cp -f "../Client/bin/Debug/$TargetFramework/$ProjectName$.Client.Oqtane.pdb" "../../oqtane.framework-dev/Oqtane.Server/bin/Debug/$TargetFramework/"
|
||||
cp -rf "../Server/wwwroot/"* "../../oqtane.framework-dev/Oqtane.Server/wwwroot/"
|
||||
cp -f "../Client/bin/Debug/$TargetFramework/$ProjectName$.Client.Oqtane.dll" "../../oqtane.framework/Oqtane.Server/bin/Debug/$TargetFramework/"
|
||||
cp -f "../Client/bin/Debug/$TargetFramework/$ProjectName$.Client.Oqtane.pdb" "../../oqtane.framework/Oqtane.Server/bin/Debug/$TargetFramework/"
|
||||
cp -rf "../Server/wwwroot/"* "../../oqtane.framework/Oqtane.Server/wwwroot/"
|
||||
|
Kocoder
commented
Trailing $ entfernen (siehe: Diplomarbeit-Absolventenverein/Module.AdminModules#7) Trailing $ entfernen (siehe: https://git.kocoder.xyz/Diplomarbeit-Absolventenverein/Module.AdminModules/pulls/7)
|
||||
@ -2,6 +2,6 @@
|
||||
set TargetFramework=%1
|
||||
set ProjectName=%2
|
||||
|
||||
del "*.nupkg"
|
||||
"..\..\oqtane.framework-dev\oqtane.package\nuget.exe" pack %ProjectName%.nuspec -Properties targetframework=%TargetFramework%;projectname=%ProjectName%
|
||||
XCOPY "*.nupkg" "..\..\oqtane.framework-dev\Oqtane.Server\wwwroot\Packages\" /Y
|
||||
if exist *.nupkg del *.nupkg
|
||||
dotnet build "..\Client\SZUAbsolventenverein.Theme.Website.Client.csproj" -c Release
|
||||
dotnet pack "%ProjectName%.Package.csproj" -p:NuspecFile="%ProjectName%.nuspec" -p:NuspecProperties="targetframework=%TargetFramework%;projectname=%ProjectName%" --no-build -o .
|
||||
|
Kocoder
commented
Bitte bei nuget.exe vom oqtane.framework bleiben. Bitte bei nuget.exe vom oqtane.framework bleiben.
|
||||
6
Package/release.sh
Normal file → Executable file
@ -1,5 +1,7 @@
|
||||
TargetFramework=$1
|
||||
ProjectName=$2
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
"..\..\oqtane.framework-dev\oqtane.package\nuget.exe" pack %ProjectName%.nuspec -Properties targetframework=%TargetFramework%;projectname=%ProjectName%
|
||||
cp -f "*.nupkg" "..\..\oqtane.framework-dev\Oqtane.Server\Packages\"
|
||||
rm -f *.nupkg
|
||||
dotnet build "../Client/SZUAbsolventenverein.Theme.Website.Client.csproj" -c Release
|
||||
dotnet pack "${ProjectName}.Package.csproj" -p:NuspecFile="${ProjectName}.nuspec" -p:NuspecProperties="targetframework=${TargetFramework};projectname=${ProjectName}" --no-build -o .
|
||||
|
Kocoder
commented
Bitte bei nuget.exe vom Oqtane.Framework bleiben Bitte bei nuget.exe vom Oqtane.Framework bleiben
|
||||
64
RELEASE_GUIDE.md
Normal file
@ -0,0 +1,64 @@
|
||||
# Release Anleitung (Mac / Linux)
|
||||
|
||||
> [!NOTE]
|
||||
> Diese Anleitung und das verwendete Skript sind für **macOS** (und Linux) optimiert.
|
||||
|
||||
## 1. Release Skript
|
||||
Das Skript zur Erstellung des Releases befindet sich hier:
|
||||
`Theme.SZUAbsolventenverein/Package/release.sh`
|
||||
|
||||
## 2. Version ändern
|
||||
|
||||
Die Versionsnummer muss in den folgenden **4 Dateien** angepasst werden:
|
||||
|
||||
1. **Package Projektdatei**
|
||||
* Datei: `Theme.SZUAbsolventenverein/Package/SZUAbsolventenverein.Theme.Website.Package.csproj`
|
||||
* Zeile: `<Version>1.0.11</Version>`
|
||||
|
||||
2. **NuGet Spezifikation (Nuspec)**
|
||||
* Datei: `Theme.SZUAbsolventenverein/Package/SZUAbsolventenverein.Theme.Website.nuspec`
|
||||
* Zeile: `<version>1.0.11</version>`
|
||||
|
||||
3. **Client Projektdatei** (optional)
|
||||
* Datei: `Theme.SZUAbsolventenverein/Client/SZUAbsolventenverein.Theme.Website.Client.csproj`
|
||||
* Zeile: `<Version>1.0.11</Version>`
|
||||
|
||||
4. **Theme Info (C# Code)**
|
||||
* Datei: `Theme.SZUAbsolventenverein/Client/ThemeInfo.cs`
|
||||
* Zeile: `Version = "1.0.11",`
|
||||
|
||||
## 3. Release Build erstellen
|
||||
|
||||
Führe das `release.sh` Skript im Terminal aus.
|
||||
|
||||
```bash
|
||||
# In das Verzeichnis wechseln (falls noch nicht dort)
|
||||
cd /Users/adamgaiswinkler/Theme.SZUAbsolventenverein/Package
|
||||
|
||||
# Skript ausführen
|
||||
./release.sh net9.0 SZUAbsolventenverein.Theme.Website
|
||||
```
|
||||
|
||||
**Was passiert dabei?**
|
||||
1. Der Code wird im `Release` Modus kompiliert.
|
||||
2. Ein NuGet-Paket (`.nupkg`) wird erstellt.
|
||||
3. Das Paket (`.nupkg`) wird im Ordner **`Theme.SZUAbsolventenverein/Package/`** gespeichert.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Du musst dieses Paket nun selbst nehmen und dorthin kopieren oder hochladen, wo du es installieren möchtest.
|
||||
|
||||
### Windows
|
||||
|
||||
Führe die `release.cmd` in der Eingabeaufforderung (cmd) oder PowerShell aus:
|
||||
|
||||
```cmd
|
||||
cd Theme.SZUAbsolventenverein\Package
|
||||
release.cmd net9.0 SZUAbsolventenverein.Theme.Website
|
||||
```
|
||||
|
||||
## 4. Server neustarten
|
||||
|
||||
Damit das neue Theme geladen wird, musst du den Oqtane Server neustarten (falls er läuft):
|
||||
|
||||
1. Server stoppen (`Ctrl + C` im Terminal).
|
||||
2. Server neu starten: `dotnet run` (im Oqtane.Server Verzeichnis).
|
||||
|
Kocoder
commented
Das ganze sieht auf mich AI generiert aus. Build mit automatischem aufruf des debug.sh / debug.cmd:
Build mit automatischem aufruf des release.sh / release.cmd:
Das ganze sieht auf mich AI generiert aus.
# Build mit automatischem aufruf des debug.sh / debug.cmd:
> dotnet build SZUAbsolventenverein.Theme.Website.sln
# Build mit automatischem aufruf des release.sh / release.cmd:
> dotnet build SZUAbsolventenverein.Theme.Website.sln -c Release
Gaisi
commented
Ja wurde halt damit schön und verständlich geschrieben. Meine Erklärung war nicht verständlich genug. Ja wurde halt damit schön und verständlich geschrieben. Meine Erklärung war nicht verständlich genug.
|
||||
@ -2,7 +2,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.13.35825.156 d17.13
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Oqtane.Server", "..\oqtane.framework-dev\Oqtane.Server\Oqtane.Server.csproj", "{3AB6FCC9-EFEB-4C0E-A2CF-8103914C5196}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Oqtane.Server", "..\oqtane.framework\Oqtane.Server\Oqtane.Server.csproj", "{3AB6FCC9-EFEB-4C0E-A2CF-8103914C5196}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SZUAbsolventenverein.Theme.Website.Client", "Client\SZUAbsolventenverein.Theme.Website.Client.csproj", "{AA8E58A1-CD09-4208-BF66-A8BB341FD669}"
|
||||
EndProject
|
||||
|
||||
Dieser Change müsste mit dem korrekten Build Skript nicht gemacht werden
Hab das halt auch geändert weil version dort steht dachte wäre schöner wenn es einheitlich bleibt.