Commit 46d52300 authored by shadMod's avatar shadMod 💬

Merge branch 'dev-shadmod-231010-1348' into merge-cherry

parents 93af9b6e 2b20b436
...@@ -12,5 +12,5 @@ __pycache__ ...@@ -12,5 +12,5 @@ __pycache__
.py[co] .py[co]
# Compiled assets # Compiled assets
/uitwww/static/website.css /uitwww/static/assets/
/uitwww/static/website.js /uitwww/static/website.js
...@@ -3,7 +3,7 @@ div.page div.row.background-wallpaper { ...@@ -3,7 +3,7 @@ div.page div.row.background-wallpaper {
background: rgba(255, 255, 255, 0.5); background: rgba(255, 255, 255, 0.5);
} }
background: url("images/wallpapers/dotted.png") no-repeat 130% 10%; background: url("../../images/wallpapers/dotted.png") no-repeat 130% 10%;
@media all and (max-width: 60rem) { @media all and (max-width: 60rem) {
background: transparent; background: transparent;
...@@ -35,41 +35,41 @@ div.page div.row.background-wallpaper { ...@@ -35,41 +35,41 @@ div.page div.row.background-wallpaper {
} }
&.ubuntu, &.desktop { &.ubuntu, &.desktop {
background: url("images/wallpapers/ubuntu.jpg") 100% 0%; background: url("../../images/wallpapers/ubuntu.jpg") 200% 0%;
} }
&.kubuntu { &.kubuntu {
background: url("images/wallpapers/kubuntu.jpg") 100% 50%; background: url("../../images/wallpapers/kubuntu.jpg") 200% 50%;
} }
&.xubuntu { &.xubuntu {
background: background:
linear-gradient(rgba(100, 100, 100, 0.3), rgba(100, 100, 100, 0.3)), linear-gradient(rgba(100, 100, 100, 0.3), rgba(100, 100, 100, 0.3)),
url("images/wallpapers/xubuntu.jpg") 100% 50%; url("../../images/wallpapers/xubuntu.jpg") 200% 50%;
} }
&.lubuntu { &.lubuntu {
background: url("images/wallpapers/lubuntu.jpg") 100% 50%; background: url("../../images/wallpapers/lubuntu.jpg") 200% 50%;
} }
&.ubuntu-mate { &.ubuntu-mate {
background: background:
linear-gradient(rgba(85, 85, 85, 0.3), rgba(85, 85, 85, 0.3)), linear-gradient(rgba(85, 85, 85, 0.3), rgba(85, 85, 85, 0.3)),
url("images/wallpapers/ubuntu-mate.jpg") 100% 50%; url("../../images/wallpapers/ubuntu-mate.jpg") 200% 50%;
} }
&.ubuntu-budgie { &.ubuntu-budgie {
background: background:
linear-gradient(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3)), linear-gradient(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3)),
url("images/wallpapers/ubuntu-budgie.jpg") 100% 50%; url("../../images/wallpapers/ubuntu-budgie.jpg") 200% 50%;
} }
&.ubuntukylin { &.ubuntukylin {
background: url("images/wallpapers/ubuntu-kylin.jpg") 100% 50%; background: url("../../images/wallpapers/ubuntu-kylin.jpg") 200% 50%;
} }
&.ubuntustudio { &.ubuntustudio {
background: url("images/wallpapers/ubuntustudio.jpg") 100% 50%; background: url("../../images/wallpapers/ubuntustudio.jpg") 200% 50%;
.box { .box {
background: rgba(100, 100, 100, 0.25); background: rgba(100, 100, 100, 0.25);
...@@ -77,16 +77,17 @@ div.page div.row.background-wallpaper { ...@@ -77,16 +77,17 @@ div.page div.row.background-wallpaper {
} }
&.ubuntu-touch { &.ubuntu-touch {
background: url("images/wallpapers/ubuntu-touch.jpg") 100% 0%; background: url("../../images/wallpapers/ubuntu-touch.jpg") 100% 0%;
} }
&.nuovo-rilascio { &.nuovo-rilascio {
background: url("images/wallpapers/nuovo-rilascio.png") 100% 0%; background: url("../../images/versions/jammy-jellyfish-desktop.jpg") 100% 0%;
} }
&.banner-latest { &.banner-latest {
background: url("images/wallpapers/banner-latest.png") 100% 50%; background: url("../../images/versions/jammy-jellyfish.jpg") 50% 50%;
} }
} }
div.page div.row.download-index-distro { div.page div.row.download-index-distro {
...@@ -174,3 +175,20 @@ div.page div.row div.col.image-attach-corner { ...@@ -174,3 +175,20 @@ div.page div.row div.col.image-attach-corner {
} }
} }
} }
div.cookie-policy {
z-index: 10;
}
div.p-100 {
padding: 100px !important;
}
ul.item-list li {
margin: 0 0 0.25em 1.5em;
padding: 0 0 0 20px;
list-style-type: none;
background: url('https://www.ubuntu-it.org/sites/all/themes/light-drupal-theme/images/ubuntu-li.png') no-repeat left 4px;
font-size: 14px;
line-height: 20px;
}
\ No newline at end of file
:root {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-black: #000;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg-rgb: 255, 255, 255;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-bg: #fff;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
--bs-border-radius: 0.375rem;
--bs-border-radius-sm: 0.25rem;
--bs-border-radius-lg: 0.5rem;
--bs-border-radius-xl: 1rem;
--bs-border-radius-2xl: 2rem;
--bs-border-radius-pill: 50rem;
--bs-link-color: #0d6efd;
--bs-link-hover-color: #0a58ca;
--bs-code-color: #d63384;
--bs-highlight-bg: #fff3cd;
}
.container,
.container-fluid,
.container-xxl,
.container-xl,
.container-lg,
.container-md,
.container-sm {
--bs-gutter-x: 1.5rem;
--bs-gutter-y: 0;
width: 100%;
padding-right: calc(var(--bs-gutter-x) * 0.5);
padding-left: calc(var(--bs-gutter-x) * 0.5);
margin-right: auto;
margin-left: auto;
}
@media (min-width: 576px) {
.container-sm, .container {
max-width: 540px;
}
}
@media (min-width: 768px) {
.container-md, .container-sm, .container {
max-width: 720px;
}
}
@media (min-width: 992px) {
.container-lg, .container-md, .container-sm, .container {
max-width: 960px;
}
}
@media (min-width: 1200px) {
.container-xl, .container-lg, .container-md, .container-sm, .container {
max-width: 1140px;
}
}
@media (min-width: 1400px) {
.container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {
max-width: 1320px;
}
}
.row {
--bs-gutter-x: 1.5rem;
--bs-gutter-y: 0;
display: flex;
flex-wrap: wrap;
margin-top: calc(-1 * var(--bs-gutter-y));
margin-right: calc(-0.5 * var(--bs-gutter-x));
margin-left: calc(-0.5 * var(--bs-gutter-x));
}
.row > * {
box-sizing: border-box;
flex-shrink: 0;
width: 100%;
max-width: 100%;
padding-right: calc(var(--bs-gutter-x) * 0.5);
padding-left: calc(var(--bs-gutter-x) * 0.5);
margin-top: var(--bs-gutter-y);
}
$size_width: ("sm": 576, "md": 768, "lg": 992, "xl": 1200, "xxl": 1400);
$list_cols: ("auto": "auto", "1": "8.33333333%", "2": "16.66666667%", "3": "25%", "4": "33.33333333%", "5": "41.66666667%", "6": "50%", "7": "58.33333333%", "8": "66.66666667%", "9": "75%", "10": "83.33333333%", "11": "91.66666667%", "12": "100%");
@each $col, $width in $list_cols {
.col-#{$col} {
flex: 0 0 auto;
width: #{$width};
}
}
@each $typology, $size in $size_width {
@media (min-width: #{$size}px) {
.col-#{$typology} {
flex: 1 0 0%;
}
@each $col, $width in $list_cols {
.col-#{$typology}-#{$col} {
flex: 0 0 auto;
width: #{$width};
}
}
}
}
$sizes: (25: "25%", 50: "50%", 75: "75%", 100: "100%", "auto": "auto");
@each $size, $width in $sizes {
.w-#{$size} {
width: #{$width} !important;
}
}
.m-auto {
margin: auto;
}
.text-justify {
text-align: justify !important;
}
...@@ -65,7 +65,7 @@ def clean(ctx): ...@@ -65,7 +65,7 @@ def clean(ctx):
exclude = ["%s/.git" % BASE, "%s/build" % BASE] exclude = ["%s/.git" % BASE, "%s/build" % BASE]
remove_files = [ remove_files = [
re.compile(r'.py[co]$'), re.compile(r'.mo$'), re.compile(r'.py[co]$'), re.compile(r'.mo$'),
"%s/uitwww/static/website.css" % BASE, "%s/uitwww/static/libs/main.css" % BASE,
] ]
remove_dirs = [ remove_dirs = [
re.compile('__pycache__'), re.compile('__pycache__'),
......
...@@ -29,7 +29,7 @@ from . import redirects ...@@ -29,7 +29,7 @@ from . import redirects
from . import utils from . import utils
def create_app(data_path): def create_app(data_path, debug=False):
"""Create a new instance of the application""" """Create a new instance of the application"""
# Normalize the data path # Normalize the data path
data_path = os.path.expanduser(os.path.abspath(data_path)) data_path = os.path.expanduser(os.path.abspath(data_path))
...@@ -41,11 +41,11 @@ def create_app(data_path): ...@@ -41,11 +41,11 @@ def create_app(data_path):
) )
# Prepare the data directory # Prepare the data directory
init_data_directory(data_path) init_data_directory(data_path, debug)
# Load the secret key # Load the secret key
with open(os.path.join(data_path, "secret_key")) as f: with open(os.path.join(data_path, "secret_key")) as fn:
app.secret_key = f.read().strip() app.secret_key = fn.read().strip()
# Initialize the database # Initialize the database
app.db = db.Database(os.path.join(data_path, "database.db")) app.db = db.Database(os.path.join(data_path, "database.db"))
...@@ -79,14 +79,14 @@ def create_app(data_path): ...@@ -79,14 +79,14 @@ def create_app(data_path):
return app return app
def init_data_directory(data_path): def init_data_directory(data_path, debug=False):
"""Initialize the data directory""" """Initialize the data directory"""
src_directory = os.path.dirname(os.path.abspath(__file__)) src_directory = os.path.dirname(os.path.abspath(__file__))
# Create all the directories # Create all the directories
dirs = ["", "cache"] dirs = ["", "cache"]
for dir in dirs: for name in dirs:
os.makedirs(os.path.join(data_path, dir), exist_ok=True) os.makedirs(os.path.join(data_path, name), exist_ok=True)
# Initialize the cache # Initialize the cache
static_dirs = {"static": "+assets"} static_dirs = {"static": "+assets"}
...@@ -105,6 +105,7 @@ def init_data_directory(data_path): ...@@ -105,6 +105,7 @@ def init_data_directory(data_path):
f.write("%s\n" % utils.random_key(64)) f.write("%s\n" % utils.random_key(64))
os.chmod(secret_key_path, 0o400) os.chmod(secret_key_path, 0o400)
if debug is False:
# Initialize the download files # Initialize the download files
download_inst = download.Downloads(data_path) download_inst = download.Downloads(data_path)
download_inst.store_cache_file() download_inst.store_cache_file()
...@@ -14,18 +14,16 @@ ...@@ -14,18 +14,16 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import functools import time
import uuid import uuid
import yaml
import flask import flask
import functools
import flask_openid import flask_openid
import pkg_resources
import time
import yaml
from .constants import UITWWW_DIR
from uitwww.third_party import openid_teams from uitwww.third_party import openid_teams
SESSION_EXPIRES_AFTER = 86400 SESSION_EXPIRES_AFTER = 86400
...@@ -148,8 +146,8 @@ class Sessions: ...@@ -148,8 +146,8 @@ class Sessions:
class Permissions: class Permissions:
def __init__(self): def __init__(self):
raw = pkg_resources.resource_string("uitwww", "data/permissions.yml") with open(UITWWW_DIR + "/data/permissions.yml") as fn:
self.config = yaml.safe_load(raw.decode("utf-8")) self.config = yaml.safe_load(fn.read())
def allowed_teams(self): def allowed_teams(self):
"""Return a list of teams allowed to log in""" """Return a list of teams allowed to log in"""
...@@ -177,6 +175,7 @@ class Permissions: ...@@ -177,6 +175,7 @@ class Permissions:
def permission(perms): def permission(perms):
"""Process the endpoint only if the user has permission""" """Process the endpoint only if the user has permission"""
def decorator(func): def decorator(func):
@functools.wraps(func) @functools.wraps(func)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
...@@ -200,6 +199,7 @@ def permission(perms): ...@@ -200,6 +199,7 @@ def permission(perms):
return flask.abort(403) return flask.abort(403)
return wrapper return wrapper
return decorator return decorator
...@@ -277,7 +277,6 @@ def prepare_blueprint(app): ...@@ -277,7 +277,6 @@ def prepare_blueprint(app):
flask.flash("La sessione è stata terminata correttamente.", "success") flask.flash("La sessione è stata terminata correttamente.", "success")
return flask.redirect(flask.url_for("pages.index")) return flask.redirect(flask.url_for("pages.index"))
@bp.route("/sessions") @bp.route("/sessions")
@permission("auth.sessions.manage") @permission("auth.sessions.manage")
def sessions_list(): def sessions_list():
......
import os
UITWWW_DIR = os.path.dirname(os.path.abspath(__file__))
BASE_DIR = os.path.join(UITWWW_DIR, "..")
...@@ -8,8 +8,8 @@ codename = "impish" ...@@ -8,8 +8,8 @@ codename = "impish"
lts = false lts = false
[releases.lts] [releases.lts]
version = "20.04.3" version = "22.04.3"
codename = "focal" codename = "jammy"
lts = true lts = true
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
- name: Smartphone e tablet - name: Smartphone e tablet
endpoint: pages.scopri-ubuntu_ubuntu-touch endpoint: pages.scopri-ubuntu_ubuntu-touch
- name: 20.04 LTS Focal Fossa - name: 22.04 LTS Jammy Jellyfish
endpoint: pages.scopri-ubuntu_nuovo-rilascio endpoint: pages.scopri-ubuntu_nuovo-rilascio
- name: Derivate - name: Derivate
......
...@@ -17,9 +17,6 @@ ...@@ -17,9 +17,6 @@
import threading import threading
import sqlite3 import sqlite3
import pkg_resources
_LOCAL = threading.local() _LOCAL = threading.local()
......
...@@ -22,15 +22,14 @@ import random ...@@ -22,15 +22,14 @@ import random
import collections import collections
import flask import flask
import itsdangerous
import requests import requests
import pkg_resources import itsdangerous
from . import cache from . import cache
from . import launchpad from . import launchpad
from .constants import UITWWW_DIR
CONFIG_FILE = "/data/downloads.toml"
CONFIG_FILE = "data/downloads.toml"
CACHE_FILE = "download-cache.json" CACHE_FILE = "download-cache.json"
CACHE_FILE_VERSION = 1 CACHE_FILE_VERSION = 1
...@@ -39,16 +38,16 @@ class Downloads: ...@@ -39,16 +38,16 @@ class Downloads:
def __init__(self, data_path): def __init__(self, data_path):
# Load the configuration # Load the configuration
raw = pkg_resources.resource_string("uitwww", CONFIG_FILE) path = UITWWW_DIR + CONFIG_FILE
self.config = toml.loads( self.config = toml.load(
raw.decode("utf-8"), path, _dict=collections.OrderedDict,
_dict=collections.OrderedDict,
) )
self._strip_non_lts_releases() self._strip_non_lts_releases()
# Save the hash of the configuration # Save the hash of the configuration
self._config_hash = "sha1=%s" % hashlib.sha1(raw).hexdigest() with open(path, "rb") as raw:
self._config_hash = "sha1=%s" % hashlib.sha1(raw.read()).hexdigest()
self._cache_file = os.path.join(data_path, CACHE_FILE) self._cache_file = os.path.join(data_path, CACHE_FILE)
......
...@@ -15,13 +15,15 @@ ...@@ -15,13 +15,15 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import os import os
import sys
import click import click
import subprocess
import uitwww import uitwww
from uitwww import utils
from scss.compiler import compile_file
from htmlmin import minify
from .constants import UITWWW_DIR, BASE_DIR
from .utils import ReverseProxied, GunicornInstance
@click.group() @click.group()
...@@ -40,11 +42,8 @@ def cli(): ...@@ -40,11 +42,8 @@ def cli():
@click.option("-d", "--debug", help="Enable debug mode", is_flag=True) @click.option("-d", "--debug", help="Enable debug mode", is_flag=True)
def run(data, gunicorn_config, port, public, workers, debug): def run(data, gunicorn_config, port, public, workers, debug):
"""Run the application""" """Run the application"""
# Create the application instance app = uitwww.create_app(data, debug)
src_directory = os.path.dirname(os.path.abspath(__file__)) app.wsgi_app = ReverseProxied(app.wsgi_app)
app = uitwww.create_app(data)
app.wsgi_app = utils.ReverseProxied(app.wsgi_app)
host = "127.0.0.1" host = "127.0.0.1"
if public: if public:
...@@ -53,22 +52,22 @@ def run(data, gunicorn_config, port, public, workers, debug): ...@@ -53,22 +52,22 @@ def run(data, gunicorn_config, port, public, workers, debug):
# In debug mode, run the flask builtin webserver # In debug mode, run the flask builtin webserver
if debug: if debug:
extra_files = [ extra_files = [
os.path.join(src_directory, "data/navbar.yml"), os.path.join(UITWWW_DIR, "data/navbar.yml"),
os.path.join(src_directory, "data/permissions.yml"), os.path.join(UITWWW_DIR, "data/permissions.yml"),
os.path.join(src_directory, "data/redirects.yml"), os.path.join(UITWWW_DIR, "data/redirects.yml"),
os.path.join(src_directory, "data/downloads.toml"), os.path.join(UITWWW_DIR, "data/downloads.toml"),
] ]
app.run(debug=True, port=port, host=host, extra_files=extra_files) app.run(debug=True, port=port, host=host, extra_files=extra_files)
# Else run the application with gunicorn # Else run the application with gunicorn
else: else:
options = { options = {
"bind": host+":"+str(port), "bind": host + ":" + str(port),
"workers": workers, "workers": workers,
"accesslog": "-", "accesslog": "-",
"errorlog": "-", "errorlog": "-",
} }
server = utils.GunicornInstance(gunicorn_config, options) server = GunicornInstance(gunicorn_config, options)
server.app = app server.app = app
try: try:
...@@ -79,25 +78,28 @@ def run(data, gunicorn_config, port, public, workers, debug): ...@@ -79,25 +78,28 @@ def run(data, gunicorn_config, port, public, workers, debug):
@cli.command("init") @cli.command("init")
@click.argument("data") @click.argument("data")
def init(data): @click.option("-d", "--debug", help="Enable debug mode", is_flag=True)
def init(data, debug):
"""Initialize the data directory""" """Initialize the data directory"""
print("Initializing data directory:", data) print("Initializing data directory:", data)
data_path = os.path.expanduser(os.path.abspath(data)) data_path = os.path.expanduser(os.path.abspath(data))
uitwww.init_data_directory(data_path) uitwww.init_data_directory(data_path, debug)
@cli.command("build_scss") @cli.command("build_scss")
def build_scss(): def build_scss():
"""Build the scss file""" """Compile the scss file"""
base_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..') print("Compile the scss file")
scss_file = open('%s/assets/scss/www.scss' % base_dir, 'rb') # init list of css path
css_file = open('%s/uitwww/static/website.css' % base_dir, 'wb') css_path = ["libs/main", "vendor/bootstrap_v5"]
subprocess.run( for val in css_path:
[sys.executable, '-mscss'], # init path css
stdin=scss_file, path = f"{UITWWW_DIR}/static/assets/{val}.css"
stdout=css_file, # check and mk dir if dir_ not exists
check=True, if not os.path.isdir(os.path.dirname(path)):
) os.makedirs(os.path.dirname(path))
css_file.flush() # open file, compile and write css
scss_file.close() with open(path, "w") as fn:
css_file.close() fn.write(minify(compile_file(
f"{BASE_DIR}/assets/scss/{val}.scss"
)))
...@@ -14,10 +14,10 @@ ...@@ -14,10 +14,10 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import flask
import json
import pkg_resources
import yaml import yaml
import flask
from .constants import UITWWW_DIR
class Navbar: class Navbar:
...@@ -55,8 +55,8 @@ class Navbar: ...@@ -55,8 +55,8 @@ class Navbar:
def install(self, app): def install(self, app):
"""Install this navbar on the app""" """Install this navbar on the app"""
raw = pkg_resources.resource_string("uitwww", "data/navbar.yml") with open(UITWWW_DIR + "/data/navbar.yml") as fn:
config = yaml.safe_load(raw.decode("utf-8")) config = yaml.safe_load(fn.read())
self._prepare_navbar_cache(config, []) self._prepare_navbar_cache(config, [])
# Add the _navbars variable to the templates # Add the _navbars variable to the templates
......
...@@ -15,10 +15,7 @@ ...@@ -15,10 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import os import os
import json
import flask import flask
import pkg_resources
from uitwww import cache from uitwww import cache
......
...@@ -14,16 +14,17 @@ ...@@ -14,16 +14,17 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import flask
import pkg_resources
import yaml import yaml
import flask
import hashlib import hashlib
from .constants import UITWWW_DIR
def prepare_blueprint(app): def prepare_blueprint(app):
"""Prepare a blueprint containing all the redirects""" """Prepare a blueprint containing all the redirects"""
raw = pkg_resources.resource_string("uitwww", "data/redirects.yml") with open(UITWWW_DIR + "/data/redirects.yml") as fn:
config = yaml.safe_load(raw.decode("utf-8")) config = yaml.safe_load(fn.read())
bp = flask.Blueprint("redirects", __name__) bp = flask.Blueprint("redirects", __name__)
......
{# Source code of the Ubuntu-it website {# Source code of the Ubuntu-it website
# Copyright (C) 2015 Pietro Albini <pietroalbini@ubuntu.com> # Copyright (C) 2015 Pietro Albini <pietroalbini@ubuntu.com>
# Copyright (C) 2020 Alessandro Viprati <vipri.alessandro@gmail.com> # Copyright (C) 2020 Alessandro Viprati <vipri.alessandro@gmail.com>
# # Copyright (C) 2023 shadMod
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU Affero General Public License as published # This program is free software: you can redistribute it and/or modify
# by the Free Software Foundation, either version 3 of the License, or # it under the terms of the GNU Affero General Public License as published
# (at your option) any later version. # by the Free Software Foundation, either version 3 of the License, or
# # (at your option) any later version.
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; witout even the implied warranty of # This program is distributed in the hope that it will be useful,
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # but WITHOUT ANY WARRANTY; witout even the implied warranty of
# GNU Affero General Public License for more details. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# # GNU Affero General Public License for more details.
# You should have received a copy of the GNU Affero General Public License #
# along with this program. If not, see <http://www.gnu.org/licenses/>. # You should have received a copy of the GNU Affero General Public License
#} # along with this program. If not, see <http://www.gnu.org/licenses/>.
#}
{% extends "layout.html" %} {% extends "layout.html" %}
{% block title %}Download{% endblock %} {% block title %}
Download
{% endblock %}
{% block content %} {% block content %}
<div class="page"> <div class="page">
<div class="row"> <div class="row w-100 m-auto">
<div class="col text-center"> <div class="col text-center">
<h1>Scarica Ubuntu</h1> <h1>
<p class="intro">Entra subito nel mondo Ubuntu. Scaricalo ora!</p> Scarica Ubuntu
</div> </h1>
<p class="intro">
Entra subito nel mondo Ubuntu. Scaricalo ora!
</p>
</div> </div>
</div> </div>
</div>
<div class="page"> <div class="page">
{% for name, data in distros.items() %} {% for name, data in distros.items() %}
<div class="row download-index-distro background-wallpaper {{ name }}"> <div class="row download-index-distro background-wallpaper {{ name }} w-100 m-auto">
<div class="col"> <div class="col">
<h2>{{ data["name"] }}</h2> <h2>
<p>{{ data["description"] }}</p> {{ data["name"] }}
</h2>
<p>
{{ data["description"] }}
</p>
</div> </div>
<div class="col col-center col-quarter"> <div class="col col-center col-quarter">
<a class="btn" href="{{ url_for("download.landing", distro = name) }}"> <a class="btn" href="{{ url_for('download.landing', distro = name) }}">
Scaricalo ora Scaricalo ora
</a> </a>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
{% endblock %} {% endblock %}
{# Source code of the Ubuntu-it website {# Source code of the Ubuntu-it website
# Copyright (C) 2015-2018 Pietro Albini <pietroalbini@ubuntu.com> # Copyright (C) 2015 Pietro Albini <pietroalbini@ubuntu.com>
# # Copyright (C) 2023 shadMod
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU Affero General Public License as published # This program is free software: you can redistribute it and/or modify
# by the Free Software Foundation, either version 3 of the License, or # it under the terms of the GNU Affero General Public License as published
# (at your option) any later version. # by the Free Software Foundation, either version 3 of the License, or
# # (at your option) any later version.
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; witout even the implied warranty of # This program is distributed in the hope that it will be useful,
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # but WITHOUT ANY WARRANTY; witout even the implied warranty of
# GNU Affero General Public License for more details. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# # GNU Affero General Public License for more details.
# You should have received a copy of the GNU Affero General Public License #
# along with this program. If not, see <http://www.gnu.org/licenses/>. # You should have received a copy of the GNU Affero General Public License
#} # along with this program. If not, see <http://www.gnu.org/licenses/>.
#}
{% from "macros.html" import nav_item with context %} {% from "macros.html" import nav_item with context %}
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>{% block title %}Senza titolo{% endblock %} - Ubuntu-it</title> <title>{% block title %}Senza titolo{% endblock %} - Ubuntu-it</title>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
<link rel="stylesheet" href="https://static.ubuntu-it.org/fonts/ubuntu/include.min.css"> <link rel="stylesheet" href="https://static.ubuntu-it.org/fonts/ubuntu/include.min.css">
<link rel="stylesheet" href="https://static.ubuntu-it.org/themes/italy/theme.min.css"> <link rel="stylesheet" href="https://static.ubuntu-it.org/themes/italy/theme.min.css">
<link rel="stylesheet" href="{{ url_for("static", filename="website.css") }}"> <link rel="stylesheet" href="{{ url_for('static', filename='assets/vendor/bootstrap_v5.css') }}">
<link rel="shortcut icon" href="{{ url_for("static", filename="favicon.ico") }}"> <link rel="stylesheet" href="{{ url_for('static', filename='assets/libs/main.css') }}">
{% block extra_header %}{% endblock %} {% block extra_header %}{% endblock %}
</head>
<body {% block extra_body %}{% endblock %}> </head>
<div class="cookie-policy hidden"> <body {% block extra_body %}{% endblock %}>
<div class="cookie-policy hidden">
<div class="container"> <div class="container">
<span> <span>
Questo sito utilizza i cookie per offrirti un'esperienza Questo sito utilizza i cookie per offrirti un'esperienza
migliore. Continuando la navigazione ne accetti l'uso. migliore. Continuando la navigazione ne accetti l'uso.
</span> </span>
<a href="{{ url_for("pages.cookies") }}" id="ubuntuit-cookiepolicy-hide">OK</a> <a href="{{ url_for('pages.cookies') }}" id="ubuntuit-cookiepolicy-hide">
<a href="#">Maggiori informazioni</a> OK
</div> </a>
<a href="#">
Maggiori informazioni
</a>
</div> </div>
</div>
{% if g.auth_name %} {% if g.auth_name %}
<nav class="sites-list"> <nav class="sites-list">
<div class="container"> <div class="container">
<ul class="left"> <ul class="left">
{% if permission("auth.sessions.manage") %} {% if permission("auth.sessions.manage") %}
<li><a href="{{ url_for("auth.sessions_list") }}"> <li>
<a href="{{ url_for('auth.sessions_list') }}">
Sessioni attive: {{ g.auth_sessions_count }} Sessioni attive: {{ g.auth_sessions_count }}
</a></li> </a>
</li>
{% endif %} {% endif %}
{% if permission("actions.show") %} {% if permission("actions.show") %}
<li><a href="{{ url_for("actions.show") }}"> <li>
<a href="{{ url_for('actions.show') }}">
Azioni recenti Azioni recenti
</a></li> </a>
</li>
{% endif %} {% endif %}
</ul> </ul>
<ul class="right"> <ul class="right">
{% if permission("auth.sessions.own") %} {% if permission("auth.sessions.own") %}
<li><a href="{{ url_for("auth.sessions_show", id=g.auth_id) }}"> <li>
<a href="{{ url_for('auth.sessions_show', id=g.auth_id) }}">
{{ g.auth_name }} {{ g.auth_name }}
</a></li> </a>
</li>
{% endif %} {% endif %}
{% if permission("auth.logout") %} {% if permission("auth.logout") %}
<li><a href="{{ url_for("auth.logout") }}">Esci</a></li> <li>
<a href="{{ url_for('auth.logout') }}">
Esci
</a>
</li>
{% endif %} {% endif %}
</ul> </ul>
</div> </div>
</nav> </nav>
{% endif %} {% endif %}
<nav class="sites-list"> <nav class="sites-list">
<div class="container"> <div class="container">
<ul> <ul>
<li><a href="{{ url_for('pages.index') }}" class="active">Sito web</a></li> <li>
<li><a href="https://wiki.ubuntu-it.org">Wiki</a></li> <a href="{{ url_for('pages.index') }}" class="active">
<li><a href="https://forum.ubuntu-it.org">Forum</a></li> Sito web
<li><a href="https://chiedi.ubuntu-it.org">Chiedi</a></li> </a>
<li><a href="https://chat.ubuntu-it.org">Chat</a></li> </li>
<li><a href="https://cerca.ubuntu-it.org">Cerca</a></li> <li>
<li><a href="https://planet.ubuntu-it.org">Planet</a></li> <a href="https://wiki.ubuntu-it.org">
Wiki
</a>
</li>
<li>
<a href="https://forum.ubuntu-it.org">
Forum
</a>
</li>
<li>
<a href="https://chiedi.ubuntu-it.org">
Chiedi
</a>
</li>
<li>
<a href="https://chat.ubuntu-it.org">
Chat
</a>
</li>
<li>
<a href="https://cerca.ubuntu-it.org">
Cerca
</a>
</li>
<li>
<a href="https://planet.ubuntu-it.org">
Planet
</a>
</li>
</ul> </ul>
<ul class="right"> <ul class="right">
<li><a href="https://www.facebook.com/ubuntu.it">Facebook</a></li> <li>
<li><a href="https://twitter.com/ubuntuit">Twitter</a></li> <a href="https://www.facebook.com/ubuntu.it">
Facebook
<li><a href="https://www.youtube.com/ubuntuitpromozione">YouTube</a></li> </a>
<li><a href="https://telegram.me/ubuntuit">Telegram</a></li> </li>
<li>
<a href="https://twitter.com/ubuntuit">
Twitter
</a>
</li>
<li>
<a href="https://www.youtube.com/ubuntuitpromozione">
YouTube
</a>
</li>
<li>
<a href="https://telegram.me/ubuntuit">
Telegram
</a>
</li>
</ul> </ul>
</div> </div>
</nav> </nav>
{% for navbar in _navbars %} {% for navbar in _navbars %}
<nav {%- if loop.index == 1 %} class="main-navbar"{% endif %}> <nav {%- if loop.index== 1 %} class="main-navbar" {% endif %}>
<div class="container"> <div class="container">
<ul> <ul>
{% if loop.index == 1 %} {% if loop.index == 1 %}
<li class="site-name"><a href="{{ url_for("pages.index") }}">ubuntu-it</a></li> <li class="site-name">
<a href="{{ url_for('pages.index') }}">
ubuntu-it
</a>
</li>
{% endif -%} {% endif -%}
{%- for name, url, active in navbar %} {%- for name, url, active in navbar %}
<li> <li>
<a {%- if active %} class="active"{% endif %} href="{{ url }}">{{ name }}</a> <a {%- if active %} class="active" {% endif %} href="{{ url }}">
{{ name }}
</a>
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>
</nav> </nav>
{% endfor %} {% endfor %}
<div class="container"> <div class="container">
{% with messages = get_flashed_messages(with_categories=True) %} {% with messages = get_flashed_messages(with_categories=True) %}
{% if messages %} {% if messages %}
{% for category, message in messages %} {% for category, message in messages %}
<div class="alert {% if category != "message" %}{{ category }}{% else %}info{% endif %}"> <div class="alert {% if category != 'message' %}{{ category }}{% else %}info{% endif %}">
{{ message }} {{ message }}
<span class="close">&times;</span> <span class="close">&times;</span>
</div> </div>
...@@ -129,37 +195,54 @@ ...@@ -129,37 +195,54 @@
<footer> <footer>
<p> <p>
Ubuntu e Canonical sono marchi registrati da Canonical Ubuntu e Canonical sono marchi registrati da Canonical Ltd.
Ltd.
</p> </p>
<p> <p>
Sito web realizzato dal Gruppo Web di Ubuntu-it, con Sito web realizzato dal Gruppo Web di Ubuntu-it, con
<a href="https://www.python.org/">Python</a>, <a href="https://www.python.org/">
<a href="https://www.palletsproject.com/p/flask/">Flask</a> e Python
<a href="https://www.sqlite.org/">SQLite</a>. </a>,
<a href="https://www.palletsproject.com/p/flask/">
Flask
</a>
e
<a href="https://www.sqlite.org/">
SQLite
</a>.
</p> </p>
<ul> <ul>
<li><a href="{{ url_for("pages.cookies") }}"> <li>
<a href="{{ url_for('pages.cookies') }}">
Informativa sui cookie Informativa sui cookie
</a></li> </a>
<li><a href="https://code.ubuntu-it.org/ubuntu-it-web/www/issues"> </li>
<li>
<a href="https://code.ubuntu-it.org/ubuntu-it-web/www/issues">
Segnala un problema Segnala un problema
</a></li> </a>
<li><a href="https://code.ubuntu-it.org/ubuntu-it-web/www"> </li>
<li>
<a href="https://code.ubuntu-it.org/ubuntu-it-web/www">
Codice sorgente Codice sorgente
</a></li> </a>
<li><a href="https://wiki.ubuntu-it.org/GruppoWeb"> </li>
<li>
<a href="https://wiki.ubuntu-it.org/GruppoWeb">
Collabora con noi Collabora con noi
</a></li> </a>
</li>
{% if not g.auth_name %} {% if not g.auth_name %}
<li><a href="{{ url_for("auth.login") }}"> <li>
<a href="{{ url_for('auth.login') }}">
Accedi Accedi
</a></li> </a>
</li>
{% endif %} {% endif %}
</ul> </ul>
</footer> </footer>
</div> </div>
<script type="text/javascript" src="https://static.ubuntu-it.org/themes/italy/theme.min.js"></script>
<script type="text/javascript" src="https://static.ubuntu-it.org/themes/italy/theme.min.js"></script> </body>
</body>
</html> </html>
{# Source code of the Ubuntu-it website
# Copyright (C) 2015 Pietro Albini <pietroalbini@ubuntu.com>
# 2015 Riccardo Padovani <rpadovani@ubuntu.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; witout even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#}
{% extends "layout.html" %} {% extends "layout.html" %}
{% block title %}Contatti{% endblock %} {% block title %}
Contatti
{% endblock %}
{% block content %} {% block content %}
<div class="page"> <div class="page">
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<h1 class="text-center">Contatti</h1> <h1 class="text-center">
<p class="intro text-center">Gli indirizzi mail e le pagine di contatto di Ubuntu-it. Collabora con noi!</p> Contatti
</h1>
<p class="intro text-center">
Gli indirizzi mail e le pagine di contatto di Ubuntu-it. Collabora con noi!
</p>
</div> </div>
</div> </div>
</div> </div>
...@@ -77,6 +66,7 @@ ...@@ -77,6 +66,7 @@
<h2>Gruppi di lavoro</h2> <h2>Gruppi di lavoro</h2>
<p> <p>
La comunità italiana di Ubuntu è organizzata in gruppi di lavoro. La comunità italiana di Ubuntu è organizzata in gruppi di lavoro.
<br/>
Per entrare in contatto con noi e contribuire a rendere Ubuntu Per entrare in contatto con noi e contribuire a rendere Ubuntu
migliore, scrivici utilizzando i canali qui riportati. migliore, scrivici utilizzando i canali qui riportati.
</p> </p>
...@@ -206,8 +196,12 @@ ...@@ -206,8 +196,12 @@
</div> </div>
<div class="row text-center"> <div class="row text-center">
<div class="col"> <div class="col">
<a class="btn" href="http://liste.ubuntu-it.org/cgi-bin/mailman/listinfo">Elenco mailing list</a> <a class="btn" href="http://liste.ubuntu-it.org/cgi-bin/mailman/listinfo">
<a class="btn" href="{{ url_for("pages.supporto") }}">Canali di supporto</a> Elenco mailing list
</a>
<a class="btn" href="{{ url_for('pages.supporto') }}">
Canali di supporto
</a>
</div> </div>
</div> </div>
</div> </div>
......
{# Source code of the Ubuntu-it website {# Source code of the Ubuntu-it website
# Copyright (C) 2015 Pietro Albini <pietroalbini@ubuntu.com> # Copyright (C) 2015 Pietro Albini
# 2015 Marco Montabone <montabone.mrc@gmail.com> <pietroalbini@ubuntu.com>
# 2019-2020 Alessandro Viprati <vipri.alessandro@gmail.com> # 2015 Marco Montabone
# <montabone.mrc@gmail.com>
# This program is free software: you can redistribute it and/or modify # 2019-2020 Alessandro Viprati
# it under the terms of the GNU Affero General Public License as published <vipri.alessandro@gmail.com>
# by the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. # This program is free software: you can redistribute it and/or modify
# # it under the terms of the GNU Affero General Public License as published
# This program is distributed in the hope that it will be useful, # by the Free Software Foundation, either version 3 of the License, or
# but WITHOUT ANY WARRANTY; witout even the implied warranty of # (at your option) any later version.
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU Affero General Public License for more details. # This program is distributed in the hope that it will be useful,
# # but WITHOUT ANY WARRANTY; witout even the implied warranty of
# You should have received a copy of the GNU Affero General Public License # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# along with this program. If not, see <http://www.gnu.org/licenses/>. # GNU Affero General Public License for more details.
#} #
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see
<http://www.gnu.org/licenses/>.
#}
{% extends "layout.html" %} {% extends "layout.html" %}
...@@ -24,8 +28,18 @@ ...@@ -24,8 +28,18 @@
<div class="page"> <div class="page">
<div class="row background-wallpaper ubuntu-budgie"> <div class="row background-wallpaper ubuntu-budgie">
<div class="col"> <div class="col">
<h1 class="text-center">Ubuntu Budgie</h1> <h1 class="text-center">
<p class="intro text-center"><a href="https://ubuntubudgie.org/" target="_blank">Ubuntu Budgie</a> è la versione di Ubuntu basata sull'ambiente grafico <a href="https://github.com/solus-project/budgie-desktop" target="_blank">Budgie</a>.</p> Ubuntu Budgie
</h1>
<p class="intro text-center">
<a href="https://ubuntubudgie.org/" target="_blank">
Ubuntu Budgie
</a>
è la versione di Ubuntu basata sull'ambiente grafico
<a href="https://github.com/solus-project/budgie-desktop" target="_blank">
Budgie
</a>.
</p>
</div> </div>
</div> </div>
</div> </div>
...@@ -40,104 +54,87 @@ ...@@ -40,104 +54,87 @@
</p> </p>
</div> </div>
<div class="col col-quarter"> <div class="col col-quarter">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-budgie/ubuntu-budgie-logo.png") }}" alt="Logo di Ubuntu Budgie"> <img src="{{ url_for('static', filename='images/derivate/ubuntu-budgie/ubuntu-budgie-logo.png') }}"
alt="Logo di Ubuntu Budgie">
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col" align="justify"> <div class="col" align="justify">
<h2>Titolo2</h2> <h2>
<p> Flessibile
Testo. </h2>
</p>
<p> <p>
<ul> L'utilizzo di Ubuntu Budgie offre la libertà di eseguire un sistema operativo completo e ricco di
<li>Testo.</li> funzionalità, preconfigurato con la maggior parte, se non tutte, le applicazioni necessarie per
<li>Testo.</li> l'attività informatica quotidiana, o di modificare l'aspetto, il funzionamento o le applicazioni
<li>Testo.</li> eseguite in base ai propri gusti.
</ul>
</p> </p>
</div> </div>
<div class="col"> <div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-budgie/file.png") }}" alt="Nome"> <img src="{{ url_for('static', filename='images/derivate/ubuntu-budgie/ubuntu-budgie-desktop.png') }}">
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col" align="justify"> <div class="col" align="justify">
<h2>Titolo2</h2> <h2>
<p> Sicuro
Testo. </h2>
</p>
<p> <p>
<ul> Ubuntu Budgie è stato progettato pensando alla sicurezza. A differenza dei sistemi operativi che si
<li>Testo.</li> aggiornano solo una volta al mese, Ubuntu Budgie riceve aggiornamenti continui. Gli aggiornamenti
<li>Testo.</li> includono patch di sicurezza per Ubuntu Budgie e tutti i suoi componenti. Anche gli aggiornamenti di
<li>Testo.</li> sicurezza per tutte le applicazioni installate vengono forniti con la stessa frequenza. In questo modo
</ul> si ha la certezza di avere la protezione più recente per tutto il software del computer, non appena
disponibile!
</p> </p>
</div> </div>
<div class="col"> <div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-budgie/file.png") }}" alt="Nome"> <img src="{{ url_for('static', filename='images/derivate/ubuntu-budgie/ubuntu-budgie-security.png') }}">
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col" align="justify"> <div class="col" align="justify">
<h2>Titolo2</h2> <h2>
Software per ogni esigenza
</h2>
<p> <p>
Testo. Ubuntu Budgie aggiunge una raccolta di applicazioni aggiuntive per trasformare il computer in una
</p> workstation davvero potente: dalla produttività all'intrattenimento!
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p> </p>
</div> </div>
<div class="col"> <div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-budgie/file.png") }}" alt="Nome"> <img src="{{ url_for('static', filename='images/derivate/ubuntu-budgie/ubuntu-budgie-everything.jpg') }}">
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col" align="justify"> <div class="col" align="justify">
<h2>Titolo2</h2> <h2>
<p> Powered by Steam
Testo. </h2>
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-budgie/file.png") }}" alt="Nome">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p> <p>
<ul> Negli ultimi due anni Linux è diventato una piattaforma di gioco di prima classe grazie all'arrivo della
<li>Testo.</li> piattaforma Steam su Linux. Al momento in cui scriviamo, Steam ha più di 2000 titoli indie e AAA di alta
<li>Testo.</li> qualità pronti per Ubuntu Budgie. Se Steam è un importante passo avanti per il gioco su Linux, ci sono
<li>Testo.</li> anche molti titoli Open Source di alta qualità e divertenti disponibili per Ubuntu Budgie. Non importa
</ul> se vi piacciono i simulatori di volo, le corse automobilistiche, gli sparatutto in prima persona, i
giochi di salto e corsa o di carte, troverete qualcosa che vi intratterrà.
</p> </p>
</div> </div>
<div class="col"> <div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-budgie/file.png") }}" alt="Nome"> <img src="{{ url_for('static', filename='images/derivate/ubuntu-budgie/ubuntu-budgie-steam.jpg') }}">
</div> </div>
</div> </div>
<div class="row text-center"> <div class="row text-center">
<div> <div>
<a class="btn" href="{{ url_for("download.landing", distro="ubuntu-budgie") }}">Scarica Ubuntu Budgie</a> <a class="btn" href="{{ url_for('download.landing', distro='ubuntu-budgie') }}">
<a class="btn" href="https://ubuntubudgie.org/">Sito internazionale</a> Scarica Ubuntu Budgie
<a class="btn" href="https://ubuntubudgie.org/about">Per saperne di più</a> </a>
<a class="btn" href="https://ubuntubudgie.org/">
Sito internazionale
</a>
<a class="btn" href="https://ubuntubudgie.org/about">
Per saperne di più
</a>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -40,97 +40,7 @@ ...@@ -40,97 +40,7 @@
</p> </p>
</div> </div>
<div class="col col-quarter"> <div class="col col-quarter">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-kylin/ubuntu-kylin-logo.png") }}" alt="Logo di Ubuntu Kylin"> <img src="{{ url_for('static', filename='images/derivate/ubuntu-kylin/ubuntu-kylin-logo.png') }}" alt="Logo di Ubuntu Kylin">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-kylin/file.png") }}" alt="Nome">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-kylin/file.png") }}" alt="Nome">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-kylin/file.png") }}" alt="Nome">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-kylin/file.png") }}" alt="Nome">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-kylin/file.png") }}" alt="Nome">
</div> </div>
</div> </div>
<div class="row text-center"> <div class="row text-center">
......
...@@ -44,96 +44,6 @@ ...@@ -44,96 +44,6 @@
<img src="{{ url_for("static", filename="images/derivate/ubuntu-mate/ubuntu-mate-logo.png") }}" alt="Logo di Ubuntu MATE"> <img src="{{ url_for("static", filename="images/derivate/ubuntu-mate/ubuntu-mate-logo.png") }}" alt="Logo di Ubuntu MATE">
</div> </div>
</div> </div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-mate/file.png") }}" alt="Nome">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-mate/file.png") }}" alt="Nome">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-mate/file.png") }}" alt="Nome">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-mate/file.png") }}" alt="Nome">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-mate/file.png") }}" alt="Nome">
</div>
</div>
<div class="row text-center"> <div class="row text-center">
<div> <div>
<a class="btn" href="{{ url_for("download.landing", distro="ubuntu-mate") }}">Scarica Ubuntu MATE</a> <a class="btn" href="{{ url_for("download.landing", distro="ubuntu-mate") }}">Scarica Ubuntu MATE</a>
......
...@@ -44,96 +44,6 @@ ...@@ -44,96 +44,6 @@
<img src="{{ url_for("static", filename="images/derivate/ubuntu-studio/ubuntu-studio-logo.png") }}" alt="Logo di Ubuntu Studio"> <img src="{{ url_for("static", filename="images/derivate/ubuntu-studio/ubuntu-studio-logo.png") }}" alt="Logo di Ubuntu Studio">
</div> </div>
</div> </div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-studio/file.png") }}" alt="Nome">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-studio/file.png") }}" alt="Nome">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-studio/file.png") }}" alt="Nome">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-studio/file.png") }}" alt="Nome">
</div>
</div>
<div class="row">
<div class="col" align="justify">
<h2>Titolo2</h2>
<p>
Testo.
</p>
<p>
<ul>
<li>Testo.</li>
<li>Testo.</li>
<li>Testo.</li>
</ul>
</p>
</div>
<div class="col">
<img src="{{ url_for("static", filename="images/derivate/ubuntu-studio/file.png") }}" alt="Nome">
</div>
</div>
<div class="row text-center"> <div class="row text-center">
<div> <div>
<a class="btn" href="{{ url_for("download.landing", distro="ubuntu-studio") }}">Scarica Ubuntu Studio</a> <a class="btn" href="{{ url_for("download.landing", distro="ubuntu-studio") }}">Scarica Ubuntu Studio</a>
......
{# Source code of the Ubuntu-it website {# Source code of the Ubuntu-it website
# Copyright (C) 2015 Pietro Albini <pietroalbini@ubuntu.com> # Copyright (C) 2015 Pietro Albini <pietroalbini@ubuntu.com>
# Copyright (C) 2021 Alessandro Viprati <vipri.alessandro@gmail.com> # Copyright (C) 2021 Alessandro Viprati <vipri.alessandro@gmail.com>
# # Copyright (C) 2023 shadMod
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU Affero General Public License as published # This program is free software: you can redistribute it and/or modify
# by the Free Software Foundation, either version 3 of the License, or # it under the terms of the GNU Affero General Public License as published
# (at your option) any later version. # by the Free Software Foundation, either version 3 of the License, or
# # (at your option) any later version.
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; witout even the implied warranty of # This program is distributed in the hope that it will be useful,
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # but WITHOUT ANY WARRANTY; witout even the implied warranty of
# GNU Affero General Public License for more details. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# # GNU Affero General Public License for more details.
# You should have received a copy of the GNU Affero General Public License #
# along with this program. If not, see <http://www.gnu.org/licenses/>. # You should have received a copy of the GNU Affero General Public License
#} # along with this program. If not, see <http://www.gnu.org/licenses/>.
#}
{% extends "layout.html" %} {% extends "layout.html" %}
{% block title %}Home page{% endblock %} {% block title %}
Home page
{% endblock %}
{% block content %} {% block content %}
<div class="page"> <div class="page">
<div class="row background-wallpaper banner-latest" style="padding: 80px;"> <div class="row background-wallpaper banner-latest p-100">
<div class="col text-center"> <div class="col text-center">
<h1>Ubuntu 21.10</h1> <h1>
<p class="intro text-center">Le ultime novità dal mondo del software Ubuntu 22.04
libero, con stile.</p> </h1>
<a class="btn" href="{{ url_for("pages.scopri-ubuntu_nuovo-rilascio") }}">Scopri di più</a> <p class="intro text-center">
<a class="btn" href="{{ url_for("download.landing", distro="desktop") }}">Scarica Ubuntu</a> Le ultime novità dal mondo del software libero, con stile.
</p>
<a class="btn" href="{{ url_for('pages.scopri-ubuntu_nuovo-rilascio') }}">
Scopri di più
</a>
<a class="btn" href="{{ url_for('download.landing', distro='desktop') }}">
Scarica Ubuntu
</a>
</div> </div>
</div> </div>
</div> </div>
<div class="page"> <div class="page">
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<h2>Comunità italiana</h2> <h2>
<p>Ubuntu-it è la comunità italiana di Ubuntu organizzata in Comunità italiana
<a href="{{ url_for('pages.comunita_index') }}">gruppi di lavoro</a>, </h2>
ciascuno con obbiettivi diversi: dallo sviluppo <p>
al supporto, alla documentazione, alla promozione...</p> Ubuntu-it è la comunità italiana di Ubuntu.
</p>
<p>
Essa è organizzata in diversi
<a href="{{ url_for('pages.comunita_index') }}">
gruppi di lavoro
</a>,
coordinati dal Consiglio della comunità, ciascuno con un obiettivo diverso:
dallo sviluppo, al supporto fino alla promozione.
</p>
</div> </div>
<div class="col"> <div class="col">
<h2>Derivate</h2> <h2>
<p>Interfacce diverse ma sotto batte lo stesso cuore, per essere Derivate
libero di scegliere. Scopri le differenze e gli obiettivi nella </h2>
<a href="{{ url_for('pages.derivate_index') }}">pagina dedicata</a>.</p> <p>
Interfacce diverse ma sotto batte lo stesso cuore, per essere libero di scegliere.
</p>
<p>
Scopri le differenze e gli obiettivi nella
<a href="{{ url_for('pages.derivate_index') }}">
pagina dedicata
</a>.
</p>
</div> </div>
<div class="col"> <div class="col">
<h2>Supporto</h2> <h2>
<p>Cerca risposte alle tue domande nei Supporto
<a href="{{ url_for('pages.supporto') }}">portali di Ubuntu-it</a> e </h2>
aiutaci a fornire supporto a chi ne ha bisogno.</p> <p>
Cerca risposte alle tue domande nei
<a href="{{ url_for('pages.supporto') }}">
portali di Ubuntu-it
</a>
e aiutaci a fornire supporto a chi ne ha bisogno.
</p>
</div> </div>
</div> </div>
</div> </div>
<div class="page"> <div class="page">
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<h2>Ultime novità</h2> <h2>
Scopri Ubuntu
</h2>
<p>
Veloce, sicuro ed elegantemente semplice.
</p>
<p>
Ubuntu è usato da più di 20 milioni di persone in tutto il mondo ogni giorno.
</p>
</div> </div>
<div class="col"> <div class="col">
<p>inserire link ultimi articoli <a href="/news">blog</a>.</p> <h2>
Ultime novità
</h2>
<ul class="item-list">
<li>
<a href="{{ url_for('pages.derivate_index') }}">
Newsletter Italiana #Ubuntu - 2023.030
</a>
</li>
<li>
<a href="{{ url_for('pages.derivate_index') }}">
Newsletter Italiana #Ubuntu - 2023.029
</a>
</li>
<li>
<a href="{{ url_for('pages.derivate_index') }}">
Newsletter Italiana #Ubuntu - 2023.028
</a>
</li>
</ul>
</div> </div>
</div> </div>
</div> </div>
<div class="page"> <div class="page">
<div class="row"> <div class="row">
<div class="col col-fourth col-center"> <div class="col">
<h2 class="text-center">
Sponsor tecnici
</h2>
<div class="row">
<div class="col text-center">
<a href="https://www.infomaniak.com/it">
<img src="{{ url_for('static', filename='images/sponsor/infomaniak.png')}}"
style="height:150px;" alt="infomaniak logo"/>
</a>
</div> </div>
<div class="col col-fourth col-center"> <div class="col text-center">
<h2>Sponsor tecnico</h2> <a href="https://www.top-ix.org/it/home/">
<img src="{{ url_for('static', filename='images/sponsor/topix-logo.png')}}"
style="height:150px;" alt="Top-ix logo"/>
</a>
</div> </div>
<div class="col col-fourth col-center">
<p><a href="http://www.top-ix.org"><img src="{{ url_for("static", filename="images/logo/topix-logo.jpg") }}" style="width:203px; height:150px;" alt="Top-ix logo" /></a></p>
</div> </div>
<div class="col col-fourth col-center">
</div> </div>
</div> </div>
</div> </div>
......
{# Source code of the Ubuntu-it website {# Source code of the Ubuntu-it website
# Copyright (C) 2015 Pietro Albini <pietroalbini@ubuntu.com> # Copyright (C) 2015 Pietro Albini <pietroalbini@ubuntu.com>
# 2015 Riccardo Padovani <rpadovani@ubuntu.com> # Copyright (C) 2021 Alessandro Viprati <vipri.alessandro@gmail.com>
# # Copyright (C) 2023 shadMod
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU Affero General Public License as published # This program is free software: you can redistribute it and/or modify
# by the Free Software Foundation, either version 3 of the License, or # it under the terms of the GNU Affero General Public License as published
# (at your option) any later version. # by the Free Software Foundation, either version 3 of the License, or
# # (at your option) any later version.
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; witout even the implied warranty of # This program is distributed in the hope that it will be useful,
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # but WITHOUT ANY WARRANTY; witout even the implied warranty of
# GNU Affero General Public License for more details. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# # GNU Affero General Public License for more details.
# You should have received a copy of the GNU Affero General Public License #
# along with this program. If not, see <http://www.gnu.org/licenses/>. # You should have received a copy of the GNU Affero General Public License
#} # along with this program. If not, see <http://www.gnu.org/licenses/>.
#}
{% extends "layout.html" %} {% extends "layout.html" %}
{% block title %}Server{% endblock %} {% block title %}Server{% endblock %}
{% block content %} {% block content %}
<div class="page"> <div class="page container">
<div class="row background-wallpaper server"> <div class="row background-wallpaper server">
<div class="col"> <div class="col">
<h1 class="text-center">Server</h1> <h1 class="text-center">
Server
</h1>
<p class="intro text-center"> <p class="intro text-center">
Il sistema operativo per server aziendali di tutti i tipi e dimensioni. Il sistema operativo per server aziendali di tutti i tipi e dimensioni.
</p> </p>
</div> </div>
</div> </div>
</div>
<div class="page container">
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<h2 class="text-center">Performante</h2> <h2 class="text-center">
Performante
</h2>
<p> <p>
Ubuntu Server è progettato per server aziendali, ogni suo Ubuntu Server è progettato per server aziendali, ogni suo elemento si integra perfettamente sulla
elemento si integra perfettamente sulla macchina ospitante. macchina ospitante.
</p> </p>
</div> </div>
<div class="col"> <div class="col">
<h2 class="text-center">Sicuro</h2> <h2 class="text-center">
Sicuro
</h2>
<p> <p>
Dopo l'installazione Ubuntu Server non presenta nessuna porta Dopo l'installazione Ubuntu Server non presenta nessuna porta aperta verso l'esterno e contiene solo il
aperta verso l'esterno e contiene solo il software necessario software necessario per un server sicuro.
per un server sicuro.
</p> </p>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<h2 class="text-center">Integrato</h2> <h2 class="text-center">
Integrato
</h2>
<p> <p>
Anche se in azienda non si utilizzano computer con Ubuntu Anche se in azienda non si utilizzano computer con Ubuntu desktop non c'è alcun problema. Ubuntu Server
desktop non c'è alcun problema. Ubuntu Server permette permette l'autenticazione da qualsiasi sistema: Linux, Mac Os o Windows.
l'autenticazione da qualsiasi sistema: Linux, Mac Os o Windows.
</p> </p>
</div> </div>
<div class="col"> <div class="col">
<h2 class="text-center">Una scelta strategica</h2> <h2 class="text-center">
Una scelta strategica
</h2>
<p> <p>
Basata su Debian, famosa per la robustezza, l'edizione Server di Basata su Debian, famosa per la robustezza, l'edizione Server di Ubuntu ne eredita le ottime prestazioni
Ubuntu ne eredita le ottime prestazioni e aggiornamenti regolari. e aggiornamenti regolari. Ubuntu Server fornisce un'ottima piattaforma per sviluppare server con i più
Ubuntu Server fornisce un'ottima piattaforma per sviluppare server diffusi servizi internet: mail, web, DNS, server di file o database.
con i più diffusi servizi internet: mail, web, DNS, server di file o database.
</p> </p>
</div> </div>
</div> </div>
</div>
<div class="page container">
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<h2 class="text-center">Rilasci programmati su cui poter contare</h2> <h2 class="text-center">
Rilasci programmati su cui poter contare
</h2>
<p> <p>
I rilasci a lungo termine (LTS) sono supportati da Canonical I rilasci a lungo termine (LTS) sono supportati da Canonical per cinque anni. Ogni sei mesi, i rilasci
per cinque anni. Ogni sei mesi, i rilasci intermedi forniscono intermedi forniscono nuovo software, mentre gli
nuovo software, mentre gli <a href="https://wiki.ubuntu-it.org/Rilasci/PointRelease">
<a href="https://wiki.ubuntu-it.org/Rilasci/PointRelease">aggiornamenti HWE</a> aggiornamenti HWE
</a>
forniscono supporto per le nuove macchine a tutti i rilasci LTS. forniscono supporto per le nuove macchine a tutti i rilasci LTS.
</p><br> </p><br>
<img src="{{ url_for("static", filename="images/scopri-ubuntu/server/releases.png") }}"> <img src="{{ url_for('static', filename='images/scopri-ubuntu/server/releases.png') }}">
</div> </div>
</div> </div>
<div class="row text-center"> <div class="row text-center">
<div> <div>
<a class="btn" href="{{ url_for("download.landing", distro="server") }}">Scarica Ubuntu server</a> <a class="btn" href="{{ url_for('download.landing', distro='server') }}">
<a class="btn" href="https://www.ubuntu.com/server">Scopri di più sul sito internazionale</a> Scarica Ubuntu server
</a>
<a class="btn" href="https://www.ubuntu.com/server">
Scopri di più sul sito internazionale
</a>
</div> </div>
</div> </div>
</div> </div>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment